You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by mh...@apache.org on 2013/09/24 20:33:16 UTC

[40/50] [abbrv] Implement Standard and Classic Analyzers

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/7a4b442f/src/contrib/Analyzers/Standard/StandardTokenizerImpl.cs
----------------------------------------------------------------------
diff --git a/src/contrib/Analyzers/Standard/StandardTokenizerImpl.cs b/src/contrib/Analyzers/Standard/StandardTokenizerImpl.cs
new file mode 100644
index 0000000..f91bd9b
--- /dev/null
+++ b/src/contrib/Analyzers/Standard/StandardTokenizerImpl.cs
@@ -0,0 +1,1241 @@
+using Lucene.Net.Analysis.Tokenattributes;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace Lucene.Net.Analysis.Standard
+{
+    public sealed class StandardTokenizerImpl : IStandardTokenizerInterface
+    {
+
+        /** This character denotes the end of file */
+        public const int YYEOF = -1;
+
+        /** initial size of the lookahead buffer */
+        private const int ZZ_BUFFERSIZE = 4096;
+
+        /** lexical states */
+        public const int YYINITIAL = 0;
+
+        /**
+         * 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 readonly int[] ZZ_LEXSTATE = { 
+     0, 0
+  };
+
+        /** 
+         * Translates characters to character classes
+         */
+        private const String ZZ_CMAP_PACKED =
+          "\u0027\0\u0001\u0082\u0004\0\u0001\u0081\u0001\0\u0001\u0082\u0001\0\u000a\u007e\u0001\u0080\u0001\u0081" +
+          "\u0005\0\u001a\u007c\u0004\0\u0001\u0083\u0001\0\u001a\u007c\u002f\0\u0001\u007c\u0002\0\u0001\u007d" +
+          "\u0007\0\u0001\u007c\u0001\0\u0001\u0080\u0002\0\u0001\u007c\u0005\0\u0017\u007c\u0001\0\u001f\u007c" +
+          "\u0001\0\u01ca\u007c\u0004\0\u000c\u007c\u000e\0\u0005\u007c\u0007\0\u0001\u007c\u0001\0\u0001\u007c" +
+          "\u0011\0\u0070\u007d\u0005\u007c\u0001\0\u0002\u007c\u0002\0\u0004\u007c\u0001\u0081\u0007\0\u0001\u007c" +
+          "\u0001\u0080\u0003\u007c\u0001\0\u0001\u007c\u0001\0\u0014\u007c\u0001\0\u0053\u007c\u0001\0\u008b\u007c" +
+          "\u0001\0\u0007\u007d\u009e\u007c\u0009\0\u0026\u007c\u0002\0\u0001\u007c\u0007\0\u0027\u007c\u0001\0" +
+          "\u0001\u0081\u0007\0\u002d\u007d\u0001\0\u0001\u007d\u0001\0\u0002\u007d\u0001\0\u0002\u007d\u0001\0" +
+          "\u0001\u007d\u0008\0\u001b\u007c\u0005\0\u0004\u007c\u0001\u0080\u000b\0\u0005\u007d\u0007\0\u0002\u0081" +
+          "\u0002\0\u000b\u007d\u0005\0\u002b\u007c\u0015\u007d\u000a\u007e\u0001\0\u0001\u007e\u0001\u0081\u0001\0" +
+          "\u0002\u007c\u0001\u007d\u0063\u007c\u0001\0\u0001\u007c\u0007\u007d\u0001\u007d\u0001\0\u0006\u007d\u0002\u007c" +
+          "\u0002\u007d\u0001\0\u0004\u007d\u0002\u007c\u000a\u007e\u0003\u007c\u0002\0\u0001\u007c\u000f\0\u0001\u007d" +
+          "\u0001\u007c\u0001\u007d\u001e\u007c\u001b\u007d\u0002\0\u0059\u007c\u000b\u007d\u0001\u007c\u000e\0\u000a\u007e" +
+          "\u0021\u007c\u0009\u007d\u0002\u007c\u0002\0\u0001\u0081\u0001\0\u0001\u007c\u0005\0\u0016\u007c\u0004\u007d" +
+          "\u0001\u007c\u0009\u007d\u0001\u007c\u0003\u007d\u0001\u007c\u0005\u007d\u0012\0\u0019\u007c\u0003\u007d\u0044\0" +
+          "\u0001\u007c\u0001\0\u000b\u007c\u0037\0\u001b\u007d\u0001\0\u0004\u007d\u0036\u007c\u0003\u007d\u0001\u007c" +
+          "\u0012\u007d\u0001\u007c\u0007\u007d\u000a\u007c\u0002\u007d\u0002\0\u000a\u007e\u0001\0\u0007\u007c\u0001\0" +
+          "\u0007\u007c\u0001\0\u0003\u007d\u0001\0\u0008\u007c\u0002\0\u0002\u007c\u0002\0\u0016\u007c\u0001\0" +
+          "\u0007\u007c\u0001\0\u0001\u007c\u0003\0\u0004\u007c\u0002\0\u0001\u007d\u0001\u007c\u0007\u007d\u0002\0" +
+          "\u0002\u007d\u0002\0\u0003\u007d\u0001\u007c\u0008\0\u0001\u007d\u0004\0\u0002\u007c\u0001\0\u0003\u007c" +
+          "\u0002\u007d\u0002\0\u000a\u007e\u0002\u007c\u000f\0\u0003\u007d\u0001\0\u0006\u007c\u0004\0\u0002\u007c" +
+          "\u0002\0\u0016\u007c\u0001\0\u0007\u007c\u0001\0\u0002\u007c\u0001\0\u0002\u007c\u0001\0\u0002\u007c" +
+          "\u0002\0\u0001\u007d\u0001\0\u0005\u007d\u0004\0\u0002\u007d\u0002\0\u0003\u007d\u0003\0\u0001\u007d" +
+          "\u0007\0\u0004\u007c\u0001\0\u0001\u007c\u0007\0\u000a\u007e\u0002\u007d\u0003\u007c\u0001\u007d\u000b\0" +
+          "\u0003\u007d\u0001\0\u0009\u007c\u0001\0\u0003\u007c\u0001\0\u0016\u007c\u0001\0\u0007\u007c\u0001\0" +
+          "\u0002\u007c\u0001\0\u0005\u007c\u0002\0\u0001\u007d\u0001\u007c\u0008\u007d\u0001\0\u0003\u007d\u0001\0" +
+          "\u0003\u007d\u0002\0\u0001\u007c\u000f\0\u0002\u007c\u0002\u007d\u0002\0\u000a\u007e\u0011\0\u0003\u007d" +
+          "\u0001\0\u0008\u007c\u0002\0\u0002\u007c\u0002\0\u0016\u007c\u0001\0\u0007\u007c\u0001\0\u0002\u007c" +
+          "\u0001\0\u0005\u007c\u0002\0\u0001\u007d\u0001\u007c\u0007\u007d\u0002\0\u0002\u007d\u0002\0\u0003\u007d" +
+          "\u0008\0\u0002\u007d\u0004\0\u0002\u007c\u0001\0\u0003\u007c\u0002\u007d\u0002\0\u000a\u007e\u0001\0" +
+          "\u0001\u007c\u0010\0\u0001\u007d\u0001\u007c\u0001\0\u0006\u007c\u0003\0\u0003\u007c\u0001\0\u0004\u007c" +
+          "\u0003\0\u0002\u007c\u0001\0\u0001\u007c\u0001\0\u0002\u007c\u0003\0\u0002\u007c\u0003\0\u0003\u007c" +
+          "\u0003\0\u000c\u007c\u0004\0\u0005\u007d\u0003\0\u0003\u007d\u0001\0\u0004\u007d\u0002\0\u0001\u007c" +
+          "\u0006\0\u0001\u007d\u000e\0\u000a\u007e\u0011\0\u0003\u007d\u0001\0\u0008\u007c\u0001\0\u0003\u007c" +
+          "\u0001\0\u0017\u007c\u0001\0\u000a\u007c\u0001\0\u0005\u007c\u0003\0\u0001\u007c\u0007\u007d\u0001\0" +
+          "\u0003\u007d\u0001\0\u0004\u007d\u0007\0\u0002\u007d\u0001\0\u0002\u007c\u0006\0\u0002\u007c\u0002\u007d" +
+          "\u0002\0\u000a\u007e\u0012\0\u0002\u007d\u0001\0\u0008\u007c\u0001\0\u0003\u007c\u0001\0\u0017\u007c" +
+          "\u0001\0\u000a\u007c\u0001\0\u0005\u007c\u0002\0\u0001\u007d\u0001\u007c\u0007\u007d\u0001\0\u0003\u007d" +
+          "\u0001\0\u0004\u007d\u0007\0\u0002\u007d\u0007\0\u0001\u007c\u0001\0\u0002\u007c\u0002\u007d\u0002\0" +
+          "\u000a\u007e\u0001\0\u0002\u007c\u000f\0\u0002\u007d\u0001\0\u0008\u007c\u0001\0\u0003\u007c\u0001\0" +
+          "\u0029\u007c\u0002\0\u0001\u007c\u0007\u007d\u0001\0\u0003\u007d\u0001\0\u0004\u007d\u0001\u007c\u0008\0" +
+          "\u0001\u007d\u0008\0\u0002\u007c\u0002\u007d\u0002\0\u000a\u007e\u000a\0\u0006\u007c\u0002\0\u0002\u007d" +
+          "\u0001\0\u0012\u007c\u0003\0\u0018\u007c\u0001\0\u0009\u007c\u0001\0\u0001\u007c\u0002\0\u0007\u007c" +
+          "\u0003\0\u0001\u007d\u0004\0\u0006\u007d\u0001\0\u0001\u007d\u0001\0\u0008\u007d\u0012\0\u0002\u007d" +
+          "\u000d\0\u0030\u0084\u0001\u0085\u0002\u0084\u0007\u0085\u0005\0\u0007\u0084\u0008\u0085\u0001\0\u000a\u007e" +
+          "\u0027\0\u0002\u0084\u0001\0\u0001\u0084\u0002\0\u0002\u0084\u0001\0\u0001\u0084\u0002\0\u0001\u0084" +
+          "\u0006\0\u0004\u0084\u0001\0\u0007\u0084\u0001\0\u0003\u0084\u0001\0\u0001\u0084\u0001\0\u0001\u0084" +
+          "\u0002\0\u0002\u0084\u0001\0\u0004\u0084\u0001\u0085\u0002\u0084\u0006\u0085\u0001\0\u0002\u0085\u0001\u0084" +
+          "\u0002\0\u0005\u0084\u0001\0\u0001\u0084\u0001\0\u0006\u0085\u0002\0\u000a\u007e\u0002\0\u0004\u0084" +
+          "\u0020\0\u0001\u007c\u0017\0\u0002\u007d\u0006\0\u000a\u007e\u000b\0\u0001\u007d\u0001\0\u0001\u007d" +
+          "\u0001\0\u0001\u007d\u0004\0\u0002\u007d\u0008\u007c\u0001\0\u0024\u007c\u0004\0\u0014\u007d\u0001\0" +
+          "\u0002\u007d\u0005\u007c\u000b\u007d\u0001\0\u0024\u007d\u0009\0\u0001\u007d\u0039\0\u002b\u0084\u0014\u0085" +
+          "\u0001\u0084\u000a\u007e\u0006\0\u0006\u0084\u0004\u0085\u0004\u0084\u0003\u0085\u0001\u0084\u0003\u0085\u0002\u0084" +
+          "\u0007\u0085\u0003\u0084\u0004\u0085\u000d\u0084\u000c\u0085\u0001\u0084\u0001\u0085\u000a\u007e\u0004\u0085\u0002\u0084" +
+          "\u0026\u007c\u0001\0\u0001\u007c\u0005\0\u0001\u007c\u0002\0\u002b\u007c\u0001\0\u0004\u007c\u0100\u0088" +
+          "\u0049\u007c\u0001\0\u0004\u007c\u0002\0\u0007\u007c\u0001\0\u0001\u007c\u0001\0\u0004\u007c\u0002\0" +
+          "\u0029\u007c\u0001\0\u0004\u007c\u0002\0\u0021\u007c\u0001\0\u0004\u007c\u0002\0\u0007\u007c\u0001\0" +
+          "\u0001\u007c\u0001\0\u0004\u007c\u0002\0\u000f\u007c\u0001\0\u0039\u007c\u0001\0\u0004\u007c\u0002\0" +
+          "\u0043\u007c\u0002\0\u0003\u007d\u0020\0\u0010\u007c\u0010\0\u0055\u007c\u000c\0\u026c\u007c\u0002\0" +
+          "\u0011\u007c\u0001\0\u001a\u007c\u0005\0\u004b\u007c\u0003\0\u0003\u007c\u000f\0\u000d\u007c\u0001\0" +
+          "\u0004\u007c\u0003\u007d\u000b\0\u0012\u007c\u0003\u007d\u000b\0\u0012\u007c\u0002\u007d\u000c\0\u000d\u007c" +
+          "\u0001\0\u0003\u007c\u0001\0\u0002\u007d\u000c\0\u0034\u0084\u0020\u0085\u0003\0\u0001\u0084\u0004\0" +
+          "\u0001\u0084\u0001\u0085\u0002\0\u000a\u007e\u0021\0\u0003\u007d\u0002\0\u000a\u007e\u0006\0\u0058\u007c" +
+          "\u0008\0\u0029\u007c\u0001\u007d\u0001\u007c\u0005\0\u0046\u007c\u000a\0\u001d\u007c\u0003\0\u000c\u007d" +
+          "\u0004\0\u000c\u007d\u000a\0\u000a\u007e\u001e\u0084\u0002\0\u0005\u0084\u000b\0\u002c\u0084\u0004\0" +
+          "\u0011\u0085\u0007\u0084\u0002\u0085\u0006\0\u000a\u007e\u0001\u0084\u0003\0\u0002\u0084\u0020\0\u0017\u007c" +
+          "\u0005\u007d\u0004\0\u0035\u0084\u000a\u0085\u0001\0\u001d\u0085\u0002\0\u0001\u007d\u000a\u007e\u0006\0" +
+          "\u000a\u007e\u0006\0\u000e\u0084\u0052\0\u0005\u007d\u002f\u007c\u0011\u007d\u0007\u007c\u0004\0\u000a\u007e" +
+          "\u0011\0\u0009\u007d\u000c\0\u0003\u007d\u001e\u007c\u000d\u007d\u0002\u007c\u000a\u007e\u002c\u007c\u000e\u007d" +
+          "\u000c\0\u0024\u007c\u0014\u007d\u0008\0\u000a\u007e\u0003\0\u0003\u007c\u000a\u007e\u0024\u007c\u0052\0" +
+          "\u0003\u007d\u0001\0\u0015\u007d\u0004\u007c\u0001\u007d\u0004\u007c\u0003\u007d\u0002\u007c\u0009\0\u00c0\u007c" +
+          "\u0027\u007d\u0015\0\u0004\u007d\u0116\u007c\u0002\0\u0006\u007c\u0002\0\u0026\u007c\u0002\0\u0006\u007c" +
+          "\u0002\0\u0008\u007c\u0001\0\u0001\u007c\u0001\0\u0001\u007c\u0001\0\u0001\u007c\u0001\0\u001f\u007c" +
+          "\u0002\0\u0035\u007c\u0001\0\u0007\u007c\u0001\0\u0001\u007c\u0003\0\u0003\u007c\u0001\0\u0007\u007c" +
+          "\u0003\0\u0004\u007c\u0002\0\u0006\u007c\u0004\0\u000d\u007c\u0005\0\u0003\u007c\u0001\0\u0007\u007c" +
+          "\u000f\0\u0002\u007d\u0002\u007d\u0008\0\u0002\u0082\u000a\0\u0001\u0082\u0002\0\u0001\u0080\u0002\0" +
+          "\u0005\u007d\u0010\0\u0002\u0083\u0003\0\u0001\u0081\u000f\0\u0001\u0083\u000b\0\u0005\u007d\u0005\0" +
+          "\u0006\u007d\u0001\0\u0001\u007c\u000d\0\u0001\u007c\u0010\0\u000d\u007c\u0033\0\u0021\u007d\u0011\0" +
+          "\u0001\u007c\u0004\0\u0001\u007c\u0002\0\u000a\u007c\u0001\0\u0001\u007c\u0003\0\u0005\u007c\u0006\0" +
+          "\u0001\u007c\u0001\0\u0001\u007c\u0001\0\u0001\u007c\u0001\0\u0004\u007c\u0001\0\u000b\u007c\u0002\0" +
+          "\u0004\u007c\u0005\0\u0005\u007c\u0004\0\u0001\u007c\u0011\0\u0029\u007c\u032d\0\u0034\u007c\u0716\0" +
+          "\u002f\u007c\u0001\0\u002f\u007c\u0001\0\u0085\u007c\u0006\0\u0004\u007c\u0003\u007d\u0002\u007c\u000c\0" +
+          "\u0026\u007c\u0001\0\u0001\u007c\u0005\0\u0001\u007c\u0002\0\u0038\u007c\u0007\0\u0001\u007c\u000f\0" +
+          "\u0001\u007d\u0017\u007c\u0009\0\u0007\u007c\u0001\0\u0007\u007c\u0001\0\u0007\u007c\u0001\0\u0007\u007c" +
+          "\u0001\0\u0007\u007c\u0001\0\u0007\u007c\u0001\0\u0007\u007c\u0001\0\u0007\u007c\u0001\0\u0020\u007d" +
+          "\u002f\0\u0001\u007c\u0050\0\u001a\u0086\u0001\0\u0059\u0086\u000c\0\u00d6\u0086\u002f\0\u0001\u007c" +
+          "\u0001\0\u0001\u0086\u0019\0\u0009\u0086\u0004\u007d\u0002\u007d\u0001\0\u0005\u007f\u0002\0\u0003\u0086" +
+          "\u0001\u007c\u0001\u007c\u0004\0\u0056\u0087\u0002\0\u0002\u007d\u0002\u007f\u0003\u0087\u005b\u007f\u0001\0" +
+          "\u0004\u007f\u0005\0\u0029\u007c\u0003\0\u005e\u0088\u0011\0\u001b\u007c\u0035\0\u0010\u007f\u001f\0" +
+          "\u0041\0\u001f\0\u0051\0\u002f\u007f\u0001\0\u0058\u007f\u00a8\0\u19b6\u0086\u004a\0\u51cd\u0086" +
+          "\u0033\0\u048d\u007c\u0043\0\u002e\u007c\u0002\0\u010d\u007c\u0003\0\u0010\u007c\u000a\u007e\u0002\u007c" +
+          "\u0014\0\u002f\u007c\u0004\u007d\u0001\0\u000a\u007d\u0001\0\u0019\u007c\u0007\0\u0001\u007d\u0050\u007c" +
+          "\u0002\u007d\u0025\0\u0009\u007c\u0002\0\u0067\u007c\u0002\0\u0004\u007c\u0001\0\u0004\u007c\u000c\0" +
+          "\u000b\u007c\u004d\0\u000a\u007c\u0001\u007d\u0003\u007c\u0001\u007d\u0004\u007c\u0001\u007d\u0017\u007c\u0005\u007d" +
+          "\u0018\0\u0034\u007c\u000c\0\u0002\u007d\u0032\u007c\u0011\u007d\u000b\0\u000a\u007e\u0006\0\u0012\u007d" +
+          "\u0006\u007c\u0003\0\u0001\u007c\u0004\0\u000a\u007e\u001c\u007c\u0008\u007d\u0002\0\u0017\u007c\u000d\u007d" +
+          "\u000c\0\u001d\u0088\u0003\0\u0004\u007d\u002f\u007c\u000e\u007d\u000e\0\u0001\u007c\u000a\u007e\u0026\0" +
+          "\u0029\u007c\u000e\u007d\u0009\0\u0003\u007c\u0001\u007d\u0008\u007c\u0002\u007d\u0002\0\u000a\u007e\u0006\0" +
+          "\u001b\u0084\u0001\u0085\u0004\0\u0030\u0084\u0001\u0085\u0001\u0084\u0003\u0085\u0002\u0084\u0002\u0085\u0005\u0084" +
+          "\u0002\u0085\u0001\u0084\u0001\u0085\u0001\u0084\u0018\0\u0005\u0084\u000b\u007c\u0005\u007d\u0002\0\u0003\u007c" +
+          "\u0002\u007d\u000a\0\u0006\u007c\u0002\0\u0006\u007c\u0002\0\u0006\u007c\u0009\0\u0007\u007c\u0001\0" +
+          "\u0007\u007c\u0091\0\u0023\u007c\u0008\u007d\u0001\0\u0002\u007d\u0002\0\u000a\u007e\u0006\0\u2ba4\u0088" +
+          "\u000c\0\u0017\u0088\u0004\0\u0031\u0088\u0004\0\u0001\u0024\u0001\u0020\u0001\u0037\u0001\u0034\u0001\u001b" +
+          "\u0001\u0018\u0002\0\u0001\u0014\u0001\u0011\u0002\0\u0001\u000f\u0001\u000d\u000c\0\u0001\u0003\u0001\u0006" +
+          "\u0010\0\u0001\u006e\u0007\0\u0001\u0049\u0001\u0008\u0005\0\u0001\u0001\u0001\u007a\u0003\0\u0001\u0073" +
+          "\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073" +
+          "\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073" +
+          "\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073" +
+          "\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0073" +
+          "\u0001\u0074\u0001\u0073\u0001\u0073\u0001\u0073\u0001\u0078\u0001\u0076\u000f\0\u0001\u0070\u02c1\0\u0001\u004c" +
+          "\u00bf\0\u0001\u006f\u0001\u004d\u0001\u000e\u0003\u0077\u0002\u0032\u0001\u0077\u0001\u0032\u0002\u0077\u0001\u001e" +
+          "\u0011\u0077\u0002\u0046\u0007\u004f\u0001\u004e\u0007\u004f\u0007\u0042\u0001\u001f\u0001\u0042\u0001\u0058\u0002\u0036" +
+          "\u0001\u0035\u0001\u0058\u0001\u0036\u0001\u0035\u0008\u0058\u0002\u0047\u0005\u0043\u0002\u003d\u0005\u0043\u0001\u0012" +
+          "\u0008\u002b\u0005\u0013\u0003\u0021\u000a\u0067\u0010\u0021\u0003\u0033\u001a\u0023\u0001\u0022\u0002\u0031\u0002\u006c" +
+          "\u0001\u006d\u0002\u006c\u0002\u006d\u0002\u006c\u0001\u006d\u0003\u0031\u0001\u0030\u0002\u0031\u000a\u0048\u0001\u0056" +
+          "\u0001\u0028\u0001\u0025\u0001\u0048\u0006\u0028\u0001\u0025\u000b\u0028\u0019\u0031\u0007\u0028\u000a\u0068\u0001\u0028" +
+          "\u0005\u000b\u0003\u0057\u0003\u0041\u0001\u0040\u0004\u0041\u0002\u0040\u0008\u0041\u0001\u0040\u0007\u001d\u0001\u001c" +
+          "\u0002\u001d\u0007\u0041\u000e\u0057\u0001\u0061\u0004\u006a\u0001\u0004\u0004\u0069\u0001\u0004\u0005\u0060\u0001\u005f" +
+          "\u0001\u0060\u0003\u005f\u0007\u0060\u0001\u005f\u0013\u0060\u0005\u004b\u0003\u0060\u0006\u004b\u0002\u004b\u0006\u004a" +
+          "\u0005\u004a\u0003\u005c\u0002\u0041\u0007\u005b\u001e\u0041\u0004\u005b\u0005\u0041\u0005\u0057\u0006\u0055\u0002\u0057" +
+          "\u0001\u0055\u0004\u001d\u000b\u005e\u000a\u0069\u0016\u005e\u000d\u000b\u0001\u005d\u0002\u000b\u0001\u007b\u0003\u0062" +
+          "\u0001\u000b\u0002\u0062\u0005\u0071\u0004\u0062\u0004\u0072\u0001\u0071\u0003\u0072\u0001\u0071\u0005\u0072\u0002\u0038" +
+          "\u0001\u003b\u0002\u0038\u0001\u003b\u0001\u0038\u0002\u003b\u0001\u0038\u0001\u003b\u000a\u0038\u0001\u003b\u0004\u0005" +
+          "\u0001\u0064\u0001\u0063\u0001\u0065\u0001\u000a\u0003\u0075\u0001\u0065\u0002\u0075\u0001\u0059\u0002\u005a\u0002\u0075" +
+          "\u0001\u000a\u0001\u0075\u0001\u000a\u0001\u0075\u0001\u000a\u0001\u0075\u0003\u000a\u0001\u0075\u0002\u000a\u0001\u0075" +
+          "\u0001\u000a\u0002\u0075\u0001\u000a\u0001\u0075\u0001\u000a\u0001\u0075\u0001\u000a\u0001\u0075\u0001\u000a\u0001\u0075" +
+          "\u0001\u000a\u0001\u003e\u0002\u003a\u0001\u003e\u0001\u003a\u0002\u003e\u0004\u003a\u0001\u003e\u0007\u003a\u0001\u003e" +
+          "\u0004\u003a\u0001\u003e\u0004\u003a\u0001\u0075\u0001\u000a\u0001\u0075\u000a\u0019\u0001\u002f\u0011\u0019\u0001\u002f" +
+          "\u0003\u001a\u0001\u002f\u0003\u0019\u0001\u002f\u0001\u0019\u0002\u0002\u0002\u0019\u0001\u002f\u000d\u0054\u0004\u0027" +
+          "\u0004\u002c\u0001\u0066\u0001\u002e\u0008\u0066\u0007\u002c\u0006\u0075\u0004\u0015\u0001\u0017\u001f\u0015\u0001\u0017" +
+          "\u0004\u0015\u0015\u0045\u0001\u0079\u0009\u0045\u0011\u0016\u0005\u0045\u0001\u0007\u000a\u002d\u0005\u0045\u0006\u0044" +
+          "\u0004\u003e\u0001\u003f\u0001\u0016\u0005\u0053\u000a\u0051\u000f\u0053\u0001\u003c\u0003\u0039\u000c\u0050\u0001\u0009" +
+          "\u0009\u0026\u0001\u002a\u0005\u0026\u0004\u0052\u000b\u0029\u0002\u000c\u0009\u0026\u0001\u002a\u0019\u0026\u0001\u002a" +
+          "\u0004\u0009\u0004\u0026\u0002\u002a\u0002\u006b\u0001\u0010\u0005\u006b\u002a\u0010\u1900\0\u016e\u0086\u0002\0" +
+          "\u006a\u0086\u0026\0\u0007\u007c\u000c\0\u0005\u007c\u0005\0\u0001\u007c\u0001\u007d\u000a\u007c\u0001\0" +
+          "\u000d\u007c\u0001\0\u0005\u007c\u0001\0\u0001\u007c\u0001\0\u0002\u007c\u0001\0\u0002\u007c\u0001\0" +
+          "\u006c\u007c\u0021\0\u016b\u007c\u0012\0\u0040\u007c\u0002\0\u0036\u007c\u0028\0\u000c\u007c\u0004\0" +
+          "\u0010\u007d\u0001\u0081\u0002\0\u0001\u0080\u0001\u0081\u000b\0\u0007\u007d\u000c\0\u0002\u0083\u0018\0" +
+          "\u0003\u0083\u0001\u0081\u0001\0\u0001\u0082\u0001\0\u0001\u0081\u0001\u0080\u001a\0\u0005\u007c\u0001\0" +
+          "\u0087\u007c\u0002\0\u0001\u007d\u0007\0\u0001\u0082\u0004\0\u0001\u0081\u0001\0\u0001\u0082\u0001\0" +
+          "\u000a\u007e\u0001\u0080\u0001\u0081\u0005\0\u001a\u007c\u0004\0\u0001\u0083\u0001\0\u001a\u007c\u000b\0" +
+          "\u0038\u007f\u0002\u007d\u001f\u0088\u0003\0\u0006\u0088\u0002\0\u0006\u0088\u0002\0\u0006\u0088\u0002\0" +
+          "\u0003\u0088\u001c\0\u0003\u007d\u0004\0";
+
+        /** 
+         * Translates characters to character classes
+         */
+        private static readonly char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
+
+        /** 
+         * Translates DFA states to action switch labels.
+         */
+        private static readonly int[] ZZ_ACTION = zzUnpackAction();
+
+        private const String ZZ_ACTION_PACKED_0 =
+          "\u0001\0\u0016\u0001\u0001\u0002\u0001\u0003\u0001\u0004\u0001\u0001\u0001\u0005\u0001\u0006" +
+          "\u0001\u0007\u0001\u0008\u0010\0\u0001\u0002\u0001\0\u0001\u0002\u000a\0\u0001\u0003" +
+          "\u0011\0\u0001\u0002\u004d\0";
+
+        private static int[] zzUnpackAction()
+        {
+            int[] result = new int[156];
+            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[i++];
+                int value = packed[i++];
+                do result[j++] = value; while (--count > 0);
+            }
+            return j;
+        }
+
+
+        /** 
+         * Translates a state to a row index in the transition table
+         */
+        private static readonly int[] ZZ_ROWMAP = zzUnpackRowMap();
+
+        private const String ZZ_ROWMAP_PACKED_0 =
+          "\0\0\0\u0089\0\u0112\0\u019b\0\u0224\0\u02ad\0\u0336\0\u03bf" +
+          "\0\u0448\0\u04d1\0\u055a\0\u05e3\0\u066c\0\u06f5\0\u077e\0\u0807" +
+          "\0\u0890\0\u0919\0\u09a2\0\u0a2b\0\u0ab4\0\u0b3d\0\u0bc6\0\u0c4f" +
+          "\0\u0cd8\0\u0d61\0\u0dea\0\u0e73\0\u0efc\0\u0f85\0\u100e\0\u0112" +
+          "\0\u019b\0\u1097\0\u1120\0\u0336\0\u03bf\0\u0448\0\u04d1\0\u11a9" +
+          "\0\u1232\0\u12bb\0\u1344\0\u077e\0\u13cd\0\u1456\0\u14df\0\u1568" +
+          "\0\u15f1\0\u167a\0\u1703\0\u02ad\0\u178c\0\u1815\0\u066c\0\u189e" +
+          "\0\u1927\0\u19b0\0\u1a39\0\u1ac2\0\u1b4b\0\u1bd4\0\u1c5d\0\u1ce6" +
+          "\0\u1d6f\0\u1df8\0\u1e81\0\u1f0a\0\u1f93\0\u201c\0\u20a5\0\u212e" +
+          "\0\u21b7\0\u2240\0\u22c9\0\u2352\0\u23db\0\u0dea\0\u2464\0\u24ed" +
+          "\0\u2576\0\u25ff\0\u2688\0\u2711\0\u279a\0\u2823\0\u28ac\0\u2935" +
+          "\0\u29be\0\u2a47\0\u2ad0\0\u2b59\0\u2be2\0\u2c6b\0\u2cf4\0\u2d7d" +
+          "\0\u2e06\0\u2e8f\0\u2f18\0\u2fa1\0\u302a\0\u30b3\0\u313c\0\u31c5" +
+          "\0\u324e\0\u32d7\0\u3360\0\u33e9\0\u3472\0\u34fb\0\u3584\0\u360d" +
+          "\0\u3696\0\u371f\0\u37a8\0\u3831\0\u38ba\0\u3943\0\u39cc\0\u3a55" +
+          "\0\u3ade\0\u3b67\0\u3bf0\0\u3c79\0\u3d02\0\u3d8b\0\u3e14\0\u3e9d" +
+          "\0\u3f26\0\u3faf\0\u4038\0\u40c1\0\u414a\0\u41d3\0\u425c\0\u42e5" +
+          "\0\u436e\0\u43f7\0\u4480\0\u4509\0\u4592\0\u461b\0\u46a4\0\u472d" +
+          "\0\u47b6\0\u483f\0\u48c8\0\u4951\0\u49da\0\u4a63\0\u4aec\0\u4b75" +
+          "\0\u4bfe\0\u4c87\0\u4d10\0\u4d99";
+
+        private static int[] zzUnpackRowMap()
+        {
+            int[] result = new int[156];
+            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[i++] << 16;
+                result[j++] = high | packed[i++];
+            }
+            return j;
+        }
+
+        /** 
+         * The transition table of the DFA
+         */
+        private static readonly int[] ZZ_TRANS = zzUnpackTrans();
+
+        private const String ZZ_TRANS_PACKED_0 =
+          "\u0001\u0002\u0001\u0003\u0001\u0002\u0001\u0004\u0002\u0002\u0001\u0005\u0001\u0002\u0001\u0006" +
+          "\u0004\u0002\u0001\u0007\u0001\u0002\u0001\u0008\u0001\u0002\u0001\u0009\u0002\u0002\u0001\u000a" +
+          "\u0003\u0002\u0001\u000b\u0002\u0002\u0001\u000c\u0004\u0002\u0001\u000d\u0003\u0002\u0001\u000e" +
+          "\u000f\u0002\u0001\u000f\u0002\u0002\u0001\u0010\u0036\u0002\u0001\u0011\u0001\u0002\u0001\u0012" +
+          "\u0002\u0002\u0001\u0013\u0001\u0014\u0001\u0002\u0001\u0015\u0001\u0002\u0001\u0016\u0001\u0002" +
+          "\u0001\u0017\u0001\u0002\u0001\u0018\u0001\u0002\u0001\u0019\u0001\u001a\u0003\u0002\u0001\u001b" +
+          "\u0002\u001c\u0001\u001d\u0001\u001e\u0001\u001f\u008b\0\u0001\u0018\u0002\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u000e\0\u0001\u0018\u000d\0\u0001\u0018\u0010\0\u0001\u0018" +
+          "\u0001\0\u0001\u0018\u0019\0\u0001\u0018\u0004\0\u0001\u0018\u0008\0\u0002\u0018" +
+          "\u000d\0\u0002\u0018\u0008\0\u0001\u0018\u0011\0\u0002\u0018\u0005\0\u0001\u0018" +
+          "\u0002\0\u0001\u0018\u0003\0\u0002\u0018\u0008\0\u0004\u0018\u0001\0\u0003\u0018" +
+          "\u0001\0\u0001\u0018\u0002\0\u0001\u0018\u0002\0\u0001\u0018\u0004\0\u0004\u0018" +
+          "\u0001\0\u0002\u0018\u0001\0\u0001\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0002\0\u0004\u0018\u0002\0\u0003\u0018\u0001\0\u0002\u0018\u0001\0\u0003\u0018" +
+          "\u0005\0\u0004\u0018\u0002\0\u0008\u0018\u0001\0\u0001\u0018\u0002\0\u0004\u0018" +
+          "\u0001\0\u0002\u0018\u0001\0\u0001\u0018\u0001\0\u0002\u0018\u0004\0\u0001\u0018" +
+          "\u0003\0\u0001\u0018\u0014\0\u0001\u0018\u0004\0\u0001\u0018\u0009\0\u0001\u0018" +
+          "\u0012\0\u0001\u0018\u0003\0\u0001\u0018\u0017\0\u0001\u0018\u0033\0\u0001\u0018" +
+          "\u0014\0\u0001\u0018\u0003\0\u0004\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0019" +
+          "\u0002\0\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0002\u0018\u0002\0\u0003\u0018" +
+          "\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0004\u0018\u0001\0\u0003\u0018" +
+          "\u0001\0\u0001\u0018\u0001\0\u0003\u0018\u0001\0\u0002\u0018\u0001\0\u0004\u0018" +
+          "\u0001\0\u0002\u0018\u0002\0\u0008\u0018\u0001\0\u0002\u0018\u0001\0\u0009\u0018" +
+          "\u0001\0\u0008\u0018\u0001\0\u000b\u0018\u0001\u0019\u0001\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0003\0" +
+          "\u0001\u0018\u001b\0\u0001\u0018\u000f\0\u0001\u0018\u0013\0\u0001\u0018\u0013\0" +
+          "\u0001\u0018\u0006\0\u0003\u0018\u001f\0\u0001\u0018\u0007\0\u0001\u0018\u0013\0" +
+          "\u0001\u0018\u0001\0\u0002\u0018\u0001\0\u0001\u0018\u0001\0\u0004\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0002\u0018\u0001\0\u0003\u0018\u0001\0" +
+          "\u0002\u0018\u0001\0\u0004\u0018\u0001\0\u0003\u0018\u0001\0\u000f\u0018\u0001\0" +
+          "\u0002\u0018\u0001\0\u0011\u0018\u0001\0\u0002\u0018\u0001\0\u0021\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u001b\0\u0001\u0018\u0003\0\u0002\u0018\u000a\0" +
+          "\u0002\u0018\u000b\0\u0001\u0018\u0006\0\u0001\u0018\u0002\0\u0002\u0018\u0006\0" +
+          "\u0001\u0018\u0004\0\u0002\u0018\u0002\0\u0002\u0018\u0005\0\u0003\u0018\u0008\0" +
+          "\u0001\u0018\u0016\0\u0001\u0018\u0007\0\u0001\u0018\u0013\0\u0001\u0018\u0001\0" +
+          "\u0002\u0018\u0001\0\u0001\u0018\u0002\0\u0002\u0018\u0002\0\u0001\u0018\u0003\0" +
+          "\u0002\u0018\u0001\0\u0003\u0018\u0001\0\u0002\u0018\u0001\0\u0004\u0018\u0001\0" +
+          "\u0003\u0018\u0001\0\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0009\u0018\u0001\0" +
+          "\u0002\u0018\u0001\0\u0001\u0018\u0001\0\u0002\u0018\u0001\0\u000c\u0018\u0001\0" +
+          "\u0002\u0018\u0001\0\u0003\u0018\u0001\0\u0001\u0018\u0001\0\u0018\u0018\u0001\0" +
+          "\u0002\u0018\u0001\0\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u000f\0\u0001\u0018\u0016\0" +
+          "\u0002\u0018\u0013\0\u0001\u0019\u0001\u0018\u0036\0\u0001\u0019\u0026\0\u0001\u0019" +
+          "\u0017\0\u0004\u0018\u0002\0\u0002\u0018\u000c\0\u0003\u0018\u000d\0\u0003\u0018" +
+          "\u0003\0\u0001\u0018\u0007\0\u0002\u0018\u000b\0\u0001\u0018\u000b\0\u0004\u0019" +
+          "\u0001\0\u0002\u0018\u0009\0\u0001\u0018\u001f\0\u0001\u0018\u0003\0\u0002\u0018" +
+          "\u000a\0\u0002\u0018\u0001\0\u0003\u0018\u0007\0\u0001\u0018\u0006\0\u0002\u0018" +
+          "\u0001\0\u0002\u0018\u0006\0\u0001\u0018\u0004\0\u0002\u0018\u0002\0\u0002\u0018" +
+          "\u0005\0\u0003\u0018\u0008\0\u0001\u0018\u000e\0\u0001\u0018\u0004\0\u0002\u0019" +
+          "\u0001\0\u0001\u0018\u0007\0\u0001\u0018\u0013\0\u0001\u0018\u0004\0\u0001\u0018" +
+          "\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0006\0\u0001\u0018\u0005\0\u0001\u0018" +
+          "\u0002\0\u0002\u0018\u0001\0\u000f\u0018\u0002\0\u0001\u0018\u000b\0\u0007\u0018" +
+          "\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0001\u0018" +
+          "\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0006\0\u0002\u0018" +
+          "\u0005\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0003\u0018\u0001\0\u0001\u0018" +
+          "\u0007\0\u0001\u0018\u0001\0\u0001\u0018\u001d\0\u0001\u0018\u000f\0\u0002\u0018" +
+          "\u0012\0\u0001\u0018\u0002\0\u0002\u0018\u000b\0\u0001\u0018\u0003\0\u0002\u0018" +
+          "\u0005\0\u0003\u0018\u0008\0\u0001\u0018\u0016\0\u0001\u0018\u0007\0\u0001\u0018" +
+          "\u0018\0\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0003\0\u0001\u0018" +
+          "\u0007\0\u0001\u0018\u0019\0\u0010\u0018\u0005\0\u0003\u0018\u0003\0\u0001\u0018" +
+          "\u0003\0\u0002\u0018\u0002\0\u0002\u0018\u0004\0\u0001\u0018\u0008\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u0002\0\u0001\u0018\u0004\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0001\0\u0001\u0018\u005a\0\u0001\u001e\u0021\0\u0001\u001a\u001d\0\u0001\u001d" +
+          "\u0006\0\u0001\u001d\u0002\0\u0001\u001d\u0003\0\u0002\u001d\u0008\0\u0004\u001d" +
+          "\u0001\0\u0003\u001d\u0001\0\u0001\u001d\u0002\0\u0001\u001d\u0002\0\u0001\u001d" +
+          "\u0004\0\u0004\u001d\u0001\0\u0002\u001d\u0006\0\u0001\u001d\u0002\0\u0004\u001d" +
+          "\u0002\0\u0003\u001d\u0001\0\u0002\u001d\u0001\0\u0003\u001d\u0005\0\u0004\u001d" +
+          "\u0002\0\u0008\u001d\u0004\0\u0004\u001d\u0001\0\u0002\u001d\u0001\0\u0001\u001d" +
+          "\u0001\0\u0002\u001d\u0004\0\u0001\u001d\u0003\0\u0001\u001d\u000f\0\u0001\u001d" +
+          "\u0001\0\u0002\u001d\u0001\0\u0001\u001d\u0001\0\u0004\u001d\u0001\0\u0001\u001d" +
+          "\u0001\0\u0001\u001d\u0001\0\u0002\u001d\u0001\0\u0003\u001d\u0001\0\u0002\u001d" +
+          "\u0001\0\u0004\u001d\u0001\0\u0003\u001d\u0001\0\u000f\u001d\u0001\0\u0002\u001d" +
+          "\u0001\0\u0011\u001d\u0001\0\u0002\u001d\u0001\0\u0021\u001d\u0001\0\u0001\u001d" +
+          "\u0001\0\u0002\u001d\u0002\0\u0001\u001d\u0001\0\u0001\u001d\u0001\0\u0001\u001d" +
+          "\u0001\0\u0001\u001d\u000f\0\u0001\u001d\u0001\0\u0002\u001d\u0001\0\u0001\u001d" +
+          "\u0001\0\u0004\u001d\u0001\0\u0001\u001d\u0001\0\u0001\u001d\u0001\0\u0002\u001d" +
+          "\u0002\0\u0001\u001d\u0002\0\u0002\u001d\u0001\0\u0004\u001d\u0001\0\u0003\u001d" +
+          "\u0001\0\u000f\u001d\u0001\0\u0002\u001d\u0001\0\u0011\u001d\u0001\0\u0002\u001d" +
+          "\u0001\0\u0021\u001d\u0001\0\u0001\u001d\u0001\0\u0002\u001d\u0002\0\u0001\u001d" +
+          "\u0001\0\u0001\u001d\u0001\0\u0001\u001d\u0001\0\u0001\u001d\u001b\0\u0001\u001d" +
+          "\u000f\0\u0001\u001d\u0013\0\u0001\u001d\u001a\0\u0001\u001d\u0021\0\u0001\u001d" +
+          "\u0007\0\u0001\u001d\u0013\0\u0001\u001d\u0001\0\u0002\u001d\u0003\0\u0004\u001d" +
+          "\u0001\0\u0001\u001d\u0001\0\u0001\u001d\u0001\0\u0002\u001d\u0001\0\u0003\u001d" +
+          "\u0001\0\u0002\u001d\u0001\0\u0004\u001d\u0001\0\u0003\u001d\u0001\0\u0008\u001d" +
+          "\u0001\0\u0006\u001d\u0001\0\u0002\u001d\u0001\0\u0011\u001d\u0001\0\u0002\u001d" +
+          "\u0001\0\u0021\u001d\u0001\0\u0001\u001d\u0001\0\u0002\u001d\u0002\0\u0001\u001d" +
+          "\u0001\0\u0001\u001d\u0001\0\u0001\u001d\u0001\0\u0001\u001d\u0088\0\u0001\u001e" +
+          "\u000e\0\u0001\u0020\u0001\0\u0001\u0021\u0002\0\u0001\u0022\u0001\0\u0001\u0023" +
+          "\u0004\0\u0001\u0024\u0001\0\u0001\u0025\u0001\0\u0001\u0026\u0002\0\u0001\u0027" +
+          "\u0003\0\u0001\u0028\u0002\0\u0001\u0029\u0004\0\u0001\u002a\u0003\0\u0001\u002b" +
+          "\u000f\0\u0001\u002c\u0002\0\u0001\u002d\u0011\0\u0001\u002e\u0002\0\u0001\u002f" +
+          "\u002f\0\u0002\u0018\u0001\u0030\u0001\0\u0001\u0031\u0001\0\u0001\u0031\u0001\u0032" +
+          "\u0001\0\u0001\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0020\u0001\0\u0001\u0021" +
+          "\u0002\0\u0001\u0033\u0001\0\u0001\u0034\u0004\0\u0001\u0024\u0001\0\u0001\u0025" +
+          "\u0001\0\u0001\u0026\u0002\0\u0001\u0027\u0003\0\u0001\u0035\u0002\0\u0001\u0036" +
+          "\u0004\0\u0001\u0037\u0003\0\u0001\u0038\u000f\0\u0001\u002c\u0002\0\u0001\u0039" +
+          "\u0011\0\u0001\u003a\u0002\0\u0001\u003b\u002f\0\u0001\u0018\u0002\u0019\u0002\0" +
+          "\u0002\u003c\u0001\u003d\u0001\0\u0001\u0019\u0002\0\u0001\u0018\u0006\0\u0001\u003e" +
+          "\u0011\0\u0001\u003f\u0002\0\u0001\u0040\u0008\0\u0001\u0041\u0012\0\u0001\u0042" +
+          "\u0011\0\u0001\u0043\u0002\0\u0001\u0044\u0021\0\u0001\u0045\u000e\0\u0001\u001a" +
+          "\u0001\0\u0001\u001a\u0003\0\u0001\u0032\u0001\0\u0001\u001a\u0004\0\u0001\u0020" +
+          "\u0001\0\u0001\u0021\u0002\0\u0001\u0046\u0001\0\u0001\u0034\u0004\0\u0001\u0024" +
+          "\u0001\0\u0001\u0025\u0001\0\u0001\u0026\u0002\0\u0001\u0027\u0003\0\u0001\u0047" +
+          "\u0002\0\u0001\u0048\u0004\0\u0001\u0037\u0003\0\u0001\u0049\u000f\0\u0001\u002c" +
+          "\u0002\0\u0001\u004a\u0011\0\u0001\u004b\u0002\0\u0001\u004c\u0021\0\u0001\u004d" +
+          "\u000d\0\u0001\u0018\u0001\u004e\u0001\u0019\u0001\u004f\u0003\0\u0001\u004e\u0001\0" +
+          "\u0001\u004e\u0002\0\u0001\u0018\u0084\0\u0002\u001c\u0009\0\u0001\u0050\u0011\0" +
+          "\u0001\u0051\u0002\0\u0001\u0052\u0008\0\u0001\u0053\u0012\0\u0001\u0054\u0011\0" +
+          "\u0001\u0055\u0002\0\u0001\u0056\u0030\0\u0001\u001d\u0007\0\u0001\u001d\u0009\0" +
+          "\u0001\u0057\u0011\0\u0001\u0058\u0002\0\u0001\u0059\u0008\0\u0001\u005a\u0012\0" +
+          "\u0001\u005b\u0011\0\u0001\u005c\u0002\0\u0001\u005d\u0030\0\u0001\u001e\u0007\0" +
+          "\u0001\u001e\u0004\0\u0001\u0020\u0001\0\u0001\u0021\u0002\0\u0001\u005e\u0001\0" +
+          "\u0001\u0023\u0004\0\u0001\u0024\u0001\0\u0001\u0025\u0001\0\u0001\u0026\u0002\0" +
+          "\u0001\u0027\u0003\0\u0001\u005f\u0002\0\u0001\u0060\u0004\0\u0001\u002a\u0003\0" +
+          "\u0001\u0061\u000f\0\u0001\u002c\u0002\0\u0001\u0062\u0011\0\u0001\u0063\u0002\0" +
+          "\u0001\u0064\u002f\0\u0001\u0018\u0001\u001f\u0001\u0030\u0001\0\u0001\u0031\u0001\0" +
+          "\u0001\u0031\u0001\u0032\u0001\0\u0001\u001f\u0002\0\u0001\u001f\u0007\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u0009\0\u0001\u0018\u0012\0\u0001\u0018\u0003\0\u0001\u0018" +
+          "\u000b\0\u0001\u0018\u0002\0\u0001\u0018\u0008\0\u0001\u0018\u000a\0\u0004\u0018" +
+          "\u0025\0\u0001\u0018\u0014\0\u0001\u0018\u0003\0\u0004\u0018\u0001\0\u0001\u0018" +
+          "\u0001\0\u0001\u0030\u0002\0\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0002\u0018" +
+          "\u0002\0\u0003\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0004\u0018" +
+          "\u0001\0\u0003\u0018\u0001\0\u0001\u0018\u0001\0\u0003\u0018\u0001\0\u0002\u0018" +
+          "\u0001\0\u0004\u0018\u0001\0\u0002\u0018\u0002\0\u0008\u0018\u0001\0\u0002\u0018" +
+          "\u0001\0\u0009\u0018\u0001\0\u0008\u0018\u0001\0\u000b\u0018\u0001\u0030\u0001\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0003\0\u0001\u0018\u000f\0\u0001\u0018\u0016\0\u0002\u0018\u0013\0" +
+          "\u0001\u0030\u0001\u0018\u0024\0\u0001\u0018\u0011\0\u0001\u0030\u0026\0\u0001\u0030" +
+          "\u0009\0\u0001\u0018\u000d\0\u0004\u0018\u0002\0\u0002\u0018\u000c\0\u0004\u0018" +
+          "\u0001\0\u0002\u0018\u0009\0\u0003\u0018\u0003\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0004\0\u0003\u0018\u0005\0\u0004\u0018\u0002\0\u0002\u0018\u000a\0\u0004\u0030" +
+          "\u0001\0\u0002\u0018\u0001\0\u0001\u0018\u0007\0\u0001\u0018\u001f\0\u0001\u0018" +
+          "\u0003\0\u0002\u0018\u000a\0\u0002\u0018\u0001\0\u0003\u0018\u0007\0\u0001\u0018" +
+          "\u0006\0\u0002\u0018\u0001\0\u0002\u0018\u0006\0\u0001\u0018\u0004\0\u0002\u0018" +
+          "\u0002\0\u0002\u0018\u0005\0\u0003\u0018\u0008\0\u0001\u0018\u000e\0\u0001\u0018" +
+          "\u0004\0\u0002\u0030\u0001\0\u0001\u0018\u0007\0\u0001\u0018\u0013\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0006\0\u0001\u0018" +
+          "\u0005\0\u0001\u0018\u0002\0\u0002\u0018\u0001\0\u000f\u0018\u0002\0\u0001\u0018" +
+          "\u000b\0\u0007\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u0001\0\u0002\u0018\u0005\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0002\0\u0003\u0018\u0001\0\u0001\u0018\u0007\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0016\0\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0003\0\u0001\u0018" +
+          "\u0007\0\u0001\u0018\u0019\0\u0010\u0018\u0005\0\u0003\u0018\u0003\0\u0001\u0018" +
+          "\u0003\0\u0002\u0018\u0002\0\u0002\u0018\u0004\0\u0005\u0018\u0004\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u0002\0\u0001\u0018\u0004\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0001\0\u0001\u0018\u0057\0\u0002\u0018\u000d\0\u0004\u0018\u0030\0\u0001\u0018" +
+          "\u000d\0\u0002\u0018\u0008\0\u0002\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0009\0\u0001\u0018\u0009\0\u0002\u0018\u0006\0\u0001\u0018\u0002\0\u0004\u0018" +
+          "\u0003\0\u0001\u0018\u0002\0\u0002\u0018\u0001\0\u0003\u0018\u0005\0\u0001\u0018" +
+          "\u0001\0\u0002\u0018\u0002\0\u0002\u0018\u0001\0\u0004\u0018\u0005\0\u0001\u0018" +
+          "\u0001\0\u0002\u0018\u001f\0\u0001\u0020\u0001\0\u0001\u0021\u0002\0\u0001\u0065" +
+          "\u0001\0\u0001\u0023\u0004\0\u0001\u0024\u0001\0\u0001\u0025\u0001\0\u0001\u0026" +
+          "\u0002\0\u0001\u0027\u0003\0\u0001\u0066\u0002\0\u0001\u0067\u0004\0\u0001\u002a" +
+          "\u0003\0\u0001\u0068\u000f\0\u0001\u002c\u0002\0\u0001\u0069\u0011\0\u0001\u006a" +
+          "\u0002\0\u0001\u006b\u002f\0\u0001\u0018\u0002\u0030\u0002\0\u0002\u006c\u0001\u0032" +
+          "\u0001\0\u0001\u0030\u0002\0\u0001\u0018\u0001\0\u0001\u0020\u0001\0\u0001\u0021" +
+          "\u0002\0\u0001\u006d\u0001\0\u0001\u006e\u0004\0\u0001\u0024\u0001\0\u0001\u0025" +
+          "\u0001\0\u0001\u0026\u0002\0\u0001\u0027\u0003\0\u0001\u006f\u0002\0\u0001\u0070" +
+          "\u0004\0\u0001\u0071\u0003\0\u0001\u0072\u000f\0\u0001\u002c\u0002\0\u0001\u0073" +
+          "\u0011\0\u0001\u0074\u0002\0\u0001\u0075\u002f\0\u0001\u0018\u0001\u0031\u0007\0" +
+          "\u0001\u0031\u0002\0\u0001\u0018\u0001\0\u0001\u0020\u0001\0\u0001\u0021\u0002\0" +
+          "\u0001\u0076\u0001\0\u0001\u0023\u0004\0\u0001\u0024\u0001\0\u0001\u0025\u0001\0" +
+          "\u0001\u0026\u0002\0\u0001\u0027\u0003\0\u0001\u0077\u0002\0\u0001\u0078\u0004\0" +
+          "\u0001\u002a\u0003\0\u0001\u0079\u000f\0\u0001\u002c\u0002\0\u0001\u007a\u0011\0" +
+          "\u0001\u007b\u0002\0\u0001\u007c\u0021\0\u0001\u004d\u000d\0\u0001\u0018\u0001\u0032" +
+          "\u0001\u0030\u0001\u004f\u0003\0\u0001\u0032\u0001\0\u0001\u0032\u0002\0\u0001\u0018" +
+          "\u0007\0\u0001\u0018\u0004\0\u0001\u0018\u0009\0\u0001\u0018\u0012\0\u0001\u0018" +
+          "\u0003\0\u0001\u0018\u000b\0\u0001\u0019\u0002\0\u0001\u0019\u0008\0\u0001\u0018" +
+          "\u000a\0\u0004\u0019\u0025\0\u0001\u0018\u0011\0\u0001\u0018\u0016\0\u0002\u0018" +
+          "\u0013\0\u0001\u0019\u0001\u0018\u0024\0\u0001\u0019\u0011\0\u0001\u0019\u0026\0" +
+          "\u0001\u0019\u0009\0\u0001\u0019\u000d\0\u0004\u0018\u0002\0\u0002\u0018\u000c\0" +
+          "\u0003\u0018\u0001\u0019\u0001\0\u0002\u0019\u0009\0\u0003\u0018\u0003\0\u0001\u0018" +
+          "\u0001\0\u0001\u0019\u0004\0\u0001\u0019\u0002\u0018\u0005\0\u0004\u0019\u0002\0" +
+          "\u0001\u0018\u0001\u0019\u000a\0\u0004\u0019\u0001\0\u0002\u0018\u0001\0\u0001\u0019" +
+          "\u0007\0\u0001\u0018\u0013\0\u0001\u0018\u0004\0\u0001\u0018\u0006\0\u0001\u0018" +
+          "\u0003\0\u0001\u0018\u0006\0\u0001\u0018\u0005\0\u0001\u0018\u0002\0\u0002\u0018" +
+          "\u0001\0\u000f\u0018\u0002\0\u0001\u0018\u000b\0\u0007\u0018\u0002\0\u0001\u0018" +
+          "\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0004\0\u0001\u0019\u0001\0\u0002\u0018" +
+          "\u0005\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0003\u0018\u0001\0\u0001\u0018" +
+          "\u0007\0\u0001\u0018\u0001\0\u0001\u0018\u0016\0\u0001\u0018\u0006\0\u0001\u0018" +
+          "\u0003\0\u0001\u0018\u0003\0\u0001\u0018\u0007\0\u0001\u0018\u0019\0\u0010\u0018" +
+          "\u0005\0\u0003\u0018\u0003\0\u0001\u0018\u0003\0\u0002\u0018\u0002\0\u0002\u0018" +
+          "\u0004\0\u0001\u0018\u0004\u0019\u0004\0\u0001\u0018\u0004\0\u0001\u0018\u0002\0" +
+          "\u0001\u0018\u0004\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0057\0" +
+          "\u0002\u0019\u000d\0\u0004\u0019\u0030\0\u0001\u0019\u000d\0\u0002\u0019\u0008\0" +
+          "\u0002\u0019\u0001\0\u0001\u0019\u0001\0\u0001\u0019\u0009\0\u0001\u0019\u0009\0" +
+          "\u0002\u0019\u0006\0\u0001\u0019\u0002\0\u0004\u0019\u0003\0\u0001\u0019\u0002\0" +
+          "\u0002\u0019\u0001\0\u0003\u0019\u0005\0\u0001\u0019\u0001\0\u0002\u0019\u0002\0" +
+          "\u0002\u0019\u0001\0\u0004\u0019\u0005\0\u0001\u0019\u0001\0\u0002\u0019\u0024\0" +
+          "\u0001\u007d\u0001\0\u0001\u007e\u000f\0\u0001\u007f\u0002\0\u0001\u0080\u0004\0" +
+          "\u0001\u0081\u0003\0\u0001\u0082\u0012\0\u0001\u0083\u0011\0\u0001\u0084\u0002\0" +
+          "\u0001\u0085\u0030\0\u0001\u003c\u0001\u0019\u0006\0\u0001\u003c\u0004\0\u0001\u0020" +
+          "\u0001\0\u0001\u0021\u0002\0\u0001\u0086\u0001\0\u0001\u0034\u0004\0\u0001\u0024" +
+          "\u0001\0\u0001\u0025\u0001\0\u0001\u0026\u0002\0\u0001\u0027\u0003\0\u0001\u0087" +
+          "\u0002\0\u0001\u0088\u0004\0\u0001\u0037\u0003\0\u0001\u0089\u000f\0\u0001\u002c" +
+          "\u0002\0\u0001\u008a\u0011\0\u0001\u008b\u0002\0\u0001\u008c\u0021\0\u0001\u004d" +
+          "\u000d\0\u0001\u0018\u0001\u003d\u0001\u0019\u0001\u004f\u0003\0\u0001\u003d\u0001\0" +
+          "\u0001\u003d\u0002\0\u0001\u0018\u0039\0\u0001\u001a\u0002\0\u0001\u001a\u0013\0" +
+          "\u0004\u001a\u0089\0\u0001\u001a\u0042\0\u0001\u001a\u0024\0\u0001\u001a\u0001\0" +
+          "\u0002\u001a\u0011\0\u0001\u001a\u0004\0\u0001\u001a\u0007\0\u0004\u001a\u0003\0" +
+          "\u0001\u001a\u0012\0\u0001\u001a\u0076\0\u0001\u001a\u008d\0\u0004\u001a\u006d\0" +
+          "\u0002\u001a\u000d\0\u0004\u001a\u0030\0\u0001\u001a\u000d\0\u0002\u001a\u0008\0" +
+          "\u0002\u001a\u0001\0\u0001\u001a\u0001\0\u0001\u001a\u0009\0\u0001\u001a\u0009\0" +
+          "\u0002\u001a\u0006\0\u0001\u001a\u0002\0\u0004\u001a\u0003\0\u0001\u001a\u0002\0" +
+          "\u0002\u001a\u0001\0\u0003\u001a\u0005\0\u0001\u001a\u0001\0\u0002\u001a\u0002\0" +
+          "\u0002\u001a\u0001\0\u0004\u001a\u0005\0\u0001\u001a\u0001\0\u0002\u001a\u008d\0" +
+          "\u0001\u001a\u0020\0\u0001\u0018\u0004\0\u0001\u0018\u0009\0\u0001\u0018\u0012\0" +
+          "\u0001\u0018\u0003\0\u0001\u0018\u000b\0\u0001\u004e\u0002\0\u0001\u004e\u0008\0" +
+          "\u0001\u0018\u000a\0\u0004\u004e\u0025\0\u0001\u0018\u0011\0\u0001\u0018\u0016\0" +
+          "\u0002\u0018\u0013\0\u0001\u0019\u0001\u0018\u0024\0\u0001\u004e\u0011\0\u0001\u0019" +
+          "\u0026\0\u0001\u0019\u0009\0\u0001\u004e\u000d\0\u0004\u0018\u0002\0\u0002\u0018" +
+          "\u000c\0\u0003\u0018\u0001\u004e\u0001\0\u0002\u004e\u0009\0\u0003\u0018\u0003\0" +
+          "\u0001\u0018\u0001\0\u0001\u004e\u0004\0\u0001\u004e\u0002\u0018\u0005\0\u0004\u004e" +
+          "\u0002\0\u0001\u0018\u0001\u004e\u000a\0\u0004\u0019\u0001\0\u0002\u0018\u0001\0" +
+          "\u0001\u004e\u0007\0\u0001\u0018\u0013\0\u0001\u0018\u0004\0\u0001\u0018\u0006\0" +
+          "\u0001\u0018\u0003\0\u0001\u0018\u0006\0\u0001\u0018\u0005\0\u0001\u0018\u0002\0" +
+          "\u0002\u0018\u0001\0\u000f\u0018\u0002\0\u0001\u0018\u000b\0\u0007\u0018\u0002\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0004\0\u0001\u004e\u0001\0" +
+          "\u0002\u0018\u0005\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0003\u0018\u0001\0" +
+          "\u0001\u0018\u0007\0\u0001\u0018\u0001\0\u0001\u0018\u0016\0\u0001\u0018\u0006\0" +
+          "\u0001\u0018\u0003\0\u0001\u0018\u0003\0\u0001\u0018\u0007\0\u0001\u0018\u0019\0" +
+          "\u0010\u0018\u0005\0\u0003\u0018\u0003\0\u0001\u0018\u0003\0\u0002\u0018\u0002\0" +
+          "\u0002\u0018\u0004\0\u0001\u0018\u0004\u004e\u0004\0\u0001\u0018\u0004\0\u0001\u0018" +
+          "\u0002\0\u0001\u0018\u0004\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0057\0\u0002\u004e\u000d\0\u0004\u004e\u0030\0\u0001\u004e\u000d\0\u0002\u004e" +
+          "\u0008\0\u0002\u004e\u0001\0\u0001\u004e\u0001\0\u0001\u004e\u0009\0\u0001\u004e" +
+          "\u0009\0\u0002\u004e\u0006\0\u0001\u004e\u0002\0\u0004\u004e\u0003\0\u0001\u004e" +
+          "\u0002\0\u0002\u004e\u0001\0\u0003\u004e\u0005\0\u0001\u004e\u0001\0\u0002\u004e" +
+          "\u0002\0\u0002\u004e\u0001\0\u0004\u004e\u0005\0\u0001\u004e\u0001\0\u0002\u004e" +
+          "\u008d\0\u0001\u004f\u001f\0\u0001\u008d\u0011\0\u0001\u008e\u0002\0\u0001\u008f" +
+          "\u0008\0\u0001\u0090\u0012\0\u0001\u0091\u0011\0\u0001\u0092\u0002\0\u0001\u0093" +
+          "\u0021\0\u0001\u004d\u000e\0\u0001\u004f\u0001\0\u0001\u004f\u0003\0\u0001\u0032" +
+          "\u0001\0\u0001\u004f\u003c\0\u0001\u001d\u0002\0\u0001\u001d\u0013\0\u0004\u001d" +
+          "\u0089\0\u0001\u001d\u0042\0\u0001\u001d\u0024\0\u0001\u001d\u0001\0\u0002\u001d" +
+          "\u0011\0\u0001\u001d\u0004\0\u0001\u001d\u0007\0\u0004\u001d\u0003\0\u0001\u001d" +
+          "\u0012\0\u0001\u001d\u0076\0\u0001\u001d\u008d\0\u0004\u001d\u006d\0\u0002\u001d" +
+          "\u000d\0\u0004\u001d\u0030\0\u0001\u001d\u000d\0\u0002\u001d\u0008\0\u0002\u001d" +
+          "\u0001\0\u0001\u001d\u0001\0\u0001\u001d\u0009\0\u0001\u001d\u0009\0\u0002\u001d" +
+          "\u0006\0\u0001\u001d\u0002\0\u0004\u001d\u0003\0\u0001\u001d\u0002\0\u0002\u001d" +
+          "\u0001\0\u0003\u001d\u0005\0\u0001\u001d\u0001\0\u0002\u001d\u0002\0\u0002\u001d" +
+          "\u0001\0\u0004\u001d\u0005\0\u0001\u001d\u0001\0\u0002\u001d\u0057\0\u0001\u001e" +
+          "\u0002\0\u0001\u001e\u0013\0\u0004\u001e\u0089\0\u0001\u001e\u0042\0\u0001\u001e" +
+          "\u0024\0\u0001\u001e\u0001\0\u0002\u001e\u0011\0\u0001\u001e\u0004\0\u0001\u001e" +
+          "\u0007\0\u0004\u001e\u0003\0\u0001\u001e\u0012\0\u0001\u001e\u0076\0\u0001\u001e" +
+          "\u008d\0\u0004\u001e\u006d\0\u0002\u001e\u000d\0\u0004\u001e\u0030\0\u0001\u001e" +
+          "\u000d\0\u0002\u001e\u0008\0\u0002\u001e\u0001\0\u0001\u001e\u0001\0\u0001\u001e" +
+          "\u0009\0\u0001\u001e\u0009\0\u0002\u001e\u0006\0\u0001\u001e\u0002\0\u0004\u001e" +
+          "\u0003\0\u0001\u001e\u0002\0\u0002\u001e\u0001\0\u0003\u001e\u0005\0\u0001\u001e" +
+          "\u0001\0\u0002\u001e\u0002\0\u0002\u001e\u0001\0\u0004\u001e\u0005\0\u0001\u001e" +
+          "\u0001\0\u0002\u001e\u0025\0\u0001\u0018\u0004\0\u0001\u0018\u0009\0\u0001\u0018" +
+          "\u0012\0\u0001\u0018\u0003\0\u0001\u0018\u000b\0\u0001\u001f\u0002\0\u0001\u001f" +
+          "\u0008\0\u0001\u0018\u000a\0\u0004\u001f\u0025\0\u0001\u0018\u0011\0\u0001\u0018" +
+          "\u0016\0\u0002\u0018\u0013\0\u0001\u0030\u0001\u0018\u0024\0\u0001\u001f\u0011\0" +
+          "\u0001\u0030\u0026\0\u0001\u0030\u0009\0\u0001\u001f\u000d\0\u0004\u0018\u0002\0" +
+          "\u0002\u0018\u000c\0\u0003\u0018\u0001\u001f\u0001\0\u0002\u001f\u0009\0\u0003\u0018" +
+          "\u0003\0\u0001\u0018\u0001\0\u0001\u001f\u0004\0\u0001\u001f\u0002\u0018\u0005\0" +
+          "\u0004\u001f\u0002\0\u0001\u0018\u0001\u001f\u000a\0\u0004\u0030\u0001\0\u0002\u0018" +
+          "\u0001\0\u0001\u001f\u0007\0\u0001\u0018\u0013\0\u0001\u0018\u0004\0\u0001\u0018" +
+          "\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0006\0\u0001\u0018\u0005\0\u0001\u0018" +
+          "\u0002\0\u0002\u0018\u0001\0\u000f\u0018\u0002\0\u0001\u0018\u000b\0\u0007\u0018" +
+          "\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0001\u0018" +
+          "\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0004\0\u0001\u001f" +
+          "\u0001\0\u0002\u0018\u0005\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0003\u0018" +
+          "\u0001\0\u0001\u0018\u0007\0\u0001\u0018\u0001\0\u0001\u0018\u0016\0\u0001\u0018" +
+          "\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0003\0\u0001\u0018\u0007\0\u0001\u0018" +
+          "\u0019\0\u0010\u0018\u0005\0\u0003\u0018\u0003\0\u0001\u0018\u0003\0\u0002\u0018" +
+          "\u0002\0\u0002\u0018\u0004\0\u0001\u0018\u0004\u001f\u0004\0\u0001\u0018\u0004\0" +
+          "\u0001\u0018\u0002\0\u0001\u0018\u0004\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0057\0\u0002\u001f\u000d\0\u0004\u001f\u0030\0\u0001\u001f\u000d\0" +
+          "\u0002\u001f\u0008\0\u0002\u001f\u0001\0\u0001\u001f\u0001\0\u0001\u001f\u0009\0" +
+          "\u0001\u001f\u0009\0\u0002\u001f\u0006\0\u0001\u001f\u0002\0\u0004\u001f\u0003\0" +
+          "\u0001\u001f\u0002\0\u0002\u001f\u0001\0\u0003\u001f\u0005\0\u0001\u001f\u0001\0" +
+          "\u0002\u001f\u0002\0\u0002\u001f\u0001\0\u0004\u001f\u0005\0\u0001\u001f\u0001\0" +
+          "\u0002\u001f\u0025\0\u0001\u0018\u0004\0\u0001\u0018\u0009\0\u0001\u0018\u0012\0" +
+          "\u0001\u0018\u0003\0\u0001\u0018\u000b\0\u0001\u0030\u0002\0\u0001\u0030\u0008\0" +
+          "\u0001\u0018\u000a\0\u0004\u0030\u0025\0\u0001\u0018\u0011\0\u0001\u0018\u0016\0" +
+          "\u0002\u0018\u0013\0\u0001\u0030\u0001\u0018\u0024\0\u0001\u0030\u0011\0\u0001\u0030" +
+          "\u0026\0\u0001\u0030\u0009\0\u0001\u0030\u000d\0\u0004\u0018\u0002\0\u0002\u0018" +
+          "\u000c\0\u0003\u0018\u0001\u0030\u0001\0\u0002\u0030\u0009\0\u0003\u0018\u0003\0" +
+          "\u0001\u0018\u0001\0\u0001\u0030\u0004\0\u0001\u0030\u0002\u0018\u0005\0\u0004\u0030" +
+          "\u0002\0\u0001\u0018\u0001\u0030\u000a\0\u0004\u0030\u0001\0\u0002\u0018\u0001\0" +
+          "\u0001\u0030\u0007\0\u0001\u0018\u0013\0\u0001\u0018\u0004\0\u0001\u0018\u0006\0" +
+          "\u0001\u0018\u0003\0\u0001\u0018\u0006\0\u0001\u0018\u0005\0\u0001\u0018\u0002\0" +
+          "\u0002\u0018\u0001\0\u000f\u0018\u0002\0\u0001\u0018\u000b\0\u0007\u0018\u0002\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0004\0\u0001\u0030\u0001\0" +
+          "\u0002\u0018\u0005\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0003\u0018\u0001\0" +
+          "\u0001\u0018\u0007\0\u0001\u0018\u0001\0\u0001\u0018\u0016\0\u0001\u0018\u0006\0" +
+          "\u0001\u0018\u0003\0\u0001\u0018\u0003\0\u0001\u0018\u0007\0\u0001\u0018\u0019\0" +
+          "\u0010\u0018\u0005\0\u0003\u0018\u0003\0\u0001\u0018\u0003\0\u0002\u0018\u0002\0" +
+          "\u0002\u0018\u0004\0\u0001\u0018\u0004\u0030\u0004\0\u0001\u0018\u0004\0\u0001\u0018" +
+          "\u0002\0\u0001\u0018\u0004\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0057\0\u0002\u0030\u000d\0\u0004\u0030\u0030\0\u0001\u0030\u000d\0\u0002\u0030" +
+          "\u0008\0\u0002\u0030\u0001\0\u0001\u0030\u0001\0\u0001\u0030\u0009\0\u0001\u0030" +
+          "\u0009\0\u0002\u0030\u0006\0\u0001\u0030\u0002\0\u0004\u0030\u0003\0\u0001\u0030" +
+          "\u0002\0\u0002\u0030\u0001\0\u0003\u0030\u0005\0\u0001\u0030\u0001\0\u0002\u0030" +
+          "\u0002\0\u0002\u0030\u0001\0\u0004\u0030\u0005\0\u0001\u0030\u0001\0\u0002\u0030" +
+          "\u0024\0\u0001\u0094\u0001\0\u0001\u0095\u000f\0\u0001\u0096\u0002\0\u0001\u0097" +
+          "\u0004\0\u0001\u0098\u0003\0\u0001\u0099\u0012\0\u0001\u009a\u0011\0\u0001\u009b" +
+          "\u0002\0\u0001\u009c\u0030\0\u0001\u006c\u0001\u0030\u0006\0\u0001\u006c\u000a\0" +
+          "\u0001\u0018\u0004\0\u0001\u0018\u0009\0\u0001\u0018\u0012\0\u0001\u0018\u0003\0" +
+          "\u0001\u0018\u000b\0\u0001\u0031\u0002\0\u0001\u0031\u0008\0\u0001\u0018\u000a\0" +
+          "\u0004\u0031\u0025\0\u0001\u0018\u0014\0\u0001\u0018\u0003\0\u0004\u0018\u0001\0" +
+          "\u0001\u0018\u0004\0\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0002\u0018\u0002\0" +
+          "\u0003\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0\u0004\u0018\u0001\0" +
+          "\u0003\u0018\u0001\0\u0001\u0018\u0001\0\u0003\u0018\u0001\0\u0002\u0018\u0001\0" +
+          "\u0004\u0018\u0001\0\u0002\u0018\u0002\0\u0008\u0018\u0001\0\u0002\u0018\u0001\0" +
+          "\u0009\u0018\u0001\0\u0008\u0018\u0001\0\u000b\u0018\u0002\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0002\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0003\0" +
+          "\u0001\u0018\u000f\0\u0001\u0018\u0016\0\u0002\u0018\u0014\0\u0001\u0018\u0024\0" +
+          "\u0001\u0031\u0042\0\u0001\u0031\u000d\0\u0004\u0018\u0002\0\u0002\u0018\u000c\0" +
+          "\u0003\u0018\u0001\u0031\u0001\0\u0002\u0031\u0009\0\u0003\u0018\u0003\0\u0001\u0018" +
+          "\u0001\0\u0001\u0031\u0004\0\u0001\u0031\u0002\u0018\u0005\0\u0004\u0031\u0002\0" +
+          "\u0001\u0018\u0001\u0031\u000f\0\u0002\u0018\u0001\0\u0001\u0031\u0007\0\u0001\u0018" +
+          "\u001f\0\u0001\u0018\u0003\0\u0002\u0018\u000a\0\u0002\u0018\u0001\0\u0003\u0018" +
+          "\u0007\0\u0001\u0018\u0006\0\u0002\u0018\u0001\0\u0002\u0018\u0006\0\u0001\u0018" +
+          "\u0004\0\u0002\u0018\u0002\0\u0002\u0018\u0005\0\u0003\u0018\u0008\0\u0001\u0018" +
+          "\u000e\0\u0001\u0018\u0007\0\u0001\u0018\u0007\0\u0001\u0018\u0013\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0006\0\u0001\u0018" +
+          "\u0005\0\u0001\u0018\u0002\0\u0002\u0018\u0001\0\u000f\u0018\u0002\0\u0001\u0018" +
+          "\u000b\0\u0007\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0004\0\u0001\u0031\u0001\0\u0002\u0018\u0005\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0002\0\u0003\u0018\u0001\0\u0001\u0018\u0007\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0016\0\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0003\0\u0001\u0018" +
+          "\u0007\0\u0001\u0018\u0019\0\u0010\u0018\u0005\0\u0003\u0018\u0003\0\u0001\u0018" +
+          "\u0003\0\u0002\u0018\u0002\0\u0002\u0018\u0004\0\u0001\u0018\u0004\u0031\u0004\0" +
+          "\u0001\u0018\u0004\0\u0001\u0018\u0002\0\u0001\u0018\u0004\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0057\0\u0002\u0031\u000d\0\u0004\u0031\u0030\0" +
+          "\u0001\u0031\u000d\0\u0002\u0031\u0008\0\u0002\u0031\u0001\0\u0001\u0031\u0001\0" +
+          "\u0001\u0031\u0009\0\u0001\u0031\u0009\0\u0002\u0031\u0006\0\u0001\u0031\u0002\0" +
+          "\u0004\u0031\u0003\0\u0001\u0031\u0002\0\u0002\u0031\u0001\0\u0003\u0031\u0005\0" +
+          "\u0001\u0031\u0001\0\u0002\u0031\u0002\0\u0002\u0031\u0001\0\u0004\u0031\u0005\0" +
+          "\u0001\u0031\u0001\0\u0002\u0031\u0025\0\u0001\u0018\u0004\0\u0001\u0018\u0009\0" +
+          "\u0001\u0018\u0012\0\u0001\u0018\u0003\0\u0001\u0018\u000b\0\u0001\u0032\u0002\0" +
+          "\u0001\u0032\u0008\0\u0001\u0018\u000a\0\u0004\u0032\u0025\0\u0001\u0018\u0011\0" +
+          "\u0001\u0018\u0016\0\u0002\u0018\u0013\0\u0001\u0030\u0001\u0018\u0024\0\u0001\u0032" +
+          "\u0011\0\u0001\u0030\u0026\0\u0001\u0030\u0009\0\u0001\u0032\u000d\0\u0004\u0018" +
+          "\u0002\0\u0002\u0018\u000c\0\u0003\u0018\u0001\u0032\u0001\0\u0002\u0032\u0009\0" +
+          "\u0003\u0018\u0003\0\u0001\u0018\u0001\0\u0001\u0032\u0004\0\u0001\u0032\u0002\u0018" +
+          "\u0005\0\u0004\u0032\u0002\0\u0001\u0018\u0001\u0032\u000a\0\u0004\u0030\u0001\0" +
+          "\u0002\u0018\u0001\0\u0001\u0032\u0007\0\u0001\u0018\u0013\0\u0001\u0018\u0004\0" +
+          "\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0006\0\u0001\u0018\u0005\0" +
+          "\u0001\u0018\u0002\0\u0002\u0018\u0001\0\u000f\u0018\u0002\0\u0001\u0018\u000b\0" +
+          "\u0007\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0004\0" +
+          "\u0001\u0032\u0001\0\u0002\u0018\u0005\0\u0001\u0018\u0001\0\u0001\u0018\u0002\0" +
+          "\u0003\u0018\u0001\0\u0001\u0018\u0007\0\u0001\u0018\u0001\0\u0001\u0018\u0016\0" +
+          "\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0003\0\u0001\u0018\u0007\0" +
+          "\u0001\u0018\u0019\0\u0010\u0018\u0005\0\u0003\u0018\u0003\0\u0001\u0018\u0003\0" +
+          "\u0002\u0018\u0002\0\u0002\u0018\u0004\0\u0001\u0018\u0004\u0032\u0004\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u0002\0\u0001\u0018\u0004\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0001\0\u0001\u0018\u0057\0\u0002\u0032\u000d\0\u0004\u0032\u0030\0\u0001\u0032" +
+          "\u000d\0\u0002\u0032\u0008\0\u0002\u0032\u0001\0\u0001\u0032\u0001\0\u0001\u0032" +
+          "\u0009\0\u0001\u0032\u0009\0\u0002\u0032\u0006\0\u0001\u0032\u0002\0\u0004\u0032" +
+          "\u0003\0\u0001\u0032\u0002\0\u0002\u0032\u0001\0\u0003\u0032\u0005\0\u0001\u0032" +
+          "\u0001\0\u0002\u0032\u0002\0\u0002\u0032\u0001\0\u0004\u0032\u0005\0\u0001\u0032" +
+          "\u0001\0\u0002\u0032\u0057\0\u0001\u003c\u0002\0\u0001\u003c\u0013\0\u0004\u003c" +
+          "\u0045\0\u0001\u0019\u005a\0\u0001\u0019\u004b\0\u0001\u0019\u0025\0\u0001\u003c" +
+          "\u0011\0\u0001\u0019\u0026\0\u0001\u0019\u0009\0\u0001\u003c\u0024\0\u0001\u003c" +
+          "\u0001\0\u0002\u003c\u0011\0\u0001\u003c\u0004\0\u0001\u003c\u0007\0\u0004\u003c" +
+          "\u0003\0\u0001\u003c\u000a\0\u0004\u0019\u0004\0\u0001\u003c\u0085\0\u0002\u0019" +
+          "\u0078\0\u0001\u003c\u008d\0\u0004\u003c\u006d\0\u0002\u003c\u000d\0\u0004\u003c" +
+          "\u0030\0\u0001\u003c\u000d\0\u0002\u003c\u0008\0\u0002\u003c\u0001\0\u0001\u003c" +
+          "\u0001\0\u0001\u003c\u0009\0\u0001\u003c\u0009\0\u0002\u003c\u0006\0\u0001\u003c" +
+          "\u0002\0\u0004\u003c\u0003\0\u0001\u003c\u0002\0\u0002\u003c\u0001\0\u0003\u003c" +
+          "\u0005\0\u0001\u003c\u0001\0\u0002\u003c\u0002\0\u0002\u003c\u0001\0\u0004\u003c" +
+          "\u0005\0\u0001\u003c\u0001\0\u0002\u003c\u0025\0\u0001\u0018\u0004\0\u0001\u0018" +
+          "\u0009\0\u0001\u0018\u0012\0\u0001\u0018\u0003\0\u0001\u0018\u000b\0\u0001\u003d" +
+          "\u0002\0\u0001\u003d\u0008\0\u0001\u0018\u000a\0\u0004\u003d\u0025\0\u0001\u0018" +
+          "\u0011\0\u0001\u0018\u0016\0\u0002\u0018\u0013\0\u0001\u0019\u0001\u0018\u0024\0" +
+          "\u0001\u003d\u0011\0\u0001\u0019\u0026\0\u0001\u0019\u0009\0\u0001\u003d\u000d\0" +
+          "\u0004\u0018\u0002\0\u0002\u0018\u000c\0\u0003\u0018\u0001\u003d\u0001\0\u0002\u003d" +
+          "\u0009\0\u0003\u0018\u0003\0\u0001\u0018\u0001\0\u0001\u003d\u0004\0\u0001\u003d" +
+          "\u0002\u0018\u0005\0\u0004\u003d\u0002\0\u0001\u0018\u0001\u003d\u000a\0\u0004\u0019" +
+          "\u0001\0\u0002\u0018\u0001\0\u0001\u003d\u0007\0\u0001\u0018\u0013\0\u0001\u0018" +
+          "\u0004\0\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0006\0\u0001\u0018" +
+          "\u0005\0\u0001\u0018\u0002\0\u0002\u0018\u0001\0\u000f\u0018\u0002\0\u0001\u0018" +
+          "\u000b\0\u0007\u0018\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0002\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0004\0\u0001\u003d\u0001\0\u0002\u0018\u0005\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0002\0\u0003\u0018\u0001\0\u0001\u0018\u0007\0\u0001\u0018\u0001\0\u0001\u0018" +
+          "\u0016\0\u0001\u0018\u0006\0\u0001\u0018\u0003\0\u0001\u0018\u0003\0\u0001\u0018" +
+          "\u0007\0\u0001\u0018\u0019\0\u0010\u0018\u0005\0\u0003\u0018\u0003\0\u0001\u0018" +
+          "\u0003\0\u0002\u0018\u0002\0\u0002\u0018\u0004\0\u0001\u0018\u0004\u003d\u0004\0" +
+          "\u0001\u0018\u0004\0\u0001\u0018\u0002\0\u0001\u0018\u0004\0\u0001\u0018\u0001\0" +
+          "\u0001\u0018\u0001\0\u0001\u0018\u0057\0\u0002\u003d\u000d\0\u0004\u003d\u0030\0" +
+          "\u0001\u003d\u000d\0\u0002\u003d\u0008\0\u0002\u003d\u0001\0\u0001\u003d\u0001\0" +
+          "\u0001\u003d\u0009\0\u0001\u003d\u0009\0\u0002\u003d\u0006\0\u0001\u003d\u0002\0" +
+          "\u0004\u003d\u0003\0\u0001\u003d\u0002\0\u0002\u003d\u0001\0\u0003\u003d\u0005\0" +
+          "\u0001\u003d\u0001\0\u0002\u003d\u0002\0\u0002\u003d\u0001\0\u0004\u003d\u0005\0" +
+          "\u0001\u003d\u0001\0\u0002\u003d\u0057\0\u0001\u004f\u0002\0\u0001\u004f\u0013\0" +
+          "\u0004\u004f\u0089\0\u0001\u004f\u0042\0\u0001\u004f\u0024\0\u0001\u004f\u0001\0" +
+          "\u0002\u004f\u0011\0\u0001\u004f\u0004\0\u0001\u004f\u0007\0\u0004\u004f\u0003\0" +
+          "\u0001\u004f\u0012\0\u0001\u004f\u0076\0\u0001\u004f\u008d\0\u0004\u004f\u006d\0" +
+          "\u0002\u004f\u000d\0\u0004\u004f\u0030\0\u0001\u004f\u000d\0\u0002\u004f\u0008\0" +
+          "\u0002\u004f\u0001\0\u0001\u004f\u0001\0\u0001\u004f\u0009\0\u0001\u004f\u0009\0" +
+          "\u0002\u004f\u0006\0\u0001\u004f\u0002\0\u0004\u004f\u0003\0\u0001\u004f\u0002\0" +
+          "\u0002\u004f\u0001\0\u0003\u004f\u0005\0\u0001\u004f\u0001\0\u0002\u004f\u0002\0" +
+          "\u0002\u004f\u0001\0\u0004\u004f\u0005\0\u0001\u004f\u0001\0\u0002\u004f\u0057\0" +
+          "\u0001\u006c\u0002\0\u0001\u006c\u0013\0\u0004\u006c\u0045\0\u0001\u0030\u005a\0" +
+          "\u0001\u0030\u004b\0\u0001\u0030\u0025\0\u0001\u006c\u0011\0\u0001\u0030\u0026\0" +
+          "\u0001\u0030\u0009\0\u0001\u006c\u0024\0\u0001\u006c\u0001\0\u0002\u006c\u0011\0" +
+          "\u0001\u006c\u0004\0\u0001\u006c\u0007\0\u0004\u006c\u0003\0\u0001\u006c\u000a\0" +
+          "\u0004\u0030\u0004\0\u0001\u006c\u0085\0\u0002\u0030\u0078\0\u0001\u006c\u008d\0" +
+          "\u0004\u006c\u006d\0\u0002\u006c\u000d\0\u0004\u006c\u0030\0\u0001\u006c\u000d\0" +
+          "\u0002\u006c\u0008\0\u0002\u006c\u0001\0\u0001\u006c\u0001\0\u0001\u006c\u0009\0" +
+          "\u0001\u006c\u0009\0\u0002\u006c\u0006\0\u0001\u006c\u0002\0\u0004\u006c\u0003\0" +
+          "\u0001\u006c\u0002\0\u0002\u006c\u0001\0\u0003\u006c\u0005\0\u0001\u006c\u0001\0" +
+          "\u0002\u006c\u0002\0\u0002\u006c\u0001\0\u0004\u006c\u0005\0\u0001\u006c\u0001\0" +
+          "\u0002\u006c\u001e\0";
+
+        private static int[] zzUnpackTrans()
+        {
+            int[] result = new int[20002];
+            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[i++];
+                int value = packed[i++];
+                value--;
+                do result[j++] = value; while (--count > 0);
+            }
+            return j;
+        }
+
+
+        /* error codes */
+        private const int ZZ_UNKNOWN_ERROR = 0;
+        private const int ZZ_NO_MATCH = 1;
+        private const int ZZ_PUSHBACK_2BIG = 2;
+
+        /* error messages for the codes above */
+        private static readonly String[] ZZ_ERROR_MSG = {
+    "Unkown internal scanner error",
+    "Error: could not match input",
+    "Error: pushback value was too large"
+  };
+
+        /**
+         * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+         */
+        private static readonly int[] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+        private const String ZZ_ATTRIBUTE_PACKED_0 =
+          "\u0001\0\u0001\u0009\u001d\u0001\u0010\0\u0001\u0001\u0001\0\u0001\u0001\u000a\0" +
+          "\u0001\u0001\u0011\0\u0001\u0001\u004d\0";
+
+        private static int[] zzUnpackAttribute()
+        {
+            int[] result = new int[156];
+            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[i++];
+                int value = packed[i++];
+                do result[j++] = value; while (--count > 0);
+            }
+            return j;
+        }
+
+        /** the input device */
+        private TextReader 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 bool zzAtBOL = true;
+
+        /** zzAtEOF == true <=> the scanner is at the EOF */
+        private bool zzAtEOF;
+
+        /** denotes if the user-EOF-code has already been executed */
+        private bool zzEOFDone;
+
+        /* user code: */
+        /** Alphanumeric sequences */
+        public const int WORD_TYPE = StandardTokenizer.ALPHANUM;
+
+        /** Numbers */
+        public const int NUMERIC_TYPE = StandardTokenizer.NUM;
+
+        /**
+         * Chars in class \p{Line_Break = Complex_Context} are from South East Asian
+         * scripts (Thai, Lao, Myanmar, Khmer, etc.).  Sequences of these are kept 
+         * together as as a single token rather than broken up, because the logic
+         * required to break them at word boundaries is too complex for UAX#29.
+         * <p>
+         * See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA
+         */
+        public const int SOUTH_EAST_ASIAN_TYPE = StandardTokenizer.SOUTHEAST_ASIAN;
+
+        public const int IDEOGRAPHIC_TYPE = StandardTokenizer.IDEOGRAPHIC;
+
+        public const int HIRAGANA_TYPE = StandardTokenizer.HIRAGANA;
+
+        public const int KATAKANA_TYPE = StandardTokenizer.KATAKANA;
+
+        public const int HANGUL_TYPE = StandardTokenizer.HANGUL;
+
+        public int YYChar
+        {
+            get { return yychar; }
+        }
+
+        /**
+         * Fills CharTermAttribute with the current token text.
+         */
+        public void GetText(ICharTermAttribute t)
+        {
+            t.CopyBuffer(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);
+        }
+
+
+        /**
+         * Creates a new scanner
+         * There is also a java.io.InputStream version of this constructor.
+         *
+         * @param   in  the TextReader to read input from.
+         */
+        public StandardTokenizerImpl(TextReader input)
+        {
+            this.zzReader = input;
+        }
+
+
+
+        /** 
+         * Unpacks the compressed character translation table.
+         *
+         * @param packed   the packed character translation table
+         * @return         the unpacked character translation table
+         */
+        private static char[] zzUnpackCMap(String packed)
+        {
+            char[] map = new char[0x10000];
+            int i = 0;  /* index in packed string  */
+            int j = 0;  /* index in unpacked array */
+            while (i < 2848)
+            {
+                int count = packed[i++];
+                char value = packed[i++];
+                do map[j++] = value; while (--count > 0);
+            }
+            return map;
+        }
+
+
+        /**
+         * Refills the input buffer.
+         *
+         * @return      <code>false</code>, iff there was new input.
+         * 
+         * @exception   java.io.IOException  if any I/O-Error occurs
+         */
+        private bool zzRefill()
+        {
+
+            /* first: make room (if you can) */
+            if (zzStartRead > 0)
+            {
+                Array.Copy(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)
+            {
+                /* if not: blow it up */
+                char[] newBuffer = new char[zzCurrentPos * 2];
+                Array.Copy(zzBuffer, 0, newBuffer, 0, zzBuffer.Length);
+                zzBuffer = newBuffer;
+            }
+
+            /* finally: fill the buffer with new input */
+            int numRead = zzReader.Read(zzBuffer, zzEndRead,
+                                                    zzBuffer.Length - zzEndRead);
+
+            if (numRead > 0)
+            {
+                zzEndRead += numRead;
+                return false;
+            }
+            // unlikely but not impossible: read 0 characters, but not at end of stream    
+            if (numRead == 0)
+            {
+                int c = zzReader.Read();
+                if (c <= 0)
+                {
+                    return true;
+                }
+                else
+                {
+                    zzBuffer[zzEndRead++] = (char)c;
+                    return false;
+                }
+            }
+
+            // numRead < 0
+            return true;
+        }
+
+
+        /**
+         * Closes the input stream.
+         */
+        public void yyclose()
+        {
+            zzAtEOF = true;            /* indicate end of file */
+            zzEndRead = zzStartRead;  /* invalidate buffer    */
+
+            if (zzReader != null)
+                zzReader.Close();
+        }
+
+
+        /**
+         * Resets the scanner to read from a new input stream.
+         * Does not close the old reader.
+         *
+         * All internal variables are reset, the old input stream 
+         * <b>cannot</b> be reused (internal buffer is discarded and lost).
+         * Lexical state is set to <tt>ZZ_INITIAL</tt>.
+         *
+         * Internal scan buffer is resized down to its initial length, if it has grown.
+         *
+         * @param reader   the new input stream 
+         */
+
+        public void YYReset(TextReader reader)
+        {
+            zzReader = reader;
+            zzAtBOL = true;
+            zzAtEOF = false;
+            zzEOFDone = false;
+            zzEndRead = zzStartRead = 0;
+            zzCurrentPos = zzMarkedPos = 0;
+            yyline = yychar = yycolumn = 0;
+            zzLexicalState = YYINITIAL;
+            if (zzBuffer.Length > ZZ_BUFFERSIZE)
+                zzBuffer = new char[ZZ_BUFFERSIZE];
+        }
+
+
+        /**
+         * Returns the current lexical state.
+         */
+        public int yystate()
+        {
+            return zzLexicalState;
+        }
+
+
+        /**
+         * Enters a new lexical state
+         *
+         * @param newState the new lexical state
+         */
+        public void yybegin(int newState)
+        {
+            zzLexicalState = newState;
+        }
+
+
+        /**
+         * Returns the text matched by the current regular expression.
+         */
+        public String yytext()
+        {
+            return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);
+        }
+
+
+        /**
+         * Returns the character at position <tt>pos</tt> from the 
+         * matched text. 
+         * 
+         * It is equivalent to yytext().charAt(pos), but faster
+         *
+         * @param pos the position of the character to fetch. 
+         *            A value from 0 to yylength()-1.
+         *
+         * @return the character at position pos
+         */
+        public char yycharat(int pos)
+        {
+            return zzBuffer[zzStartRead + pos];
+        }
+
+
+        /**
+         * Returns the length of the matched text region.
+         */
+
+        public int YYLength
+        {
+            get
+            {
+                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 (IndexOutOfRangeException e)
+            {
+                message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+            }
+
+            throw new Exception(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 int GetNextToken()
+        {
+            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 = zzBufferL[zzCurrentPosL++];
+                        else if (zzAtEOF)
+                        {
+                            zzInput = YYEOF;
+                            break;
+                        }
+                        else
+                        {
+                            // store back cached positions
+                            zzCurrentPos = zzCurrentPosL;
+                            zzMarkedPos = zzMarkedPosL;
+                            bool eof = zzRefill();
+                            // get translated positions and possibly new buffer
+                            zzCurrentPosL = zzCurrentPos;
+                            zzMarkedPosL = zzMarkedPos;
+                            zzBufferL = zzBuffer;
+                            zzEndReadL = zzEndRead;
+                            if (eof)
+                            {
+                                zzInput = YYEOF;
+                                break;
+                            }
+                            else
+                            {
+                                zzInput = zzBufferL[zzCurrentPosL++];
+                            }
+                        }
+                        int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]];
+                        if (zzNext == -1) break;
+                        zzState = zzNext;
+
+                        zzAttributes = zzAttrL[zzState];
+                        if ((zzAttributes & 1) == 1)
+                        {
+                            zzAction = zzState;
+                            zzMarkedPosL = zzCurrentPosL;
+                            if ((zzAttributes & 8) == 8) break;
+                        }
+
+                    }
+                }
+
+                // store back cached position
+                zzMarkedPos = zzMarkedPosL;
+
+                switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction])
+                {
+                    case 1:
+                        { /* Break so we don't hit fall-through warning: */
+                            break; /* Not numeric, word, ideographic, hiragana, or SE Asian -- ignore it. */
+                        }
+                    case 9: break;
+                    case 2:
+                        {
+                            return WORD_TYPE;
+                        }
+                    case 10: break;
+                    case 3:
+                        {
+                            return NUMERIC_TYPE;
+                        }
+                    case 11: break;
+                    case 4:
+                        {
+                            return KATAKANA_TYPE;
+                        }
+                    case 12: break;
+                    case 5:
+                        {
+                            return SOUTH_EAST_ASIAN_TYPE;
+                        }
+                    case 13: break;
+                    case 6:
+                        {
+                            return IDEOGRAPHIC_TYPE;
+                        }
+                    case 14: break;
+                    case 7:
+                        {
+                            return HIRAGANA_TYPE;
+                        }
+                    case 15: break;
+                    case 8:
+                        {
+                            return HANGUL_TYPE;
+                        }
+                    case 16: break;
+                    default:
+                        if (zzInput == YYEOF && zzStartRead == zzCurrentPos)
+                        {
+                            zzAtEOF = true;
+                            {
+                                return StandardTokenizerInterface.YYEOF;
+                            }
+                        }
+                        else
+                        {
+                            zzScanError(ZZ_NO_MATCH);
+                        }
+                        break;
+                }
+            }
+        }
+
+    }
+}