From 550307e3fe2cc1a0dfa3127db36c0affc9cf74e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 23 Jan 2021 19:10:47 +0100 Subject: [PATCH] Graphviz graphs colorized --- CHANGELOG.md | 3 + .../lexers/actionscript3_pcode_hilight.flex | 252 +++ .../lexers/actionscript_pcode_hilight.flex | 153 ++ .../flash/configuration/Configuration.java | 4 + .../script/PcodeGraphVizExporter.java | 136 +- .../script/graphviz/AbstractLexer.java | 62 + .../script/graphviz/Flasm3Lexer.java | 1918 +++++++++++++++++ .../exporters/script/graphviz/FlasmLexer.java | 936 ++++++++ .../exporters/script/graphviz/Token.java | 93 + .../exporters/script/graphviz/TokenType.java | 45 + .../flash/gui/graph/GraphPanelSimple.java | 28 +- .../flash/gui/graph/GraphVizDotCommands.java | 28 +- .../flash/gui/graph/GraphVizGraphPanel.java | 28 +- .../locales/AdvancedSettingsDialog.properties | 3 + 14 files changed, 3619 insertions(+), 70 deletions(-) create mode 100644 libsrc/ffdec_lib/lexers/actionscript3_pcode_hilight.flex create mode 100644 libsrc/ffdec_lib/lexers/actionscript_pcode_hilight.flex create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/AbstractLexer.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/Flasm3Lexer.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/FlasmLexer.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/Token.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/TokenType.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 4271af5ff..7e4ea1239 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added +- Graphviz graphs colorized + ### Fixed - Using new FFDec icon on Mac - AS3: get/set slot for global scope diff --git a/libsrc/ffdec_lib/lexers/actionscript3_pcode_hilight.flex b/libsrc/ffdec_lib/lexers/actionscript3_pcode_hilight.flex new file mode 100644 index 000000000..6752370c0 --- /dev/null +++ b/libsrc/ffdec_lib/lexers/actionscript3_pcode_hilight.flex @@ -0,0 +1,252 @@ +/* Flash assembler language lexer specification */ + +package com.jpexs.decompiler.flash.exporters.script.graphviz; + + +%% + +%public +%class Flasm3Lexer +%extends AbstractLexer +%final +%unicode +%ignorecase +%char +%type Token + +%{ + + StringBuilder string = new StringBuilder(); + boolean isMultiname=false; + + + /** + * Create an empty lexer, yyrset will be called later to reset and assign + * the reader + */ + public Flasm3Lexer() { + super(); + } + + @Override + public int yychar() { + return yychar; + } + + private static final byte PARAN = 1; + private static final byte BRACKET = 2; + private static final byte LESSGREATER = 3; +%} + +/* main character classes */ +LineTerminator = \r|\n|\r\n + +WhiteSpace = [ \t\f]+ + +Multiname = m\[[0-9]+\] + +/* identifiers */ + +Identifier = [:jletter:][:jletterdigit:]* + +InstructionName = [:jletter:][:jletterdigit:]* + +Label = {Identifier}: + + + +/* integer literals */ +NumberLiteral = 0 | -?[1-9][0-9]* +PositiveNumberLiteral = 0 | [1-9][0-9]* + +/* floating point literals */ +FloatLiteral = -?({FLit1}|{FLit2}|{FLit3}) {Exponent}? + +FLit1 = [0-9]+ \. [0-9]* +FLit2 = \. [0-9]+ +FLit3 = [0-9]+ +Exponent = [eE] [+-]? [0-9]+ + +OctDigit = [0-7] + +InputCharacter = [^\r\n] +Comment = ";" {InputCharacter}* {LineTerminator}? + +/* string and character literals */ +StringCharacter = [^\r\n\"\\] + +ExceptionStart = "exceptionstart"{PositiveNumberLiteral}":" +ExceptionEnd = "exceptionend "{PositiveNumberLiteral}":" +ExceptionTarget = "exceptiontarget "{PositiveNumberLiteral}":" + +%state STRING,PARAMETERS + +%% + + { + + + /* whitespace */ + {WhiteSpace} { return token(TokenType.WHITESPACE); } + + {ExceptionStart} { + return token(TokenType.KEYWORD); + } + {ExceptionEnd} { + return token(TokenType.KEYWORD); + } + {ExceptionTarget} { + return token(TokenType.KEYWORD); + } + + + {Label} {return token(TokenType.IDENTIFIER,yychar,yylength()); } + ":" {return token(TokenType.OPERATOR);} + + + + + + "try" | + "flag" | + "param" | + "paramname" | + "optional" | + "returns" | + "body" | + "maxstack" | + "localcount" | + "initscopedepth" | + "maxscopedepth" | + "name" | + "trait" | + "method" | + "code" { yybegin(PARAMETERS); + return token(TokenType.KEYWORD);} + + /* identifiers */ + {InstructionName} { yybegin(PARAMETERS); + return token(TokenType.KEYWORD); } + {Comment} {return token(TokenType.COMMENT);} +} + + { + {WhiteSpace} { return token(TokenType.WHITESPACE); } + "from" | + "to" | + "target" | + "name" | + "type" { return token(TokenType.KEYWORD);} + /* multinames */ + "QName" | + "QNameA" | + "RTQName" | + "RTQNameA" | + "RTQNameL" | + "RTQNameLA" | + "Multiname" | + "MultinameL" | + "MultinameLA" | + "TypeName" | + "null" { return token(TokenType.KEYWORD2);} + "(" { return token(TokenType.OPERATOR,PARAN); } + ")" { return token(TokenType.OPERATOR,-PARAN); } + "[" { return token(TokenType.OPERATOR,BRACKET); } + "]" { return token(TokenType.OPERATOR,-BRACKET); } + "<" { return token(TokenType.OPERATOR,LESSGREATER); } + ">" { return token(TokenType.OPERATOR,-LESSGREATER); } + "Namespace" | + "PrivateNamespace" | + "PackageNamespace" | + "PackageInternalNs" | + "ProtectedNamespace" | + "ExplicitNamespace" | + "StaticProtectedNs" { return token(TokenType.KEYWORD2);} + "," { return token(TokenType.OPERATOR); } + ":" { return token(TokenType.OPERATOR); } + + + /*Flags*/ + "EXPLICIT" | + "HAS_OPTIONAL" | + "HAS_PARAM_NAMES" | + "IGNORE_REST" | + "NEED_ACTIVATION" | + "NEED_ARGUMENTS" | + "NEED_REST" | + "SET_DXNS" { return token(TokenType.KEYWORD2);} + + "dispid" | + "value" | + "slotid" { return token(TokenType.KEYWORD);} + + + /* Value types*/ + "Integer" | + "UInteger" | + "Double" | + "Decimal" | + "Utf8" | + "True" | + "False" | + "Undefined" { return token(TokenType.KEYWORD2);} + + "FINAL" | + "OVERRIDE" | + "METADATA" { return token(TokenType.KEYWORD2);} + + "slot" | + "const" | + "method" | + "getter" | + "setter" | + "class" | + "function" { return token(TokenType.KEYWORD2);} + + /* string literal */ + \" { + yybegin(STRING); + tokenStart = yychar; + tokenLength = 1; + isMultiname=false; + } + {Multiname}\" { + isMultiname=true; + yybegin(STRING); + tokenStart = yychar; + tokenLength = yylength(); } + + /* numeric literals */ + + {NumberLiteral} { return token(TokenType.NUMBER); } + {FloatLiteral} { return token(TokenType.NUMBER); } + {Identifier} { return token(TokenType.IDENTIFIER); } + {LineTerminator} {yybegin(YYINITIAL); return token(TokenType.NEWLINE);} + {Comment} {yybegin(YYINITIAL); return token(TokenType.COMMENT);} +} + + { + \" { + yybegin(PARAMETERS); + // length also includes the trailing quote + if(isMultiname){ + return token(TokenType.IDENTIFIER, tokenStart, tokenLength + 1);//multiname + }else{ + return token(TokenType.STRING, tokenStart, tokenLength + 1); + } + } + + {StringCharacter}+ { tokenLength += yylength(); } + + \\[0-3]?{OctDigit}?{OctDigit} { tokenLength += yylength(); } + + /* escape sequences */ + + \\. { tokenLength += 2; } + {LineTerminator} { yybegin(YYINITIAL); + return token(TokenType.ERROR,tokenStart, tokenLength);} +} + +/* error fallback */ +[^] { } +<> { return null; } diff --git a/libsrc/ffdec_lib/lexers/actionscript_pcode_hilight.flex b/libsrc/ffdec_lib/lexers/actionscript_pcode_hilight.flex new file mode 100644 index 000000000..06fbc9031 --- /dev/null +++ b/libsrc/ffdec_lib/lexers/actionscript_pcode_hilight.flex @@ -0,0 +1,153 @@ +/* Flash assembler language lexer specification */ + +package com.jpexs.decompiler.flash.exporters.script.graphviz; + + +%% + +%public +%class FlasmLexer +%extends AbstractLexer +%final +%unicode +%char +%type Token + +%{ + + StringBuilder string = new StringBuilder(); + + + /** + * Create an empty lexer, yyrset will be called later to reset and assign + * the reader + */ + public FlasmLexer() { + + } + + public int yychar() { + return yychar; + } + +%} + +/* main character classes */ +LineTerminator = \r|\n|\r\n + +InputCharacter = [^\r\n] +Comment = ";" {InputCharacter}* + +WhiteSpace = [ \t\f]+ + + +/* identifiers */ + +Identifier = [:jletter:][:jletterdigit:]* + +InstructionName = [:jletter:][:jletterdigit:]* + +Label = {Identifier}: + +StartOfBlock = "{" + +EndOfBlock = "}" + +True = "true" +False = "false" +False = "false" +Null = "null" +Undefined = "undefined" + + + +/* integer literals */ +NumberLiteral = 0 | -?[1-9][0-9]* + +/* floating point literals */ +FloatLiteral = -?({FLit1}|{FLit2}|{FLit3}) {Exponent}? + +FLit1 = [0-9]+ \. [0-9]* +FLit2 = \. [0-9]+ +FLit3 = [0-9]+ +Exponent = [eE] [+-]? [0-9]+ + +OctDigit = [0-7] + +/* string and character literals */ +StringCharacter = [^\r\n\"\\] + +Register= register{NumberLiteral} +Constant= constant{NumberLiteral} + +%state STRING,PARAMETERS + +%% + + { + + + /* whitespace */ + {WhiteSpace} { return token(TokenType.WHITESPACE); } + + {Label} { + return token(TokenType.IDENTIFIER,yychar,yylength()); + } + + /* identifiers */ + {InstructionName} { yybegin(PARAMETERS); + return token(TokenType.KEYWORD); + } + {Comment} {return token(TokenType.COMMENT);} + {EndOfBlock} {return token(TokenType.WHITESPACE);} + {LineTerminator} {return token(TokenType.NEWLINE);} +} + + { + {WhiteSpace} { return token(TokenType.WHITESPACE); } + /* string literal */ + \" { + yybegin(STRING); + tokenStart = yychar; + tokenLength = 1; + } + + /* numeric literals */ + + {NumberLiteral} { return token(TokenType.NUMBER); } + {FloatLiteral} { return token(TokenType.NUMBER); } + {LineTerminator} {yybegin(YYINITIAL); return token(TokenType.NEWLINE);} + {Comment} {return token(TokenType.COMMENT);} + {StartOfBlock} {return token(TokenType.WHITESPACE);} + {True} {return token(TokenType.KEYWORD);} + {False} {return token(TokenType.KEYWORD);} + {Null} {return token(TokenType.KEYWORD);} + {Undefined} {return token(TokenType.KEYWORD);} + + {Register} { return token(TokenType.KEYWORD2); } + {Constant} { return token(TokenType.KEYWORD2); } + {Identifier} { return token(TokenType.IDENTIFIER); } + +} + + { + \" { + yybegin(PARAMETERS); + // length also includes the trailing quote + return token(TokenType.STRING, tokenStart, tokenLength + 1); + } + +{StringCharacter}+ { tokenLength += yylength(); } + + \\[0-3]?{OctDigit}?{OctDigit} { tokenLength += yylength(); } + + /* escape sequences */ + + \\. { tokenLength += 2; } + {LineTerminator} { yybegin(YYINITIAL); + return token(TokenType.ERROR,tokenStart, tokenLength);} +} + +/* error fallback */ +[^] { } +<> { return null; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index 407a9933d..e9661fa09 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -649,6 +649,10 @@ public final class Configuration { @ConfigurationFile public static ConfigurationItem graphVizDotLocation = null; + @ConfigurationDefaultBoolean(false) + @ConfigurationInternal + public static ConfigurationItem showLineNumbersInPCodeGraphvizGraph = null; + private enum OSId { WINDOWS, OSX, UNIX } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java index 6159ea6e5..8b6943d22 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/PcodeGraphVizExporter.java @@ -16,35 +16,28 @@ */ package com.jpexs.decompiler.flash.exporters.script; -import com.jpexs.decompiler.flash.AppResources; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.abc.ABC; -import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.graph.AVM2Graph; import com.jpexs.decompiler.flash.abc.types.MethodBody; -import com.jpexs.decompiler.flash.action.Action; -import static com.jpexs.decompiler.flash.action.Action.adr2ip; import com.jpexs.decompiler.flash.action.ActionGraph; -import com.jpexs.decompiler.flash.action.ActionGraphSource; import com.jpexs.decompiler.flash.action.ActionList; -import com.jpexs.decompiler.flash.action.swf5.ActionDefineFunction; -import com.jpexs.decompiler.flash.action.swf5.ActionWith; -import com.jpexs.decompiler.flash.action.swf7.ActionDefineFunction2; -import com.jpexs.decompiler.flash.action.swf7.ActionTry; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.script.graphviz.AbstractLexer; +import com.jpexs.decompiler.flash.exporters.script.graphviz.Flasm3Lexer; +import com.jpexs.decompiler.flash.exporters.script.graphviz.FlasmLexer; +import com.jpexs.decompiler.flash.exporters.script.graphviz.Token; +import com.jpexs.decompiler.flash.exporters.script.graphviz.TokenType; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; -import com.jpexs.decompiler.flash.helpers.StringBuilderTextWriter; import com.jpexs.decompiler.flash.tags.base.ASMSource; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphSource; -import com.jpexs.decompiler.graph.GraphSourceItemContainer; -import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.ScopeStack; -import com.jpexs.decompiler.graph.TranslateException; -import com.jpexs.decompiler.graph.model.CommentItem; import com.jpexs.graphs.graphviz.dot.parser.DotId; import com.jpexs.helpers.Helper; +import java.io.IOException; +import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -52,6 +45,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -61,7 +55,7 @@ public class PcodeGraphVizExporter { private final String BLOCK_STYLE = "shape=\"box\""; - private static final int INS_LEN_LIMIT = 50; + private static final int INS_LEN_LIMIT = 80; private static final String ELIPSIS = "..."; private String getBlockName(GraphSource list, GraphPart part) { @@ -121,42 +115,128 @@ public class PcodeGraphVizExporter { for (int j = part.start; j <= part.end; j++) { if (j < graphSource.size()) { if (knownAddresses.contains(graphSource.get(j).getAddress())) { - blkCodeBuilder.append("loc").append(Helper.formatAddress(graphSource.get(j).getAddress())).append(":\r\n"); + blkCodeBuilder.append("ofs").append(Helper.formatAddress(graphSource.get(j).getAddress())).append(":\r\n"); } String insStr = graphSource.insToString(j); - if (insStr.length() > INS_LEN_LIMIT) { - insStr = insStr.substring(0, INS_LEN_LIMIT - ELIPSIS.length()) + ELIPSIS; - } blkCodeBuilder.append(insStr).append("\r\n"); } } String labelStr = blkCodeBuilder.toString(); - labelStr = labelStr.replace("\\", "\\\\"); - labelStr = labelStr.replace("\"", "\\\""); - labelStr = labelStr.replace("\r\n", "\\l"); + if (Configuration.showLineNumbersInPCodeGraphvizGraph.get()) { + labelStr = ";lines " + part.toString() + "\r\n" + labelStr; + } + labelStr = hilight(labelStr, graph); + String partBlockName = getBlockName(graphSource, part); String blkStyle = BLOCK_STYLE; + if (isEndOfScript(graphSource, part)) { blkStyle = "shape=\"circle\""; labelStr = "FINISH"; } - labelStr = part.toString() + ":\\l" + labelStr; - writer.append(partBlockName + " [" + blkStyle + " label=\"" + labelStr + "\"];\r\n"); + + writer.append(partBlockName + " [" + blkStyle + " label=<
" + labelStr + "
>];\r\n"); for (int n = 0; n < part.nextParts.size(); n++) { GraphPart next = part.nextParts.get(n); String orientation = ":s"; + String color = null; if (part.nextParts.size() == 2 && n == 0) { - orientation = ""; + orientation = ":sw"; + color = "green4"; } if (part.nextParts.size() == 2 && n == 1) { - orientation = ""; + orientation = ":se"; + color = "red"; } String nextBlockName = getBlockName(graphSource, next); - writer.append(partBlockName + orientation + " -> " + nextBlockName + ":n;\r\n"); + writer.append(partBlockName + orientation + " -> " + nextBlockName + ":n" + (color != null ? "[color=\"" + color + "\"]" : "") + ";\r\n"); } } } + private static String hilight(AbstractLexer lexer, String code) { + Token t; + StringBuilder sb = new StringBuilder(); + int lineStart = 0; + boolean afterElipsis = false; + int rawLen = 0; + try { + while ((t = lexer.yylex()) != null) { + if (t.type == TokenType.NEWLINE) { + sb.append("
"); + afterElipsis = false; + lineStart = rawLen; + continue; + } + if (afterElipsis) { + continue; + } + String color = null; + switch (t.type) { + case KEYWORD: + color = "#0000ff"; + break; + case KEYWORD2: + color = "#007f7f"; + break; + case OPERATOR: + color = "#7f007f"; + break; + case STRING: + color = "#cc6600"; + break; + case COMMENT: + case COMMENT2: + color = "#339933"; + break; + } + + + int tlen = t.length; + boolean tooLong = false; + int lenFromStartLine = rawLen - lineStart; + if (lenFromStartLine + tlen > INS_LEN_LIMIT) { + int newtlen = INS_LEN_LIMIT - lenFromStartLine; + tlen = newtlen; + tooLong = true; + } + + if (color != null && tlen > 0) { + sb.append(""); + } + + rawLen += tlen; + String s = code.substring(t.start, t.start + tlen); + s = s.replace("&", "&"); + s = s.replace("<", "<"); + s = s.replace(">", ">"); + //s = s.replace("\"", """); + s = s.replace("\r\n", "
"); + sb.append(s); + if (color != null && tlen > 0) { + sb.append("
"); + } + if (tooLong) { + sb.append(ELIPSIS); + afterElipsis = true; + } + } + } catch (IOException ex) { + return code; + } + return sb.toString(); + } + + private String hilight(String code, Graph graph) { + AbstractLexer lexer; + if (graph instanceof ActionGraph) { + lexer = new FlasmLexer(new StringReader(code)); + } else { + lexer = new Flasm3Lexer(new StringReader(code)); + } + return hilight(lexer, code); + } + public void export(Graph graph, GraphTextWriter writer) throws InterruptedException { writer.append("digraph pcode {\r\n"); exportGraph(graph, writer); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/AbstractLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/AbstractLexer.java new file mode 100644 index 000000000..da0ba74fd --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/AbstractLexer.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2010-2018 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, + * 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. + */ +package com.jpexs.decompiler.flash.exporters.script.graphviz; + +import java.io.Reader; +import java.io.StringReader; + +/** + * + * @author JPEXS + */ +public abstract class AbstractLexer { + + protected int tokenStart; + protected int tokenLength; + protected int offset; + + protected Token token(TokenType type, int tStart, int tLength, + int newStart, int newLength) { + tokenStart = newStart; + tokenLength = newLength; + return new Token(type, tStart + offset, tLength); + } + + protected Token token(TokenType type, int start, int length) { + return new Token(type, start + offset, length); + } + + protected Token token(TokenType type) { + return new Token(type, yychar() + offset, yylength()); + } + + protected Token token(TokenType type, int pairValue) { + return new Token(type, yychar() + offset, yylength(), (byte) pairValue); + } + + public abstract void yyreset(Reader reader); + + public abstract Token yylex() throws java.io.IOException; + + public abstract char yycharat(int pos); + + public abstract int yylength(); + + public abstract String yytext(); + + public abstract int yychar(); +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/Flasm3Lexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/Flasm3Lexer.java new file mode 100644 index 000000000..2fd2f58bc --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/Flasm3Lexer.java @@ -0,0 +1,1918 @@ +/* The following code was generated by JFlex 1.6.0 */ + +/* Flash assembler language lexer specification */ + +package com.jpexs.decompiler.flash.exporters.script.graphviz; + + + +/** + * This class is a scanner generated by + * JFlex 1.6.0 + * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_pcode_hilight.flex + */ +public final class Flasm3Lexer extends AbstractLexer { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int PARAMETERS = 4; + + /** + * 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 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\11\1\3\1\2\1\62\1\63\1\1\16\11\4\0\1\36\1\0"+ + "\1\60\1\0\1\10\3\0\1\50\1\51\1\0\1\17\1\55\1\14"+ + "\1\15\1\0\1\13\3\61\4\20\1\57\1\6\1\12\1\21\1\52"+ + "\1\0\1\53\2\0\1\33\1\44\1\24\1\35\1\16\1\41\1\37"+ + "\1\46\1\27\1\10\1\45\1\42\1\4\1\31\1\30\1\25\1\47"+ + "\1\34\1\32\1\26\1\43\1\54\1\10\1\23\1\40\1\10\1\5"+ + "\1\22\1\7\1\0\1\56\1\0\1\33\1\44\1\24\1\35\1\16"+ + "\1\41\1\37\1\46\1\27\1\10\1\45\1\42\1\4\1\31\1\30"+ + "\1\25\1\47\1\34\1\32\1\26\1\43\1\54\1\10\1\23\1\40"+ + "\1\10\4\0\6\11\1\64\32\11\2\0\4\10\4\0\1\10\2\0"+ + "\1\11\7\0\1\10\4\0\1\10\5\0\27\10\1\0\37\10\1\0"+ + "\70\10\2\27\115\10\1\32\u0142\10\4\0\14\10\16\0\5\10\7\0"+ + "\1\10\1\0\1\10\21\0\160\11\5\10\1\0\2\10\2\0\4\10"+ + "\1\0\1\10\6\0\1\10\1\0\3\10\1\0\1\10\1\0\24\10"+ + "\1\0\123\10\1\0\213\10\1\0\5\11\2\0\246\10\1\0\46\10"+ + "\2\0\1\10\6\0\51\10\6\0\1\10\1\0\55\11\1\0\1\11"+ + "\1\0\2\11\1\0\2\11\1\0\1\11\10\0\33\10\4\0\4\10"+ + "\15\0\6\11\5\0\1\10\4\0\13\11\1\0\1\11\3\0\53\10"+ + "\37\11\4\0\2\10\1\11\143\10\1\0\1\10\10\11\1\0\6\11"+ + "\2\10\2\11\1\0\4\11\2\10\12\11\3\10\2\0\1\10\17\0"+ + "\1\11\1\10\1\11\36\10\33\11\2\0\131\10\13\11\1\10\16\0"+ + "\12\11\41\10\11\11\2\10\4\0\1\10\2\0\1\11\30\10\4\11"+ + "\1\10\11\11\1\10\3\11\1\10\5\11\22\0\31\10\3\11\4\0"+ + "\13\10\65\0\25\10\1\0\22\10\13\0\61\11\66\10\3\11\1\10"+ + "\22\11\1\10\7\11\12\10\2\11\2\0\12\11\1\0\20\10\3\11"+ + "\1\0\10\10\2\0\2\10\2\0\26\10\1\0\7\10\1\0\1\10"+ + "\3\0\4\10\2\0\1\11\1\10\7\11\2\0\2\11\2\0\3\11"+ + "\1\10\10\0\1\11\4\0\2\10\1\0\3\10\2\11\2\0\12\11"+ + "\4\10\7\0\2\10\1\0\1\11\2\0\3\11\1\0\6\10\4\0"+ + "\2\10\2\0\26\10\1\0\7\10\1\0\2\10\1\0\2\10\1\0"+ + "\2\10\2\0\1\11\1\0\5\11\4\0\2\11\2\0\3\11\3\0"+ + "\1\11\7\0\4\10\1\0\1\10\7\0\14\11\3\10\1\11\13\0"+ + "\3\11\1\0\11\10\1\0\3\10\1\0\26\10\1\0\7\10\1\0"+ + "\2\10\1\0\5\10\2\0\1\11\1\10\10\11\1\0\3\11\1\0"+ + "\3\11\2\0\1\10\17\0\2\10\2\11\2\0\12\11\1\0\1\10"+ + "\7\0\1\10\6\11\1\0\3\11\1\0\10\10\2\0\2\10\2\0"+ + "\26\10\1\0\7\10\1\0\2\10\1\0\5\10\2\0\1\11\1\10"+ + "\7\11\2\0\2\11\2\0\3\11\7\0\3\11\4\0\2\10\1\0"+ + "\3\10\2\11\2\0\12\11\1\0\1\10\20\0\1\11\1\10\1\0"+ + "\6\10\3\0\3\10\1\0\4\10\3\0\2\10\1\0\1\10\1\0"+ + "\2\10\3\0\2\10\3\0\3\10\3\0\14\10\4\0\5\11\3\0"+ + "\3\11\1\0\4\11\2\0\1\10\6\0\1\11\16\0\12\11\11\0"+ + "\1\10\6\0\5\11\10\10\1\0\3\10\1\0\27\10\1\0\20\10"+ + "\3\0\1\10\7\11\1\0\3\11\1\0\4\11\7\0\2\11\1\0"+ + "\3\10\5\0\2\10\2\11\2\0\12\11\20\0\1\10\3\11\1\0"+ + "\10\10\1\0\3\10\1\0\27\10\1\0\12\10\1\0\5\10\2\0"+ + "\1\11\1\10\7\11\1\0\3\11\1\0\4\11\7\0\2\11\7\0"+ + "\1\10\1\0\2\10\2\11\2\0\12\11\1\0\2\10\15\0\4\11"+ + "\11\10\1\0\3\10\1\0\51\10\2\11\1\10\7\11\1\0\3\11"+ + "\1\0\4\11\1\10\5\0\3\10\1\11\7\0\3\10\2\11\2\0"+ + "\12\11\12\0\6\10\1\0\3\11\1\0\22\10\3\0\30\10\1\0"+ + "\11\10\1\0\1\10\2\0\7\10\3\0\1\11\4\0\6\11\1\0"+ + "\1\11\1\0\10\11\6\0\12\11\2\0\2\11\15\0\60\10\1\11"+ + "\2\10\7\11\4\0\10\10\10\11\1\0\12\11\47\0\2\10\1\0"+ + "\1\10\1\0\5\10\1\0\30\10\1\0\1\10\1\0\12\10\1\11"+ + "\2\10\11\11\1\10\2\0\5\10\1\0\1\10\1\0\6\11\2\0"+ + "\12\11\2\0\4\10\40\0\1\10\27\0\2\11\6\0\12\11\13\0"+ + "\1\11\1\0\1\11\1\0\1\11\4\0\2\11\10\10\1\0\44\10"+ + "\4\0\24\11\1\0\2\11\5\10\13\11\1\0\44\11\11\0\1\11"+ + "\71\0\53\10\24\11\1\10\12\11\6\0\6\10\4\11\4\10\3\11"+ + "\1\10\3\11\2\10\7\11\3\10\4\11\15\10\14\11\1\10\17\11"+ + "\2\0\46\10\1\0\1\10\5\0\1\10\2\0\53\10\1\0\u014d\10"+ + "\1\0\4\10\2\0\7\10\1\0\1\10\1\0\4\10\2\0\51\10"+ + "\1\0\4\10\2\0\41\10\1\0\4\10\2\0\7\10\1\0\1\10"+ + "\1\0\4\10\2\0\17\10\1\0\71\10\1\0\4\10\2\0\103\10"+ + "\2\0\3\11\40\0\20\10\20\0\126\10\2\0\6\10\3\0\u026c\10"+ + "\2\0\21\10\1\0\32\10\5\0\113\10\3\0\13\10\7\0\15\10"+ + "\1\0\4\10\3\11\13\0\22\10\3\11\13\0\22\10\2\11\14\0"+ + "\15\10\1\0\3\10\1\0\2\11\14\0\64\10\40\11\3\0\1\10"+ + "\3\0\2\10\1\11\2\0\12\11\41\0\4\11\1\0\12\11\6\0"+ + "\131\10\7\0\5\10\2\11\42\10\1\11\1\10\5\0\106\10\12\0"+ + "\37\10\1\0\14\11\4\0\14\11\12\0\12\11\36\10\2\0\5\10"+ + "\13\0\54\10\4\0\32\10\6\0\12\11\46\0\27\10\5\11\4\0"+ + "\65\10\12\11\1\0\35\11\2\0\13\11\6\0\12\11\15\0\1\10"+ + "\10\0\16\11\1\0\2\11\77\0\5\11\57\10\21\11\7\10\4\0"+ + "\12\11\21\0\11\11\14\0\3\11\36\10\15\11\2\10\12\11\54\10"+ + "\16\11\14\0\44\10\24\11\10\0\12\11\3\0\3\10\12\11\44\10"+ + "\2\0\11\10\7\0\53\10\2\0\3\10\20\0\3\11\1\0\25\11"+ + "\4\10\1\11\6\10\1\11\2\10\3\11\1\10\5\0\300\10\72\11"+ + "\1\0\5\11\u0116\10\2\0\6\10\2\0\46\10\2\0\6\10\2\0"+ + "\10\10\1\0\1\10\1\0\1\10\1\0\1\10\1\0\37\10\2\0"+ + "\65\10\1\0\7\10\1\0\1\10\3\0\3\10\1\0\7\10\3\0"+ + "\4\10\2\0\6\10\4\0\15\10\5\0\3\10\1\0\7\10\16\0"+ + "\5\11\30\0\1\62\1\62\5\11\20\0\2\10\23\0\1\10\13\0"+ + "\5\11\1\0\12\11\1\0\1\10\15\0\1\10\20\0\15\10\3\0"+ + "\40\10\20\0\15\11\4\0\1\11\3\0\14\11\21\0\1\10\4\0"+ + "\1\10\2\0\12\10\1\0\1\10\3\0\5\10\6\0\1\10\1\0"+ + "\1\10\1\0\1\10\1\0\1\45\3\10\1\0\13\10\2\0\4\10"+ + "\5\0\5\10\4\0\1\10\21\0\51\10\u0a77\0\57\10\1\0\57\10"+ + "\1\0\205\10\6\0\4\10\3\11\2\10\14\0\46\10\1\0\1\10"+ + "\5\0\1\10\2\0\70\10\7\0\1\10\17\0\1\11\27\10\11\0"+ + "\7\10\1\0\7\10\1\0\7\10\1\0\7\10\1\0\7\10\1\0"+ + "\7\10\1\0\7\10\1\0\7\10\1\0\40\11\57\0\1\10\u01d5\0"+ + "\3\10\31\0\11\10\6\11\1\0\5\10\2\0\5\10\4\0\126\10"+ + "\2\0\2\11\2\0\3\10\1\0\132\10\1\0\4\10\5\0\53\10"+ + "\1\0\136\10\21\0\40\10\60\0\20\10\u0200\0\u19c0\10\100\0\u51fd\10"+ + "\3\0\u048d\10\103\0\56\10\2\0\u010d\10\3\0\20\10\12\11\2\10"+ + "\24\0\57\10\1\11\4\0\12\11\1\0\37\10\2\11\120\10\2\11"+ + "\45\0\11\10\2\0\147\10\2\0\65\10\2\0\11\10\52\0\15\10"+ + "\1\11\3\10\1\11\4\10\1\11\27\10\5\11\4\0\1\11\13\0"+ + "\1\10\7\0\64\10\14\0\2\11\62\10\22\11\12\0\12\11\6\0"+ + "\22\11\6\10\3\0\1\10\1\0\2\10\13\11\34\10\10\11\2\0"+ + "\27\10\15\11\14\0\35\10\3\0\4\11\57\10\16\11\16\0\1\10"+ + "\12\11\6\0\5\10\1\11\12\10\12\11\5\10\1\0\51\10\16\11"+ + "\11\0\3\10\1\11\10\10\2\11\2\0\12\11\6\0\27\10\3\0"+ + "\1\10\3\11\62\10\1\11\1\10\3\11\2\10\2\11\5\10\2\11"+ + "\1\10\1\11\1\10\30\0\3\10\2\0\13\10\5\11\2\0\3\10"+ + "\2\11\12\0\6\10\2\0\6\10\2\0\6\10\11\0\7\10\1\0"+ + "\7\10\1\0\53\10\1\0\16\10\6\0\163\10\10\11\1\0\2\11"+ + "\2\0\12\11\6\0\u2ba4\10\14\0\27\10\4\0\61\10\u2104\0\u016e\10"+ + "\2\0\152\10\46\0\7\10\14\0\5\10\5\0\1\10\1\11\12\10"+ + "\1\0\15\10\1\0\5\10\1\0\1\10\1\0\2\10\1\0\2\10"+ + "\1\0\154\10\41\0\u016b\10\22\0\100\10\2\0\66\10\50\0\15\10"+ + "\3\0\20\11\20\0\20\11\3\0\2\10\30\0\3\10\31\0\1\10"+ + "\6\0\5\10\1\0\207\10\2\0\1\11\4\0\1\10\13\0\12\11"+ + "\7\0\32\10\4\0\1\10\1\0\32\10\13\0\131\10\3\0\6\10"+ + "\2\0\6\10\2\0\6\10\2\0\3\10\3\0\2\10\3\0\2\10"+ + "\22\0\3\11\4\0\14\10\1\0\32\10\1\0\23\10\1\0\2\10"+ + "\1\0\17\10\2\0\16\10\42\0\173\10\105\0\65\10\210\0\1\11"+ + "\202\0\35\10\3\0\61\10\17\0\1\11\37\0\40\10\15\0\36\10"+ + "\5\0\46\10\5\11\5\0\36\10\2\0\44\10\4\0\10\10\1\0"+ + "\5\10\52\0\236\10\2\0\12\11\6\0\44\10\4\0\44\10\4\0"+ + "\50\10\10\0\64\10\234\0\u0137\10\11\0\26\10\12\0\10\10\230\0"+ + "\6\10\2\0\1\10\1\0\54\10\1\0\2\10\3\0\1\10\2\0"+ + "\27\10\12\0\27\10\11\0\37\10\101\0\23\10\1\0\2\10\12\0"+ + "\26\10\12\0\32\10\106\0\70\10\6\0\2\10\100\0\1\10\3\11"+ + "\1\0\2\11\5\0\4\11\4\10\1\0\3\10\1\0\35\10\2\0"+ + "\3\11\4\0\1\11\40\0\35\10\3\0\35\10\43\0\10\10\1\0"+ + "\34\10\2\11\31\0\66\10\12\0\26\10\12\0\23\10\15\0\22\10"+ + "\156\0\111\10\67\0\63\10\15\0\63\10\15\0\44\10\4\11\10\0"+ + "\12\11\u0146\0\52\10\1\0\2\11\3\0\2\10\116\0\35\10\12\0"+ + "\1\10\10\0\26\10\13\11\137\0\25\10\33\0\27\10\11\0\3\11"+ + "\65\10\17\11\37\0\12\11\17\0\4\11\55\10\13\11\2\0\1\11"+ + "\17\0\1\11\2\0\31\10\7\0\12\11\6\0\3\11\44\10\16\11"+ + "\1\0\12\11\4\0\1\10\2\11\1\10\10\0\43\10\1\11\2\0"+ + "\1\10\11\0\3\11\60\10\16\11\4\10\4\0\4\11\1\0\14\11"+ + "\1\10\1\0\1\10\43\0\22\10\1\0\31\10\14\11\6\0\1\11"+ + "\101\0\7\10\1\0\1\10\1\0\4\10\1\0\17\10\1\0\12\10"+ + "\7\0\57\10\14\11\5\0\12\11\6\0\4\11\1\0\10\10\2\0"+ + "\2\10\2\0\26\10\1\0\7\10\1\0\2\10\1\0\5\10\1\0"+ + "\2\11\1\10\7\11\2\0\2\11\2\0\3\11\2\0\1\10\6\0"+ + "\1\11\5\0\5\10\2\11\2\0\7\11\3\0\5\11\213\0\65\10"+ + "\22\11\4\10\5\0\12\11\4\0\1\11\3\10\36\0\60\10\24\11"+ + "\2\10\1\0\1\10\10\0\12\11\246\0\57\10\7\11\2\0\11\11"+ + "\27\0\4\10\2\11\42\0\60\10\21\11\3\0\1\10\13\0\12\11"+ + "\46\0\53\10\15\11\1\10\7\0\12\11\66\0\33\10\2\0\17\11"+ + "\4\0\12\11\306\0\54\10\17\11\145\0\100\10\12\11\25\0\10\10"+ + "\2\0\1\10\2\0\10\10\1\0\2\10\1\0\30\10\6\11\1\0"+ + "\2\11\2\0\4\11\1\10\1\11\1\10\2\11\14\0\12\11\106\0"+ + "\10\10\2\0\47\10\7\11\2\0\7\11\1\10\1\0\1\10\1\11"+ + "\33\0\1\10\12\11\50\10\7\11\1\10\4\11\10\0\1\11\10\0"+ + "\1\10\13\11\56\10\20\11\3\0\1\10\42\0\71\10\u0107\0\11\10"+ + "\1\0\45\10\10\11\1\0\10\11\1\10\17\0\12\11\30\0\36\10"+ + "\2\0\26\11\1\0\16\11\111\0\7\10\1\0\2\10\1\0\46\10"+ + "\6\11\3\0\1\11\1\0\2\11\1\0\7\11\1\10\1\11\10\0"+ + "\12\11\6\0\6\10\1\0\2\10\1\0\40\10\5\11\1\0\2\11"+ + "\1\0\5\11\1\10\7\0\12\11\u0136\0\23\10\4\11\271\0\1\10"+ + "\54\0\4\10\37\0\u039a\10\146\0\157\10\21\0\304\10\u0abc\0\u042f\10"+ + "\1\0\11\11\u0fc7\0\u0247\10\u21b9\0\u0239\10\7\0\37\10\1\0\12\11"+ + "\146\0\36\10\2\0\5\11\13\0\60\10\7\11\11\0\4\10\14\0"+ + "\12\11\11\0\25\10\5\0\23\10\u02b0\0\100\10\200\0\113\10\4\0"+ + "\1\11\1\10\67\11\7\0\4\11\15\10\100\0\2\10\1\0\1\10"+ + "\1\11\13\0\2\11\16\0\u17f8\10\10\0\u04d6\10\52\0\11\10\u22f7\0"+ + "\u011f\10\61\0\3\10\21\0\4\10\10\0\u018c\10\u0904\0\153\10\5\0"+ + "\15\10\3\0\11\10\7\0\12\10\3\0\2\11\1\0\4\11\u14c1\0"+ + "\5\11\3\0\26\11\2\0\7\11\36\0\4\11\224\0\3\11\u01bb\0"+ + "\125\10\1\0\107\10\1\0\2\10\2\0\1\10\2\0\2\10\2\0"+ + "\4\10\1\0\14\10\1\0\1\10\1\0\7\10\1\0\101\10\1\0"+ + "\4\10\2\0\10\10\1\0\7\10\1\0\34\10\1\0\4\10\1\0"+ + "\5\10\1\0\1\10\3\0\7\10\1\0\u0154\10\2\0\31\10\1\0"+ + "\31\10\1\0\37\10\1\0\31\10\1\0\37\10\1\0\31\10\1\0"+ + "\37\10\1\0\31\10\1\0\37\10\1\0\31\10\1\0\10\10\2\0"+ + "\62\11\u0200\0\67\11\4\0\62\11\10\0\1\11\16\0\1\11\26\0"+ + "\5\11\1\0\17\11\u0550\0\7\11\1\0\21\11\2\0\7\11\1\0"+ + "\2\11\1\0\5\11\325\0\55\10\3\0\7\11\7\10\2\0\12\11"+ + "\4\0\1\10\u0171\0\54\10\16\11\5\0\1\10\u0500\0\305\10\13\0"+ + "\7\11\51\0\104\10\7\11\1\10\4\0\12\11\u0356\0\1\10\u014f\0"+ + "\4\10\1\0\33\10\1\0\2\10\1\0\1\10\2\0\1\10\1\0"+ + "\12\10\1\0\4\10\1\0\1\10\1\0\1\10\6\0\1\10\4\0"+ + "\1\10\1\0\1\10\1\0\1\10\1\0\3\10\1\0\2\10\1\0"+ + "\1\10\2\0\1\10\1\0\1\10\1\0\1\10\1\0\1\10\1\0"+ + "\1\10\1\0\2\10\1\0\1\10\2\0\4\10\1\0\7\10\1\0"+ + "\4\10\1\0\4\10\1\0\1\10\1\0\12\10\1\0\21\10\5\0"+ + "\3\10\1\0\5\10\1\0\21\10\u0d34\0\12\11\u0406\0\ua6de\10\42\0"+ + "\u1035\10\13\0\336\10\2\0\u1682\10\16\0\u1d31\10\u0c1f\0\u021e\10\u05e2\0"+ + "\u134b\10\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0"+ + "\1\11\36\0\140\11\200\0\360\11\uffff\0\uffff\0\ufe12\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\1\1\1\2\2\3\1\4\1\3\1\5\12\3"+ + "\1\6\2\7\1\1\1\10\2\11\1\12\1\13\1\14"+ + "\1\15\1\12\2\1\1\12\1\16\16\12\1\17\1\20"+ + "\1\21\1\22\1\12\1\23\1\24\3\3\2\5\12\3"+ + "\1\25\2\6\1\0\2\12\1\14\2\0\1\12\2\16"+ + "\4\12\1\26\33\12\6\3\1\27\6\3\1\6\1\0"+ + "\2\12\1\14\1\0\40\12\11\3\1\0\12\12\1\30"+ + "\1\26\4\12\1\26\3\12\1\30\11\12\4\3\1\27"+ + "\4\3\1\31\26\12\1\30\6\3\23\12\5\3\13\12"+ + "\1\30\4\12\3\3\1\12\1\30\10\12\2\3\1\30"+ + "\6\12\4\3\6\12\4\3\5\12\4\3\4\12\1\0"+ + "\2\3\3\12\2\0\2\3\2\12\1\26\2\3"; + + private static int [] zzUnpackAction() { + int [] result = new int[350]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\65\0\152\0\237\0\324\0\u0109\0\u013e\0\237"+ + "\0\u0173\0\u01a8\0\u01dd\0\u0212\0\u0247\0\u027c\0\u02b1\0\u02e6"+ + "\0\u031b\0\u0350\0\u0385\0\u03ba\0\u03ef\0\u0424\0\237\0\u0459"+ + "\0\237\0\u048e\0\237\0\u04c3\0\237\0\u04f8\0\237\0\u052d"+ + "\0\u0562\0\u0597\0\u05cc\0\u0601\0\u0636\0\u066b\0\u06a0\0\u06d5"+ + "\0\u070a\0\u073f\0\u0774\0\u07a9\0\u07de\0\u0813\0\u0848\0\u087d"+ + "\0\u08b2\0\u08e7\0\237\0\237\0\237\0\237\0\u091c\0\237"+ + "\0\237\0\u0951\0\u0986\0\u09bb\0\u09f0\0\237\0\u0a25\0\u0a5a"+ + "\0\u0a8f\0\u0ac4\0\u0af9\0\u0b2e\0\u0b63\0\u0b98\0\u0bcd\0\u0c02"+ + "\0\237\0\u0c37\0\u0c6c\0\u0ca1\0\u0cd6\0\u0d0b\0\u0d40\0\u0d75"+ + "\0\u0597\0\u0daa\0\u0ddf\0\237\0\u0e14\0\u0e49\0\u0e7e\0\u0eb3"+ + "\0\u052d\0\u0ee8\0\u0f1d\0\u0f52\0\u0f87\0\u0fbc\0\u0ff1\0\u1026"+ + "\0\u105b\0\u1090\0\u10c5\0\u10fa\0\u112f\0\u1164\0\u1199\0\u11ce"+ + "\0\u1203\0\u1238\0\u126d\0\u12a2\0\u12d7\0\u130c\0\u1341\0\u1376"+ + "\0\u13ab\0\u13e0\0\u1415\0\u144a\0\u147f\0\u14b4\0\u14e9\0\u151e"+ + "\0\u1553\0\u1588\0\u013e\0\u15bd\0\u15f2\0\u1627\0\u165c\0\u1691"+ + "\0\u16c6\0\237\0\u16fb\0\u1730\0\u1765\0\u179a\0\u179a\0\u17cf"+ + "\0\u1804\0\u1839\0\u186e\0\u18a3\0\u18d8\0\u190d\0\u1942\0\u1977"+ + "\0\u19ac\0\u19e1\0\u1a16\0\u1a4b\0\u1a80\0\u1ab5\0\u1aea\0\u1b1f"+ + "\0\u1b54\0\u1b89\0\u1bbe\0\u1bf3\0\u1c28\0\u1c5d\0\u1c92\0\u1cc7"+ + "\0\u1cfc\0\u1d31\0\u1d66\0\u1d9b\0\u1dd0\0\u1e05\0\u1e3a\0\u1e6f"+ + "\0\u1ea4\0\u1ed9\0\u1f0e\0\u1f43\0\u1f78\0\u1fad\0\u1fe2\0\u2017"+ + "\0\u204c\0\u2081\0\u20b6\0\u20eb\0\u2120\0\u2155\0\u218a\0\u21bf"+ + "\0\u21f4\0\u2229\0\u225e\0\u052d\0\u2293\0\u22c8\0\u22fd\0\u2332"+ + "\0\u2367\0\u239c\0\u23d1\0\u2406\0\u243b\0\u2470\0\u24a5\0\u24da"+ + "\0\u2470\0\u250f\0\u2544\0\u2579\0\u25ae\0\u25e3\0\u2618\0\u264d"+ + "\0\u2682\0\u26b7\0\u26ec\0\u2721\0\u2756\0\u278b\0\u27c0\0\u27f5"+ + "\0\237\0\u282a\0\u285f\0\u2894\0\u28c9\0\u28fe\0\u2933\0\u2968"+ + "\0\u299d\0\u29d2\0\u2a07\0\u2a3c\0\u2a71\0\u2aa6\0\u2adb\0\u2b10"+ + "\0\u2b45\0\u2b7a\0\u2baf\0\u2be4\0\u2c19\0\u2c4e\0\u2c83\0\u2cb8"+ + "\0\u2ced\0\u2d22\0\u2d57\0\u2d8c\0\u2dc1\0\u2df6\0\u2e2b\0\u2e60"+ + "\0\u2e95\0\u2eca\0\u2eff\0\u2f34\0\u2f69\0\u2f9e\0\u2fd3\0\u3008"+ + "\0\u303d\0\u3072\0\u30a7\0\u30dc\0\u3111\0\u3146\0\u317b\0\u31b0"+ + "\0\u31e5\0\u321a\0\u324f\0\u3284\0\u32b9\0\u32ee\0\u2cb8\0\u3323"+ + "\0\u3358\0\u338d\0\u33c2\0\u33f7\0\u342c\0\u3461\0\u3496\0\u34cb"+ + "\0\u3500\0\u3535\0\u356a\0\u359f\0\u35d4\0\u3609\0\u363e\0\u3673"+ + "\0\u36a8\0\u36dd\0\u33c2\0\u3712\0\u3747\0\u377c\0\u37b1\0\u37e6"+ + "\0\u381b\0\u3850\0\u3885\0\u38ba\0\u38ef\0\u3924\0\u3959\0\u398e"+ + "\0\u39c3\0\u39f8\0\u3a2d\0\u3a62\0\u3a97\0\u3acc\0\u3b01\0\u3b36"+ + "\0\u3b6b\0\u3ba0\0\u3bd5\0\u3c0a\0\u3c3f\0\u3c74\0\u3ca9\0\u3cde"+ + "\0\u3d13\0\u3d48\0\u3d7d\0\u239c\0\u3db2\0\u3de7\0\u3e1c\0\u3e51"+ + "\0\u3e86\0\u3ebb\0\u3ef0\0\u3f25\0\u3f5a\0\u3f8f\0\u3fc4\0\u3ff9"+ + "\0\u402e\0\u4063\0\u4098\0\u40cd\0\u4102\0\u4137\0\u416c\0\u41a1"+ + "\0\u41d6\0\u420b\0\u4240\0\237\0\u4275\0\u42aa"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[350]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\3\4\1\5\1\6\3\4\1\7\1\4\1\10\3\4"+ + "\1\11\2\4\1\12\1\4\1\7\1\13\1\14\1\15"+ + "\1\16\1\17\1\20\2\7\1\21\1\7\1\5\2\7"+ + "\1\22\1\23\1\7\1\24\3\7\4\4\1\7\1\4"+ + "\1\7\4\4\1\5\1\4\1\25\1\26\1\27\17\25"+ + "\1\30\35\25\1\31\4\25\1\4\1\32\1\33\1\5"+ + "\1\34\1\35\1\36\1\37\1\40\1\4\1\10\1\36"+ + "\1\41\1\42\1\43\1\4\1\36\1\44\1\4\1\40"+ + "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\40"+ + "\1\54\1\55\1\5\1\56\1\40\1\57\1\40\1\60"+ + "\2\40\1\61\1\62\1\63\1\64\1\65\1\66\1\67"+ + "\1\10\1\40\1\36\1\70\1\36\1\4\1\5\1\4"+ + "\70\0\1\5\32\0\1\5\24\0\1\5\5\0\1\7"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\72"+ + "\1\0\1\7\2\0\10\7\1\73\2\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\13\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\1\74\12\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\1\12\1\75\1\76\62\12\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\5\7\1\77\5\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\10\7\1\100\2\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\11\7\1\101"+ + "\1\7\1\0\11\7\4\0\1\7\1\0\2\7\1\0"+ + "\1\7\2\0\1\7\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\6\7\1\102\4\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\2\7\1\103\10\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\10\7\1\104\2\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\105\1\0\1\7\2\0\13\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\13\7\1\0"+ + "\3\7\1\106\5\7\4\0\1\7\1\0\2\7\1\0"+ + "\1\7\2\0\1\7\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\5\7\1\107\5\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\5\7\1\110\5\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\1\25"+ + "\2\0\17\25\1\0\35\25\1\0\4\25\2\0\1\27"+ + "\62\0\1\111\2\0\10\111\1\112\4\111\1\113\40\111"+ + "\1\112\5\0\1\33\66\0\1\40\1\114\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\115\1\0\1\40\2\0"+ + "\13\40\1\0\4\40\1\116\4\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\6\0\1\36\4\0"+ + "\1\36\1\0\1\117\1\120\1\0\1\36\36\0\1\36"+ + "\1\0\1\36\7\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\13\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\6\0\1\36\4\0\1\36\1\0\1\121"+ + "\2\0\1\36\36\0\1\36\1\0\1\36\11\0\1\117"+ + "\4\0\1\117\4\0\1\117\36\0\1\117\1\0\1\117"+ + "\7\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\1\122\12\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\44\1\123\1\124\62\44\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\5\40\1\125\5\40\1\0\3\40\1\126"+ + "\5\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\10\40\1\127"+ + "\1\130\1\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\5\40\1\131\2\40\1\132\1\133\1\40\1\0"+ + "\1\40\1\134\7\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\6\40\1\135\4\40\1\0\1\136\10\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\13\40\1\0\11\40\4\0\1\137"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\140"+ + "\1\0\1\40\2\0\10\40\1\141\2\40\1\0\4\40"+ + "\1\142\4\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\143\1\0\1\40\2\0\3\40"+ + "\1\144\7\40\1\0\3\40\1\145\5\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\3\40\1\146\7\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\147\1\0\1\40\2\0\4\40\1\150\1\151"+ + "\5\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\152\1\0\1\40\2\0"+ + "\13\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\4\40\1\153\3\40\1\154\1\155\1\40\1\0\4\40"+ + "\1\156\4\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\3\40"+ + "\1\157\1\160\1\40\1\161\4\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\10\40\1\162\2\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\6\40\1\163"+ + "\4\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\10\40\1\164\2\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\3\7\1\165\7\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\1\166\12\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\1\7\1\167\11\7"+ + "\1\0\11\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\2\0\1\76\66\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\12\7\1\170\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\11\7\1\171\1\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\10\7\1\172\2\7\1\0"+ + "\1\7\1\173\7\7\4\0\1\7\1\0\2\7\1\0"+ + "\1\7\2\0\1\7\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\4\7\1\174\6\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\3\7\1\175\7\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\170\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\13\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\3\7\1\176\7\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\10\7\1\177"+ + "\2\7\1\0\11\7\4\0\1\7\1\0\2\7\1\0"+ + "\1\7\2\0\1\7\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\1\7\1\200\11\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\12\7\1\201\1\0\11\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\13\0\1\113"+ + "\4\0\1\113\40\0\1\113\16\0\1\202\4\0\1\202"+ + "\40\0\1\202\11\0\1\203\4\0\1\203\4\0\1\203"+ + "\36\0\1\203\1\0\1\203\7\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\3\40\1\204\7\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\13\40\1\0\3\40\1\205\5\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\6\0\1\117\4\0\1\117\2\0\1\120\1\0\1\117"+ + "\36\0\1\117\1\0\1\117\11\0\1\206\4\0\1\206"+ + "\1\207\2\0\1\207\1\206\36\0\1\206\1\0\1\206"+ + "\7\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\2\40\1\210\10\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\2\0\1\124\66\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\6\40\1\211\4\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\10\40\1\212\2\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\1\40\1\213\11\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\4\40"+ + "\1\214\1\215\5\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\11\40\1\216\1\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\13\40\1\0\4\40\1\217"+ + "\4\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\2\40\1\220"+ + "\10\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\3\40\1\221\7\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\6\40\1\222\4\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\223\1\0\1\40\2\0\13\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\224\1\0\1\40\2\0\13\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\225\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\13\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\13\40\1\0\3\40\1\226"+ + "\5\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\3\40\1\227"+ + "\7\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\10\40\1\230\2\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\5\40\1\231\5\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\13\40\1\0\10\40\1\232"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\1\40\1\233\11\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\7\40"+ + "\1\234\3\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\13\40\1\0\4\40\1\235\4\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\3\40\1\236\7\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\6\40\1\237\4\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\13\40"+ + "\1\0\3\40\1\240\5\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\5\40\1\241\5\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\6\40\1\242\4\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\13\40\1\0\2\40"+ + "\1\243\6\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\6\40"+ + "\1\135\4\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\12\40\1\244\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\7\40\1\245\3\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\10\40\1\246\2\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\13\40\1\0"+ + "\3\40\1\247\5\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\13\7\1\0\7\7\1\250\1\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\7\7\1\251\3\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\252\1\0\1\7\2\0\13\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\173\1\0\1\7\2\0\13\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\10\7\1\253\2\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\4\7\1\254"+ + "\6\7\1\0\11\7\4\0\1\7\1\0\2\7\1\0"+ + "\1\7\2\0\1\7\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\3\7\1\255\7\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\4\7\1\256\6\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\13\7\1\0\4\7\1\257"+ + "\4\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\13\7\1\0"+ + "\1\173\10\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\4\0\1\7\1\0\1\7\1\0\2\7"+ + "\1\71\1\7\2\0\1\7\1\0\1\7\2\0\10\7"+ + "\1\260\2\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\13\7\1\0\1\7\1\173\7\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\6\0\1\203"+ + "\1\261\3\0\1\203\4\0\1\203\36\0\1\203\1\0"+ + "\1\203\7\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\10\40\1\262"+ + "\2\40\1\0\7\40\1\263\1\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\3\40\1\264\7\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\6\0"+ + "\1\206\4\0\1\206\4\0\1\206\36\0\1\206\1\0"+ + "\1\206\7\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\13\40\1\0"+ + "\3\40\1\265\5\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\7\40\1\266\3\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\7\40\1\267\3\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\13\40\1\0\6\40\1\270"+ + "\2\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\13\40\1\0"+ + "\11\40\4\0\1\271\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\3\40\1\272"+ + "\7\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\13\40\1\0\1\273\10\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\274\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\275\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\276\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\5\40\1\277\5\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\11\40\1\300\1\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\12\40\1\301\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\302\1\0\1\40\2\0\13\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\13\40\1\0"+ + "\3\40\1\274\5\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\3\40\1\303\7\40\1\0\11\40\4\0\1\40\1\0"+ + "\1\304\1\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\3\40\1\305\7\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\3\40\1\306\7\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\6\40"+ + "\1\307\4\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\4\40\1\310\6\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\2\40\1\311\10\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\13\40\1\0\5\40"+ + "\1\312\3\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\3\40"+ + "\1\303\7\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\10\40\1\226\2\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\7\40\1\217\3\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\131\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\13\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\1\40\1\313\11\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\13\40"+ + "\1\0\11\40\4\0\1\40\1\0\1\40\1\274\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\314\1\0\1\40\2\0"+ + "\13\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\13\40\1\0\11\40\4\0\1\40\1\0\1\315\1\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\316\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\13\40\1\0\4\40\1\317\4\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\7"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\7"+ + "\1\0\1\7\2\0\5\7\1\320\5\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\1\7\1\321\1\7"+ + "\1\322\7\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\2\7\1\323\10\7\1\0\11\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\4\0\1\324"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\7"+ + "\1\0\1\7\2\0\13\7\1\0\11\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\4\0\1\7"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\7"+ + "\1\0\1\7\2\0\3\7\1\173\7\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\7\7\1\325\3\7"+ + "\1\0\11\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\4\0\1\7\1\0\1\7\1\0\2\7"+ + "\1\71\1\7\2\0\1\7\1\0\1\7\2\0\5\7"+ + "\1\326\5\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\11\7\1\327\1\7\1\0\11\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\4\0\1\7"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\7"+ + "\1\0\1\7\2\0\13\7\1\0\3\7\1\330\5\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\60\0\1\331\10\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\12\40"+ + "\1\332\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\5\40\1\333\5\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\4\40\1\334\6\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\4\40\1\335\6\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\3\40\1\274"+ + "\7\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\7\40\1\274\3\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\10\40\1\336\2\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\10\40\1\337\2\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\340\1\0\1\40\2\0\13\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\341\1\0\1\40\2\0\13\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\6\40\1\342"+ + "\4\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\13\40\1\0\1\303\10\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\11\40\1\343\1\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\11\40\1\344\1\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\13\40\1\0\11\40"+ + "\4\0\1\40\1\0\1\345\1\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\7\40\1\346"+ + "\3\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\347\1\0\1\40\2\0"+ + "\13\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\12\40\1\350\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\4\40\1\351\6\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\4\40\1\352\6\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\10\40\1\353\2\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\237\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\13\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\13\40"+ + "\1\0\3\40\1\217\5\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\3\40\1\354\7\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\13\40\1\0\2\40\1\355\6\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\2\40\1\356\2\40"+ + "\1\357\5\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\360\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\131\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\12\7\1\173\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\5\7\1\361\5\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\10\7\1\362\2\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\3\7\1\363"+ + "\7\7\1\0\11\7\4\0\1\7\1\0\2\7\1\0"+ + "\1\7\2\0\1\7\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\6\7\1\20\4\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\1\7\1\321\11\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\6\7\1\364\4\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\6\7\1\365"+ + "\4\7\1\0\11\7\4\0\1\7\1\0\2\7\1\0"+ + "\1\7\2\0\1\7\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\1\7\1\366\11\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\10\40\1\367\2\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\12\40\1\274\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\6\40\1\370\4\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\1\40"+ + "\1\371\11\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\13\40\1\0\1\372\10\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\3\40\1\373\7\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\1\40\1\374\11\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\3\40\1\131"+ + "\7\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\10\40\1\375\2\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\376\1\0"+ + "\1\40\2\0\13\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\4\40\1\377\6\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\10\40\1\u0100\1\u0101\1\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\2\40"+ + "\1\u0102\10\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\11\40\1\274\1\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\1\u0103\12\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\1\40\1\u0104\11\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\12\40\1\131"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\u0105\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\13\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\4\40"+ + "\1\u0106\6\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\4\40\1\u0107\6\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\10\40\1\u0108\2\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\2\40\1\u0109\10\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\10\40"+ + "\1\274\2\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\2\7\1\u010a\10\7\1\0\11\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\4\0\1\7"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\7"+ + "\1\0\1\7\2\0\1\7\1\u010b\11\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\4\7\1\u010c\6\7"+ + "\1\0\11\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\4\0\1\7\1\0\1\7\1\0\2\7"+ + "\1\71\1\7\2\0\1\7\1\0\1\7\2\0\10\7"+ + "\1\u010d\2\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\7\7\1\173\3\7\1\0\11\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\4\0\1\7"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\7"+ + "\1\0\1\7\2\0\5\7\1\u010e\5\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\3\40\1\u010f\7\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\10\40"+ + "\1\u0110\2\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\4\40\1\u0111\6\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\u0112"+ + "\1\0\1\40\2\0\13\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\u0113"+ + "\1\0\1\40\2\0\13\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\3\40\1\u0114\7\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\217\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\13\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\13\40\1\0\11\40"+ + "\4\0\1\40\1\0\1\u0115\1\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\12\40\1\217"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\1\40"+ + "\1\u0116\7\40\1\u0117\1\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\211"+ + "\1\0\1\40\2\0\13\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\10\40\1\u0118\2\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\6\40\1\267\4\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\2\40"+ + "\1\u0119\10\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\u011a\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\5\40\1\u011b\5\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\6\40\1\u011c\4\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\11\40\1\u011d\1\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\3\40"+ + "\1\u011e\7\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\u011f\1\0\1\7"+ + "\2\0\13\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\13\7\1\0\6\7\1\173\2\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\4\0\1\7"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\7"+ + "\1\0\1\7\2\0\5\7\1\u0120\5\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\13\7\1\0\3\7"+ + "\1\173\5\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\4\0\1\7\1\0\1\7\1\0\2\7"+ + "\1\71\1\7\2\0\1\7\1\0\1\7\2\0\13\7"+ + "\1\0\4\7\1\u0121\4\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\u0122\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\3\40\1\u0123\7\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\4\40\1\u0124\1\40\1\u0125\4\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\6\40"+ + "\1\u0125\4\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\u0126\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\11\40\1\u0101\1\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\3\40\1\u0127\7\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\13\40\1\0\1\u0128"+ + "\10\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\1\40\1\217"+ + "\11\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\11\40\1\u0129\1\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\10\40\1\274\2\40\1\0\3\40\1\360"+ + "\5\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\6\40\1\274"+ + "\4\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\333\1\0\1\40\2\0"+ + "\13\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\10\40\1\u012a\2\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\4\40\1\u012b\6\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\12\7\1\u012c\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\6\7\1\u012d\4\7"+ + "\1\0\11\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\4\0\1\7\1\0\1\7\1\0\2\7"+ + "\1\71\1\7\2\0\1\7\1\0\1\7\2\0\6\7"+ + "\1\254\4\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\u012e\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\6\40\1\u012f\4\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\10\40\1\u0130\2\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\12\40\1\u0113\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\4\40\1\u0131"+ + "\6\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\13\40\1\0\4\40\1\u0132\4\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\5\40\1\u0133\5\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\u0134\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\13\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\5\40\1\153\5\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\u0135\1\0\1\7\2\0\13\7\1\0"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\u0136\1\0\1\7\2\0\3\7\1\u0137"+ + "\3\7\1\u0138\3\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\13\40\1\0\3\40\1\360\5\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\3\40\1\u0139\7\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\u013a\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\13\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\13\40\1\0"+ + "\11\40\4\0\1\u013b\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\u013c\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\13\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\3\40\1\u013d"+ + "\7\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\13\40\1\0\11\40\4\0\1\40\1\0\1\u013e\1\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\2\7\1\u013f\10\7\1\0\11\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\4\0\1\7"+ + "\1\0\1\7\1\0\2\7\1\71\1\7\2\0\1\7"+ + "\1\0\1\7\2\0\6\7\1\u0140\4\7\1\0\11\7"+ + "\4\0\1\7\1\0\2\7\1\0\1\7\2\0\1\7"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\10\7\1\u0141\2\7"+ + "\1\0\11\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\4\0\1\7\1\0\1\7\1\0\2\7"+ + "\1\71\1\7\2\0\1\7\1\0\1\7\2\0\3\7"+ + "\1\u0142\7\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\u0143\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\u0144\1\0\1\40"+ + "\2\0\13\40\1\0\11\40\4\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\10\40\1\313\2\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\u0145"+ + "\1\0\1\40\2\0\13\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\u0146"+ + "\1\0\1\40\2\0\13\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\6\40\1\u0147\4\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\7\1\0\1\7\1\0\2\7\1\71\1\7"+ + "\2\0\1\7\1\0\1\7\2\0\3\7\1\u0148\7\7"+ + "\1\0\11\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\4\0\1\7\1\0\1\7\1\0\2\7"+ + "\1\71\1\7\2\0\1\7\1\0\1\7\2\0\12\7"+ + "\1\u0149\1\0\11\7\4\0\1\7\1\0\2\7\1\0"+ + "\1\7\2\0\1\7\4\0\1\7\1\0\1\7\1\0"+ + "\2\7\1\71\1\7\2\0\1\7\1\0\1\7\2\0"+ + "\11\7\1\u014a\1\7\1\0\11\7\4\0\1\7\1\0"+ + "\2\7\1\0\1\7\2\0\1\7\4\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\10\7\1\u014b\2\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\40\1\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\1\0\1\40\2\0\11\40\1\u014c\1\40\1\0"+ + "\11\40\4\0\1\40\1\0\2\40\1\0\1\40\2\0"+ + "\1\40\4\0\1\40\1\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\1\0\1\40\2\0\6\40\1\u014d"+ + "\4\40\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\40\1\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\1\0\1\40\2\0"+ + "\1\40\1\u014e\11\40\1\0\11\40\4\0\1\40\1\0"+ + "\2\40\1\0\1\40\2\0\1\40\4\0\1\40\1\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\1\0"+ + "\1\40\2\0\10\40\1\u014f\2\40\1\0\11\40\4\0"+ + "\1\40\1\0\2\40\1\0\1\40\2\0\1\40\4\0"+ + "\1\7\1\0\1\7\1\0\2\7\1\71\1\7\2\0"+ + "\1\7\1\0\1\7\2\0\13\7\1\0\7\7\1\173"+ + "\1\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\13\7\1\u0150"+ + "\11\7\4\0\1\7\1\0\2\7\1\0\1\7\2\0"+ + "\1\7\4\0\1\7\1\0\1\7\1\0\2\7\1\71"+ + "\1\7\2\0\1\7\1\0\1\7\2\0\13\7\1\0"+ + "\1\u0151\10\7\4\0\1\7\1\0\2\7\1\0\1\7"+ + "\2\0\1\7\4\0\1\7\1\0\1\7\1\0\2\7"+ + "\1\71\1\7\2\0\1\7\1\0\1\7\2\0\11\7"+ + "\1\u0152\1\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\40\1\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\1\0\1\40"+ + "\2\0\6\40\1\u0153\4\40\1\0\11\40\4\0\1\40"+ + "\1\0\2\40\1\0\1\40\2\0\1\40\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\3\40\1\267\7\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\3\40\1\u0154\7\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\u0155\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\13\40"+ + "\1\0\11\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\6\0\1\u0156\4\0\1\u0157\4\0\1\u0156"+ + "\36\0\1\u0156\1\0\1\u0156\7\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\u0158\1\0\1\7"+ + "\2\0\13\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\71\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\3\7\1\u0159\7\7\1\0\11\7\4\0\1\7"+ + "\1\0\2\7\1\0\1\7\2\0\1\7\4\0\1\40"+ + "\1\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\1\0\1\40\2\0\10\40\1\u015a\2\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\u015b\1\0\1\40\2\0\13\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\267\1\0\1\40\2\0\13\40\1\0\11\40"+ + "\4\0\1\40\1\0\2\40\1\0\1\40\2\0\1\40"+ + "\6\0\1\u0156\3\0\1\u015c\1\u0156\4\0\1\u0156\36\0"+ + "\1\u0156\1\0\1\u0156\15\0\1\u015c\56\0\1\7\1\0"+ + "\1\7\1\0\2\7\1\71\1\7\2\0\1\7\1\0"+ + "\1\7\2\0\3\7\1\u0149\7\7\1\0\11\7\4\0"+ + "\1\7\1\0\2\7\1\0\1\7\2\0\1\7\4\0"+ + "\1\7\1\0\1\u015d\1\0\2\7\1\71\1\u015e\2\0"+ + "\1\7\1\0\1\u015d\2\0\13\7\1\0\11\7\4\0"+ + "\1\7\1\0\1\7\1\u015d\1\0\1\u015d\2\0\1\7"+ + "\4\0\1\40\1\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\1\0\1\40\2\0\13\40\1\0\3\40"+ + "\1\u0103\5\40\4\0\1\40\1\0\2\40\1\0\1\40"+ + "\2\0\1\40\4\0\1\40\1\0\1\40\1\0\2\40"+ + "\1\0\1\40\2\0\1\40\1\0\1\40\2\0\12\40"+ + "\1\u0103\1\0\11\40\4\0\1\40\1\0\2\40\1\0"+ + "\1\40\2\0\1\40\4\0\1\7\1\0\1\u015d\1\0"+ + "\2\7\1\u015c\1\u015d\2\0\1\7\1\0\1\u015d\2\0"+ + "\13\7\1\0\11\7\4\0\1\7\1\0\1\7\1\u015d"+ + "\1\0\1\u015d\2\0\1\7\4\0\1\7\1\0\1\7"+ + "\1\0\2\7\1\u015c\1\7\2\0\1\7\1\0\1\7"+ + "\2\0\13\7\1\0\11\7\4\0\1\7\1\0\2\7"+ + "\1\0\1\7\2\0\1\7"; + + private static int [] zzUnpackTrans() { + int [] result = new int[17119]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\1\11\3\1\1\11\16\1\1\11\1\1\1\11"+ + "\1\1\1\11\1\1\1\11\1\1\1\11\23\1\4\11"+ + "\1\1\2\11\4\1\1\11\12\1\1\11\2\1\1\0"+ + "\3\1\2\0\2\1\1\11\55\1\1\11\1\0\3\1"+ + "\1\0\51\1\1\0\47\1\1\11\166\1\1\0\5\1"+ + "\2\0\4\1\1\11\2\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[350]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** number of newlines encountered up to the start of the matched text */ + private int yyline; + + /** the number of characters up to the start of the matched text */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + /** + * The 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; + + /* user code: */ + + StringBuilder string = new StringBuilder(); + boolean isMultiname=false; + + + /** + * Create an empty lexer, yyrset will be called later to reset and assign + * the reader + */ + public Flasm3Lexer() { + super(); + } + + @Override + public int yychar() { + return yychar; + } + + private static final byte PARAN = 1; + private static final byte BRACKET = 2; + private static final byte LESSGREATER = 3; + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public Flasm3Lexer(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 < 3740) { + 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; + } + + /* 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; + } + + /* 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; + } + + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; + } + } + return false; + } + + // totalRead = 0: End of stream + return true; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * 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]; + } + + + /** + * 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]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + yychar+= zzMarkedPosL-zzStartRead; + + 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; + } + + + zzForAction: { + while (true) { + + 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; + } + 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; + + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + case 26: break; + case 2: + { return token(TokenType.WHITESPACE); + } + case 27: break; + case 3: + { yybegin(PARAMETERS); + return token(TokenType.KEYWORD); + } + case 28: break; + case 4: + { return token(TokenType.OPERATOR); + } + case 29: break; + case 5: + { return token(TokenType.COMMENT); + } + case 30: break; + case 6: + { tokenLength += yylength(); + } + case 31: break; + case 7: + { yybegin(YYINITIAL); + return token(TokenType.ERROR,tokenStart, tokenLength); + } + case 32: break; + case 8: + { yybegin(PARAMETERS); + // length also includes the trailing quote + if(isMultiname){ + return token(TokenType.IDENTIFIER, tokenStart, tokenLength + 1);//multiname + }else{ + return token(TokenType.STRING, tokenStart, tokenLength + 1); + } + } + case 33: break; + case 9: + { yybegin(YYINITIAL); return token(TokenType.NEWLINE); + } + case 34: break; + case 10: + { return token(TokenType.IDENTIFIER); + } + case 35: break; + case 11: + { return token(TokenType.OPERATOR,BRACKET); + } + case 36: break; + case 12: + { return token(TokenType.NUMBER); + } + case 37: break; + case 13: + { return token(TokenType.OPERATOR,-BRACKET); + } + case 38: break; + case 14: + { yybegin(YYINITIAL); return token(TokenType.COMMENT); + } + case 39: break; + case 15: + { return token(TokenType.OPERATOR,PARAN); + } + case 40: break; + case 16: + { return token(TokenType.OPERATOR,-PARAN); + } + case 41: break; + case 17: + { return token(TokenType.OPERATOR,LESSGREATER); + } + case 42: break; + case 18: + { return token(TokenType.OPERATOR,-LESSGREATER); + } + case 43: break; + case 19: + { yybegin(STRING); + tokenStart = yychar; + tokenLength = 1; + isMultiname=false; + } + case 44: break; + case 20: + { return token(TokenType.IDENTIFIER,yychar,yylength()); + } + case 45: break; + case 21: + { tokenLength += 2; + } + case 46: break; + case 22: + { return token(TokenType.KEYWORD); + } + case 47: break; + case 23: + { yybegin(PARAMETERS); + return token(TokenType.KEYWORD); + } + case 48: break; + case 24: + { return token(TokenType.KEYWORD2); + } + case 49: break; + case 25: + { isMultiname=true; + yybegin(STRING); + tokenStart = yychar; + tokenLength = yylength(); + } + case 50: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/FlasmLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/FlasmLexer.java new file mode 100644 index 000000000..eec88715c --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/FlasmLexer.java @@ -0,0 +1,936 @@ +/* The following code was generated by JFlex 1.6.0 */ + +/* Flash assembler language lexer specification */ + +package com.jpexs.decompiler.flash.exporters.script.graphviz; + + + +/** + * This class is a scanner generated by + * JFlex 1.6.0 + * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript_pcode_hilight.flex + */ +public final class FlasmLexer extends AbstractLexer { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int PARAMETERS = 4; + + /** + * 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 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\6\1\4\1\2\1\42\1\43\1\1\16\6\4\0\1\4\1\0"+ + "\1\40\1\0\1\5\6\0\1\32\1\0\1\26\1\30\1\0\1\25"+ + "\3\41\4\33\2\27\1\7\1\3\5\0\4\5\1\31\25\5\1\0"+ + "\1\34\2\0\1\5\1\0\1\17\1\5\1\36\1\23\1\15\1\16"+ + "\1\35\1\5\1\24\2\5\1\20\1\5\1\22\1\37\2\5\1\13"+ + "\1\21\1\12\1\14\5\5\1\10\1\0\1\11\1\0\6\6\1\44"+ + "\32\6\2\0\4\5\4\0\1\5\2\0\1\6\7\0\1\5\4\0"+ + "\1\5\5\0\27\5\1\0\37\5\1\0\u01ca\5\4\0\14\5\16\0"+ + "\5\5\7\0\1\5\1\0\1\5\21\0\160\6\5\5\1\0\2\5"+ + "\2\0\4\5\1\0\1\5\6\0\1\5\1\0\3\5\1\0\1\5"+ + "\1\0\24\5\1\0\123\5\1\0\213\5\1\0\5\6\2\0\246\5"+ + "\1\0\46\5\2\0\1\5\6\0\51\5\6\0\1\5\1\0\55\6"+ + "\1\0\1\6\1\0\2\6\1\0\2\6\1\0\1\6\10\0\33\5"+ + "\4\0\4\5\15\0\6\6\5\0\1\5\4\0\13\6\1\0\1\6"+ + "\3\0\53\5\37\6\4\0\2\5\1\6\143\5\1\0\1\5\10\6"+ + "\1\0\6\6\2\5\2\6\1\0\4\6\2\5\12\6\3\5\2\0"+ + "\1\5\17\0\1\6\1\5\1\6\36\5\33\6\2\0\131\5\13\6"+ + "\1\5\16\0\12\6\41\5\11\6\2\5\4\0\1\5\2\0\1\6"+ + "\30\5\4\6\1\5\11\6\1\5\3\6\1\5\5\6\22\0\31\5"+ + "\3\6\4\0\13\5\65\0\25\5\1\0\22\5\13\0\61\6\66\5"+ + "\3\6\1\5\22\6\1\5\7\6\12\5\2\6\2\0\12\6\1\0"+ + "\20\5\3\6\1\0\10\5\2\0\2\5\2\0\26\5\1\0\7\5"+ + "\1\0\1\5\3\0\4\5\2\0\1\6\1\5\7\6\2\0\2\6"+ + "\2\0\3\6\1\5\10\0\1\6\4\0\2\5\1\0\3\5\2\6"+ + "\2\0\12\6\4\5\7\0\2\5\1\0\1\6\2\0\3\6\1\0"+ + "\6\5\4\0\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0"+ + "\2\5\1\0\2\5\2\0\1\6\1\0\5\6\4\0\2\6\2\0"+ + "\3\6\3\0\1\6\7\0\4\5\1\0\1\5\7\0\14\6\3\5"+ + "\1\6\13\0\3\6\1\0\11\5\1\0\3\5\1\0\26\5\1\0"+ + "\7\5\1\0\2\5\1\0\5\5\2\0\1\6\1\5\10\6\1\0"+ + "\3\6\1\0\3\6\2\0\1\5\17\0\2\5\2\6\2\0\12\6"+ + "\1\0\1\5\7\0\1\5\6\6\1\0\3\6\1\0\10\5\2\0"+ + "\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\2\0"+ + "\1\6\1\5\7\6\2\0\2\6\2\0\3\6\7\0\3\6\4\0"+ + "\2\5\1\0\3\5\2\6\2\0\12\6\1\0\1\5\20\0\1\6"+ + "\1\5\1\0\6\5\3\0\3\5\1\0\4\5\3\0\2\5\1\0"+ + "\1\5\1\0\2\5\3\0\2\5\3\0\3\5\3\0\14\5\4\0"+ + "\5\6\3\0\3\6\1\0\4\6\2\0\1\5\6\0\1\6\16\0"+ + "\12\6\11\0\1\5\6\0\5\6\10\5\1\0\3\5\1\0\27\5"+ + "\1\0\20\5\3\0\1\5\7\6\1\0\3\6\1\0\4\6\7\0"+ + "\2\6\1\0\3\5\5\0\2\5\2\6\2\0\12\6\20\0\1\5"+ + "\3\6\1\0\10\5\1\0\3\5\1\0\27\5\1\0\12\5\1\0"+ + "\5\5\2\0\1\6\1\5\7\6\1\0\3\6\1\0\4\6\7\0"+ + "\2\6\7\0\1\5\1\0\2\5\2\6\2\0\12\6\1\0\2\5"+ + "\15\0\4\6\11\5\1\0\3\5\1\0\51\5\2\6\1\5\7\6"+ + "\1\0\3\6\1\0\4\6\1\5\5\0\3\5\1\6\7\0\3\5"+ + "\2\6\2\0\12\6\12\0\6\5\1\0\3\6\1\0\22\5\3\0"+ + "\30\5\1\0\11\5\1\0\1\5\2\0\7\5\3\0\1\6\4\0"+ + "\6\6\1\0\1\6\1\0\10\6\6\0\12\6\2\0\2\6\15\0"+ + "\60\5\1\6\2\5\7\6\4\0\10\5\10\6\1\0\12\6\47\0"+ + "\2\5\1\0\1\5\1\0\5\5\1\0\30\5\1\0\1\5\1\0"+ + "\12\5\1\6\2\5\11\6\1\5\2\0\5\5\1\0\1\5\1\0"+ + "\6\6\2\0\12\6\2\0\4\5\40\0\1\5\27\0\2\6\6\0"+ + "\12\6\13\0\1\6\1\0\1\6\1\0\1\6\4\0\2\6\10\5"+ + "\1\0\44\5\4\0\24\6\1\0\2\6\5\5\13\6\1\0\44\6"+ + "\11\0\1\6\71\0\53\5\24\6\1\5\12\6\6\0\6\5\4\6"+ + "\4\5\3\6\1\5\3\6\2\5\7\6\3\5\4\6\15\5\14\6"+ + "\1\5\17\6\2\0\46\5\1\0\1\5\5\0\1\5\2\0\53\5"+ + "\1\0\u014d\5\1\0\4\5\2\0\7\5\1\0\1\5\1\0\4\5"+ + "\2\0\51\5\1\0\4\5\2\0\41\5\1\0\4\5\2\0\7\5"+ + "\1\0\1\5\1\0\4\5\2\0\17\5\1\0\71\5\1\0\4\5"+ + "\2\0\103\5\2\0\3\6\40\0\20\5\20\0\126\5\2\0\6\5"+ + "\3\0\u026c\5\2\0\21\5\1\0\32\5\5\0\113\5\3\0\13\5"+ + "\7\0\15\5\1\0\4\5\3\6\13\0\22\5\3\6\13\0\22\5"+ + "\2\6\14\0\15\5\1\0\3\5\1\0\2\6\14\0\64\5\40\6"+ + "\3\0\1\5\3\0\2\5\1\6\2\0\12\6\41\0\4\6\1\0"+ + "\12\6\6\0\131\5\7\0\5\5\2\6\42\5\1\6\1\5\5\0"+ + "\106\5\12\0\37\5\1\0\14\6\4\0\14\6\12\0\12\6\36\5"+ + "\2\0\5\5\13\0\54\5\4\0\32\5\6\0\12\6\46\0\27\5"+ + "\5\6\4\0\65\5\12\6\1\0\35\6\2\0\13\6\6\0\12\6"+ + "\15\0\1\5\10\0\16\6\1\0\2\6\77\0\5\6\57\5\21\6"+ + "\7\5\4\0\12\6\21\0\11\6\14\0\3\6\36\5\15\6\2\5"+ + "\12\6\54\5\16\6\14\0\44\5\24\6\10\0\12\6\3\0\3\5"+ + "\12\6\44\5\2\0\11\5\7\0\53\5\2\0\3\5\20\0\3\6"+ + "\1\0\25\6\4\5\1\6\6\5\1\6\2\5\3\6\1\5\5\0"+ + "\300\5\72\6\1\0\5\6\u0116\5\2\0\6\5\2\0\46\5\2\0"+ + "\6\5\2\0\10\5\1\0\1\5\1\0\1\5\1\0\1\5\1\0"+ + "\37\5\2\0\65\5\1\0\7\5\1\0\1\5\3\0\3\5\1\0"+ + "\7\5\3\0\4\5\2\0\6\5\4\0\15\5\5\0\3\5\1\0"+ + "\7\5\16\0\5\6\30\0\1\42\1\42\5\6\20\0\2\5\23\0"+ + "\1\5\13\0\5\6\1\0\12\6\1\0\1\5\15\0\1\5\20\0"+ + "\15\5\3\0\40\5\20\0\15\6\4\0\1\6\3\0\14\6\21\0"+ + "\1\5\4\0\1\5\2\0\12\5\1\0\1\5\3\0\5\5\6\0"+ + "\1\5\1\0\1\5\1\0\1\5\1\0\4\5\1\0\13\5\2\0"+ + "\4\5\5\0\5\5\4\0\1\5\21\0\51\5\u0a77\0\57\5\1\0"+ + "\57\5\1\0\205\5\6\0\4\5\3\6\2\5\14\0\46\5\1\0"+ + "\1\5\5\0\1\5\2\0\70\5\7\0\1\5\17\0\1\6\27\5"+ + "\11\0\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0\7\5"+ + "\1\0\7\5\1\0\7\5\1\0\7\5\1\0\40\6\57\0\1\5"+ + "\u01d5\0\3\5\31\0\11\5\6\6\1\0\5\5\2\0\5\5\4\0"+ + "\126\5\2\0\2\6\2\0\3\5\1\0\132\5\1\0\4\5\5\0"+ + "\53\5\1\0\136\5\21\0\40\5\60\0\20\5\u0200\0\u19c0\5\100\0"+ + "\u51fd\5\3\0\u048d\5\103\0\56\5\2\0\u010d\5\3\0\20\5\12\6"+ + "\2\5\24\0\57\5\1\6\4\0\12\6\1\0\37\5\2\6\120\5"+ + "\2\6\45\0\11\5\2\0\147\5\2\0\65\5\2\0\11\5\52\0"+ + "\15\5\1\6\3\5\1\6\4\5\1\6\27\5\5\6\4\0\1\6"+ + "\13\0\1\5\7\0\64\5\14\0\2\6\62\5\22\6\12\0\12\6"+ + "\6\0\22\6\6\5\3\0\1\5\1\0\2\5\13\6\34\5\10\6"+ + "\2\0\27\5\15\6\14\0\35\5\3\0\4\6\57\5\16\6\16\0"+ + "\1\5\12\6\6\0\5\5\1\6\12\5\12\6\5\5\1\0\51\5"+ + "\16\6\11\0\3\5\1\6\10\5\2\6\2\0\12\6\6\0\27\5"+ + "\3\0\1\5\3\6\62\5\1\6\1\5\3\6\2\5\2\6\5\5"+ + "\2\6\1\5\1\6\1\5\30\0\3\5\2\0\13\5\5\6\2\0"+ + "\3\5\2\6\12\0\6\5\2\0\6\5\2\0\6\5\11\0\7\5"+ + "\1\0\7\5\1\0\53\5\1\0\16\5\6\0\163\5\10\6\1\0"+ + "\2\6\2\0\12\6\6\0\u2ba4\5\14\0\27\5\4\0\61\5\u2104\0"+ + "\u016e\5\2\0\152\5\46\0\7\5\14\0\5\5\5\0\1\5\1\6"+ + "\12\5\1\0\15\5\1\0\5\5\1\0\1\5\1\0\2\5\1\0"+ + "\2\5\1\0\154\5\41\0\u016b\5\22\0\100\5\2\0\66\5\50\0"+ + "\15\5\3\0\20\6\20\0\20\6\3\0\2\5\30\0\3\5\31\0"+ + "\1\5\6\0\5\5\1\0\207\5\2\0\1\6\4\0\1\5\13\0"+ + "\12\6\7\0\32\5\4\0\1\5\1\0\32\5\13\0\131\5\3\0"+ + "\6\5\2\0\6\5\2\0\6\5\2\0\3\5\3\0\2\5\3\0"+ + "\2\5\22\0\3\6\4\0\14\5\1\0\32\5\1\0\23\5\1\0"+ + "\2\5\1\0\17\5\2\0\16\5\42\0\173\5\105\0\65\5\210\0"+ + "\1\6\202\0\35\5\3\0\61\5\17\0\1\6\37\0\40\5\15\0"+ + "\36\5\5\0\46\5\5\6\5\0\36\5\2\0\44\5\4\0\10\5"+ + "\1\0\5\5\52\0\236\5\2\0\12\6\6\0\44\5\4\0\44\5"+ + "\4\0\50\5\10\0\64\5\234\0\u0137\5\11\0\26\5\12\0\10\5"+ + "\230\0\6\5\2\0\1\5\1\0\54\5\1\0\2\5\3\0\1\5"+ + "\2\0\27\5\12\0\27\5\11\0\37\5\101\0\23\5\1\0\2\5"+ + "\12\0\26\5\12\0\32\5\106\0\70\5\6\0\2\5\100\0\1\5"+ + "\3\6\1\0\2\6\5\0\4\6\4\5\1\0\3\5\1\0\35\5"+ + "\2\0\3\6\4\0\1\6\40\0\35\5\3\0\35\5\43\0\10\5"+ + "\1\0\34\5\2\6\31\0\66\5\12\0\26\5\12\0\23\5\15\0"+ + "\22\5\156\0\111\5\67\0\63\5\15\0\63\5\15\0\44\5\4\6"+ + "\10\0\12\6\u0146\0\52\5\1\0\2\6\3\0\2\5\116\0\35\5"+ + "\12\0\1\5\10\0\26\5\13\6\137\0\25\5\33\0\27\5\11\0"+ + "\3\6\65\5\17\6\37\0\12\6\17\0\4\6\55\5\13\6\2\0"+ + "\1\6\17\0\1\6\2\0\31\5\7\0\12\6\6\0\3\6\44\5"+ + "\16\6\1\0\12\6\4\0\1\5\2\6\1\5\10\0\43\5\1\6"+ + "\2\0\1\5\11\0\3\6\60\5\16\6\4\5\4\0\4\6\1\0"+ + "\14\6\1\5\1\0\1\5\43\0\22\5\1\0\31\5\14\6\6\0"+ + "\1\6\101\0\7\5\1\0\1\5\1\0\4\5\1\0\17\5\1\0"+ + "\12\5\7\0\57\5\14\6\5\0\12\6\6\0\4\6\1\0\10\5"+ + "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5"+ + "\1\0\2\6\1\5\7\6\2\0\2\6\2\0\3\6\2\0\1\5"+ + "\6\0\1\6\5\0\5\5\2\6\2\0\7\6\3\0\5\6\213\0"+ + "\65\5\22\6\4\5\5\0\12\6\4\0\1\6\3\5\36\0\60\5"+ + "\24\6\2\5\1\0\1\5\10\0\12\6\246\0\57\5\7\6\2\0"+ + "\11\6\27\0\4\5\2\6\42\0\60\5\21\6\3\0\1\5\13\0"+ + "\12\6\46\0\53\5\15\6\1\5\7\0\12\6\66\0\33\5\2\0"+ + "\17\6\4\0\12\6\306\0\54\5\17\6\145\0\100\5\12\6\25\0"+ + "\10\5\2\0\1\5\2\0\10\5\1\0\2\5\1\0\30\5\6\6"+ + "\1\0\2\6\2\0\4\6\1\5\1\6\1\5\2\6\14\0\12\6"+ + "\106\0\10\5\2\0\47\5\7\6\2\0\7\6\1\5\1\0\1\5"+ + "\1\6\33\0\1\5\12\6\50\5\7\6\1\5\4\6\10\0\1\6"+ + "\10\0\1\5\13\6\56\5\20\6\3\0\1\5\42\0\71\5\u0107\0"+ + "\11\5\1\0\45\5\10\6\1\0\10\6\1\5\17\0\12\6\30\0"+ + "\36\5\2\0\26\6\1\0\16\6\111\0\7\5\1\0\2\5\1\0"+ + "\46\5\6\6\3\0\1\6\1\0\2\6\1\0\7\6\1\5\1\6"+ + "\10\0\12\6\6\0\6\5\1\0\2\5\1\0\40\5\5\6\1\0"+ + "\2\6\1\0\5\6\1\5\7\0\12\6\u0136\0\23\5\4\6\271\0"+ + "\1\5\54\0\4\5\37\0\u039a\5\146\0\157\5\21\0\304\5\u0abc\0"+ + "\u042f\5\1\0\11\6\u0fc7\0\u0247\5\u21b9\0\u0239\5\7\0\37\5\1\0"+ + "\12\6\146\0\36\5\2\0\5\6\13\0\60\5\7\6\11\0\4\5"+ + "\14\0\12\6\11\0\25\5\5\0\23\5\u02b0\0\100\5\200\0\113\5"+ + "\4\0\1\6\1\5\67\6\7\0\4\6\15\5\100\0\2\5\1\0"+ + "\1\5\1\6\13\0\2\6\16\0\u17f8\5\10\0\u04d6\5\52\0\11\5"+ + "\u22f7\0\u011f\5\61\0\3\5\21\0\4\5\10\0\u018c\5\u0904\0\153\5"+ + "\5\0\15\5\3\0\11\5\7\0\12\5\3\0\2\6\1\0\4\6"+ + "\u14c1\0\5\6\3\0\26\6\2\0\7\6\36\0\4\6\224\0\3\6"+ + "\u01bb\0\125\5\1\0\107\5\1\0\2\5\2\0\1\5\2\0\2\5"+ + "\2\0\4\5\1\0\14\5\1\0\1\5\1\0\7\5\1\0\101\5"+ + "\1\0\4\5\2\0\10\5\1\0\7\5\1\0\34\5\1\0\4\5"+ + "\1\0\5\5\1\0\1\5\3\0\7\5\1\0\u0154\5\2\0\31\5"+ + "\1\0\31\5\1\0\37\5\1\0\31\5\1\0\37\5\1\0\31\5"+ + "\1\0\37\5\1\0\31\5\1\0\37\5\1\0\31\5\1\0\10\5"+ + "\2\0\62\6\u0200\0\67\6\4\0\62\6\10\0\1\6\16\0\1\6"+ + "\26\0\5\6\1\0\17\6\u0550\0\7\6\1\0\21\6\2\0\7\6"+ + "\1\0\2\6\1\0\5\6\325\0\55\5\3\0\7\6\7\5\2\0"+ + "\12\6\4\0\1\5\u0171\0\54\5\16\6\5\0\1\5\u0500\0\305\5"+ + "\13\0\7\6\51\0\104\5\7\6\1\5\4\0\12\6\u0356\0\1\5"+ + "\u014f\0\4\5\1\0\33\5\1\0\2\5\1\0\1\5\2\0\1\5"+ + "\1\0\12\5\1\0\4\5\1\0\1\5\1\0\1\5\6\0\1\5"+ + "\4\0\1\5\1\0\1\5\1\0\1\5\1\0\3\5\1\0\2\5"+ + "\1\0\1\5\2\0\1\5\1\0\1\5\1\0\1\5\1\0\1\5"+ + "\1\0\1\5\1\0\2\5\1\0\1\5\2\0\4\5\1\0\7\5"+ + "\1\0\4\5\1\0\4\5\1\0\1\5\1\0\12\5\1\0\21\5"+ + "\5\0\3\5\1\0\5\5\1\0\21\5\u0d34\0\12\6\u0406\0\ua6de\5"+ + "\42\0\u1035\5\13\0\336\5\2\0\u1682\5\16\0\u1d31\5\u0c1f\0\u021e\5"+ + "\u05e2\0\u134b\5\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0"+ + "\1\6\36\0\140\6\200\0\360\6\uffff\0\uffff\0\ufe12\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\1\1\2\2\1\3\1\4\1\5\1\4\1\6"+ + "\2\7\1\1\1\10\2\11\6\12\1\13\2\1\1\12"+ + "\1\14\1\15\1\16\2\6\5\12\1\0\1\13\1\0"+ + "\1\12\1\6\5\12\1\13\1\0\1\12\1\17\16\12"+ + "\1\20\1\0\2\20"; + + private static int [] zzUnpackAction() { + int [] result = new int[69]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\45\0\112\0\157\0\224\0\157\0\271\0\336"+ + "\0\u0103\0\157\0\u0128\0\u014d\0\157\0\u0172\0\157\0\u0197"+ + "\0\157\0\u01bc\0\u01e1\0\u0206\0\u022b\0\u0250\0\u0275\0\u029a"+ + "\0\u02bf\0\u02e4\0\u0309\0\157\0\157\0\157\0\u032e\0\u0353"+ + "\0\u0378\0\u039d\0\u03c2\0\u03e7\0\u040c\0\u0431\0\u0456\0\u02e4"+ + "\0\u047b\0\157\0\u04a0\0\u04c5\0\u04ea\0\u050f\0\u0534\0\u0559"+ + "\0\u0559\0\u057e\0\u01bc\0\u05a3\0\u05c8\0\u05ed\0\u0612\0\u0637"+ + "\0\u065c\0\u0681\0\u06a6\0\u06cb\0\u06f0\0\u0715\0\u073a\0\u075f"+ + "\0\u0784\0\u01bc\0\u07a9\0\u07ce\0\u07f3"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[69]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\10\1\11\3\4\1\12"+ + "\13\11\4\4\1\11\3\4\3\11\3\4\1\10\1\4"+ + "\1\13\1\14\1\15\31\13\1\16\3\13\1\17\4\13"+ + "\1\4\1\20\1\21\1\7\1\10\1\22\2\4\1\12"+ + "\1\4\1\23\1\24\1\25\1\22\1\26\3\22\1\27"+ + "\2\22\1\30\1\31\1\30\1\32\1\22\1\4\1\30"+ + "\1\4\1\22\1\33\1\22\1\34\1\30\1\4\1\10"+ + "\1\4\47\0\1\6\42\0\1\7\2\0\42\7\4\0"+ + "\1\10\36\0\1\10\6\0\2\11\1\35\2\0\14\11"+ + "\1\0\1\11\1\0\1\11\1\0\1\11\1\0\3\11"+ + "\1\0\1\11\2\0\1\11\1\13\2\0\31\13\1\0"+ + "\3\13\1\0\4\13\2\0\1\15\42\0\1\36\2\0"+ + "\22\36\1\37\5\36\1\40\5\36\1\37\5\0\1\21"+ + "\47\0\2\22\3\0\14\22\1\0\1\22\1\0\1\22"+ + "\1\0\1\22\1\0\3\22\1\0\1\22\2\0\1\22"+ + "\5\0\2\22\3\0\1\22\1\41\12\22\1\0\1\22"+ + "\1\0\1\22\1\0\1\22\1\0\3\22\1\0\1\22"+ + "\2\0\1\22\5\0\2\22\3\0\3\22\1\42\10\22"+ + "\1\0\1\22\1\0\1\22\1\0\1\22\1\0\3\22"+ + "\1\0\1\22\2\0\1\22\5\0\2\22\3\0\10\22"+ + "\1\43\3\22\1\0\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\3\22\1\0\1\22\2\0\1\22\5\0\2\22"+ + "\3\0\5\22\1\44\6\22\1\0\1\22\1\0\1\22"+ + "\1\0\1\22\1\0\3\22\1\0\1\22\2\0\1\22"+ + "\5\0\2\22\3\0\2\22\1\45\11\22\1\0\1\22"+ + "\1\0\1\22\1\0\1\22\1\0\3\22\1\0\1\22"+ + "\2\0\1\22\15\0\1\46\7\0\1\30\1\0\1\30"+ + "\1\47\1\46\1\0\1\30\5\0\1\30\30\0\1\30"+ + "\1\0\1\30\1\50\2\0\1\30\5\0\1\30\30\0"+ + "\1\47\1\0\1\47\3\0\1\47\5\0\1\47\10\0"+ + "\2\22\3\0\14\22\1\0\1\22\1\0\1\22\1\0"+ + "\1\22\1\0\2\22\1\51\1\0\1\22\2\0\1\22"+ + "\25\0\1\40\5\0\1\40\5\0\1\40\30\0\1\52"+ + "\5\0\1\52\5\0\1\52\10\0\2\22\3\0\2\22"+ + "\1\53\11\22\1\0\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\3\22\1\0\1\22\2\0\1\22\5\0\2\22"+ + "\3\0\14\22\1\0\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\1\54\2\22\1\0\1\22\2\0\1\22\5\0"+ + "\2\22\3\0\11\22\1\55\2\22\1\0\1\22\1\0"+ + "\1\22\1\0\1\22\1\0\3\22\1\0\1\22\2\0"+ + "\1\22\5\0\2\22\3\0\6\22\1\56\5\22\1\0"+ + "\1\22\1\0\1\22\1\0\1\22\1\0\3\22\1\0"+ + "\1\22\2\0\1\22\5\0\2\22\3\0\6\22\1\57"+ + "\5\22\1\0\1\22\1\0\1\22\1\0\1\22\1\0"+ + "\3\22\1\0\1\22\2\0\1\22\25\0\1\60\1\61"+ + "\1\60\2\0\1\61\1\60\5\0\1\60\20\0\1\46"+ + "\7\0\1\47\1\0\1\47\1\0\1\46\1\0\1\47"+ + "\5\0\1\47\10\0\2\22\3\0\10\22\1\62\3\22"+ + "\1\0\1\22\1\0\1\22\1\0\1\22\1\0\3\22"+ + "\1\0\1\22\2\0\1\22\5\0\2\22\3\0\3\22"+ + "\1\63\10\22\1\0\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\3\22\1\0\1\22\2\0\1\22\5\0\2\22"+ + "\3\0\12\22\1\64\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\1\22\1\0\3\22\1\0\1\22\2\0\1\22"+ + "\5\0\2\22\3\0\3\22\1\65\10\22\1\0\1\22"+ + "\1\0\1\22\1\0\1\22\1\0\3\22\1\0\1\22"+ + "\2\0\1\22\5\0\2\22\3\0\7\22\1\53\4\22"+ + "\1\0\1\22\1\0\1\22\1\0\1\22\1\0\3\22"+ + "\1\0\1\22\2\0\1\22\5\0\2\22\3\0\6\22"+ + "\1\63\5\22\1\0\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\3\22\1\0\1\22\2\0\1\22\25\0\1\60"+ + "\1\0\1\60\3\0\1\60\5\0\1\60\10\0\2\22"+ + "\3\0\7\22\1\66\4\22\1\0\1\22\1\0\1\22"+ + "\1\0\1\22\1\0\3\22\1\0\1\22\2\0\1\22"+ + "\5\0\2\22\3\0\7\22\1\67\4\22\1\0\1\22"+ + "\1\0\1\22\1\0\1\22\1\0\3\22\1\0\1\22"+ + "\2\0\1\22\5\0\2\22\3\0\4\22\1\70\7\22"+ + "\1\0\1\22\1\0\1\22\1\0\1\22\1\0\3\22"+ + "\1\0\1\22\2\0\1\22\5\0\2\22\3\0\1\71"+ + "\13\22\1\0\1\22\1\0\1\22\1\0\1\22\1\0"+ + "\3\22\1\0\1\22\2\0\1\22\5\0\2\22\3\0"+ + "\1\72\13\22\1\0\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\3\22\1\0\1\22\2\0\1\22\5\0\2\22"+ + "\3\0\12\22\1\73\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\1\22\1\0\3\22\1\0\1\22\2\0\1\22"+ + "\5\0\2\22\3\0\5\22\1\74\6\22\1\0\1\22"+ + "\1\0\1\22\1\0\1\22\1\0\3\22\1\0\1\22"+ + "\2\0\1\22\5\0\2\22\3\0\3\22\1\75\10\22"+ + "\1\0\1\22\1\0\1\22\1\0\1\22\1\0\3\22"+ + "\1\0\1\22\2\0\1\22\5\0\2\22\3\0\10\22"+ + "\1\76\3\22\1\0\1\22\1\0\1\22\1\0\1\22"+ + "\1\0\3\22\1\0\1\22\2\0\1\22\5\0\2\22"+ + "\3\0\10\22\1\77\3\22\1\0\1\22\1\0\1\22"+ + "\1\0\1\22\1\0\3\22\1\0\1\22\2\0\1\22"+ + "\5\0\2\22\3\0\1\22\1\100\12\22\1\0\1\22"+ + "\1\0\1\22\1\0\1\22\1\0\3\22\1\0\1\22"+ + "\2\0\1\22\5\0\2\22\3\0\3\22\1\101\10\22"+ + "\1\0\1\22\1\0\1\22\1\0\1\22\1\0\3\22"+ + "\1\0\1\22\2\0\1\22\5\0\2\22\3\0\1\100"+ + "\13\22\1\0\1\22\1\0\1\22\1\0\1\22\1\0"+ + "\3\22\1\0\1\22\2\0\1\22\5\0\2\22\3\0"+ + "\13\22\1\102\1\103\1\104\1\0\1\22\1\0\1\104"+ + "\1\0\3\22\1\0\1\104\2\0\1\22\5\0\2\22"+ + "\3\0\11\22\1\63\2\22\1\0\1\22\1\0\1\22"+ + "\1\0\1\22\1\0\3\22\1\0\1\22\2\0\1\22"+ + "\27\0\1\105\3\0\1\105\5\0\1\105\10\0\2\22"+ + "\3\0\13\22\1\104\1\0\1\104\1\0\1\22\1\0"+ + "\1\104\1\0\3\22\1\0\1\104\2\0\1\22\25\0"+ + "\1\105\1\0\1\105\3\0\1\105\5\0\1\105\3\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[2072]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\1\11\1\1\1\11\3\1\1\11\2\1\1\11"+ + "\1\1\1\11\1\1\1\11\12\1\3\11\7\1\1\0"+ + "\1\1\1\0\1\1\1\11\6\1\1\0\21\1\1\0"+ + "\2\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[69]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** number of newlines encountered up to the start of the matched text */ + private int yyline; + + /** the number of characters up to the start of the matched text */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + /** + * The 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; + + /* user code: */ + + StringBuilder string = new StringBuilder(); + + + /** + * Create an empty lexer, yyrset will be called later to reset and assign + * the reader + */ + public FlasmLexer() { + + } + + public int yychar() { + return yychar; + } + + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public FlasmLexer(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 < 3662) { + 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; + } + + /* 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; + } + + /* 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; + } + + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; + } + } + return false; + } + + // totalRead = 0: End of stream + return true; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * 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]; + } + + + /** + * 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]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + yychar+= zzMarkedPosL-zzStartRead; + + 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; + } + + + zzForAction: { + while (true) { + + 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; + } + 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; + + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + case 17: break; + case 2: + { return token(TokenType.NEWLINE); + } + case 18: break; + case 3: + { return token(TokenType.COMMENT); + } + case 19: break; + case 4: + { return token(TokenType.WHITESPACE); + } + case 20: break; + case 5: + { yybegin(PARAMETERS); + return token(TokenType.KEYWORD); + } + case 21: break; + case 6: + { tokenLength += yylength(); + } + case 22: break; + case 7: + { yybegin(YYINITIAL); + return token(TokenType.ERROR,tokenStart, tokenLength); + } + case 23: break; + case 8: + { yybegin(PARAMETERS); + // length also includes the trailing quote + return token(TokenType.STRING, tokenStart, tokenLength + 1); + } + case 24: break; + case 9: + { yybegin(YYINITIAL); return token(TokenType.NEWLINE); + } + case 25: break; + case 10: + { return token(TokenType.IDENTIFIER); + } + case 26: break; + case 11: + { return token(TokenType.NUMBER); + } + case 27: break; + case 12: + { yybegin(STRING); + tokenStart = yychar; + tokenLength = 1; + } + case 28: break; + case 13: + { return token(TokenType.IDENTIFIER,yychar,yylength()); + } + case 29: break; + case 14: + { tokenLength += 2; + } + case 30: break; + case 15: + { return token(TokenType.KEYWORD); + } + case 31: break; + case 16: + { return token(TokenType.KEYWORD2); + } + case 32: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/Token.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/Token.java new file mode 100644 index 000000000..7fadf8679 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/Token.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2010-2018 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, + * 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. + */ +package com.jpexs.decompiler.flash.exporters.script.graphviz; + +import java.io.Serializable; + +/** + * + * @author JPEXS + */ +public class Token implements Serializable, Comparable { + public final TokenType type; + public final int start; + public final int length; + + public final byte pairValue; + public final short kind = 0; + + public Token(TokenType type, int start, int length) { + this.type = type; + this.start = start; + this.length = length; + this.pairValue = 0; + } + + public Token(TokenType type, int start, int length, byte pairValue) { + this.type = type; + this.start = start; + this.length = length; + this.pairValue = pairValue; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof Object) { + Token token = (Token) obj; + return ((this.start == token.start) + && (this.length == token.length) + && (this.type.equals(token.type))); + } else { + return false; + } + } + + @Override + public int hashCode() { + return start; + } + + @Override + public String toString() { + if (pairValue == 0) { + return String.format("%s (%d, %d)", type, start, length); + } else { + return String.format("%s (%d, %d) (%d)", type, start, length, pairValue); + } + } + + @Override + public int compareTo(Object o) { + Token t = (Token) o; + if (this.start != t.start) { + return (this.start - t.start); + } else if (this.length != t.length) { + return (this.length - t.length); + } else { + return this.type.compareTo(t.type); + } + } + + /** + * return the end position of the token. + * + * @return start + length + */ + public int end() { + return start + length; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/TokenType.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/TokenType.java new file mode 100644 index 000000000..2b7405982 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/graphviz/TokenType.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2010-2018 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, + * 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. + */ +package com.jpexs.decompiler.flash.exporters.script.graphviz; + +/** + * + * @author jindr + */ +public enum TokenType { + + OPERATOR, // Language operators + DELIMITER, // Delimiters. Constructs that are not necessarily operators for a language + KEYWORD, // language reserved keywords + KEYWORD2, // Other language reserved keywords, like C #defines + IDENTIFIER, // identifiers, variable names, class names + NUMBER, // numbers in various formats + STRING, // String + STRING2, // For highlighting meta chars within a String + COMMENT, // comments + COMMENT2, // special stuff within comments + REGEX, // regular expressions + REGEX2, // special chars within regular expressions + TYPE, // Types, usually not keywords, but supported by the language + TYPE2, // Types from standard libraries + TYPE3, // Types for users + DEFAULT, // any other text + WARNING, // Text that should be highlighted as a warning + ERROR, // Text that signals an error + WHITESPACE, + NEWLINE; +} diff --git a/src/com/jpexs/decompiler/flash/gui/graph/GraphPanelSimple.java b/src/com/jpexs/decompiler/flash/gui/graph/GraphPanelSimple.java index f217671c4..ae8b4771b 100644 --- a/src/com/jpexs/decompiler/flash/gui/graph/GraphPanelSimple.java +++ b/src/com/jpexs/decompiler/flash/gui/graph/GraphPanelSimple.java @@ -1,18 +1,18 @@ /* - * Copyright (C) 2018 Jindra - * - * 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 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 . + * Copyright (C) 2016-2018 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 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.gui.graph; diff --git a/src/com/jpexs/decompiler/flash/gui/graph/GraphVizDotCommands.java b/src/com/jpexs/decompiler/flash/gui/graph/GraphVizDotCommands.java index 50889984e..e8dde8d19 100644 --- a/src/com/jpexs/decompiler/flash/gui/graph/GraphVizDotCommands.java +++ b/src/com/jpexs/decompiler/flash/gui/graph/GraphVizDotCommands.java @@ -1,18 +1,18 @@ /* - * Copyright (C) 2018 Jindra - * - * 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 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 . + * Copyright (C) 2016-2018 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 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.gui.graph; diff --git a/src/com/jpexs/decompiler/flash/gui/graph/GraphVizGraphPanel.java b/src/com/jpexs/decompiler/flash/gui/graph/GraphVizGraphPanel.java index 8acb58b85..b6fd465ca 100644 --- a/src/com/jpexs/decompiler/flash/gui/graph/GraphVizGraphPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/graph/GraphVizGraphPanel.java @@ -1,18 +1,18 @@ /* - * Copyright (C) 2018 Jindra - * - * 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 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 . + * Copyright (C) 2016-2018 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 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.gui.graph; diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties index c462b8998..bdd769f1d 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties @@ -479,3 +479,6 @@ config.description.gui.dump.splitPane.dividerLocationPercent = dump splitPane di config.name.useAdobeFlashPlayerForPreviews = (Deprecated) Use Adobe Flash player for preview of objects config.description.useAdobeFlashPlayerForPreviews = Use Adobe Flash player for preview of objects. WARNING: FlashPlayer was discontinued on 2021-01-12 + +config.name.showLineNumbersInPCodeGraphvizGraph = Show line numbers in Graphviz graphs +config.description.showLineNumbersInPCodeGraphvizGraph = Show line numbers in the P-code graphviz graph. \ No newline at end of file