diff --git a/BNFC.cabal b/BNFC.cabal
--- a/BNFC.cabal
+++ b/BNFC.cabal
@@ -1,9 +1,9 @@
 Name: BNFC
-Version: 2.8.2
+Version: 2.8.3
 cabal-version: >= 1.8
 build-type: Simple
 category: Development
-Copyright: (c) Andreas Abel, Kyle Butt, Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Bjorn Bringert, Johan Broberg, Paul Callaghan, Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Pascal Hof, Patrik Jansson, Kristofer Johannisson, Antti-Juhani Kaijanaho, Andreas Lööw, Kent Mein, Ulf Norell, Gabrielle Paganelli, Michael Pellauer and Aarne Ranta 2002 - 2018. Free software under GNU General Public License (GPL).
+Copyright: (c) Andreas Abel, Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Bjorn Bringert, Johan Broberg, Kyle Butt, Paul Callaghan, Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Pascal Hof, Patrik Jansson, Kristofer Johannisson, Antti-Juhani Kaijanaho, Andreas Lööw, Justin Meiners, Kent Mein, Ulf Norell, Gabrielle Paganelli, Michael Pellauer, Fabian Ruch, and Aarne Ranta 2002 - 2019. Free software under GNU General Public License (GPL).
 License: GPL-2
 License-File: LICENSE
 Maintainer: bnfc-dev@googlegroups.com
@@ -12,24 +12,26 @@
 Synopsis: A compiler front-end generator.
 Description:
   The BNF Converter is a compiler construction tool generating a compiler front-end
-  from a Labelled BNF grammar. It was originally written to generate Haskell,
-  but can also be used for generating Java, C, C++, C#, Ocaml and XML.
+  from a Labelled BNF grammar. It was originally written to generate Haskell code,
+  but can also be used for generating Agda, C, C++, C#, Java, Ocaml and XML code.
   .
   Given a Labelled BNF grammar the tool produces:
-  an abstract syntax as a Haskell, C, C++, C#, Ocaml module or Java directory,
+  an abstract syntax as a Haskell, Agda, C, C++, C#, Ocaml module or Java directory,
   a case skeleton for the abstract syntax in the same language,
   an Alex, JLex, or Flex lexer generator file,
   a Happy, CUP, Bison, or Antlr parser generator file,
-  a pretty-printer as a Haskell, Java, C, C++, C#, or Ocaml module,
+  a pretty-printer as a Haskell, Agda, C, C++, C#, Java, or Ocaml module,
   an XML representation,
-  a Latex file containing a readable specification of the language.
+  a LaTeX file containing a readable specification of the language.
 tested-with: GHC == 7.6.3
            , GHC == 7.8.4
            , GHC == 7.10.3
            , GHC == 8.0.2
            , GHC == 8.2.2
            , GHC == 8.4.4
-Extra-source-files: src/BNF.cf TODO changelog Makefile
+           , GHC == 8.6.5
+           , GHC == 8.8.1
+Extra-source-files: src/BNF.cf changelog Makefile
 
 Source-repository head
   type: git
@@ -50,6 +52,7 @@
 Executable bnfc
   Build-Depends:
     base>=4.6 && <5,
+    semigroups,
     mtl,
     directory,
     array,
@@ -57,7 +60,8 @@
     containers,
     pretty >=1.1 && <1.2,
     filepath,
-    deepseq
+    deepseq,
+    time
   build-tools:         alex, happy
   Main-is: Main.hs
   HS-source-dirs: compat src
@@ -145,17 +149,17 @@
     BNFC.Backend.C.CFtoBisonC
     BNFC.Backend.C.CFtoFlexC
     BNFC.Backend.C.CFtoCAbs
-    BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel
+    BNFC.Backend.C.RegToFlex
 
     -- C++ backend
     BNFC.Backend.CPP.PrettyPrinter
     BNFC.Backend.CPP.Makefile
     BNFC.Backend.CPP.Naming
     BNFC.Backend.CPP.NoSTL
-    BNFC.Backend.CPP.NoSTL.RegToFlex
     BNFC.Backend.CPP.NoSTL.CFtoFlex
     BNFC.Backend.CPP.NoSTL.CFtoBison
     BNFC.Backend.CPP.NoSTL.CFtoCPPAbs
+    BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel
 
     -- C++ STL backend
     BNFC.Backend.CPP.STL
@@ -198,12 +202,28 @@
     -- Pygments backend
     BNFC.Backend.Pygments
 
+    -- Agda backend
+    BNFC.Backend.Agda
+
 -- --- Testing --------------------------------------------------------------
 Test-suite unit-tests
   Type: exitcode-stdio-1.0
-  Build-Depends: base>=4 && <5, mtl, directory, array, process, filepath, pretty,
-                 hspec, QuickCheck >= 2.5, HUnit,
-                 temporary, containers, deepseq
+  Build-Depends:
+    base>=4 && <5,
+    semigroups,
+    mtl,
+    directory,
+    array,
+    process,
+    filepath,
+    pretty,
+    hspec,
+    QuickCheck >= 2.5,
+    HUnit,
+    temporary,
+    containers,
+    deepseq,
+    time
   Main-is: unit-tests.hs
   HS-source-dirs: compat src test
   extensions:
@@ -311,17 +331,17 @@
     BNFC.Backend.C.CFtoBisonC
     BNFC.Backend.C.CFtoFlexC
     BNFC.Backend.C.CFtoCAbs
-    BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel
+    BNFC.Backend.C.RegToFlex
 
     -- C++ backend
     BNFC.Backend.CPP.PrettyPrinter
     BNFC.Backend.CPP.Makefile
     BNFC.Backend.CPP.Naming
     BNFC.Backend.CPP.NoSTL
-    BNFC.Backend.CPP.NoSTL.RegToFlex
     BNFC.Backend.CPP.NoSTL.CFtoFlex
     BNFC.Backend.CPP.NoSTL.CFtoBison
     BNFC.Backend.CPP.NoSTL.CFtoCPPAbs
+    BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel
 
     -- C++ STL backend
     BNFC.Backend.CPP.STL
@@ -363,6 +383,9 @@
 
     -- Pygments backend
     BNFC.Backend.Pygments
+
+    -- Agda backend
+    BNFC.Backend.Agda
 
 
 Test-suite bnfc-doctests
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -1,31 +1,45 @@
+# GHC major.minor
+GHC_VERSION := $(shell ghc --numeric-version | cut -d. -f1-2)
 BNFC_VERSION=$(shell sed -ne "s/^[Vv]ersion: *\([0-9.]*\).*/\1/p" BNFC.cabal)
 
 # Cabal options (to be overwritten from the command line)
-CABAL_OPTS=
+CABAL_OPTS           =
+CABAL_BUILD_OPTS     = --builddir=dist-ghc-$(GHC_VERSION)
+CABAL_CONFIGURE_OPTS = --enable-tests
+CABAL_INSTALL_OPTS   = $(CABAL_CONFIGURE_OPTS) $(CABAL_BUILD_OPTS)
+CABAL_TEST_OPTS      = $(CABAL_BUILD_OPTS)
 
+CABAL                = cabal $(CABAL_OPTS)
+CABAL_CONFIGURE      = $(CABAL) configure $(CABAL_CONFIGURE_OPTS)
+CABAL_BUILD          = $(CABAL) build     $(CABAL_BUILD_OPTS)
+CABAL_INSTALL        = $(CABAL) install   $(CABAL_INSTALL_OPTS)
+CABAL_TEST           = $(CABAL) test      $(CABAL_TEST_OPTS)
+
 # Name for binary distribution (e.g. bnfc-2.4.5-linux32)
 BDIST_TAG=bnfc-${BNFC_VERSION}-$(shell uname -s)-$(shell uname -m)
 
-.PHONY: build install doc test
+.PHONY: default build install doc test bdist show-version debug TAGS
 
-all: build
+default: install test
 
 build:
-	cabal configure && cabal build
+	$(CABAL_CONFIGURE) && $(CABAL_BUILD)
 
 install:
-	cabal install
+	$(CABAL_INSTALL)
 
 test:
-	cabal configure --enable-tests
-	cabal test
+	$(CABAL_CONFIGURE)
+	$(CABAL_TEST)
 
 doc:
-	cabal haddock --executables --internal
+	$(CABAL) haddock --executables --internal
 
+TAGS :
+	hasktags --etags .
+
 # Binary package (tgz, for linux)
 bdist: dist/${BDIST_TAG}.tar.gz
-.PHONY: bdist
 
 dist/%.tar.gz:
 	cabal clean
@@ -41,3 +55,8 @@
 # Print the bnfc version from the cabal file
 show-version:
 	@echo ${BNFC_VERSION}
+
+debug:
+	@echo GHC_VERSION  = $(GHC_VERSION)
+	@echo BNFC_VERSION = $(BNFC_VERSION)
+# EOF
diff --git a/TODO b/TODO
deleted file mode 100644
--- a/TODO
+++ /dev/null
@@ -1,112 +0,0 @@
-Build:
-- autoconf
-  - verify Alex version.
-- tidy up Makefiles a bit
-  - and the generated ones too.
-    - Use "Makefile" everywhere.
-  - follow UNIX conventions...
-
-Functionality:
-
-- Add Bool type.
-
-Bugs:
-- Strange unicode space.
-- Bison only supports 1 parser per input file.
-- Write some clear docs on the Java backend.
-- Java backend (and probably others)
-  - Need to munge Java keywords like "abstract" "private"
-    - Alfa.cf, C.cf fail to compile for this reason.
-  - I think I fixed this, but it should be verified (peteg)
-  - Add a message on how to run the test file (after a succesful compliation), 
-    e.g. :
-    "to run the test, type : java JavaletteLight/Test <filename>"
-Compilers:
-
-- write a JavaCup script
-
-Bug Reports:
-
---------------
-> Fail: formats/java/CFtoJavaPrinter.hs:269: Non-exhaustive patterns in function> getCons
-  on Prolog.cf
-  Reason: No separator for a list. The same happens in C and C++.
-
-> In Skeleton.c the visit-functions for lists has the wrong variable for
-> visiting the
-> list elements. It says "visitNAME(LISTNAME->LISTNAME)" but it should be
-> "visitNAME(LISTNAME->NAME)".
->
-> The parse tree printer and pretty printer writes a newline instead of "\n"
-> for
-> strings.
---------------
-Java backend
-
-If a terminal and non-terminal have the same name, there is a name clash in
-the generarted .java files.
-
-Solution: don't do this.
-See C.cf for an example. Alfa.cf doesn't work either.
-
-- "separator", etc. decs don't play nice.
-  - the list stuff is emitted before the top-level non-terminal.
-- need to specify which non-terminal is the top-level one.
-  - i.e. a "start with" line must be present.
-  - BNFC now crashes if you don't specify an "entrypoint" pragma,
-    or use more than one.
-
-Somewhere along the line of BNFC/jlex/jcup the BNFC comment-instruction
-(comment "/*" "*/" ;) seems to fail. A file containing only an opening
-of a comment manages to pass the parser without any trouble.
-
---------------
-Aarne, Java:
-
-  to get "parse successful" is fast, but then it takes
-  quite some time to pretty-print
-
-  the parser gets confused with isolatin characters included
-  in string literals
-
-Michael:
-
-http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html#SECTION2.2.14
-
---------------
-
-Antti-Juhani Kaijanaho:
-
-- A token UIdent declaration (see report) causes a mysterious parse
-  error at end of file / perhaps conflicts with predefined Ident?
-- If I use "\\/" in a production, Happy is unhappy (you use \/ as the
-  Happy token)
-- You generate Alex 1.x source.  Could you make it (optionally?)
-  generate Alex 2.x source? <peteg: fixed>
-
-Oh, and bnfc returns an exit code indicating success even when there is
-an error.
-
---------------
-
-Bjorn Bringert:
-
-- Specifying coercions etc. for non-existing categories should
-  probably be an error.
-- Repeated identical rules should be an error.
-- Java CUP back end does not support multiple entrypoints.
-
---------------
-
-Software versions:
-
-ghc 5.04.x
-
-bison 1.875a
-flex 2.5.31
-
-alex 2.0
-happy 1.13
-
-
---------------
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,20 @@
+2.8.3 Andreas Abel <andreas.abel@gu.se>  August 2019
+	* GHC 8.8 compatibility
+	* Stack installation supported by provided .yaml files [#198]
+	* Unicode support in lexer, excl. C, C++ and Ocaml [#249]
+	* LBNF: support \r (carriage return) and \f (form feed) in token declaration [#257]
+	* LBNF: allow numbered categories (like Foo2) independent of coercions [#210]
+	* Agda: new (experimental) backend, providing bindings to AST/parser/printer of Haskell backend
+	* C: supports now the -l option to give error locations [#238]
+	* C: correct function names in generated skeletons [#239]
+	* C, C++: handle regular expression difference (subtraction) correctly [#237]
+	* Haskell: generates now more fine-grained Makefile that invokes bnfc on changed .cf file
+	* Haskell: use qualified import of AST in generated printer [#128,#228]
+	* Haskell: printer code no longer produces deprecation warning concerning OverlappingInstances [#233]
+	* Haskell/CNF: fixed problem with Any type in generated code [#216]
+	* Haskell/CNF: generated test program now same name (Test) as w/o --cnf
+	* Haskell/GLR: correct module header in .y file [#252]
+
 2.8.2 Andreas Abel <andreas.abel@gu.se>  November 2018
 	* GHC 8.4 compatibility [#227,#236]
 	* bnfc now puts current timestamp on all created files, even unchanged ones [#219]
diff --git a/dist/build/bnfc/bnfc-tmp/LexBNF.hs b/dist/build/bnfc/bnfc-tmp/LexBNF.hs
--- a/dist/build/bnfc/bnfc-tmp/LexBNF.hs
+++ b/dist/build/bnfc/bnfc-tmp/LexBNF.hs
@@ -19,11 +19,11 @@
 #endif
 #if __GLASGOW_HASKELL__ >= 503
 import Data.Array
-import Data.Array.Base (unsafeAt)
 #else
 import Array
 #endif
 #if __GLASGOW_HASKELL__ >= 503
+import Data.Array.Base (unsafeAt)
 import GHC.Exts
 #else
 import GlaExts
@@ -32,21 +32,21 @@
 alex_tab_size = 8
 alex_base :: AlexAddr
 alex_base = AlexA#
-  "\xf8\xff\xff\xff\x49\x00\x00\x00\xc9\xff\xff\xff\xe0\xff\xff\xff\xc9\x00\x00\x00\x9c\x01\x00\x00\x2d\x00\x00\x00\x1c\x02\x00\x00\x1c\x03\x00\x00\x0a\x01\x00\x00\x00\x00\x00\x00\x0d\x03\x00\x00\x0d\x04\x00\x00\xcd\x03\x00\x00\xcd\x04\x00\x00\x91\x05\x00\x00\xef\x05\x00\x00\x8d\x04\x00\x00\x00\x00\x00\x00\xa5\x05\x00\x00\xdb\xff\xff\xff\x47\x00\x00\x00\x5a\x00\x00\x00\xa5\x06\x00\x00\xa6\x06\x00\x00\x69\x07\x00\x00\x29\x07\x00\x00\x00\x00\x00\x00\x1f\x08\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\xdc\xff\xff\xff\xdd\xff\xff\xff\x00\x00\x00\x00\xdf\xff\xff\xff\xf8\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\xe7\x05\x00\x00\x7c\x00\x00\x00"#
+  "\xf8\xff\xff\xff\x49\x00\x00\x00\xc9\xff\xff\xff\xe0\xff\xff\xff\xc9\x00\x00\x00\x9c\x01\x00\x00\x2d\x00\x00\x00\x1c\x02\x00\x00\x9c\x02\x00\x00\x1c\x03\x00\x00\x9c\x03\x00\x00\x1c\x04\x00\x00\x9c\x04\x00\x00\x0d\x05\x00\x00\x00\x00\x00\x00\x8d\x05\x00\x00\x00\x00\x00\x00\xfe\x05\x00\x00\x00\x00\x00\x00\x6f\x06\x00\x00\x00\x00\x00\x00\x0b\x01\x00\x00\x00\x00\x00\x00\xb0\x06\x00\x00\x00\x00\x00\x00\xf1\x06\x00\x00\xf1\x07\x00\x00\xb1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x08\x00\x00\x22\x09\x00\x00\xe2\x08\x00\x00\x00\x00\x00\x00\xbb\x09\x00\x00\xbb\x0a\x00\x00\xc1\x09\x00\x00\x7b\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x0a\x00\x00\xdb\xff\xff\xff\x47\x00\x00\x00\x72\x00\x00\x00\xb2\x0b\x00\x00\x3d\x0b\x00\x00\xb2\x0c\x00\x00\x72\x0c\x00\x00\x00\x00\x00\x00\x68\x0d\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\xdc\xff\xff\xff\xdd\xff\xff\xff\x00\x00\x00\x00\xdf\xff\xff\xff\x41\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xb9\x09\x00\x00\x8c\x00\x00\x00"#
 
 alex_table :: AlexAddr
 alex_table = AlexA#
-  "\x00\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x21\x00\x25\x00\x16\x00\x1c\x00\x05\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x02\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1f\x00\x21\x00\x00\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x22\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x21\x00\x03\x00\x21\x00\x00\x00\x21\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x20\x00\x21\x00\x21\x00\x01\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x03\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x03\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x08\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x06\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x00\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x24\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x10\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x0f\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1a\x00\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x13\x00\x07\x00\x0a\x00\x0a\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+  "\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x36\x00\x3a\x00\x2b\x00\x31\x00\x05\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x33\x00\x02\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x34\x00\x36\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x37\x00\x36\x00\x00\x00\x36\x00\x00\x00\x36\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x36\x00\x03\x00\x36\x00\x00\x00\x36\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x35\x00\x36\x00\x36\x00\x01\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x2a\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x32\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x01\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x23\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x08\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x09\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x20\x00\x09\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x17\x00\x0c\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x25\x00\x08\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x19\x00\x0b\x00\x12\x00\x12\x00\x12\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x2f\x00\x04\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x28\x00\x07\x00\x1d\x00\x1d\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
 
 alex_check :: AlexAddr
 alex_check = AlexA#
-  "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x27\x00\x2d\x00\x2d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x20\x00\x3a\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x27\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x74\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xc2\x00\xc3\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xff\xff\xc2\x00\xc3\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+  "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x27\x00\x2d\x00\x2d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x20\x00\x3a\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x27\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xc3\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x22\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
 
 alex_deflt :: AlexAddr
 alex_deflt = AlexA#
-  "\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\xff\xff\x05\x00\x05\x00\x12\x00\x12\x00\x03\x00\x03\x00\xff\xff\x17\x00\xff\xff\x17\x00\x1b\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1c\x00\x1c\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+  "\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x14\x00\xff\xff\x16\x00\x16\x00\x18\x00\x18\x00\x1c\x00\x1c\x00\x21\x00\x21\x00\x26\x00\x26\x00\x05\x00\x05\x00\x05\x00\x27\x00\x27\x00\x03\x00\x03\x00\x03\x00\x03\x00\x2c\x00\xff\xff\x2c\x00\x2c\x00\x30\x00\x30\x00\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x31\x00\x31\x00\x31\x00\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
 
-alex_accept = listArray (0 :: Int, 40)
+alex_accept = listArray (0 :: Int, 61)
   [ AlexAccNone
   , AlexAccNone
   , AlexAccNone
@@ -75,6 +75,27 @@
   , AlexAccNone
   , AlexAccNone
   , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
   , AlexAccSkip
   , AlexAccSkip
   , AlexAccSkip
@@ -103,7 +124,7 @@
   , (0,alex_action_8)
   ]
 
-{-# LINE 39 "src/LexBNF.x" #-}
+{-# LINE 45 "src/LexBNF.x" #-}
 
 
 tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)
@@ -179,6 +200,8 @@
     '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs
     '\\':'n':cs  -> '\n' : unesc cs
     '\\':'t':cs  -> '\t' : unesc cs
+    '\\':'r':cs  -> '\r' : unesc cs
+    '\\':'f':cs  -> '\f' : unesc cs
     '"':[]    -> []
     c:cs      -> c : unesc cs
     _         -> []
@@ -258,635 +281,14 @@
 alex_action_7 =  tok (\p s -> PT p (TI $ share s))    
 alex_action_8 =  tok (\p s -> PT p (TD $ share s)) 
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
-{-# LINE 17 "<built-in>" #-}
-{-# LINE 1 "/usr/local/lib/ghc-8.2.1/include/ghcversion.h" #-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{-# LINE 18 "<built-in>" #-}
-{-# LINE 1 "/var/folders/lg/qcd3v89j59l3m6520kr42bdm0000gn/T/ghc7480_0/ghc_2.h" #-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+-- -----------------------------------------------------------------------------
+-- ALEX TEMPLATE
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
 
+-- -----------------------------------------------------------------------------
+-- INTERNALS and main scanner engine
 
 
 
@@ -904,6 +306,14 @@
 
 
 
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define GTE(n,m) (tagToEnum# (n >=# m))
+#define EQ(n,m) (tagToEnum# (n ==# m))
+#else
+#define GTE(n,m) (n >=# m)
+#define EQ(n,m) (n ==# m)
+#endif
 
 
 
@@ -923,36 +333,6 @@
 
 
 
-{-# LINE 19 "<built-in>" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
--- -----------------------------------------------------------------------------
--- ALEX TEMPLATE
---
--- This code is in the PUBLIC DOMAIN; you may copy it freely and use
--- it for any purpose whatsoever.
-
--- -----------------------------------------------------------------------------
--- INTERNALS and main scanner engine
-
-
-{-# LINE 21 "templates/GenericTemplate.hs" #-}
-
-
-
-
-
--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
-#if __GLASGOW_HASKELL__ > 706
-#define GTE(n,m) (tagToEnum# (n >=# m))
-#define EQ(n,m) (tagToEnum# (n ==# m))
-#else
-#define GTE(n,m) (n >=# m)
-#define EQ(n,m) (n ==# m)
-#endif
-
-{-# LINE 51 "templates/GenericTemplate.hs" #-}
-
-
 data AlexAddr = AlexA# Addr#
 -- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
 #if __GLASGOW_HASKELL__ < 503
@@ -1087,8 +467,18 @@
         check_accs (AlexAcc a  ) = AlexLastAcc a input__ (I# (len))
         check_accs (AlexAccSkip) = AlexLastSkip  input__ (I# (len))
 
-{-# LINE 198 "templates/GenericTemplate.hs" #-}
 
+
+
+
+
+
+
+
+
+
+
+
 data AlexLastAcc
   = AlexNone
   | AlexLastAcc !Int !AlexInput !Int
@@ -1098,4 +488,32 @@
   = AlexAccNone
   | AlexAcc Int
   | AlexAccSkip
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
diff --git a/dist/build/bnfc/bnfc-tmp/ParBNF.hs b/dist/build/bnfc/bnfc-tmp/ParBNF.hs
--- a/dist/build/bnfc/bnfc-tmp/ParBNF.hs
+++ b/dist/build/bnfc/bnfc-tmp/ParBNF.hs
@@ -1481,11 +1481,11 @@
 
 happyError :: [Token] -> Err a
 happyError ts =
-  Bad $ "syntax error at " ++ tokenPos ts ++ 
+  Bad $ "syntax error at " ++ tokenPos ts ++
   case ts of
-    [] -> []
+    []      -> []
     [Err _] -> " due to lexer error"
-    t:_ -> " before `" ++ id(prToken t) ++ "'"
+    t:_     -> " before `" ++ id(prToken t) ++ "'"
 
 myLexer = tokens
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
diff --git a/dist/build/unit-tests/unit-tests-tmp/LexBNF.hs b/dist/build/unit-tests/unit-tests-tmp/LexBNF.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/unit-tests/unit-tests-tmp/LexBNF.hs
@@ -0,0 +1,519 @@
+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}
+{-# LANGUAGE CPP,MagicHash #-}
+{-# LINE 3 "src/LexBNF.x" #-}
+
+{-# OPTIONS -fno-warn-incomplete-patterns #-}
+{-# OPTIONS_GHC -w #-}
+module LexBNF where
+
+
+
+import qualified Data.Bits
+import Data.Word (Word8)
+import Data.Char (ord)
+
+#if __GLASGOW_HASKELL__ >= 603
+#include "ghcconfig.h"
+#elif defined(__GLASGOW_HASKELL__)
+#include "config.h"
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+#else
+import Array
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array.Base (unsafeAt)
+import GHC.Exts
+#else
+import GlaExts
+#endif
+alex_tab_size :: Int
+alex_tab_size = 8
+alex_base :: AlexAddr
+alex_base = AlexA#
+  "\xf8\xff\xff\xff\x49\x00\x00\x00\xc9\xff\xff\xff\xe0\xff\xff\xff\xc9\x00\x00\x00\x9c\x01\x00\x00\x2d\x00\x00\x00\x1c\x02\x00\x00\x9c\x02\x00\x00\x1c\x03\x00\x00\x9c\x03\x00\x00\x1c\x04\x00\x00\x9c\x04\x00\x00\x0d\x05\x00\x00\x00\x00\x00\x00\x8d\x05\x00\x00\x00\x00\x00\x00\xfe\x05\x00\x00\x00\x00\x00\x00\x6f\x06\x00\x00\x00\x00\x00\x00\x0b\x01\x00\x00\x00\x00\x00\x00\xb0\x06\x00\x00\x00\x00\x00\x00\xf1\x06\x00\x00\xf1\x07\x00\x00\xb1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x08\x00\x00\x22\x09\x00\x00\xe2\x08\x00\x00\x00\x00\x00\x00\xbb\x09\x00\x00\xbb\x0a\x00\x00\xc1\x09\x00\x00\x7b\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x0a\x00\x00\xdb\xff\xff\xff\x47\x00\x00\x00\x72\x00\x00\x00\xb2\x0b\x00\x00\x3d\x0b\x00\x00\xb2\x0c\x00\x00\x72\x0c\x00\x00\x00\x00\x00\x00\x68\x0d\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\xdc\xff\xff\xff\xdd\xff\xff\xff\x00\x00\x00\x00\xdf\xff\xff\xff\x41\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xb9\x09\x00\x00\x8c\x00\x00\x00"#
+
+alex_table :: AlexAddr
+alex_table = AlexA#
+  "\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x36\x00\x3a\x00\x2b\x00\x31\x00\x05\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x33\x00\x02\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x34\x00\x36\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x37\x00\x36\x00\x00\x00\x36\x00\x00\x00\x36\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x36\x00\x03\x00\x36\x00\x00\x00\x36\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x35\x00\x36\x00\x36\x00\x01\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x2a\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x32\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x01\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x23\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x08\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x09\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x20\x00\x09\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x17\x00\x0c\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x25\x00\x08\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x19\x00\x0b\x00\x12\x00\x12\x00\x12\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x2f\x00\x04\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x28\x00\x07\x00\x1d\x00\x1d\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+alex_check :: AlexAddr
+alex_check = AlexA#
+  "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x27\x00\x2d\x00\x2d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x20\x00\x3a\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x27\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xc3\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x22\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+alex_deflt :: AlexAddr
+alex_deflt = AlexA#
+  "\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x14\x00\xff\xff\x16\x00\x16\x00\x18\x00\x18\x00\x1c\x00\x1c\x00\x21\x00\x21\x00\x26\x00\x26\x00\x05\x00\x05\x00\x05\x00\x27\x00\x27\x00\x03\x00\x03\x00\x03\x00\x03\x00\x2c\x00\xff\xff\x2c\x00\x2c\x00\x30\x00\x30\x00\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x31\x00\x31\x00\x31\x00\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+alex_accept = listArray (0 :: Int, 61)
+  [ AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAcc 9
+  , AlexAcc 8
+  , AlexAcc 7
+  , AlexAcc 6
+  , AlexAcc 5
+  , AlexAcc 4
+  , AlexAcc 3
+  , AlexAcc 2
+  , AlexAcc 1
+  , AlexAcc 0
+  ]
+
+alex_actions = array (0 :: Int, 10)
+  [ (9,alex_action_3)
+  , (8,alex_action_3)
+  , (7,alex_action_3)
+  , (6,alex_action_3)
+  , (5,alex_action_4)
+  , (4,alex_action_5)
+  , (3,alex_action_6)
+  , (2,alex_action_7)
+  , (1,alex_action_8)
+  , (0,alex_action_8)
+  ]
+
+{-# LINE 45 "src/LexBNF.x" #-}
+
+
+tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)
+tok f p s = f p s
+
+share :: String -> String
+share = id
+
+data Tok =
+   TS !String !Int    -- reserved words and symbols
+ | TL !String         -- string literals
+ | TI !String         -- integer literals
+ | TV !String         -- identifiers
+ | TD !String         -- double precision float literals
+ | TC !String         -- character literals
+
+ deriving (Eq,Show,Ord)
+
+data Token =
+   PT  Posn Tok
+ | Err Posn
+  deriving (Eq,Show,Ord)
+
+printPosn :: Posn -> String
+printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c
+
+tokenPos :: [Token] -> String
+tokenPos (t:_) = printPosn (tokenPosn t)
+tokenPos [] = "end of file"
+
+tokenPosn :: Token -> Posn
+tokenPosn (PT p _) = p
+tokenPosn (Err p) = p
+
+tokenLineCol :: Token -> (Int, Int)
+tokenLineCol = posLineCol . tokenPosn
+
+posLineCol :: Posn -> (Int, Int)
+posLineCol (Pn _ l c) = (l,c)
+
+mkPosToken :: Token -> ((Int, Int), String)
+mkPosToken t@(PT p _) = (posLineCol p, prToken t)
+
+prToken :: Token -> String
+prToken t = case t of
+  PT _ (TS s _) -> s
+  PT _ (TL s)   -> show s
+  PT _ (TI s)   -> s
+  PT _ (TV s)   -> s
+  PT _ (TD s)   -> s
+  PT _ (TC s)   -> s
+  Err _         -> "#error"
+
+
+data BTree = N | B String Tok BTree BTree deriving (Show)
+
+eitherResIdent :: (String -> Tok) -> String -> Tok
+eitherResIdent tv s = treeFind resWords
+  where
+  treeFind N = tv s
+  treeFind (B a t left right) | s < a  = treeFind left
+                              | s > a  = treeFind right
+                              | s == a = t
+
+resWords :: BTree
+resWords = b "digit" 21 (b "=" 11 (b "-" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "," 5 (b "+" 4 N N) N)) (b "::=" 9 (b ":" 8 (b "." 7 N N) N) (b ";" 10 N N))) (b "char" 16 (b "]" 14 (b "[" 13 (b "?" 12 N N) N) (b "_" 15 N N)) (b "define" 19 (b "comment" 18 (b "coercions" 17 N N) N) (b "delimiters" 20 N N)))) (b "separator" 31 (b "letter" 26 (b "internal" 24 (b "eps" 23 (b "entrypoints" 22 N N) N) (b "layout" 25 N N)) (b "position" 29 (b "nonempty" 28 (b "lower" 27 N N) N) (b "rules" 30 N N))) (b "upper" 36 (b "token" 34 (b "terminator" 33 (b "stop" 32 N N) N) (b "toplevel" 35 N N)) (b "|" 39 (b "{" 38 (b "views" 37 N N) N) (b "}" 40 N N))))
+   where b s n = let bs = id s
+                  in B bs (TS bs n)
+
+unescapeInitTail :: String -> String
+unescapeInitTail = id . unesc . tail . id where
+  unesc s = case s of
+    '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs
+    '\\':'n':cs  -> '\n' : unesc cs
+    '\\':'t':cs  -> '\t' : unesc cs
+    '\\':'r':cs  -> '\r' : unesc cs
+    '\\':'f':cs  -> '\f' : unesc cs
+    '"':[]    -> []
+    c:cs      -> c : unesc cs
+    _         -> []
+
+-------------------------------------------------------------------
+-- Alex wrapper code.
+-- A modified "posn" wrapper.
+-------------------------------------------------------------------
+
+data Posn = Pn !Int !Int !Int
+      deriving (Eq, Show,Ord)
+
+alexStartPos :: Posn
+alexStartPos = Pn 0 1 1
+
+alexMove :: Posn -> Char -> Posn
+alexMove (Pn a l c) '\t' = Pn (a+1)  l     (((c+7) `div` 8)*8+1)
+alexMove (Pn a l c) '\n' = Pn (a+1) (l+1)   1
+alexMove (Pn a l c) _    = Pn (a+1)  l     (c+1)
+
+type Byte = Word8
+
+type AlexInput = (Posn,     -- current position,
+                  Char,     -- previous char
+                  [Byte],   -- pending bytes on the current char
+                  String)   -- current input string
+
+tokens :: String -> [Token]
+tokens str = go (alexStartPos, '\n', [], str)
+    where
+      go :: AlexInput -> [Token]
+      go inp@(pos, _, _, str) =
+               case alexScan inp 0 of
+                AlexEOF                   -> []
+                AlexError (pos, _, _, _)  -> [Err pos]
+                AlexSkip  inp' len        -> go inp'
+                AlexToken inp' len act    -> act pos (take len str) : (go inp')
+
+alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
+alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s))
+alexGetByte (p, _, [], s) =
+  case  s of
+    []  -> Nothing
+    (c:s) ->
+             let p'     = alexMove p c
+                 (b:bs) = utf8Encode c
+              in p' `seq` Just (b, (p', c, bs, s))
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar (p, c, bs, s) = c
+
+-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.
+utf8Encode :: Char -> [Word8]
+utf8Encode = map fromIntegral . go . ord
+ where
+  go oc
+   | oc <= 0x7f       = [oc]
+
+   | oc <= 0x7ff      = [ 0xc0 + (oc `Data.Bits.shiftR` 6)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+
+   | oc <= 0xffff     = [ 0xe0 + (oc `Data.Bits.shiftR` 12)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+   | otherwise        = [ 0xf0 + (oc `Data.Bits.shiftR` 18)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+
+alex_action_3 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
+alex_action_4 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
+alex_action_5 =  tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) 
+alex_action_6 =  tok (\p s -> PT p (TC $ share s))  
+alex_action_7 =  tok (\p s -> PT p (TI $ share s))    
+alex_action_8 =  tok (\p s -> PT p (TD $ share s)) 
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- -----------------------------------------------------------------------------
+-- ALEX TEMPLATE
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
+
+-- -----------------------------------------------------------------------------
+-- INTERNALS and main scanner engine
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define GTE(n,m) (tagToEnum# (n >=# m))
+#define EQ(n,m) (tagToEnum# (n ==# m))
+#else
+#define GTE(n,m) (n >=# m)
+#define EQ(n,m) (n ==# m)
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+data AlexAddr = AlexA# Addr#
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ < 503
+uncheckedShiftL# = shiftL#
+#endif
+
+{-# INLINE alexIndexInt16OffAddr #-}
+alexIndexInt16OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow16Int# i
+  where
+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))
+        off' = off *# 2#
+#else
+  indexInt16OffAddr# arr off
+#endif
+
+
+
+
+
+{-# INLINE alexIndexInt32OffAddr #-}
+alexIndexInt32OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow32Int# i
+  where
+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
+                     (b2 `uncheckedShiftL#` 16#) `or#`
+                     (b1 `uncheckedShiftL#` 8#) `or#` b0)
+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
+   off' = off *# 4#
+#else
+  indexInt32OffAddr# arr off
+#endif
+
+
+
+
+
+
+#if __GLASGOW_HASKELL__ < 503
+quickIndex arr i = arr ! i
+#else
+-- GHC >= 503, unsafeAt is available from Data.Array.Base.
+quickIndex = unsafeAt
+#endif
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Main lexing routines
+
+data AlexReturn a
+  = AlexEOF
+  | AlexError  !AlexInput
+  | AlexSkip   !AlexInput !Int
+  | AlexToken  !AlexInput !Int a
+
+-- alexScan :: AlexInput -> StartCode -> AlexReturn a
+alexScan input__ (I# (sc))
+  = alexScanUser undefined input__ (I# (sc))
+
+alexScanUser user__ input__ (I# (sc))
+  = case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of
+  (AlexNone, input__') ->
+    case alexGetByte input__ of
+      Nothing ->
+
+
+
+                                   AlexEOF
+      Just _ ->
+
+
+
+                                   AlexError input__'
+
+  (AlexLastSkip input__'' len, _) ->
+
+
+
+    AlexSkip input__'' len
+
+  (AlexLastAcc k input__''' len, _) ->
+
+
+
+    AlexToken input__''' len (alex_actions ! k)
+
+
+-- Push the input through the DFA, remembering the most recent accepting
+-- state it encountered.
+
+alex_scan_tkn user__ orig_input len input__ s last_acc =
+  input__ `seq` -- strict in the input
+  let
+  new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))
+  in
+  new_acc `seq`
+  case alexGetByte input__ of
+     Nothing -> (new_acc, input__)
+     Just (c, new_input) ->
+
+
+
+      case fromIntegral c of { (I# (ord_c)) ->
+        let
+                base   = alexIndexInt32OffAddr alex_base s
+                offset = (base +# ord_c)
+                check  = alexIndexInt16OffAddr alex_check offset
+
+                new_s = if GTE(offset,0#) && EQ(check,ord_c)
+                          then alexIndexInt16OffAddr alex_table offset
+                          else alexIndexInt16OffAddr alex_deflt s
+        in
+        case new_s of
+            -1# -> (new_acc, input__)
+                -- on an error, we want to keep the input *before* the
+                -- character that failed, not after.
+            _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)
+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
+                        new_input new_s new_acc
+      }
+  where
+        check_accs (AlexAccNone) = last_acc
+        check_accs (AlexAcc a  ) = AlexLastAcc a input__ (I# (len))
+        check_accs (AlexAccSkip) = AlexLastSkip  input__ (I# (len))
+
+
+
+
+
+
+
+
+
+
+
+
+
+data AlexLastAcc
+  = AlexNone
+  | AlexLastAcc !Int !AlexInput !Int
+  | AlexLastSkip     !AlexInput !Int
+
+data AlexAcc user
+  = AlexAccNone
+  | AlexAcc Int
+  | AlexAccSkip
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dist/build/unit-tests/unit-tests-tmp/ParBNF.hs b/dist/build/unit-tests/unit-tests-tmp/ParBNF.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/unit-tests/unit-tests-tmp/ParBNF.hs
@@ -0,0 +1,2459 @@
+{-# OPTIONS_GHC -w #-}
+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}
+#if __GLASGOW_HASKELL__ >= 710
+{-# OPTIONS_GHC -XPartialTypeSignatures #-}
+#endif
+{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}
+module ParBNF where
+import AbsBNF
+import LexBNF
+import ErrM
+import qualified Data.Array as Happy_Data_Array
+import qualified Data.Bits as Bits
+import qualified GHC.Exts as Happy_GHC_Exts
+import Control.Applicative(Applicative(..))
+import Control.Monad (ap)
+
+-- parser produced by Happy Version 1.19.8
+
+newtype HappyAbsSyn  = HappyAbsSyn HappyAny
+#if __GLASGOW_HASKELL__ >= 607
+type HappyAny = Happy_GHC_Exts.Any
+#else
+type HappyAny = forall a . a
+#endif
+happyIn36 :: (Ident) -> (HappyAbsSyn )
+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn ) -> (Ident)
+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+happyIn37 :: (String) -> (HappyAbsSyn )
+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn ) -> (String)
+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+happyIn38 :: (Integer) -> (HappyAbsSyn )
+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn ) -> (Integer)
+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+happyIn39 :: (Char) -> (HappyAbsSyn )
+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn ) -> (Char)
+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+happyIn40 :: (Double) -> (HappyAbsSyn )
+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn ) -> (Double)
+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+happyIn41 :: (LGrammar) -> (HappyAbsSyn )
+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn ) -> (LGrammar)
+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+happyIn42 :: (LDef) -> (HappyAbsSyn )
+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn ) -> (LDef)
+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+happyIn43 :: ([LDef]) -> (HappyAbsSyn )
+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn ) -> ([LDef])
+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+happyIn44 :: ([Ident]) -> (HappyAbsSyn )
+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn ) -> ([Ident])
+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+happyIn45 :: (Grammar) -> (HappyAbsSyn )
+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn ) -> (Grammar)
+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+happyIn46 :: ([Def]) -> (HappyAbsSyn )
+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn ) -> ([Def])
+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+happyIn47 :: (Def) -> (HappyAbsSyn )
+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn ) -> (Def)
+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+happyIn48 :: (Item) -> (HappyAbsSyn )
+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn ) -> (Item)
+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+happyIn49 :: ([Item]) -> (HappyAbsSyn )
+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn ) -> ([Item])
+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+happyIn50 :: (Cat) -> (HappyAbsSyn )
+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn ) -> (Cat)
+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+happyIn51 :: (Label) -> (HappyAbsSyn )
+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn ) -> (Label)
+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+happyIn52 :: (LabelId) -> (HappyAbsSyn )
+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn ) -> (LabelId)
+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+happyIn53 :: (ProfItem) -> (HappyAbsSyn )
+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn ) -> (ProfItem)
+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+happyIn54 :: (IntList) -> (HappyAbsSyn )
+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn ) -> (IntList)
+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+happyIn55 :: ([Integer]) -> (HappyAbsSyn )
+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn ) -> ([Integer])
+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyIn56 :: ([IntList]) -> (HappyAbsSyn )
+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn56 #-}
+happyOut56 :: (HappyAbsSyn ) -> ([IntList])
+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut56 #-}
+happyIn57 :: ([ProfItem]) -> (HappyAbsSyn )
+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn57 #-}
+happyOut57 :: (HappyAbsSyn ) -> ([ProfItem])
+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut57 #-}
+happyIn58 :: (Arg) -> (HappyAbsSyn )
+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn58 #-}
+happyOut58 :: (HappyAbsSyn ) -> (Arg)
+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut58 #-}
+happyIn59 :: ([Arg]) -> (HappyAbsSyn )
+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn59 #-}
+happyOut59 :: (HappyAbsSyn ) -> ([Arg])
+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut59 #-}
+happyIn60 :: (Separation) -> (HappyAbsSyn )
+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn60 #-}
+happyOut60 :: (HappyAbsSyn ) -> (Separation)
+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut60 #-}
+happyIn61 :: ([String]) -> (HappyAbsSyn )
+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn61 #-}
+happyOut61 :: (HappyAbsSyn ) -> ([String])
+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut61 #-}
+happyIn62 :: (Exp) -> (HappyAbsSyn )
+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn62 #-}
+happyOut62 :: (HappyAbsSyn ) -> (Exp)
+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut62 #-}
+happyIn63 :: (Exp) -> (HappyAbsSyn )
+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn63 #-}
+happyOut63 :: (HappyAbsSyn ) -> (Exp)
+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut63 #-}
+happyIn64 :: (Exp) -> (HappyAbsSyn )
+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn64 #-}
+happyOut64 :: (HappyAbsSyn ) -> (Exp)
+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut64 #-}
+happyIn65 :: ([Exp]) -> (HappyAbsSyn )
+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn65 #-}
+happyOut65 :: (HappyAbsSyn ) -> ([Exp])
+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut65 #-}
+happyIn66 :: ([Exp]) -> (HappyAbsSyn )
+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn66 #-}
+happyOut66 :: (HappyAbsSyn ) -> ([Exp])
+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut66 #-}
+happyIn67 :: (RHS) -> (HappyAbsSyn )
+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn67 #-}
+happyOut67 :: (HappyAbsSyn ) -> (RHS)
+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut67 #-}
+happyIn68 :: ([RHS]) -> (HappyAbsSyn )
+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn68 #-}
+happyOut68 :: (HappyAbsSyn ) -> ([RHS])
+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut68 #-}
+happyIn69 :: (MinimumSize) -> (HappyAbsSyn )
+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn69 #-}
+happyOut69 :: (HappyAbsSyn ) -> (MinimumSize)
+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut69 #-}
+happyIn70 :: (Reg) -> (HappyAbsSyn )
+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn70 #-}
+happyOut70 :: (HappyAbsSyn ) -> (Reg)
+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut70 #-}
+happyIn71 :: (Reg) -> (HappyAbsSyn )
+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn71 #-}
+happyOut71 :: (HappyAbsSyn ) -> (Reg)
+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut71 #-}
+happyIn72 :: (Reg) -> (HappyAbsSyn )
+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn72 #-}
+happyOut72 :: (HappyAbsSyn ) -> (Reg)
+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut72 #-}
+happyIn73 :: (Reg) -> (HappyAbsSyn )
+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn73 #-}
+happyOut73 :: (HappyAbsSyn ) -> (Reg)
+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut73 #-}
+happyInTok :: (Token) -> (HappyAbsSyn )
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn ) -> (Token)
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyExpList :: HappyAddr
+happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xa4\x5e\xe3\x26\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x50\xaf\x71\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\xa9\xd7\xb8\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x40\xea\x35\x6e\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x20\xf5\x1a\x37\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x7a\x8d\x1b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x28\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x14\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x00\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x40\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x20\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x09\x65\x80\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\x40\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x40\x42\x19\xa0\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x20\xa1\x0c\x50\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x04\x12\xca\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x20\xa1\x0c\x50\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x12\xca\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x20\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\x80\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x04\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x40\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x40\x01\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x02\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x48\xbd\xc6\x0d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x52\xaf\x71\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xa0\x5e\xe3\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x52\xaf\x71\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x40\xea\x35\x6e\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x09\x65\x80\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x02\x00\x00\xe0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x00\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x12\xca\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x24\x94\x01\x0a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x12\xca\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x20\xa1\x0c\x50\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\x40\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x00\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+{-# NOINLINE happyExpListPerState #-}
+happyExpListPerState st =
+    token_strs_expected
+  where token_strs = ["error","%dummy","%start_pLGrammar","%start_pLDef","%start_pListLDef","%start_pListIdent","%start_pGrammar","%start_pListDef","%start_pDef","%start_pItem","%start_pListItem","%start_pCat","%start_pLabel","%start_pLabelId","%start_pProfItem","%start_pIntList","%start_pListInteger","%start_pListIntList","%start_pListProfItem","%start_pArg","%start_pListArg","%start_pSeparation","%start_pListString","%start_pExp","%start_pExp1","%start_pExp2","%start_pListExp","%start_pListExp2","%start_pRHS","%start_pListRHS","%start_pMinimumSize","%start_pReg2","%start_pReg1","%start_pReg3","%start_pReg","Ident","String","Integer","Char","Double","LGrammar","LDef","ListLDef","ListIdent","Grammar","ListDef","Def","Item","ListItem","Cat","Label","LabelId","ProfItem","IntList","ListInteger","ListIntList","ListProfItem","Arg","ListArg","Separation","ListString","Exp","Exp1","Exp2","ListExp","ListExp2","RHS","ListRHS","MinimumSize","Reg2","Reg1","Reg3","Reg","'('","')'","'*'","'+'","','","'-'","'.'","':'","'::='","';'","'='","'?'","'['","']'","'_'","'char'","'coercions'","'comment'","'define'","'delimiters'","'digit'","'entrypoints'","'eps'","'internal'","'layout'","'letter'","'lower'","'nonempty'","'position'","'rules'","'separator'","'stop'","'terminator'","'token'","'toplevel'","'upper'","'views'","'{'","'|'","'}'","L_ident","L_quoted","L_integ","L_charac","L_doubl","%eof"]
+        bit_start = st * 119
+        bit_end = (st + 1) * 119
+        read_bit = readArrayBit happyExpList
+        bits = map read_bit [bit_start..bit_end - 1]
+        bits_indexed = zip bits [0..118]
+        token_strs_expected = concatMap f bits_indexed
+        f (False, _) = []
+        f (True, nr) = [token_strs !! nr]
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\x50\x00\x69\x00\x50\x00\xe7\xff\x82\x00\x82\x00\x9b\x00\xd9\x00\x00\x00\x1c\x00\x2d\x00\x2d\x00\x47\x00\x4e\x00\x59\x00\x90\x00\xb1\x00\xaf\x00\x00\x00\xa4\x01\xe0\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\xc6\x00\x29\x00\x29\x00\x29\x00\x29\x00\x0f\x01\x00\x00\x00\x00\x11\x00\x15\x01\x03\x00\x19\x01\x29\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x01\x00\x00\x3e\x00\x30\x01\x01\x00\x25\x01\x00\x00\xd9\x00\x38\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x3d\x01\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x07\x00\x61\x01\x6a\x01\x00\x00\x48\x01\x48\x01\x48\x01\x48\x01\x72\x01\x4c\x01\x4c\x01\x68\x01\x68\x01\x20\x00\x00\x00\x70\x01\xad\x01\x7d\x01\x8a\x01\xb3\x01\x85\x01\x91\x01\xc8\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\xa0\x01\xc7\x01\xc2\x01\x00\x00\xa3\x01\x4a\x00\x00\x00\xa3\x01\x1c\x00\xf6\xff\x00\x00\xa3\x01\x00\x00\xa3\x01\xcb\x01\xab\x01\xa9\x01\xac\x01\x1c\x00\xac\x01\x98\x00\xa1\x01\xb6\x01\xb0\x01\xba\x01\xba\x01\xb1\x01\xb2\x01\xcd\x01\x82\x00\xb7\x01\x00\x00\xd6\x01\xb8\x01\x05\x00\xd2\x01\xb9\x01\xd5\x01\x00\x00\x50\x00\xbb\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\x9b\x00\x50\x00\xbf\x01\x00\x00\x82\x00\x29\x00\x1c\x00\x1c\x00\xd8\x01\xc0\x01\x00\x00\xc1\x01\x00\x00\xd7\x01\x00\x00\xc3\x01\x00\x00\xc3\x01\xc4\x01\x1c\x00\x00\x00\xd1\x01\xe1\x01\x00\x00\x78\x00\x00\x00\x45\x00\xc5\x01\xde\x01\xe4\x01\xe4\x01\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x01\x07\x00\x07\x00\x00\x00\xe0\x01\xf0\x01\x00\x00\x00\x00\x03\x00\x29\x00\x00\x00\x00\x00\x00\x00\xcc\x01\xe7\x01\xf4\x01\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\x00\x00\x00\x00\xda\x01\x00\x00\x00\x00\xfa\xff\xcf\x01\x1c\x00\x00\x00\x29\x00\x00\x00\xcf\x01\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x01\xa4\x01\x07\x00\x00\x00\xf9\x01\xf7\x01\xf2\x01\x00\x00\xd9\x00\x00\x00\xe2\x01\x00\x00\xd9\x00\x00\x00\xd9\x01\xef\x01\xfe\x01\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\x5d\x01\x8d\x01\x69\x01\x0b\x00\x96\x01\x99\x01\x73\x01\xaf\x01\xf5\x01\x89\x00\x8b\x01\x09\x00\xf6\x01\xf3\x01\x02\x00\xae\x01\x8d\x00\x77\x00\xec\x01\xee\x01\x37\x00\x1a\x01\x2e\x01\x4b\x01\xf2\x00\xc9\x00\x71\x00\x35\x01\xe8\x01\x3c\x00\xbc\x00\xfe\xff\xa3\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x02\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x1f\x01\xf7\x00\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x02\x0a\x02\xc3\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x00\x00\x00\x00\xa9\x00\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x02\x0d\x02\x0f\x02\xc0\x00\x4c\x00\xa7\x01\x52\x00\x00\x00\x10\x02\xf8\x01\xfa\x01\x11\x02\x00\x00\x00\x00\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x01\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x81\x01\x08\x01\x00\x00\xaa\x01\xb2\x00\x07\x01\x5c\x01\x00\x00\x12\x02\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x13\x02\xfc\x01\x14\x02\x0b\x02\x60\x01\x00\x00\x00\x00\x22\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xb4\x01\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x24\x01\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x01\x00\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x17\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x15\x02\x86\x01\x00\x00\xb8\x00\x3b\x01\x16\x02\x17\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02\x29\x01\x18\x02\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\x00\x00\xfb\x01\x19\x02\xbe\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#
+happyAdjustOffset off = off
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\xd5\xff\x00\x00\xd5\xff\x00\x00\xce\xff\xce\xff\x00\x00\x00\x00\xb8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\xa6\xff\x00\x00\x00\x00\xa0\xff\x9e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xff\x00\x00\xb8\xff\xb8\xff\x85\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\x7b\xff\x80\xff\x72\xff\x83\xff\x00\x00\x00\x00\x00\x00\x74\xff\x78\xff\x7c\xff\x77\xff\x75\xff\x76\xff\x00\x00\xdb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x86\xff\x89\xff\x88\xff\x00\x00\x00\x00\x95\xff\x92\xff\x94\xff\x93\xff\x91\xff\x8b\xff\x00\x00\x00\x00\x8e\xff\xdd\xff\xdc\xff\xda\xff\x95\xff\x8d\xff\x98\xff\x96\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xff\x00\x00\xa3\xff\x00\x00\x00\x00\xa5\xff\x00\x00\xa9\xff\xa8\xff\x00\x00\x00\x00\x00\x00\xb0\xff\x00\x00\x00\x00\x00\x00\xaf\xff\x00\x00\xb4\xff\xb5\xff\x00\x00\x00\x00\x00\x00\xba\xff\x00\x00\xb9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\xff\x85\xff\x00\x00\x00\x00\xcd\xff\xce\xff\x00\x00\xcf\xff\xd1\xff\x00\x00\xb0\xff\xd4\xff\x00\x00\x00\x00\xd8\xff\xd5\xff\x00\x00\x00\x00\x00\x00\xd9\xff\xd6\xff\xd2\xff\x00\x00\xd5\xff\x00\x00\xcb\xff\xce\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xff\x00\x00\xbb\xff\x00\x00\xc4\xff\x00\x00\xa0\xff\xc9\xff\x00\x00\x00\x00\xb7\xff\x00\x00\xb1\xff\xb3\xff\x00\x00\xae\xff\x00\x00\xa9\xff\x00\x00\xa6\xff\xa6\xff\xa2\xff\x9f\xff\x9d\xff\x9c\xff\x00\x00\x00\x00\x8e\xff\x97\xff\x00\x00\x00\x00\x8a\xff\xb8\xff\x84\xff\x00\x00\x7f\xff\x7e\xff\x7d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x81\xff\x73\xff\x7a\xff\x79\xff\x82\xff\x87\xff\x8f\xff\x90\xff\x8c\xff\x99\xff\x9a\xff\x00\x00\xa4\xff\xaa\xff\xa7\xff\xad\xff\x00\x00\xb2\xff\xb6\xff\x00\x00\xc0\xff\xc8\xff\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\xb8\xff\x00\x00\x00\x00\xc6\xff\xcc\xff\xd0\xff\xd3\xff\xd7\xff\xc2\xff\xc3\xff\xbf\xff\xc5\xff\x00\x00\x9e\xff\x00\x00\xb8\xff\x00\x00\x00\x00\x00\x00\xac\xff\xca\xff\xbe\xff\x85\xff\xb8\xff\xc7\xff\xc1\xff\xa9\xff\x00\x00\x00\x00\xab\xff"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x03\x00\x01\x00\x0d\x00\x02\x00\x0b\x00\x03\x00\x04\x00\x01\x00\x00\x00\x05\x00\x00\x00\x02\x00\x08\x00\x0d\x00\x0c\x00\x29\x00\x10\x00\x01\x00\x08\x00\x0d\x00\x13\x00\x15\x00\x06\x00\x17\x00\x10\x00\x03\x00\x1a\x00\x1b\x00\x13\x00\x0d\x00\x29\x00\x2a\x00\x10\x00\x24\x00\x29\x00\x2e\x00\x24\x00\x15\x00\x26\x00\x17\x00\x0d\x00\x01\x00\x1a\x00\x1b\x00\x2c\x00\x01\x00\x2e\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x24\x00\x0d\x00\x26\x00\x01\x00\x10\x00\x0d\x00\x24\x00\x0f\x00\x2c\x00\x15\x00\x03\x00\x17\x00\x03\x00\x04\x00\x1a\x00\x1b\x00\x29\x00\x03\x00\x02\x00\x01\x00\x29\x00\x0c\x00\x01\x00\x00\x00\x24\x00\x2e\x00\x26\x00\x19\x00\x01\x00\x0d\x00\x01\x00\x08\x00\x2c\x00\x29\x00\x0d\x00\x01\x00\x0f\x00\x0a\x00\x0d\x00\x01\x00\x0d\x00\x22\x00\x0f\x00\x24\x00\x11\x00\x12\x00\x13\x00\x14\x00\x22\x00\x16\x00\x24\x00\x18\x00\x19\x00\x01\x00\x19\x00\x2e\x00\x1d\x00\x1e\x00\x1f\x00\x19\x00\x21\x00\x22\x00\x29\x00\x19\x00\x25\x00\x0d\x00\x00\x00\x0f\x00\x29\x00\x11\x00\x12\x00\x13\x00\x14\x00\x0d\x00\x16\x00\x08\x00\x18\x00\x19\x00\x01\x00\x2b\x00\x0d\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\x22\x00\x0a\x00\x16\x00\x25\x00\x0d\x00\x1f\x00\x0f\x00\x29\x00\x11\x00\x12\x00\x13\x00\x14\x00\x0e\x00\x16\x00\x01\x00\x18\x00\x19\x00\x01\x00\x0d\x00\x11\x00\x1d\x00\x1e\x00\x1f\x00\x15\x00\x21\x00\x22\x00\x0d\x00\x03\x00\x0f\x00\x0d\x00\x00\x00\x0f\x00\x29\x00\x11\x00\x12\x00\x13\x00\x14\x00\x03\x00\x16\x00\x01\x00\x18\x00\x19\x00\x03\x00\x00\x00\x0e\x00\x1d\x00\x1e\x00\x1f\x00\x03\x00\x21\x00\x22\x00\x08\x00\x03\x00\x00\x00\x29\x00\x03\x00\x00\x00\x29\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x0e\x00\x22\x00\x23\x00\x24\x00\x25\x00\x02\x00\x22\x00\x23\x00\x24\x00\x25\x00\x29\x00\x16\x00\x22\x00\x23\x00\x24\x00\x25\x00\x22\x00\x23\x00\x24\x00\x22\x00\x1c\x00\x24\x00\x13\x00\x1c\x00\x0d\x00\x1e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x11\x00\x29\x00\x2a\x00\x1c\x00\x15\x00\x1e\x00\x00\x00\x00\x00\x1c\x00\x2a\x00\x1e\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x08\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x0e\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x11\x00\x1a\x00\x1b\x00\x1c\x00\x15\x00\x29\x00\x1a\x00\x1b\x00\x1c\x00\x27\x00\x2a\x00\x1a\x00\x1b\x00\x1c\x00\x00\x00\x0d\x00\x1a\x00\x1b\x00\x1c\x00\x0d\x00\x2e\x00\x0d\x00\x1b\x00\x1c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x02\x00\x10\x00\x11\x00\x2e\x00\x1f\x00\x20\x00\x15\x00\x27\x00\x1f\x00\x20\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x2e\x00\x27\x00\x00\x00\x13\x00\x05\x00\x06\x00\x07\x00\x08\x00\x05\x00\x1c\x00\x0b\x00\x00\x00\x0e\x00\x2e\x00\x0f\x00\x10\x00\x0e\x00\x06\x00\x07\x00\x08\x00\x08\x00\x00\x00\x0b\x00\x00\x00\x2e\x00\x05\x00\x0f\x00\x10\x00\x2e\x00\x06\x00\x07\x00\x08\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x0f\x00\x10\x00\x0f\x00\x10\x00\x00\x00\x06\x00\x07\x00\x08\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x0f\x00\x10\x00\x0f\x00\x10\x00\x2a\x00\x06\x00\x0e\x00\x08\x00\x00\x00\x0d\x00\x0b\x00\x00\x00\x0f\x00\x10\x00\x0f\x00\x10\x00\x2e\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0a\x00\x0b\x00\x0f\x00\x10\x00\x00\x00\x0f\x00\x10\x00\x00\x00\x2e\x00\x0a\x00\x0b\x00\x01\x00\x00\x00\x01\x00\x0f\x00\x10\x00\x2e\x00\x0a\x00\x0b\x00\x0f\x00\x10\x00\x05\x00\x0f\x00\x10\x00\x0c\x00\x2b\x00\x0e\x00\x00\x00\x01\x00\x12\x00\x20\x00\x14\x00\x1f\x00\x23\x00\x21\x00\x12\x00\x12\x00\x14\x00\x14\x00\x0c\x00\x2a\x00\x0e\x00\x05\x00\x2e\x00\x08\x00\x0e\x00\x2e\x00\x07\x00\x2a\x00\x29\x00\x29\x00\x1c\x00\x0a\x00\x22\x00\x29\x00\x29\x00\x05\x00\x0a\x00\x08\x00\x07\x00\x0e\x00\x2e\x00\x09\x00\x01\x00\x09\x00\x29\x00\x2e\x00\x2e\x00\x2e\x00\x29\x00\x29\x00\x2e\x00\x2a\x00\x0e\x00\x2a\x00\x0e\x00\x2b\x00\x2b\x00\x0d\x00\x02\x00\x2a\x00\x28\x00\x0e\x00\x02\x00\x0e\x00\x0e\x00\x2a\x00\x09\x00\x02\x00\x05\x00\x0e\x00\x1c\x00\x0d\x00\x02\x00\x01\x00\x0d\x00\x17\x00\x2b\x00\x12\x00\x18\x00\x11\x00\x01\x00\x21\x00\x01\x00\x01\x00\x00\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x21\x00\x18\x00\x21\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\x23\x00\x29\x00\x6b\x00\x5d\x00\xee\x00\xbe\x00\xbf\x00\x43\x00\x61\x00\x93\x00\x82\x00\x5d\x00\xd1\xff\x2a\x00\xc0\x00\x23\x00\x2b\x00\x29\x00\x83\x00\x44\x00\x5e\x00\x2c\x00\xc4\x00\x2d\x00\x62\x00\x23\x00\x2e\x00\x2f\x00\xac\x00\x2a\x00\x23\x00\x45\x00\x2b\x00\x32\x00\x23\x00\xff\xff\x30\x00\x2c\x00\x31\x00\x2d\x00\x6b\x00\x29\x00\x2e\x00\x2f\x00\x32\x00\x64\x00\xff\xff\x23\x00\x45\x00\x46\x00\x32\x00\x47\x00\x30\x00\x2a\x00\x31\x00\x4f\x00\x2b\x00\x65\x00\xbb\x00\x66\x00\x32\x00\x2c\x00\x23\x00\x2d\x00\xbe\x00\xbf\x00\x2e\x00\x2f\x00\x23\x00\x23\x00\xd4\x00\x5a\x00\x23\x00\xc0\x00\xa9\x00\x82\x00\x30\x00\xff\xff\x31\x00\x50\x00\x64\x00\xd5\x00\x4f\x00\x9e\x00\x32\x00\x23\x00\x65\x00\x4f\x00\x66\x00\x8a\x00\x5d\x00\x4f\x00\x65\x00\x34\x00\x66\x00\x26\x00\x72\x00\x73\x00\x74\x00\x75\x00\xc8\x00\x76\x00\x26\x00\x77\x00\x78\x00\x64\x00\x9a\x00\xff\xff\x79\x00\x7a\x00\x7b\x00\xdd\x00\x7c\x00\x7d\x00\x23\x00\xce\x00\x8b\x00\x65\x00\x55\x00\x66\x00\x23\x00\x72\x00\x73\x00\x74\x00\x75\x00\x37\x00\x76\x00\xab\x00\x77\x00\x78\x00\x64\x00\x46\x00\xaf\x00\x79\x00\x7a\x00\x7b\x00\x68\x00\x7c\x00\x7d\x00\x80\x00\x56\x00\x8b\x00\x65\x00\x3a\x00\x66\x00\x23\x00\x72\x00\x73\x00\x74\x00\x75\x00\x69\x00\x76\x00\x64\x00\x77\x00\x78\x00\x64\x00\x5d\x00\x57\x00\x79\x00\x7a\x00\x7b\x00\x58\x00\x7c\x00\x7d\x00\x65\x00\x23\x00\x66\x00\x65\x00\x68\x00\x66\x00\x23\x00\x72\x00\x73\x00\x74\x00\x75\x00\x23\x00\x76\x00\x5a\x00\x77\x00\x78\x00\x23\x00\x82\x00\xa5\x00\x79\x00\x7a\x00\x7b\x00\x23\x00\x7c\x00\x7d\x00\x8e\x00\x23\x00\x68\x00\x23\x00\x23\x00\x55\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x9f\x00\x24\x00\x25\x00\x26\x00\xc2\x00\x5d\x00\x24\x00\x25\x00\x26\x00\xe2\x00\x23\x00\xb0\x00\x24\x00\x25\x00\x26\x00\xea\x00\x24\x00\x33\x00\x26\x00\xc4\x00\x37\x00\x26\x00\xd2\x00\x40\x00\x6b\x00\x41\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x57\x00\x23\x00\x45\x00\x40\x00\xaf\x00\xb9\x00\x68\x00\x82\x00\x40\x00\x45\x00\xb6\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\xe4\x00\x48\x00\x49\x00\x4a\x00\xb7\x00\xe1\x00\x48\x00\x49\x00\x4a\x00\xcc\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x57\x00\x4e\x00\x49\x00\x4a\x00\xd5\x00\x23\x00\xb8\x00\x49\x00\x4a\x00\xbd\x00\x45\x00\xcd\x00\x49\x00\x4a\x00\x61\x00\x37\x00\xf4\x00\x49\x00\x4a\x00\x37\x00\xff\xff\x37\x00\x4d\x00\x4a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x5d\x00\xa6\x00\x57\x00\xff\xff\x38\x00\x39\x00\xa7\x00\xbd\x00\x38\x00\xc9\x00\x38\x00\xe9\x00\x68\x00\x84\x00\xff\xff\xbb\x00\x68\x00\xfa\x00\x8c\x00\x85\x00\x8d\x00\x87\x00\xb6\x00\x4c\x00\x88\x00\x84\x00\xe0\x00\xff\xff\x70\x00\x67\x00\xd7\x00\x85\x00\x86\x00\x87\x00\xb5\x00\x61\x00\x88\x00\x84\x00\xff\xff\xb4\x00\x70\x00\x67\x00\xff\xff\x85\x00\x8f\x00\x87\x00\x6f\x00\x61\x00\x88\x00\x84\x00\x70\x00\x67\x00\x70\x00\x67\x00\x68\x00\x85\x00\xe5\x00\x87\x00\xe6\x00\x61\x00\x88\x00\x84\x00\x70\x00\x67\x00\x70\x00\x67\x00\x45\x00\x8b\x00\xeb\x00\x87\x00\x61\x00\xaf\x00\x88\x00\x61\x00\x66\x00\x67\x00\x70\x00\x67\x00\xff\xff\x80\x00\x81\x00\x7e\x00\x61\x00\x7d\x00\x7e\x00\x70\x00\x67\x00\x61\x00\x70\x00\x67\x00\x61\x00\xff\xff\x93\x00\x7e\x00\x5a\x00\x68\x00\x6c\x00\x70\x00\x67\x00\xff\xff\xe3\x00\x7e\x00\x9d\x00\x67\x00\xae\x00\x70\x00\x67\x00\x6d\x00\x46\x00\x6e\x00\x68\x00\x6c\x00\x5a\x00\x9c\x00\x5b\x00\x53\x00\x9d\x00\x54\x00\x5a\x00\x5a\x00\xd0\x00\xcf\x00\xa4\x00\x45\x00\x6e\x00\xac\x00\xff\xff\xab\x00\xaa\x00\xff\xff\xa4\x00\x45\x00\x23\x00\x23\x00\x37\x00\x95\x00\x9a\x00\x23\x00\x23\x00\x93\x00\x92\x00\x91\x00\xdd\x00\xd7\x00\xff\xff\xe0\x00\x5a\x00\xef\x00\x23\x00\xff\xff\xff\xff\xff\xff\x23\x00\x23\x00\xff\xff\x45\x00\xd2\x00\x45\x00\xcc\x00\x46\x00\x46\x00\x5d\x00\xcb\x00\x45\x00\xc8\x00\xc7\x00\xc6\x00\xf1\x00\xf0\x00\x45\x00\xf7\x00\xf3\x00\xf2\x00\xfc\x00\x37\x00\xfa\x00\xfd\x00\xc1\x00\x6b\x00\x54\x00\x46\x00\x5f\x00\x51\x00\x60\x00\xc0\x00\x35\x00\xb2\x00\xb1\x00\xa2\x00\xd8\x00\xa1\x00\xa0\x00\x98\x00\x95\x00\xde\x00\xda\x00\xdb\x00\xd9\x00\xec\x00\xe8\x00\xe7\x00\x97\x00\xf5\x00\x96\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x00\xf7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyReduceArr = Happy_Data_Array.array (33, 141) [
+	(33 , happyReduce_33),
+	(34 , happyReduce_34),
+	(35 , happyReduce_35),
+	(36 , happyReduce_36),
+	(37 , happyReduce_37),
+	(38 , happyReduce_38),
+	(39 , happyReduce_39),
+	(40 , happyReduce_40),
+	(41 , happyReduce_41),
+	(42 , happyReduce_42),
+	(43 , happyReduce_43),
+	(44 , happyReduce_44),
+	(45 , happyReduce_45),
+	(46 , happyReduce_46),
+	(47 , happyReduce_47),
+	(48 , happyReduce_48),
+	(49 , happyReduce_49),
+	(50 , happyReduce_50),
+	(51 , happyReduce_51),
+	(52 , happyReduce_52),
+	(53 , happyReduce_53),
+	(54 , happyReduce_54),
+	(55 , happyReduce_55),
+	(56 , happyReduce_56),
+	(57 , happyReduce_57),
+	(58 , happyReduce_58),
+	(59 , happyReduce_59),
+	(60 , happyReduce_60),
+	(61 , happyReduce_61),
+	(62 , happyReduce_62),
+	(63 , happyReduce_63),
+	(64 , happyReduce_64),
+	(65 , happyReduce_65),
+	(66 , happyReduce_66),
+	(67 , happyReduce_67),
+	(68 , happyReduce_68),
+	(69 , happyReduce_69),
+	(70 , happyReduce_70),
+	(71 , happyReduce_71),
+	(72 , happyReduce_72),
+	(73 , happyReduce_73),
+	(74 , happyReduce_74),
+	(75 , happyReduce_75),
+	(76 , happyReduce_76),
+	(77 , happyReduce_77),
+	(78 , happyReduce_78),
+	(79 , happyReduce_79),
+	(80 , happyReduce_80),
+	(81 , happyReduce_81),
+	(82 , happyReduce_82),
+	(83 , happyReduce_83),
+	(84 , happyReduce_84),
+	(85 , happyReduce_85),
+	(86 , happyReduce_86),
+	(87 , happyReduce_87),
+	(88 , happyReduce_88),
+	(89 , happyReduce_89),
+	(90 , happyReduce_90),
+	(91 , happyReduce_91),
+	(92 , happyReduce_92),
+	(93 , happyReduce_93),
+	(94 , happyReduce_94),
+	(95 , happyReduce_95),
+	(96 , happyReduce_96),
+	(97 , happyReduce_97),
+	(98 , happyReduce_98),
+	(99 , happyReduce_99),
+	(100 , happyReduce_100),
+	(101 , happyReduce_101),
+	(102 , happyReduce_102),
+	(103 , happyReduce_103),
+	(104 , happyReduce_104),
+	(105 , happyReduce_105),
+	(106 , happyReduce_106),
+	(107 , happyReduce_107),
+	(108 , happyReduce_108),
+	(109 , happyReduce_109),
+	(110 , happyReduce_110),
+	(111 , happyReduce_111),
+	(112 , happyReduce_112),
+	(113 , happyReduce_113),
+	(114 , happyReduce_114),
+	(115 , happyReduce_115),
+	(116 , happyReduce_116),
+	(117 , happyReduce_117),
+	(118 , happyReduce_118),
+	(119 , happyReduce_119),
+	(120 , happyReduce_120),
+	(121 , happyReduce_121),
+	(122 , happyReduce_122),
+	(123 , happyReduce_123),
+	(124 , happyReduce_124),
+	(125 , happyReduce_125),
+	(126 , happyReduce_126),
+	(127 , happyReduce_127),
+	(128 , happyReduce_128),
+	(129 , happyReduce_129),
+	(130 , happyReduce_130),
+	(131 , happyReduce_131),
+	(132 , happyReduce_132),
+	(133 , happyReduce_133),
+	(134 , happyReduce_134),
+	(135 , happyReduce_135),
+	(136 , happyReduce_136),
+	(137 , happyReduce_137),
+	(138 , happyReduce_138),
+	(139 , happyReduce_139),
+	(140 , happyReduce_140),
+	(141 , happyReduce_141)
+	]
+
+happy_n_terms = 47 :: Int
+happy_n_nonterms = 38 :: Int
+
+happyReduce_33 = happySpecReduce_1  0# happyReduction_33
+happyReduction_33 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TV happy_var_1)) -> 
+	happyIn36
+		 (Ident happy_var_1
+	)}
+
+happyReduce_34 = happySpecReduce_1  1# happyReduction_34
+happyReduction_34 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TL happy_var_1)) -> 
+	happyIn37
+		 (happy_var_1
+	)}
+
+happyReduce_35 = happySpecReduce_1  2# happyReduction_35
+happyReduction_35 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TI happy_var_1)) -> 
+	happyIn38
+		 ((read ( happy_var_1)) :: Integer
+	)}
+
+happyReduce_36 = happySpecReduce_1  3# happyReduction_36
+happyReduction_36 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TC happy_var_1)) -> 
+	happyIn39
+		 ((read ( happy_var_1)) :: Char
+	)}
+
+happyReduce_37 = happySpecReduce_1  4# happyReduction_37
+happyReduction_37 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (PT _ (TD happy_var_1)) -> 
+	happyIn40
+		 ((read ( happy_var_1)) :: Double
+	)}
+
+happyReduce_38 = happySpecReduce_1  5# happyReduction_38
+happyReduction_38 happy_x_1
+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
+	happyIn41
+		 (AbsBNF.LGr happy_var_1
+	)}
+
+happyReduce_39 = happySpecReduce_1  6# happyReduction_39
+happyReduction_39 happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	happyIn42
+		 (AbsBNF.DefAll happy_var_1
+	)}
+
+happyReduce_40 = happySpecReduce_3  6# happyReduction_40
+happyReduction_40 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
+	case happyOut47 happy_x_3 of { happy_var_3 -> 
+	happyIn42
+		 (AbsBNF.DefSome happy_var_1 happy_var_3
+	)}}
+
+happyReduce_41 = happySpecReduce_2  6# happyReduction_41
+happyReduction_41 happy_x_2
+	happy_x_1
+	 =  case happyOut44 happy_x_2 of { happy_var_2 -> 
+	happyIn42
+		 (AbsBNF.LDefView happy_var_2
+	)}
+
+happyReduce_42 = happySpecReduce_0  7# happyReduction_42
+happyReduction_42  =  happyIn43
+		 ([]
+	)
+
+happyReduce_43 = happySpecReduce_1  7# happyReduction_43
+happyReduction_43 happy_x_1
+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
+	happyIn43
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_44 = happySpecReduce_3  7# happyReduction_44
+happyReduction_44 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
+	case happyOut43 happy_x_3 of { happy_var_3 -> 
+	happyIn43
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_45 = happySpecReduce_2  7# happyReduction_45
+happyReduction_45 happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> 
+	happyIn43
+		 (happy_var_2
+	)}
+
+happyReduce_46 = happySpecReduce_1  8# happyReduction_46
+happyReduction_46 happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_47 = happySpecReduce_3  8# happyReduction_47
+happyReduction_47 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	case happyOut44 happy_x_3 of { happy_var_3 -> 
+	happyIn44
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_48 = happySpecReduce_1  9# happyReduction_48
+happyReduction_48 happy_x_1
+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
+	happyIn45
+		 (AbsBNF.Grammar happy_var_1
+	)}
+
+happyReduce_49 = happySpecReduce_0  10# happyReduction_49
+happyReduction_49  =  happyIn46
+		 ([]
+	)
+
+happyReduce_50 = happySpecReduce_1  10# happyReduction_50
+happyReduction_50 happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	happyIn46
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_51 = happySpecReduce_3  10# happyReduction_51
+happyReduction_51 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	happyIn46
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_52 = happySpecReduce_2  10# happyReduction_52
+happyReduction_52 happy_x_2
+	happy_x_1
+	 =  case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn46
+		 (happy_var_2
+	)}
+
+happyReduce_53 = happyReduce 5# 11# happyReduction_53
+happyReduction_53 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut51 happy_x_1 of { happy_var_1 -> 
+	case happyOut50 happy_x_3 of { happy_var_3 -> 
+	case happyOut49 happy_x_5 of { happy_var_5 -> 
+	happyIn47
+		 (AbsBNF.Rule happy_var_1 happy_var_3 (reverse happy_var_5)
+	) `HappyStk` happyRest}}}
+
+happyReduce_54 = happySpecReduce_2  11# happyReduction_54
+happyReduction_54 happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> 
+	happyIn47
+		 (AbsBNF.Comment happy_var_2
+	)}
+
+happyReduce_55 = happySpecReduce_3  11# happyReduction_55
+happyReduction_55 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	happyIn47
+		 (AbsBNF.Comments happy_var_2 happy_var_3
+	)}}
+
+happyReduce_56 = happyReduce 6# 11# happyReduction_56
+happyReduction_56 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut51 happy_x_2 of { happy_var_2 -> 
+	case happyOut50 happy_x_4 of { happy_var_4 -> 
+	case happyOut49 happy_x_6 of { happy_var_6 -> 
+	happyIn47
+		 (AbsBNF.Internal happy_var_2 happy_var_4 (reverse happy_var_6)
+	) `HappyStk` happyRest}}}
+
+happyReduce_57 = happySpecReduce_3  11# happyReduction_57
+happyReduction_57 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> 
+	case happyOut73 happy_x_3 of { happy_var_3 -> 
+	happyIn47
+		 (AbsBNF.Token happy_var_2 happy_var_3
+	)}}
+
+happyReduce_58 = happyReduce 4# 11# happyReduction_58
+happyReduction_58 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut36 happy_x_3 of { happy_var_3 -> 
+	case happyOut73 happy_x_4 of { happy_var_4 -> 
+	happyIn47
+		 (AbsBNF.PosToken happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_59 = happySpecReduce_2  11# happyReduction_59
+happyReduction_59 happy_x_2
+	happy_x_1
+	 =  case happyOut44 happy_x_2 of { happy_var_2 -> 
+	happyIn47
+		 (AbsBNF.Entryp happy_var_2
+	)}
+
+happyReduce_60 = happyReduce 4# 11# happyReduction_60
+happyReduction_60 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut69 happy_x_2 of { happy_var_2 -> 
+	case happyOut50 happy_x_3 of { happy_var_3 -> 
+	case happyOut37 happy_x_4 of { happy_var_4 -> 
+	happyIn47
+		 (AbsBNF.Separator happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_61 = happyReduce 4# 11# happyReduction_61
+happyReduction_61 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut69 happy_x_2 of { happy_var_2 -> 
+	case happyOut50 happy_x_3 of { happy_var_3 -> 
+	case happyOut37 happy_x_4 of { happy_var_4 -> 
+	happyIn47
+		 (AbsBNF.Terminator happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_62 = happyReduce 6# 11# happyReduction_62
+happyReduction_62 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut50 happy_x_2 of { happy_var_2 -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOut37 happy_x_4 of { happy_var_4 -> 
+	case happyOut60 happy_x_5 of { happy_var_5 -> 
+	case happyOut69 happy_x_6 of { happy_var_6 -> 
+	happyIn47
+		 (AbsBNF.Delimiters happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_63 = happySpecReduce_3  11# happyReduction_63
+happyReduction_63 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> 
+	case happyOut38 happy_x_3 of { happy_var_3 -> 
+	happyIn47
+		 (AbsBNF.Coercions happy_var_2 happy_var_3
+	)}}
+
+happyReduce_64 = happyReduce 4# 11# happyReduction_64
+happyReduction_64 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut36 happy_x_2 of { happy_var_2 -> 
+	case happyOut68 happy_x_4 of { happy_var_4 -> 
+	happyIn47
+		 (AbsBNF.Rules happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_65 = happyReduce 5# 11# happyReduction_65
+happyReduction_65 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut36 happy_x_2 of { happy_var_2 -> 
+	case happyOut59 happy_x_3 of { happy_var_3 -> 
+	case happyOut62 happy_x_5 of { happy_var_5 -> 
+	happyIn47
+		 (AbsBNF.Function happy_var_2 (reverse happy_var_3) happy_var_5
+	) `HappyStk` happyRest}}}
+
+happyReduce_66 = happySpecReduce_2  11# happyReduction_66
+happyReduction_66 happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_2 of { happy_var_2 -> 
+	happyIn47
+		 (AbsBNF.Layout happy_var_2
+	)}
+
+happyReduce_67 = happySpecReduce_3  11# happyReduction_67
+happyReduction_67 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_3 of { happy_var_3 -> 
+	happyIn47
+		 (AbsBNF.LayoutStop happy_var_3
+	)}
+
+happyReduce_68 = happySpecReduce_2  11# happyReduction_68
+happyReduction_68 happy_x_2
+	happy_x_1
+	 =  happyIn47
+		 (AbsBNF.LayoutTop
+	)
+
+happyReduce_69 = happySpecReduce_1  12# happyReduction_69
+happyReduction_69 happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn48
+		 (AbsBNF.Terminal happy_var_1
+	)}
+
+happyReduce_70 = happySpecReduce_1  12# happyReduction_70
+happyReduction_70 happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	happyIn48
+		 (AbsBNF.NTerminal happy_var_1
+	)}
+
+happyReduce_71 = happySpecReduce_0  13# happyReduction_71
+happyReduction_71  =  happyIn49
+		 ([]
+	)
+
+happyReduce_72 = happySpecReduce_2  13# happyReduction_72
+happyReduction_72 happy_x_2
+	happy_x_1
+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
+	case happyOut48 happy_x_2 of { happy_var_2 -> 
+	happyIn49
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_73 = happySpecReduce_3  14# happyReduction_73
+happyReduction_73 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut50 happy_x_2 of { happy_var_2 -> 
+	happyIn50
+		 (AbsBNF.ListCat happy_var_2
+	)}
+
+happyReduce_74 = happySpecReduce_1  14# happyReduction_74
+happyReduction_74 happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (AbsBNF.IdCat happy_var_1
+	)}
+
+happyReduce_75 = happySpecReduce_1  15# happyReduction_75
+happyReduction_75 happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	happyIn51
+		 (AbsBNF.LabNoP happy_var_1
+	)}
+
+happyReduce_76 = happySpecReduce_2  15# happyReduction_76
+happyReduction_76 happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	case happyOut57 happy_x_2 of { happy_var_2 -> 
+	happyIn51
+		 (AbsBNF.LabP happy_var_1 happy_var_2
+	)}}
+
+happyReduce_77 = happySpecReduce_3  15# happyReduction_77
+happyReduction_77 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	case happyOut52 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	happyIn51
+		 (AbsBNF.LabPF happy_var_1 happy_var_2 happy_var_3
+	)}}}
+
+happyReduce_78 = happySpecReduce_2  15# happyReduction_78
+happyReduction_78 happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	case happyOut52 happy_x_2 of { happy_var_2 -> 
+	happyIn51
+		 (AbsBNF.LabF happy_var_1 happy_var_2
+	)}}
+
+happyReduce_79 = happySpecReduce_1  16# happyReduction_79
+happyReduction_79 happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	happyIn52
+		 (AbsBNF.Id happy_var_1
+	)}
+
+happyReduce_80 = happySpecReduce_1  16# happyReduction_80
+happyReduction_80 happy_x_1
+	 =  happyIn52
+		 (AbsBNF.Wild
+	)
+
+happyReduce_81 = happySpecReduce_2  16# happyReduction_81
+happyReduction_81 happy_x_2
+	happy_x_1
+	 =  happyIn52
+		 (AbsBNF.ListE
+	)
+
+happyReduce_82 = happySpecReduce_3  16# happyReduction_82
+happyReduction_82 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  happyIn52
+		 (AbsBNF.ListCons
+	)
+
+happyReduce_83 = happyReduce 5# 16# happyReduction_83
+happyReduction_83 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = happyIn52
+		 (AbsBNF.ListOne
+	) `HappyStk` happyRest
+
+happyReduce_84 = happyReduce 9# 17# happyReduction_84
+happyReduction_84 (happy_x_9 `HappyStk`
+	happy_x_8 `HappyStk`
+	happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut56 happy_x_3 of { happy_var_3 -> 
+	case happyOut55 happy_x_7 of { happy_var_7 -> 
+	happyIn53
+		 (AbsBNF.ProfIt happy_var_3 happy_var_7
+	) `HappyStk` happyRest}}
+
+happyReduce_85 = happySpecReduce_3  18# happyReduction_85
+happyReduction_85 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut55 happy_x_2 of { happy_var_2 -> 
+	happyIn54
+		 (AbsBNF.Ints happy_var_2
+	)}
+
+happyReduce_86 = happySpecReduce_0  19# happyReduction_86
+happyReduction_86  =  happyIn55
+		 ([]
+	)
+
+happyReduce_87 = happySpecReduce_1  19# happyReduction_87
+happyReduction_87 happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	happyIn55
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_88 = happySpecReduce_3  19# happyReduction_88
+happyReduction_88 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOut55 happy_x_3 of { happy_var_3 -> 
+	happyIn55
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_89 = happySpecReduce_0  20# happyReduction_89
+happyReduction_89  =  happyIn56
+		 ([]
+	)
+
+happyReduce_90 = happySpecReduce_1  20# happyReduction_90
+happyReduction_90 happy_x_1
+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
+	happyIn56
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_91 = happySpecReduce_3  20# happyReduction_91
+happyReduction_91 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
+	case happyOut56 happy_x_3 of { happy_var_3 -> 
+	happyIn56
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_92 = happySpecReduce_1  21# happyReduction_92
+happyReduction_92 happy_x_1
+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
+	happyIn57
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_93 = happySpecReduce_2  21# happyReduction_93
+happyReduction_93 happy_x_2
+	happy_x_1
+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
+	case happyOut57 happy_x_2 of { happy_var_2 -> 
+	happyIn57
+		 ((:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_94 = happySpecReduce_1  22# happyReduction_94
+happyReduction_94 happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	happyIn58
+		 (AbsBNF.Arg happy_var_1
+	)}
+
+happyReduce_95 = happySpecReduce_0  23# happyReduction_95
+happyReduction_95  =  happyIn59
+		 ([]
+	)
+
+happyReduce_96 = happySpecReduce_2  23# happyReduction_96
+happyReduction_96 happy_x_2
+	happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	case happyOut58 happy_x_2 of { happy_var_2 -> 
+	happyIn59
+		 (flip (:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_97 = happySpecReduce_0  24# happyReduction_97
+happyReduction_97  =  happyIn60
+		 (AbsBNF.SepNone
+	)
+
+happyReduce_98 = happySpecReduce_2  24# happyReduction_98
+happyReduction_98 happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> 
+	happyIn60
+		 (AbsBNF.SepTerm happy_var_2
+	)}
+
+happyReduce_99 = happySpecReduce_2  24# happyReduction_99
+happyReduction_99 happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> 
+	happyIn60
+		 (AbsBNF.SepSepar happy_var_2
+	)}
+
+happyReduce_100 = happySpecReduce_1  25# happyReduction_100
+happyReduction_100 happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn61
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_101 = happySpecReduce_3  25# happyReduction_101
+happyReduction_101 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	case happyOut61 happy_x_3 of { happy_var_3 -> 
+	happyIn61
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_102 = happySpecReduce_3  26# happyReduction_102
+happyReduction_102 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
+	case happyOut62 happy_x_3 of { happy_var_3 -> 
+	happyIn62
+		 (AbsBNF.Cons happy_var_1 happy_var_3
+	)}}
+
+happyReduce_103 = happySpecReduce_1  26# happyReduction_103
+happyReduction_103 happy_x_1
+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
+	happyIn62
+		 (happy_var_1
+	)}
+
+happyReduce_104 = happySpecReduce_2  27# happyReduction_104
+happyReduction_104 happy_x_2
+	happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	case happyOut66 happy_x_2 of { happy_var_2 -> 
+	happyIn63
+		 (AbsBNF.App happy_var_1 happy_var_2
+	)}}
+
+happyReduce_105 = happySpecReduce_1  27# happyReduction_105
+happyReduction_105 happy_x_1
+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> 
+	happyIn63
+		 (happy_var_1
+	)}
+
+happyReduce_106 = happySpecReduce_1  28# happyReduction_106
+happyReduction_106 happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	happyIn64
+		 (AbsBNF.Var happy_var_1
+	)}
+
+happyReduce_107 = happySpecReduce_1  28# happyReduction_107
+happyReduction_107 happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	happyIn64
+		 (AbsBNF.LitInt happy_var_1
+	)}
+
+happyReduce_108 = happySpecReduce_1  28# happyReduction_108
+happyReduction_108 happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	happyIn64
+		 (AbsBNF.LitChar happy_var_1
+	)}
+
+happyReduce_109 = happySpecReduce_1  28# happyReduction_109
+happyReduction_109 happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn64
+		 (AbsBNF.LitString happy_var_1
+	)}
+
+happyReduce_110 = happySpecReduce_1  28# happyReduction_110
+happyReduction_110 happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	happyIn64
+		 (AbsBNF.LitDouble happy_var_1
+	)}
+
+happyReduce_111 = happySpecReduce_3  28# happyReduction_111
+happyReduction_111 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut65 happy_x_2 of { happy_var_2 -> 
+	happyIn64
+		 (AbsBNF.List happy_var_2
+	)}
+
+happyReduce_112 = happySpecReduce_3  28# happyReduction_112
+happyReduction_112 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut62 happy_x_2 of { happy_var_2 -> 
+	happyIn64
+		 (happy_var_2
+	)}
+
+happyReduce_113 = happySpecReduce_0  29# happyReduction_113
+happyReduction_113  =  happyIn65
+		 ([]
+	)
+
+happyReduce_114 = happySpecReduce_1  29# happyReduction_114
+happyReduction_114 happy_x_1
+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_115 = happySpecReduce_3  29# happyReduction_115
+happyReduction_115 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> 
+	case happyOut65 happy_x_3 of { happy_var_3 -> 
+	happyIn65
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_116 = happySpecReduce_1  30# happyReduction_116
+happyReduction_116 happy_x_1
+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> 
+	happyIn66
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_117 = happySpecReduce_2  30# happyReduction_117
+happyReduction_117 happy_x_2
+	happy_x_1
+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> 
+	case happyOut66 happy_x_2 of { happy_var_2 -> 
+	happyIn66
+		 ((:) happy_var_1 happy_var_2
+	)}}
+
+happyReduce_118 = happySpecReduce_1  31# happyReduction_118
+happyReduction_118 happy_x_1
+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
+	happyIn67
+		 (AbsBNF.RHS (reverse happy_var_1)
+	)}
+
+happyReduce_119 = happySpecReduce_1  32# happyReduction_119
+happyReduction_119 happy_x_1
+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> 
+	happyIn68
+		 ((:[]) happy_var_1
+	)}
+
+happyReduce_120 = happySpecReduce_3  32# happyReduction_120
+happyReduction_120 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> 
+	case happyOut68 happy_x_3 of { happy_var_3 -> 
+	happyIn68
+		 ((:) happy_var_1 happy_var_3
+	)}}
+
+happyReduce_121 = happySpecReduce_1  33# happyReduction_121
+happyReduction_121 happy_x_1
+	 =  happyIn69
+		 (AbsBNF.MNonempty
+	)
+
+happyReduce_122 = happySpecReduce_0  33# happyReduction_122
+happyReduction_122  =  happyIn69
+		 (AbsBNF.MEmpty
+	)
+
+happyReduce_123 = happySpecReduce_2  34# happyReduction_123
+happyReduction_123 happy_x_2
+	happy_x_1
+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> 
+	case happyOut72 happy_x_2 of { happy_var_2 -> 
+	happyIn70
+		 (AbsBNF.RSeq happy_var_1 happy_var_2
+	)}}
+
+happyReduce_124 = happySpecReduce_1  34# happyReduction_124
+happyReduction_124 happy_x_1
+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
+	happyIn70
+		 (happy_var_1
+	)}
+
+happyReduce_125 = happySpecReduce_3  35# happyReduction_125
+happyReduction_125 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> 
+	case happyOut70 happy_x_3 of { happy_var_3 -> 
+	happyIn71
+		 (AbsBNF.RAlt happy_var_1 happy_var_3
+	)}}
+
+happyReduce_126 = happySpecReduce_3  35# happyReduction_126
+happyReduction_126 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> 
+	case happyOut70 happy_x_3 of { happy_var_3 -> 
+	happyIn71
+		 (AbsBNF.RMinus happy_var_1 happy_var_3
+	)}}
+
+happyReduce_127 = happySpecReduce_1  35# happyReduction_127
+happyReduction_127 happy_x_1
+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> 
+	happyIn71
+		 (happy_var_1
+	)}
+
+happyReduce_128 = happySpecReduce_2  36# happyReduction_128
+happyReduction_128 happy_x_2
+	happy_x_1
+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
+	happyIn72
+		 (AbsBNF.RStar happy_var_1
+	)}
+
+happyReduce_129 = happySpecReduce_2  36# happyReduction_129
+happyReduction_129 happy_x_2
+	happy_x_1
+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
+	happyIn72
+		 (AbsBNF.RPlus happy_var_1
+	)}
+
+happyReduce_130 = happySpecReduce_2  36# happyReduction_130
+happyReduction_130 happy_x_2
+	happy_x_1
+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
+	happyIn72
+		 (AbsBNF.ROpt happy_var_1
+	)}
+
+happyReduce_131 = happySpecReduce_1  36# happyReduction_131
+happyReduction_131 happy_x_1
+	 =  happyIn72
+		 (AbsBNF.REps
+	)
+
+happyReduce_132 = happySpecReduce_1  36# happyReduction_132
+happyReduction_132 happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	happyIn72
+		 (AbsBNF.RChar happy_var_1
+	)}
+
+happyReduce_133 = happySpecReduce_3  36# happyReduction_133
+happyReduction_133 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> 
+	happyIn72
+		 (AbsBNF.RAlts happy_var_2
+	)}
+
+happyReduce_134 = happySpecReduce_3  36# happyReduction_134
+happyReduction_134 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> 
+	happyIn72
+		 (AbsBNF.RSeqs happy_var_2
+	)}
+
+happyReduce_135 = happySpecReduce_1  36# happyReduction_135
+happyReduction_135 happy_x_1
+	 =  happyIn72
+		 (AbsBNF.RDigit
+	)
+
+happyReduce_136 = happySpecReduce_1  36# happyReduction_136
+happyReduction_136 happy_x_1
+	 =  happyIn72
+		 (AbsBNF.RLetter
+	)
+
+happyReduce_137 = happySpecReduce_1  36# happyReduction_137
+happyReduction_137 happy_x_1
+	 =  happyIn72
+		 (AbsBNF.RUpper
+	)
+
+happyReduce_138 = happySpecReduce_1  36# happyReduction_138
+happyReduction_138 happy_x_1
+	 =  happyIn72
+		 (AbsBNF.RLower
+	)
+
+happyReduce_139 = happySpecReduce_1  36# happyReduction_139
+happyReduction_139 happy_x_1
+	 =  happyIn72
+		 (AbsBNF.RAny
+	)
+
+happyReduce_140 = happySpecReduce_3  36# happyReduction_140
+happyReduction_140 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut73 happy_x_2 of { happy_var_2 -> 
+	happyIn72
+		 (happy_var_2
+	)}
+
+happyReduce_141 = happySpecReduce_1  37# happyReduction_141
+happyReduction_141 happy_x_1
+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> 
+	happyIn73
+		 (happy_var_1
+	)}
+
+happyNewToken action sts stk [] =
+	happyDoAction 46# notHappyAtAll action sts stk []
+
+happyNewToken action sts stk (tk:tks) =
+	let cont i = happyDoAction i tk action sts stk tks in
+	case tk of {
+	PT _ (TS _ 1) -> cont 1#;
+	PT _ (TS _ 2) -> cont 2#;
+	PT _ (TS _ 3) -> cont 3#;
+	PT _ (TS _ 4) -> cont 4#;
+	PT _ (TS _ 5) -> cont 5#;
+	PT _ (TS _ 6) -> cont 6#;
+	PT _ (TS _ 7) -> cont 7#;
+	PT _ (TS _ 8) -> cont 8#;
+	PT _ (TS _ 9) -> cont 9#;
+	PT _ (TS _ 10) -> cont 10#;
+	PT _ (TS _ 11) -> cont 11#;
+	PT _ (TS _ 12) -> cont 12#;
+	PT _ (TS _ 13) -> cont 13#;
+	PT _ (TS _ 14) -> cont 14#;
+	PT _ (TS _ 15) -> cont 15#;
+	PT _ (TS _ 16) -> cont 16#;
+	PT _ (TS _ 17) -> cont 17#;
+	PT _ (TS _ 18) -> cont 18#;
+	PT _ (TS _ 19) -> cont 19#;
+	PT _ (TS _ 20) -> cont 20#;
+	PT _ (TS _ 21) -> cont 21#;
+	PT _ (TS _ 22) -> cont 22#;
+	PT _ (TS _ 23) -> cont 23#;
+	PT _ (TS _ 24) -> cont 24#;
+	PT _ (TS _ 25) -> cont 25#;
+	PT _ (TS _ 26) -> cont 26#;
+	PT _ (TS _ 27) -> cont 27#;
+	PT _ (TS _ 28) -> cont 28#;
+	PT _ (TS _ 29) -> cont 29#;
+	PT _ (TS _ 30) -> cont 30#;
+	PT _ (TS _ 31) -> cont 31#;
+	PT _ (TS _ 32) -> cont 32#;
+	PT _ (TS _ 33) -> cont 33#;
+	PT _ (TS _ 34) -> cont 34#;
+	PT _ (TS _ 35) -> cont 35#;
+	PT _ (TS _ 36) -> cont 36#;
+	PT _ (TS _ 37) -> cont 37#;
+	PT _ (TS _ 38) -> cont 38#;
+	PT _ (TS _ 39) -> cont 39#;
+	PT _ (TS _ 40) -> cont 40#;
+	PT _ (TV happy_dollar_dollar) -> cont 41#;
+	PT _ (TL happy_dollar_dollar) -> cont 42#;
+	PT _ (TI happy_dollar_dollar) -> cont 43#;
+	PT _ (TC happy_dollar_dollar) -> cont 44#;
+	PT _ (TD happy_dollar_dollar) -> cont 45#;
+	_ -> happyError' ((tk:tks), [])
+	}
+
+happyError_ explist 46# tk tks = happyError' (tks, explist)
+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)
+
+happyThen :: () => Err a -> (a -> Err b) -> Err b
+happyThen = (thenM)
+happyReturn :: () => a -> Err a
+happyReturn = (returnM)
+happyThen1 m k tks = (thenM) m (\a -> k a tks)
+happyReturn1 :: () => a -> b -> Err a
+happyReturn1 = \a tks -> (returnM) a
+happyError' :: () => ([(Token)], [String]) -> Err a
+happyError' = (\(tokens, _) -> happyError tokens)
+pLGrammar tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut41 x))
+
+pLDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut42 x))
+
+pListLDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut43 x))
+
+pListIdent tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut44 x))
+
+pGrammar tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut45 x))
+
+pListDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (happyOut46 x))
+
+pDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (happyOut47 x))
+
+pItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (happyOut48 x))
+
+pListItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (happyOut49 x))
+
+pCat tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (happyOut50 x))
+
+pLabel tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (happyOut51 x))
+
+pLabelId tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (happyOut52 x))
+
+pProfItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (happyOut53 x))
+
+pIntList tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (happyOut54 x))
+
+pListInteger tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (happyOut55 x))
+
+pListIntList tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (happyOut56 x))
+
+pListProfItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (happyOut57 x))
+
+pArg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (happyOut58 x))
+
+pListArg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (happyOut59 x))
+
+pSeparation tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (happyOut60 x))
+
+pListString tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (happyOut61 x))
+
+pExp tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (happyOut62 x))
+
+pExp1 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (happyOut63 x))
+
+pExp2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (happyOut64 x))
+
+pListExp tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 24# tks) (\x -> happyReturn (happyOut65 x))
+
+pListExp2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 25# tks) (\x -> happyReturn (happyOut66 x))
+
+pRHS tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 26# tks) (\x -> happyReturn (happyOut67 x))
+
+pListRHS tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 27# tks) (\x -> happyReturn (happyOut68 x))
+
+pMinimumSize tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 28# tks) (\x -> happyReturn (happyOut69 x))
+
+pReg2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 29# tks) (\x -> happyReturn (happyOut70 x))
+
+pReg1 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 30# tks) (\x -> happyReturn (happyOut71 x))
+
+pReg3 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 31# tks) (\x -> happyReturn (happyOut72 x))
+
+pReg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 32# tks) (\x -> happyReturn (happyOut73 x))
+
+happySeq = happyDontSeq
+
+
+returnM :: a -> Err a
+returnM = return
+
+thenM :: Err a -> (a -> Err b) -> Err b
+thenM = (>>=)
+
+happyError :: [Token] -> Err a
+happyError ts =
+  Bad $ "syntax error at " ++ tokenPos ts ++
+  case ts of
+    []      -> []
+    [Err _] -> " due to lexer error"
+    t:_     -> " before `" ++ id(prToken t) ++ "'"
+
+myLexer = tokens
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 18 "<built-in>" #-}
+{-# LINE 1 "/usr/local/lib/ghc-8.2.1/include/ghcversion.h" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 19 "<built-in>" #-}
+{-# LINE 1 "/var/folders/lg/qcd3v89j59l3m6520kr42bdm0000gn/T/ghc7892_0/ghc_2.h" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 20 "<built-in>" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)
+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)
+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)
+#else
+#define LT(n,m) (n Happy_GHC_Exts.<# m)
+#define GTE(n,m) (n Happy_GHC_Exts.>=# m)
+#define EQ(n,m) (n Happy_GHC_Exts.==# m)
+#endif
+
+{-# LINE 43 "templates/GenericTemplate.hs" #-}
+
+data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList
+
+
+
+
+
+
+
+
+{-# LINE 65 "templates/GenericTemplate.hs" #-}
+
+
+{-# LINE 75 "templates/GenericTemplate.hs" #-}
+
+
+
+
+
+
+
+
+
+
+infixr 9 `HappyStk`
+data HappyStk a = HappyStk a (HappyStk a)
+
+-----------------------------------------------------------------------------
+-- starting the parse
+
+happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
+
+-----------------------------------------------------------------------------
+-- Accepting the parse
+
+-- If the current token is 0#, it means we've just accepted a partial
+-- parse (a %partial parser).  We must ignore the saved token on the top of
+-- the stack in this case.
+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =
+        happyReturn1 ans
+happyAccept j tk st sts (HappyStk ans _) = 
+        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)
+
+-----------------------------------------------------------------------------
+-- Arrays only: do the next action
+
+
+
+happyDoAction i tk st
+        = {- nothing -}
+          
+
+          case action of
+                0#           -> {- nothing -}
+                                     happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Int)) i tk st
+                -1#          -> {- nothing -}
+                                     happyAccept i tk st
+                n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}
+                                                   
+                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st
+                                                   where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))
+                n                 -> {- nothing -}
+                                     
+
+                                     happyShift new_state i tk st
+                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))
+   where off    = happyAdjustOffset (indexShortOffAddr happyActOffsets st)
+         off_i  = (off Happy_GHC_Exts.+#  i)
+         check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))
+                  then EQ(indexShortOffAddr happyCheck off_i, i)
+                  else False
+         action
+          | check     = indexShortOffAddr happyTable off_i
+          | otherwise = indexShortOffAddr happyDefActions st
+
+
+
+
+indexShortOffAddr (HappyA# arr) off =
+        Happy_GHC_Exts.narrow16Int# i
+  where
+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)
+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))
+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))
+        off' = off Happy_GHC_Exts.*# 2#
+
+
+
+
+{-# INLINE happyLt #-}
+happyLt x y = LT(x,y)
+
+
+readArrayBit arr bit =
+    Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `mod` 16)
+  where unbox_int (Happy_GHC_Exts.I# x) = x
+
+
+
+
+
+
+data HappyAddr = HappyA# Happy_GHC_Exts.Addr#
+
+
+-----------------------------------------------------------------------------
+-- HappyState data type (not arrays)
+
+
+{-# LINE 180 "templates/GenericTemplate.hs" #-}
+
+-----------------------------------------------------------------------------
+-- Shifting a token
+
+happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
+--     trace "shifting the error token" $
+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)
+
+happyShift new_state i tk st sts stk =
+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)
+
+-- happyReduce is specialised for the common cases.
+
+happySpecReduce_0 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_0 nt fn j tk st@((action)) sts stk
+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)
+
+happySpecReduce_1 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')
+     = let r = fn v1 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_2 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')
+     = let r = fn v1 v2 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_3 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
+     = let r = fn v1 v2 v3 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happyReduce k i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyReduce k nt fn j tk st sts stk
+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of
+         sts1@((HappyCons (st1@(action)) (_))) ->
+                let r = fn stk in  -- it doesn't hurt to always seq here...
+                happyDoSeq r (happyGoto nt j tk st1 sts1 r)
+
+happyMonadReduce k nt fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyMonadReduce k nt fn j tk st sts stk =
+      case happyDrop k (HappyCons (st) (sts)) of
+        sts1@((HappyCons (st1@(action)) (_))) ->
+          let drop_stk = happyDropStk k stk in
+          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))
+
+happyMonad2Reduce k nt fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyMonad2Reduce k nt fn j tk st sts stk =
+      case happyDrop k (HappyCons (st) (sts)) of
+        sts1@((HappyCons (st1@(action)) (_))) ->
+         let drop_stk = happyDropStk k stk
+
+             off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)
+             off_i = (off Happy_GHC_Exts.+#  nt)
+             new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+          in
+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
+
+happyDrop 0# l = l
+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t
+
+happyDropStk 0# l = l
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs
+
+-----------------------------------------------------------------------------
+-- Moving to a new state after a reduction
+
+
+happyGoto nt j tk st = 
+   {- nothing -}
+   happyDoAction j tk new_state
+   where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)
+         off_i = (off Happy_GHC_Exts.+#  nt)
+         new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+-----------------------------------------------------------------------------
+-- Error recovery (0# is the error token)
+
+-- parse error if we are in recovery and we fail again
+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
+--      trace "failing" $ 
+        happyError_ explist i tk
+
+{-  We don't need state discarding for our restricted implementation of
+    "error".  In fact, it can cause some bogus parses, so I've disabled it
+    for now --SDM
+
+-- discard a state
+happyFail  0# tk old_st (HappyCons ((action)) (sts)) 
+                                                (saved_tok `HappyStk` _ `HappyStk` stk) =
+--      trace ("discarding state, depth " ++ show (length stk))  $
+        happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))
+-}
+
+-- Enter error recovery: generate an error token,
+--                       save the old token and carry on.
+happyFail explist i tk (action) sts stk =
+--      trace "entering error recovery" $
+        happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)
+
+-- Internal happy errors:
+
+notHappyAtAll :: a
+notHappyAtAll = error "Internal Happy error\n"
+
+-----------------------------------------------------------------------------
+-- Hack to get the typechecker to accept our action functions
+
+
+happyTcHack :: Happy_GHC_Exts.Int# -> a -> a
+happyTcHack x y = y
+{-# INLINE happyTcHack #-}
+
+
+-----------------------------------------------------------------------------
+-- Seq-ing.  If the --strict flag is given, then Happy emits 
+--      happySeq = happyDoSeq
+-- otherwise it emits
+--      happySeq = happyDontSeq
+
+happyDoSeq, happyDontSeq :: a -> b -> b
+happyDoSeq   a b = a `seq` b
+happyDontSeq a b = b
+
+-----------------------------------------------------------------------------
+-- Don't inline any functions from the template.  GHC has a nasty habit
+-- of deciding to inline happyGoto everywhere, which increases the size of
+-- the generated parser quite a bit.
+
+
+{-# NOINLINE happyDoAction #-}
+{-# NOINLINE happyTable #-}
+{-# NOINLINE happyCheck #-}
+{-# NOINLINE happyActOffsets #-}
+{-# NOINLINE happyGotoOffsets #-}
+{-# NOINLINE happyDefActions #-}
+
+{-# NOINLINE happyShift #-}
+{-# NOINLINE happySpecReduce_0 #-}
+{-# NOINLINE happySpecReduce_1 #-}
+{-# NOINLINE happySpecReduce_2 #-}
+{-# NOINLINE happySpecReduce_3 #-}
+{-# NOINLINE happyReduce #-}
+{-# NOINLINE happyMonadReduce #-}
+{-# NOINLINE happyGoto #-}
+{-# NOINLINE happyFail #-}
+
+-- end of Happy Template.
+
diff --git a/runtime/Data/Matrix/Quad.hs b/runtime/Data/Matrix/Quad.hs
--- a/runtime/Data/Matrix/Quad.hs
+++ b/runtime/Data/Matrix/Quad.hs
@@ -63,19 +63,20 @@
 mult p a b = a & b where
   infixl 7  &
   (&) :: RingP a => Mat x y a -> Mat z x a -> Mat z y (Pair a)
-  Zero & x = Zero
-  x & Zero = Zero
-  One x & One x' = one (mul p x x')
-  One x & Row a b = row (One x & a) (One x & b)
-  Col a b & One x = col (a & One x) (b & One x)
-  Row a b & Col a' b' = a & a' + b & b'
-  Col a b & Row a' b' = quad (a & a') (a & b') (b & a') (b & b')
-  Row a b & Quad a' b' c' d' = row (a & a' + b & c') (a & b' + b & d')
-  Quad a b c d & Col a' c' = col (a & a' + b & c') (c & a' + d & c')
+  Zero         & x                = Zero
+  x            & Zero             = Zero
+  One x        & One x'           = one (mul p x x')
+  One x        & Row a b          = row (One x & a) (One x & b)
+  Col a b      & One x            = col (a & One x) (b & One x)
+  Row a b      & Col a' b'        = a & a' + b & b'
+  Col a b      & Row a' b'        = quad (a & a') (a & b') (b & a') (b & b')
+  Row a b      & Quad a' b' c' d' = row (a & a' + b & c') (a & b' + b & d')
+  Quad a b c d & Col a' c'        = col (a & a' + b & c') (c & a' + d & c')
   Quad a b c d & Quad a' b' c' d' =
      quad (a & a' + b & c') (a & b' + b & d')
           (c & a' + d & c') (c & b' + d & d')
 
+  -- REDUNANT CLAUSE:
   x & y = error $ "mult:" ++ intercalate "; " [showR x,showR y]
 
 -- a variant of traverse. The constraint prevents to just use traverse.
@@ -296,4 +297,3 @@
                      (False , False) -> 'X'
 
 scatterplot (T s (m :/: m')) = concat [show x ++ " " ++ show y ++ "\n" | (x,y,_) <- sparse s s m ++ sparse s s m']
-
diff --git a/src/AbsBNF.hs b/src/AbsBNF.hs
--- a/src/AbsBNF.hs
+++ b/src/AbsBNF.hs
@@ -1,14 +1,17 @@
+-- Haskell data types for the abstract syntax.
+-- Generated by the BNF converter.
+
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric #-}
-module AbsBNF where
 
--- Haskell module generated by the BNF converter
-
+module AbsBNF where
 
-import Data.Data (Data,Typeable)
+import Data.Data    (Data, Typeable)
 import GHC.Generics (Generic)
+
 newtype Ident = Ident String
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
+
 data LGrammar = LGr [LDef]
   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)
 
diff --git a/src/BNFC/Backend/Agda.hs b/src/BNFC/Backend/Agda.hs
new file mode 100644
--- /dev/null
+++ b/src/BNFC/Backend/Agda.hs
@@ -0,0 +1,830 @@
+{- |  Agda backend.
+Generate bindings to Haskell data types for use in Agda.
+
+Example for abstract syntax generated in Haskell backend:
+@@
+  newtype Ident = Ident String deriving (Eq, Ord, Show, Read)
+
+  data Def = DFun Type Ident [Arg] [Stm]
+    deriving (Eq, Ord, Show, Read)
+
+  data Arg = ADecl Type Ident
+    deriving (Eq, Ord, Show, Read)
+
+  data Stm
+      = SExp Exp
+      | SInit Type Ident Exp
+      | SBlock [Stm]
+      | SIfElse Exp Stm Stm
+    deriving (Eq, Ord, Show, Read)
+
+  data Type = Type_bool | Type_int | Type_double | Type_void
+    deriving (Eq, Ord, Show, Read)
+@@
+This should be accompanied by the following Agda code:
+@@
+  module <mod> where
+
+  {-# FOREIGN GHC import qualified Data.Text #-}
+  {-# FOREIGN GHC import CPP.Abs #-}
+  {-# FOREIGN GHC import CPP.Print (printTree) #-}
+
+  data Ident : Set where
+    ident : List Char → Ident
+
+  {-# COMPILE GHC Ident = data Ident (Ident) #-}
+
+  data Def : Set where
+    dFun : (t : Type) (x : Ident) (as : List Arg) (ss : List Stm) → Def
+
+  {-# COMPILE GHC Def = data Def (DFun) #-}
+
+  data Arg : Set where
+    aDecl : (t : Type) (x : Ident) → Arg
+
+  {-# COMPILE GHC Arg = data Arg (ADecl) #-}
+
+  data Stm : Set where
+    sExp : (e : Exp) → Stm
+    sInit : (t : Type) (x : Ident) (e : Exp) → Stm
+    sBlock : (ss : List Stm) → Stm
+    sIfElse : (e : Exp) (s s' : Stm) → Stm
+
+  {-# COMPILE GHC Stm = data Stm
+    ( SExp
+    | SInit
+    | SBlock
+    | SIfElse
+    ) #-}
+
+  data Type : Set where
+    typeBool typeInt typeDouble typeVoid : Type
+
+  {-# COMPILE GHC Type = data Type
+    ( Type_bool
+    | Type_int
+    | Type_double
+    | Type_void
+    ) #-}
+
+  -- Binding the BNFC pretty printers.
+
+  printIdent  : Ident → String
+  printIdent (ident s) = String.fromList s
+
+  postulate
+    printType    : Type    → String
+    printExp     : Exp     → String
+    printStm     : Stm     → String
+    printArg     : Arg     → String
+    printDef     : Def     → String
+    printProgram : Program → String
+
+  {-# COMPILE GHC printType    = \ t -> Data.Text.pack (printTree (t :: Type)) #-}
+  {-# COMPILE GHC printExp     = \ e -> Data.Text.pack (printTree (e :: Exp))  #-}
+  {-# COMPILE GHC printStm     = \ s -> Data.Text.pack (printTree (s :: Stm))  #-}
+  {-# COMPILE GHC printArg     = \ a -> Data.Text.pack (printTree (a :: Arg))  #-}
+  {-# COMPILE GHC printDef     = \ d -> Data.Text.pack (printTree (d :: Def))  #-}
+  {-# COMPILE GHC printProgram = \ p -> Data.Text.pack (printTree (p :: Program)) #-}
+@@
+-}
+
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+
+#if __GLASGOW_HASKELL__ >= 800
+{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}
+#endif
+
+module BNFC.Backend.Agda (makeAgda) where
+
+import Prelude'
+import Control.Monad.State hiding (when)
+import Data.Char
+import Data.Function (on)
+import Data.Functor  ((<$>))
+import qualified Data.List as List
+import Data.List.NonEmpty (NonEmpty((:|)))
+import qualified Data.List.NonEmpty as NEList
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.Maybe (mapMaybe, isJust, fromJust)
+import Data.Set (Set)
+import qualified Data.Set as Set
+
+import BNFC.CF
+import BNFC.Backend.Base           (Backend, mkfile)
+import BNFC.Backend.Haskell.HsOpts
+import BNFC.Backend.Haskell.Utils  (parserName)
+import BNFC.Options                (SharedOptions)
+import BNFC.PrettyPrint
+import BNFC.Utils                  (replace, when)
+
+type NEList = NEList.NonEmpty
+
+-- | How to print the types of constructors in Agda?
+
+data ConstructorStyle
+  = UnnamedArg  -- ^ Simply typed, like @E → S → S → S@.
+  | NamedArg    -- ^ Dependently typed, like @(e : E) (s₁ s₂ : S) → S@.
+
+-- | Import the builtin numeric types (content of some token categories)?
+
+data ImportNumeric
+  = YesImportNumeric  -- ^ Import the numeric types.
+  | NoImportNumeric   -- ^ Don't import the numeric types.
+  deriving (Eq)
+
+-- | Entry-point for Agda backend.
+
+makeAgda
+  :: String         -- ^ Current time.
+  -> SharedOptions  -- ^ Options.
+  -> CF             -- ^ Grammar.
+  -> Backend
+makeAgda time opts cf = do
+  -- Generate AST bindings.
+  mkfile (agdaASTFile opts) $
+    cf2AgdaAST time (agdaASTFileM opts) (absFileM opts) (printerFileM opts) cf
+  -- Generate parser bindings.
+  mkfile (agdaParserFile opts) $
+    cf2AgdaParser time (agdaParserFileM opts) (agdaASTFileM opts) (absFileM opts) (errFileM opts) (happyFileM opts)
+      layoutMod
+      parserCats
+  -- Generate an I/O library for the test parser.
+  mkfile (agdaLibFile opts) $
+    agdaLibContents (agdaLibFileM opts)
+  -- Generate test parser.
+  mkfile (agdaMainFile opts) $
+    agdaMainContents (agdaMainFileM opts) (agdaLibFileM opts) (agdaASTFileM opts) (agdaParserFileM opts)
+      (hasLayout cf)
+      entryPoint
+  where
+  -- | Generate parsers for the following non-terminals.
+  --   This includes parsers for 'CoercCat' and 'ListCat'.
+  parserCats :: [Cat]
+  parserCats =  allEntryPoints cf
+  -- | Entrypoint for test parser:
+  entryPoint :: Cat
+  entryPoint = case parserCats of
+    (c:_) -> c
+    _     -> error $ "impossible: makeAgda.entryPoint: allEntryPoints cannot be empty"
+    -- cannot be empty
+  -- | In case the grammar makes use of layout, pass also the generated layout Haskell module.
+  layoutMod :: Maybe String
+  layoutMod = when (hasLayout cf) $ Just (layoutFileM opts)
+
+-- | Generate AST bindings for Agda.
+--
+cf2AgdaAST
+  :: String  -- ^ Current time.
+  -> String  -- ^ Module name.
+  -> String  -- ^ Haskell Abs module name.
+  -> String  -- ^ Haskell Print module name.
+  -> CF      -- ^ Grammar.
+  -> Doc
+cf2AgdaAST time mod amod pmod cf = vsep $
+  [ preamble time "abstract syntax data types"
+  , hsep [ "module", text mod, "where" ]
+  , imports YesImportNumeric False
+  , if usesString then hsep [ "String", equals, listT, charT ] else empty
+  , importPragmas [amod, unwords [ pmod, "(printTree)" ]]
+  , vsep $ map prToken tcats
+  , absyn NamedArg dats
+  -- , allTokenCats printToken tcats  -- seem to be included in printerCats
+  , printers printerCats
+  , empty -- Make sure we terminate the file with a new line.
+  ]
+  where
+  -- The grammar categories (excluding list, coerce, and token categories):
+  dats :: [Data]
+  dats = cf2data cf
+         -- getAbstractSyntax also includes list categories, which isn't what we need
+  -- The user-defined token categories (including Ident).
+  tcats :: [TokenCat]
+  tcats = specialCats cf
+  -- Bind printers for the following categories (involves lists and literals).
+  printerCats :: [Cat]
+  printerCats = map fst (getAbstractSyntax cf) ++ map TokenCat (cfgLiterals cf)
+  usesString = "String" `elem` cfgLiterals cf
+
+
+-- | Generate parser bindings for Agda.
+--
+cf2AgdaParser
+  :: String  -- ^ Current time.
+  -> String  -- ^ Module name.
+  -> String  -- ^ Agda AST module name.
+  -> String  -- ^ Haskell Abs module name.
+  -> String  -- ^ Haskell ErrM module name.
+  -> String  -- ^ Haskell Par module name.
+  -> Maybe String
+             -- ^ Does the grammar use layout?  If yes, Haskell Layout module name.
+  -> [Cat]   -- ^ Bind parsers for these non-terminals.
+  -> Doc
+cf2AgdaParser time mod astmod amod emod pmod layoutMod cats = vsep $
+  [ preamble time "parsers"
+  , hsep [ "module", text mod, "where" ]
+  , imports NoImportNumeric (isJust layoutMod)
+  , importCats astmod (List.nub cs)
+  , importPragmas $ [amod, emod, pmod] ++ maybe [] (\ m -> ["qualified " ++ m]) layoutMod
+  , "-- Error monad of BNFC"
+  , prErrM
+  , "-- Happy parsers"
+  , parsers layoutMod cats
+  , empty -- Make sure we terminate the file with a new line.
+  ]
+  where
+  cs :: [String]
+  cs = mapMaybe baseCat cats
+  baseCat :: Cat -> Maybe String
+  baseCat = \case
+    Cat s         -> Just s
+    CoercCat s _  -> Just s
+    TokenCat "Char" -> Nothing
+    TokenCat s    -> Just s
+    ListCat c     -> baseCat c
+    InternalCat{} -> Nothing
+
+-- We prefix the Agda types with "#" to not conflict with user-provided nonterminals.
+arrow, charT, intT, listT, stringT, stringFromListT :: Doc
+arrow = "→"
+charT           = "Char"     -- This is the BNFC name for token type Char!
+intT            = "Integer"  -- This is the BNFC name for token type Integer!
+doubleT         = "Double"   -- This is the BNFC name for token type Double!
+boolT           = "#Bool"
+listT           = "#List"
+stringT         = "#String"
+stringFromListT = "#stringFromList"
+
+-- | Preamble: introductory comments.
+
+preamble
+  :: String  -- ^ Time stamp.
+  -> String  -- ^ Brief characterization of file content.
+  -> Doc
+preamble _time what = vcat $
+  [ hcat [ "-- Agda bindings for the Haskell ", text what, "." ]
+  , hcat [ "-- Generated by BNFC." ]
+  -- -- Time stamp does not work well with BNFC's mkfile logic.
+  -- , hcat [ "-- Generated by BNFC at "         , text time, "." ]
+  ]
+
+-- | Import statements.
+
+imports
+  :: ImportNumeric -- ^ Import also numeric types?
+  -> Bool          -- ^ If have layout, import booleans.
+  -> Doc
+imports numeric layout = vcat . map prettyImport . concat $
+  [ when layout
+    [ ("Agda.Builtin.Bool",   [("Bool", boolT)]) ]
+  , [ ("Agda.Builtin.Char",   [("Char", charT)]) ]
+  , when (numeric == YesImportNumeric) importNumeric
+  , [ ("Agda.Builtin.List",   [("List", listT)])
+    , ("Agda.Builtin.String", [("String", stringT), ("primStringFromList", stringFromListT) ])
+    ]
+  ]
+  where
+  importNumeric :: [(String, [(String, Doc)])]
+  importNumeric =
+    [ ("Agda.Builtin.Float public", [("Float", doubleT)])
+    , ("Agda.Builtin.Int   public", [("Int", intT)])
+    ]
+  prettyImport :: (String, [(String, Doc)]) -> Doc
+  prettyImport (m, ren) = prettyList 2 pre lparen rparen semi $
+    map (\ (x, d) -> hsep [text x, "to", d ]) ren
+    where
+    pre = hsep [ "open", "import", text m, "using", "()", "renaming" ]
+
+-- | Import Agda AST.
+--
+importCats
+  :: String    -- ^ Module for Agda AST.
+  -> [String]  -- ^ Agda data types to import.
+  -> Doc
+importCats m cs = prettyList 2 pre lparen rparen semi $ map text cs
+  where
+  pre = hsep [ "open", "import", text m, "using" ]
+
+-- | Import pragmas.
+--
+-- >>> importPragmas ["Foo.Abs", "Foo.Print (printTree)", "qualified Foo.Layout"]
+-- {-# FOREIGN GHC import qualified Data.Text #-}
+-- {-# FOREIGN GHC import Foo.Abs #-}
+-- {-# FOREIGN GHC import Foo.Print (printTree) #-}
+-- {-# FOREIGN GHC import qualified Foo.Layout #-}
+--
+importPragmas
+  :: [String]  -- ^ Haskell modules to import.
+  -> Doc
+importPragmas mods = vcat $ map imp $ [ "qualified Data.Text" ] ++ mods
+  where
+  imp s = hsep [ "{-#", "FOREIGN", "GHC", "import", text s, "#-}" ]
+
+-- * Bindings for the AST.
+
+-- | Pretty-print types for token types similar to @Ident@.
+
+prToken :: String -> Doc
+prToken t =
+  prettyData UnnamedArg t [(agdaLower t, [ListCat (Cat "Char")])]
+  $++$
+  pragmaData t [(t, [])]
+
+-- | Pretty-print abstract syntax definition in Agda syntax.
+--
+--   We print this as one big mutual block rather than doing a
+--   strongly-connected component analysis and topological
+--   sort by dependency order.
+--
+absyn :: ConstructorStyle -> [Data] -> Doc
+absyn _style [] = empty
+absyn style  ds = vsep . ("mutual" :) . concatMap (map (nest 2) . prData style) $ ds
+
+-- | Pretty-print Agda data types and pragmas for AST.
+--
+-- >>> vsep $ prData UnnamedArg (Cat "Nat", [ ("Zero", []), ("Suc", [Cat "Nat"]) ])
+-- data Nat : Set where
+--   zero : Nat
+--   suc : Nat → Nat
+-- <BLANKLINE>
+-- {-# COMPILE GHC Nat = data Nat
+--   ( Zero
+--   | Suc
+--   ) #-}
+--
+-- >>> vsep $ prData UnnamedArg (Cat "C", [ ("C1", []), ("C2", [Cat "C"]) ])
+-- data C : Set where
+--   c1 : C
+--   c2 : C → C
+-- <BLANKLINE>
+-- {-# COMPILE GHC C = data C
+--   ( C1
+--   | C2
+--   ) #-}
+--
+-- We return a list of 'Doc' rather than a single 'Doc' since want
+-- to intersperse empty lines and indent it later.
+-- If we intersperse the empty line(s) here to get a single 'Doc',
+-- we will produce whitespace lines after applying 'nest'.
+-- This is a bit of a design problem of the pretty print library:
+-- there is no native concept of a blank line; @text ""@ is a bad hack.
+--
+prData :: ConstructorStyle -> Data -> [Doc]
+prData style (Cat d, cs) = prData' style d cs
+prData _     (c    , _ ) = error $ "prData: unexpected category " ++ show c
+
+-- | Pretty-print Agda data types and pragmas.
+--
+-- >>> vsep $ prData' UnnamedArg "Err A" [ ("Ok", [Cat "A"]), ("Bad", [ListCat $ Cat "Char"]) ]
+-- data Err A : Set where
+--   ok : A → Err A
+--   bad : #List Char → Err A
+-- <BLANKLINE>
+-- {-# COMPILE GHC Err = data Err
+--   ( Ok
+--   | Bad
+--   ) #-}
+--
+prData' :: ConstructorStyle -> String -> [(Fun, [Cat])] -> [Doc]
+prData' style d cs = [ prettyData style d cs , pragmaData (head $ words d) cs ]
+
+-- | Pretty-print Agda binding for the BNFC Err monad.
+--
+-- Note: we use "Err" here since a category "Err" would also conflict
+-- with BNFC's error monad in the Haskell backend.
+prErrM :: Doc
+prErrM = vsep $ prData' UnnamedArg "Err A"
+  [ ("Ok" , [Cat "A"])
+  , ("Bad", [ListCat $ Cat "Char"])
+  ]
+
+-- | Pretty-print AST definition in Agda syntax.
+--
+-- >>> prettyData UnnamedArg "Nat" [ ("zero", []), ("suc", [Cat "Nat"]) ]
+-- data Nat : Set where
+--   zero : Nat
+--   suc : Nat → Nat
+--
+-- >>> prettyData UnnamedArg "C" [ ("C1", []), ("C2", [Cat "C"]) ]
+-- data C : Set where
+--   c1 : C
+--   c2 : C → C
+--
+-- >>> :{
+--   prettyData UnnamedArg "Stm"
+--     [ ("block", [ListCat $ Cat "Stm"])
+--     , ("while", [Cat "Exp", Cat "Stm"])
+--     ]
+-- :}
+-- data Stm : Set where
+--   block : #List Stm → Stm
+--   while : Exp → Stm → Stm
+--
+-- >>> :{
+--   prettyData NamedArg "Stm"
+--     [ ("block", [ListCat $ Cat "Stm"])
+--     , ("if", [Cat "Exp", Cat "Stm", Cat "Stm"])
+--     ]
+-- :}
+-- data Stm : Set where
+--   block : (ss : #List Stm) → Stm
+--   if : (e : Exp) (s₁ s₂ : Stm) → Stm
+--
+prettyData :: ConstructorStyle -> String -> [(Fun, [Cat])] -> Doc
+prettyData style d cs = vcat $
+  [ hsep [ "data", text d, colon, "Set", "where" ] ] ++
+  map (nest 2 . prettyConstructor style d) cs
+
+-- | Generate pragmas to bind Haskell AST to Agda.
+--
+-- >>> pragmaData "Empty" []
+-- {-# COMPILE GHC Empty = data Empty () #-}
+--
+-- >>> pragmaData "Nat" [ ("zero", []), ("suc", [Cat "Nat"]) ]
+-- {-# COMPILE GHC Nat = data Nat
+--   ( zero
+--   | suc
+--   ) #-}
+--
+pragmaData :: String -> [(Fun, [Cat])] -> Doc
+pragmaData d cs = prettyList 2 pre lparen (rparen <+> "#-}") "|" $
+  map (prettyFun . fst) cs
+  where
+  pre = hsep [ "{-#", "COMPILE", "GHC", text d, equals, "data", text d ]
+
+-- | Pretty-print since rule as Agda constructor declaration.
+--
+-- >>> prettyConstructor UnnamedArg "D" ("c", [Cat "A", Cat "B", Cat "C"])
+-- c : A → B → C → D
+-- >>> prettyConstructor undefined  "D" ("c1", [])
+-- c1 : D
+-- >>> prettyConstructor NamedArg "Stm" ("SIf", map Cat ["Exp", "Stm", "Stm"])
+-- sIf : (e : Exp) (s₁ s₂ : Stm) → Stm
+--
+prettyConstructor :: ConstructorStyle -> String -> (Fun,[Cat]) -> Doc
+prettyConstructor _style d (c, []) = hsep $
+  [ prettyCon c
+  , colon
+  , text d
+  ]
+prettyConstructor style d (c, as) = hsep $
+  [ prettyCon c
+  , colon
+  , prettyConstructorArgs style as
+  , arrow
+  , text d
+  ]
+
+-- | Print the constructor argument telescope.
+--
+-- >>> prettyConstructorArgs UnnamedArg [Cat "A", Cat "B", Cat "C"]
+-- A → B → C
+--
+-- >>> prettyConstructorArgs NamedArg (map Cat ["Exp", "Stm", "Stm"])
+-- (e : Exp) (s₁ s₂ : Stm)
+--
+prettyConstructorArgs :: ConstructorStyle -> [Cat] -> Doc
+prettyConstructorArgs style as =
+  case style of
+    UnnamedArg -> hsep $ List.intersperse arrow ts
+    NamedArg   -> hsep $ map (\ (x :| xs, t) -> parens (hsep [x, hsep xs, colon, t])) tel
+  where
+  ts  = map prettyCat as
+  ns  = map (text . subscript) $ numberUniquely $ map nameSuggestion as
+  tel = aggregateOn (render . snd) $ zip ns ts
+  subscript (m, s) = maybe s (\ i -> s ++ [chr (ord '₀' + i)]) m
+  -- Aggregate consecutive arguments of the same type.
+  aggregateOn :: Eq c => ((a,b) -> c) -> [(a,b)] -> [(NEList a,b)]
+  aggregateOn f
+    = map (\ p -> (NEList.map fst p, snd (NEList.head p)))
+    . NEList.groupBy ((==) `on` f)
+    -- . NEList.groupWith f -- Too recent, fails stack-7.8 install
+
+-- | Suggest the name of a bound variable of the given category.
+--
+-- >>> map nameSuggestion [ ListCat (Cat "Stm"), TokenCat "Var", Cat "Exp" ]
+-- ["ss","x","e"]
+--
+nameSuggestion :: Cat -> String
+nameSuggestion = \case
+  ListCat c     -> nameSuggestion c ++ "s"
+  CoercCat d _  -> nameFor d
+  Cat d         -> nameFor d
+  TokenCat{}    -> "x"
+  InternalCat{} -> error "impossible: Backend.Agda.nameSuggestion: Cat cannot be InternalCat"
+
+-- | Suggest the name of a bound variable of the given base category.
+--
+-- >>> map nameFor ["Stm","ABC","#String"]
+-- ["s","a","s"]
+--
+nameFor :: String -> String
+nameFor d = [ toLower $ head $ dropWhile (== '#') d ]
+
+-- | Number duplicate elements in a list consecutively, starting with 1.
+--
+-- >>> numberUniquely ["a", "b", "a", "a", "c", "b"]
+-- [(Just 1,"a"),(Just 1,"b"),(Just 2,"a"),(Just 3,"a"),(Nothing,"c"),(Just 2,"b")]
+--
+numberUniquely :: forall a. Ord a => [a] -> [(Maybe Int, a)]
+numberUniquely as = mapM step as `evalState` Map.empty
+  where
+  -- First pass: determine frequency of each element.
+  counts :: Frequency a
+  counts = foldl (flip incr) Map.empty as
+  -- Second pass: consecutively number elements with frequency > 1.
+  step :: a -> State (Frequency a) (Maybe Int, a)
+  step a = do
+    -- If the element has a unique occurrence, we do not need to number it.
+    let n = Map.findWithDefault (error "numberUniquelyWith") a counts
+    if n == 1 then return (Nothing, a) else do
+      -- Otherwise, increase the counter for that element and number it
+      -- with the new value.
+      modify $ incr a
+      (,a) . Map.lookup a <$> get
+
+-- | A frequency map.
+--
+--   NB: this type synonym should be local to 'numberUniquely', but
+--   Haskell lacks local type synonyms.
+--   https://gitlab.haskell.org/ghc/ghc/issues/4020
+type Frequency a = Map a Int
+
+-- | Increase the frequency of the given key.
+incr :: Ord a => a -> Frequency a -> Frequency a
+incr = Map.alter $ maybe (Just 1) (Just . succ)
+
+-- * Generate bindings for the pretty printers
+
+-- | Generate Agda code to print tokens.
+--
+-- >>> printToken "Ident"
+-- printIdent : Ident → #String
+-- printIdent (ident s) = #stringFromList s
+--
+printToken :: String -> Doc
+printToken t = vcat
+  [ hsep [ f, colon, text t, arrow, stringT ]
+  , hsep [ f, lparen <> c <+> "s" <> rparen, equals, stringFromListT, "s" ]
+  ]
+  where
+  f = text $ "print" ++ t
+  c = text $ agdaLower t
+
+-- | Generate Agda bindings to printers for AST.
+--
+-- >>> printers $ map Cat [ "Exp", "Stm" ]
+-- -- Binding the pretty printers.
+-- <BLANKLINE>
+-- postulate
+--   printExp : Exp → #String
+--   printStm : Stm → #String
+-- <BLANKLINE>
+-- {-# COMPILE GHC printExp = \ e -> Data.Text.pack (printTree (e :: Exp)) #-}
+-- {-# COMPILE GHC printStm = \ s -> Data.Text.pack (printTree (s :: Stm)) #-}
+--
+printers :: [Cat] -> Doc
+printers []   = empty
+printers cats =
+  "-- Binding the pretty printers."
+  $++$
+  vcat ("postulate" : map (nest 2 . prettyTySig) cats)
+  $++$
+  vcat (map pragmaBind cats)
+  where
+  prettyTySig c = hsep [ agdaPrinterName c, colon, prettyCat c, arrow, stringT ]
+  pragmaBind  c = hsep
+    [ "{-#", "COMPILE", "GHC", agdaPrinterName c, equals, "\\", y, "->"
+    , "Data.Text.pack", parens ("printTree" <+> parens (y <+> "::" <+> t)), "#-}"
+    ]
+    where
+    y = text $ nameSuggestion c
+    t = text $ show $ normCat c  -- Removes CoercCat.
+
+-- | Bind happy parsers.
+--
+-- >>> parsers Nothing [ListCat (CoercCat "Exp" 2)]
+-- postulate
+--   parseListExp2 : #String → Err (#List Exp)
+-- <BLANKLINE>
+-- {-# COMPILE GHC parseListExp2 = pListExp2 . myLexer . Data.Text.unpack #-}
+--
+parsers
+  :: Maybe String  -- ^ Grammar uses layout?  If yes, Haskell layout module name.
+  -> [Cat]         -- ^ Bind parsers for these non-terminals.
+  -> Doc
+parsers layoutMod cats =
+  vcat ("postulate" : map (nest 2 . prettyTySig) cats)
+  $++$
+  vcat (map pragmaBind cats)
+  where
+  -- When grammar uses layout, we parametrize the parser by a boolean @tl@
+  -- that indicates whether top layout should be used for this parser.
+  -- Also, we add @resolveLayout tl@ to the pipeline after lexing.
+  prettyTySig :: Cat -> Doc
+  prettyTySig c = hsep . concat $
+   [ [ agdaParserName c, colon ]
+   , when layout [ boolT, arrow ]
+   , [ stringT, arrow, "Err", prettyCatParens c ]
+   ]
+  pragmaBind :: Cat -> Doc
+  pragmaBind c = hsep . concat $
+    [ [ "{-#", "COMPILE", "GHC", agdaParserName c, equals ]
+    , when layout [ "\\", "tl", "->" ]
+    , [ parserName c, "." ]
+    , when layout [ hcat [ text lmod, ".", "resolveLayout" ], "tl", "." ]
+    , [ "myLexer", ".", "Data.Text.unpack", "#-}" ]
+    ]
+  layout :: Bool
+  layout = isJust layoutMod
+  lmod :: String
+  lmod = fromJust layoutMod
+
+-- * Auxiliary functions
+
+-- | Concatenate documents created from token categories,
+--   separated by blank lines.
+--
+-- >>> allTokenCats text ["T", "U"]
+-- T
+-- <BLANKLINE>
+-- U
+allTokenCats :: (TokenCat -> Doc) -> [TokenCat] -> Doc
+allTokenCats f = vsep . map f
+
+-- | Pretty-print a rule name for Haskell.
+prettyFun :: Fun -> Doc
+prettyFun = text
+
+-- | Pretty-print a rule name for Agda.
+prettyCon :: Fun -> Doc
+prettyCon = text . agdaLower
+
+-- | Turn identifier to non-capital identifier.
+--   Needed, since in Agda a constructor cannot overload a data type
+--   with the same name.
+--
+-- >>> map agdaLower ["SFun","foo","ABC","HelloWorld","module","Type_int","C1"]
+-- ["sFun","foo","aBC","helloWorld","module'","type-int","c1"]
+--
+agdaLower :: String -> String
+agdaLower = avoidKeywords . updateHead toLower . replace '_' '-'
+  -- WAS: replace '_' '\'' . BNFC.Utils.mkName agdaKeywords BNFC.Utils.MixedCase
+  where
+  updateHead _f []    = []
+  updateHead f (x:xs) = f x : xs
+  avoidKeywords s
+    | s `Set.member` agdaKeywords = s ++ "\'"
+    | otherwise = s
+
+-- | A list of Agda keywords that would clash with generated names.
+agdaKeywords :: Set String
+agdaKeywords = Set.fromList $ words "abstract codata coinductive constructor data do eta-equality field forall hiding import in inductive infix infixl infixr instance let macro module mutual no-eta-equality open overlap pattern postulate primitive private public quote quoteContext quoteGoal quoteTerm record renaming rewrite Set syntax tactic unquote unquoteDecl unquoteDef using variable where with"
+
+-- | Name of Agda parser binding (mentions precedence).
+--
+-- >>> agdaParserName $ ListCat $ CoercCat "Exp" 2
+-- parseListExp2
+--
+agdaParserName :: Cat -> Doc
+agdaParserName c = text $ "parse" ++ identCat c
+
+-- | Name of Agda printer binding (does not mention precedence).
+--
+-- >>> agdaPrinterName $ ListCat $ CoercCat "Exp" 2
+-- printListExp
+--
+agdaPrinterName :: Cat -> Doc
+agdaPrinterName c = text $ "print" ++ identCat (normCat c)
+
+-- | Pretty-print a category as Agda type.
+--   Ignores precedence.
+--
+-- >>> prettyCat $ ListCat (CoercCat "Exp" 2)
+-- #List Exp
+--
+prettyCat :: Cat -> Doc
+prettyCat = \case
+  Cat s        -> text s
+  TokenCat s   -> text s
+  CoercCat s _ -> text s
+  ListCat c    -> listT <+> prettyCatParens c
+  InternalCat  -> error "prettyCat: unexpected case InternalCat"
+
+-- | Pretty-print category in parentheses, if 'compositeCat'.
+prettyCatParens :: Cat -> Doc
+prettyCatParens c = parensIf (compositeCat c) (prettyCat c)
+
+-- | Is the Agda type corresponding to 'Cat' composite (or atomic)?
+compositeCat :: Cat -> Bool
+compositeCat = \case
+  ListCat{} -> True
+  _         -> False
+
+
+-- * Agda stub to test parser
+
+-- | Write a simple IO library with fixed contents.
+
+agdaLibContents
+  :: String      -- ^ Name of Agda library module.
+  -> Doc         -- ^ Contents of Agda library module.
+agdaLibContents mod = vcat
+  [ "-- Generated by BNFC."
+  , "-- Basic I/O library."
+  , ""
+  , "module" <+> text mod <+> "where"
+  , ""
+  , "open import Agda.Builtin.IO     public using (IO)"
+  , "open import Agda.Builtin.List   public using (List; []; _∷_)"
+  , "open import Agda.Builtin.String public using (String)"
+  , "  renaming (primStringFromList to stringFromList)"
+  , "open import Agda.Builtin.Unit   public using (⊤)"
+  , ""
+  , "-- I/O monad."
+  , ""
+  , "postulate"
+  , "  return : ∀ {a} {A : Set a} → A → IO A"
+  , "  _>>=_  : ∀ {a b} {A : Set a} {B : Set b} → IO A → (A → IO B) → IO B"
+  , ""
+  , "{-# COMPILE GHC return = \\ _ _ -> return    #-}"
+  , "{-# COMPILE GHC _>>=_  = \\ _ _ _ _ -> (>>=) #-}"
+  , ""
+  , "infixl 1 _>>=_ _>>_"
+  , ""
+  , "_>>_  : ∀ {b} {B : Set b} → IO ⊤ → IO B → IO B"
+  , "_>>_ = λ m m' → m >>= λ _ → m'"
+  , ""
+  , "-- Co-bind and functoriality."
+  , ""
+  , "infixr 1 _=<<_ _<$>_"
+  , ""
+  , "_=<<_  : ∀ {a b} {A : Set a} {B : Set b} → (A → IO B) → IO A → IO B"
+  , "k =<< m = m >>= k"
+  , ""
+  , "_<$>_  : ∀ {a b} {A : Set a} {B : Set b} → (A → B) → IO A → IO B"
+  , "f <$> m = do"
+  , "  a ← m"
+  , "  return (f a)"
+  , ""
+  , "-- Binding basic I/O functionality."
+  , ""
+  , "{-# FOREIGN GHC import qualified Data.Text #-}"
+  , "{-# FOREIGN GHC import qualified Data.Text.IO #-}"
+  , "{-# FOREIGN GHC import qualified System.Exit #-}"
+  , "{-# FOREIGN GHC import qualified System.Environment #-}"
+  , "{-# FOREIGN GHC import qualified System.IO #-}"
+  , ""
+  , "postulate"
+  , "  exitFailure    : ∀{a} {A : Set a} → IO A"
+  , "  getArgs        : IO (List String)"
+  , "  putStrLn       : String → IO ⊤"
+  , "  readFiniteFile : String → IO String"
+  , ""
+  , "{-# COMPILE GHC exitFailure    = \\ _ _ -> System.Exit.exitFailure #-}"
+  , "{-# COMPILE GHC getArgs        = fmap (map Data.Text.pack) System.Environment.getArgs #-}"
+  , "{-# COMPILE GHC putStrLn       = System.IO.putStrLn . Data.Text.unpack #-}"
+  , "{-# COMPILE GHC readFiniteFile = Data.Text.IO.readFile . Data.Text.unpack #-}"
+  ]
+
+agdaMainContents
+  :: String      -- ^ Name of Agda main module.
+  -> String      -- ^ Name of Agda library module.
+  -> String      -- ^ Name of Agda AST module.
+  -> String      -- ^ Name of Agda parser module.
+  -> Bool        -- ^ Is the grammar using layout?
+  -> Cat         -- ^ Category to parse.
+  -> Doc         -- ^ Contents of Agda main module.
+agdaMainContents mod lmod amod pmod layout c = vcat
+  [ "-- Test for Agda binding of parser.  Requires Agda >= 2.5.4."
+  , "-- Generated by BNFC."
+  , ""
+  , "module" <+> text mod <+> "where"
+  , when layout "\nopen import Agda.Builtin.Bool using (true)"
+  , "open import" <+> text lmod
+  , "open import" <+> text amod <+> "using" <+> parens (printer)
+  , "open import" <+> text pmod <+> "using" <+> parens ("Err;" <+> parser)
+  , ""
+  , "main : IO ⊤"
+  , "main = do"
+  , "  file ∷ [] ← getArgs where"
+  , "    _ → do"
+  , "      putStrLn \"usage: Main <SourceFile>\""
+  , "      exitFailure"
+  , "  Err.ok result ←" <+> parseFun <+> "<$> readFiniteFile file where"
+  , "    Err.bad msg → do"
+  , "      putStrLn \"PARSE FAILED\\n\""
+  , "      putStrLn (stringFromList msg)"
+  , "      exitFailure"
+  , "  putStrLn \"PARSE SUCCESSFUL\\n\""
+  , "  putStrLn" <+> parens (printer <+> "result")
+  ]
+  where
+  printer  = agdaPrinterName c
+  parser   = agdaParserName c
+  parseFun = hsep . concat $ [ [parser], when layout ["true"] ]
+    -- Permit use of top-level layout, if any.
diff --git a/src/BNFC/Backend/Base.hs b/src/BNFC/Backend/Base.hs
--- a/src/BNFC/Backend/Base.hs
+++ b/src/BNFC/Backend/Base.hs
@@ -11,6 +11,10 @@
   ) where
 
 import Control.Monad.Writer
+
+import Data.Char (isSpace)
+import qualified Data.List as List
+
 import System.Directory (createDirectoryIfMissing)
 import System.FilePath (dropFileName, (</>))
 
@@ -42,16 +46,19 @@
 mkfile path content = tell [(path, fileContentToString content)]
 
 -- | While we are moving to generating Text.PrettyPrint.Doc instead of String,
--- it is nice to be able to use both as argument to mkfile
--- So we do some typeclass magic
+-- it is nice to be able to use both as argument to 'mkfile'.
+-- So we do some typeclass magic.
 class FileContent a where
     fileContentToString :: a -> String
 
 instance FileContent [Char] where
-    fileContentToString = id
+    fileContentToString = deleteTrailingWhiteSpace
 
 instance FileContent Doc where
-    fileContentToString = render
+    fileContentToString = deleteTrailingWhiteSpace . render
+
+deleteTrailingWhiteSpace :: String -> String
+deleteTrailingWhiteSpace = unlines . map (List.dropWhileEnd isSpace) . lines
 
 -- | Write a set of files to disk. the first argument is the root directory
 -- inside which all the generated files will be written. This root directory
diff --git a/src/BNFC/Backend/C.hs b/src/BNFC/Backend/C.hs
--- a/src/BNFC/Backend/C.hs
+++ b/src/BNFC/Backend/C.hs
@@ -37,14 +37,14 @@
 
 makeC :: SharedOptions -> CF -> MkFiles ()
 makeC opts cf = do
-    let (hfile, cfile) = cf2CAbs prefix cf
+    let (hfile, cfile) = cf2CAbs (linenumbers opts) prefix cf
     mkfile "Absyn.h" hfile
     mkfile "Absyn.c" cfile
     let (flex, env) = cf2flex prefix cf
     mkfile (name ++ ".l") flex
-    let bison = cf2Bison prefix cf env
+    let bison = cf2Bison (linenumbers opts) prefix cf env
     mkfile (name ++ ".y") bison
-    let header = mkHeaderFile cf (allCats cf) (allEntryPoints cf) env
+    let header = mkHeaderFile (linenumbers opts) cf (allCats cf) (allEntryPoints cf) env
     mkfile "Parser.h" header
     let (skelH, skelC) = cf2CSkel cf
     mkfile "Skeleton.h" skelH
@@ -64,8 +64,8 @@
         name = lang opts
 
 
-makefile :: String -> String -> Doc
-makefile name prefix = vcat
+makefile :: String -> String -> String -> Doc
+makefile name prefix basename = vcat
     [ "CC = gcc"
     , "CCFLAGS = -g -W -Wall"
     , ""
@@ -88,8 +88,10 @@
     , Makefile.mkRule "distclean" ["clean"]
       [ "rm -f " ++ unwords
         [ "Absyn.h", "Absyn.c", "Test.c", "Parser.c", "Parser.h", "Lexer.c",
-          "Skeleton.c", "Skeleton.h", "Printer.c", "Printer.h", "Makefile " ]
-        ++ name ++ ".l " ++ name ++ ".y " ++ name ++ ".tex "]
+          "Skeleton.c", "Skeleton.h", "Printer.c", "Printer.h", basename,
+          name ++ ".l", name ++ ".y", name ++ ".tex"
+        ]
+      ]
     , Makefile.mkRule testName ["${OBJS}", "Test.o"]
       [ "@echo \"Linking " ++ testName ++ "...\""
       , "${CC} ${CCFLAGS} ${OBJS} Test.o -o " ++ testName ]
@@ -144,7 +146,7 @@
     "int main(int argc, char ** argv)",
     "{",
     "  FILE *input;",
-    "  " ++ def ++ " parse_tree;",
+    "  " ++ dat ++ " parse_tree;",
     "  int quiet = 0;",
     "  char *filename = NULL;",
     "",
@@ -173,12 +175,12 @@
     "  parse_tree = p" ++ def ++ "(input);",
     "  if (parse_tree)",
     "  {",
-    "    printf(\"\\nParse Succesful!\\n\");",
+    "    printf(\"\\nParse Successful!\\n\");",
     "    if (!quiet) {",
     "      printf(\"\\n[Abstract Syntax]\\n\");",
-    "      printf(\"%s\\n\\n\", show" ++ def ++ "(parse_tree));",
+    "      printf(\"%s\\n\\n\", show" ++ dat ++ "(parse_tree));",
     "      printf(\"[Linearized Tree]\\n\");",
-    "      printf(\"%s\\n\\n\", print" ++ def ++ "(parse_tree));",
+    "      printf(\"%s\\n\\n\", print" ++ dat ++ "(parse_tree));",
     "    }",
     "    return 0;",
     "  }",
@@ -187,10 +189,15 @@
     ""
    ]
   where
-   def = show $ head (allEntryPoints cf)
+  cat :: Cat
+  cat = head $ allEntryPoints cf
+  def :: String
+  def = identCat cat
+  dat :: String
+  dat = identCat . normCat $ cat
 
-mkHeaderFile :: CF -> [Cat] -> [Cat] -> [(a, String)] -> String
-mkHeaderFile cf cats eps env = unlines
+mkHeaderFile :: RecordPositions -> CF -> [Cat] -> [Cat] -> [(a, String)] -> String
+mkHeaderFile _ cf cats eps env = unlines
  [
   "#ifndef PARSER_HEADER_FILE",
   "#define PARSER_HEADER_FILE",
@@ -205,8 +212,17 @@
   "  char* string_;",
   concatMap mkVar cats ++ "} YYSTYPE;",
   "",
+  -- https://www.gnu.org/software/bison/manual/html_node/Location-Type.html#Location-Type
+  "typedef struct YYLTYPE",
+  "{",
+  "  int first_line;",
+  "  int first_column;",
+  "  int last_line;",
+  "  int last_column;",
+  "} YYLTYPE;",
   "#define _ERROR_ 258",
   mkDefines (259::Int) env,
+  "extern YYLTYPE yylloc;",
   "extern YYSTYPE yylval;",
   concatMap mkFunc eps,
   "",
@@ -217,20 +233,23 @@
   mkVar _ = ""
   mkDefines n [] = mkString n
   mkDefines n ((_,s):ss) = ("#define " ++ s +++ (show n) ++ "\n") ++ (mkDefines (n+1) ss)
-  mkString n =  if isUsedCat cf catString
+  mkString n =  if isUsedCat cf (TokenCat catString)
    then ("#define _STRING_ " ++ show n ++ "\n") ++ mkChar (n+1)
    else mkChar n
-  mkChar n =  if isUsedCat cf catChar
+  mkChar n =  if isUsedCat cf (TokenCat catChar)
    then ("#define _CHAR_ " ++ show n ++ "\n") ++ mkInteger (n+1)
    else mkInteger n
-  mkInteger n =  if isUsedCat cf catInteger
+  mkInteger n =  if isUsedCat cf (TokenCat catInteger)
    then ("#define _INTEGER_ " ++ show n ++ "\n") ++ mkDouble (n+1)
    else mkDouble n
-  mkDouble n =  if isUsedCat cf catDouble
+  mkDouble n =  if isUsedCat cf (TokenCat catDouble)
    then ("#define _DOUBLE_ " ++ show n ++ "\n") ++ mkIdent(n+1)
    else mkIdent n
-  mkIdent n =  if isUsedCat cf catIdent
+  mkIdent n =  if isUsedCat cf (TokenCat catIdent)
    then ("#define _IDENT_ " ++ show n ++ "\n")
    else ""
-  mkFunc s | normCat s == s = identCat s ++ " p" ++ identCat s ++ "(FILE *inp);\n"
-  mkFunc _ = ""
+  -- Andreas, 2019-04-29, issue #210: generate parsers also for coercions
+  mkFunc c = concat
+    [ identCat (normCat c) ++ "  p" ++ identCat c ++ "(FILE *inp);\n"
+    , identCat (normCat c) ++ " ps" ++ identCat c ++ "(const char *str);\n"
+    ]
diff --git a/src/BNFC/Backend/C/CFtoBisonC.hs b/src/BNFC/Backend/C/CFtoBisonC.hs
--- a/src/BNFC/Backend/C/CFtoBisonC.hs
+++ b/src/BNFC/Backend/C/CFtoBisonC.hs
@@ -41,11 +41,13 @@
 
 module BNFC.Backend.C.CFtoBisonC (cf2Bison, startSymbol) where
 
-import BNFC.CF
-import Data.List (intercalate)
+import Data.Char (toLower)
+import Data.List (intercalate, nub)
 import Data.Maybe (fromMaybe)
+
+import BNFC.CF
 import BNFC.Backend.Common.NamedVariables hiding (varName)
-import Data.Char (toLower)
+import BNFC.Options (RecordPositions(..))
 import BNFC.Utils ((+++))
 
 --This follows the basic structure of CFtoHappy.
@@ -57,8 +59,8 @@
 type MetaVar     = String
 
 --The environment comes from the CFtoFlex
-cf2Bison :: String -> CF -> SymEnv -> String
-cf2Bison name cf env
+cf2Bison :: RecordPositions -> String -> CF -> SymEnv -> String
+cf2Bison rp name cf env
  = unlines
     [header name cf,
      union (allCatsNorm cf),
@@ -68,61 +70,102 @@
      specialToks cf,
      startSymbol cf,
      "%%",
-     prRules (rulesForBison cf env)
+     prRules (rulesForBison rp cf env),
+     errorHandler name
     ]
   where
    user = fst (unzip (tokenPragmas cf))
 
 header :: String -> CF -> String
 header name cf = unlines
-         ["/* This Bison file was machine-generated by BNFC */",
-          "%{",
-          "#include <stdlib.h>",
-          "#include <stdio.h>",
-          "#include <string.h>",
-          "#include \"Absyn.h\"",
-          "#define initialize_lexer " ++ name ++ "_initialize_lexer",
-          "extern int yyparse(void);",
-          "extern int yylex(void);",
-          "int yy_mylinenumber;",
-          "extern int initialize_lexer(FILE * inp);",
-          "void yyerror(const char *str)",
-          "{",
-          "  extern char *" ++ name ++ "text;",
-          "  fprintf(stderr,\"error: line %d: %s at %s\\n\",",
-          "    yy_mylinenumber + 1, str, " ++ name ++ "text);",
-          "}",
-          "",
-          -- M.F. 2004-09-17 changed allEntryPoints to allCatsIdNorm. Seems to fix the [Ty2] bug.
-          unlines $ map parseMethod (allCatsNorm cf), -- (allEntryPoints cf),
-          concatMap reverseList (filter isList (allCatsNorm cf)),
-          "%}"
-          ]
+  [ "/* This Bison file was machine-generated by BNFC */"
+  , "%locations"
+  , "%{"
+  , "#include <stdlib.h>"
+  , "#include <stdio.h>"
+  , "#include <string.h>"
+  , "#include \"Absyn.h\""
+  , "typedef struct " ++ name ++ "_buffer_state *YY_BUFFER_STATE;"
+  , "YY_BUFFER_STATE " ++ name ++ "_scan_string(const char *str);"
+  , "void " ++ name ++ "_delete_buffer(YY_BUFFER_STATE buf);"
+  , "extern int yyparse(void);"
+  , "extern int yylex(void);"
+  , "extern int " ++ name ++ "_init_lexer(FILE * inp);"
+    -- this must be deferred until yylloc is defined
+  , "extern void yyerror(const char *str);"
+  , ""
+  , unlines $ map parseResult $ nub $ map normCat eps
+  , unlines $ map (parseMethod name) eps
+  , concatMap reverseList $ filter isList $ allCatsNorm cf
+  , "%}"
+  ]
+  where
+  eps = allEntryPoints cf
+     -- Andreas, 2019-04-29, #210: Generate also parsers for CoercCat.
+     -- WAS:  (allCatsNorm cf)
+     -- Found old comment:
+     -- -- M.F. 2004-09-17 changed allEntryPoints to allCatsIdNorm. Seems to fix the [Ty2] bug.
 
+-- | Generates declaration and initialization of the @YY_RESULT@ for a parser.
+--
+--   Different parsers (for different precedences of the same category)
+--   share such a declaration.
+--
+--   Expects a normalized category.
+parseResult :: Cat -> String
+parseResult cat =
+  dat +++ resultName dat +++ "= 0;"
+  where
+  dat = identCat cat
+
+errorHandler :: String -> String
+errorHandler name = unlines
+  [ "%%"
+  , "void yyerror(const char *str)"
+  , "{"
+  , "  extern char *" ++ name ++ "text;"
+  , "  fprintf(stderr,\"error: %d,%d: %s at %s\\n\","
+  , "  " ++ name ++ "lloc.first_line, " ++ name ++ "lloc.first_column, str, " ++ name ++ "text);"
+  , "}"
+  ]
+
 --This generates a parser method for each entry point.
-parseMethod :: Cat -> String
-parseMethod cat =
---  if normCat cat /= cat      M.F. 2004-09-17 comment. No duplicates from allCatsIdNorm
---  then ""
---  else
-  unlines
-  [
-   cat' +++ resultName cat' +++ "= 0;",
-   cat' ++ " p" ++ cat' ++ "(FILE *inp)",
-   "{",
-   "  initialize_lexer(inp);",
-   "  if (yyparse())",
-   "  { /* Failure */",
-   "    return 0;",
-   "  }",
-   "  else",
-   "  { /* Success */",
-   "    return" +++ resultName cat' ++ ";",
-   "  }",
-   "}"
+parseMethod :: String -> Cat -> String
+parseMethod name cat = unlines $
+  [ dat ++ " p" ++ parser ++ "(FILE *inp)"
+  , "{"
+  , "  " ++ name ++ "_init_lexer(inp);"
+  , "  int result = yyparse();"
+  , "  if (result)"
+  , "  { /* Failure */"
+  , "    return 0;"
+  , "  }"
+  , "  else"
+  , "  { /* Success */"
+  , "    return" +++ res ++ ";"
+  , "  }"
+  , "}"
+  , dat ++ " ps" ++ parser ++ "(const char *str)"
+  , "{"
+  , "  YY_BUFFER_STATE buf;"
+  , "  " ++ name ++ "_init_lexer(0);"
+  , "  buf = " ++ name ++ "_scan_string(str);"
+  , "  int result = yyparse();"
+  , "  " ++ name ++ "_delete_buffer(buf);"
+  , "  if (result)"
+  , "  { /* Failure */"
+  , "    return 0;"
+  , "  }"
+  , "  else"
+  , "  { /* Success */"
+  , "    return" +++ res ++ ";"
+  , "  }"
+  , "}"
   ]
- where
-  cat' = identCat (normCat cat)
+  where
+  dat    = identCat (normCat cat)
+  parser = identCat cat
+  res    = resultName dat
 
 --This method generates list reversal functions for each list type.
 reverseList :: Cat -> String
@@ -175,13 +218,24 @@
    typeNT _ _ = ""
 
 --declares terminal types.
+-- token name "literal"
+-- "Syntax error messages passed to yyerror from the parser will reference the literal string instead of the token name."
+-- https://www.gnu.org/software/bison/manual/html_node/Token-Decl.html
 tokens :: [UserDef] -> SymEnv -> String
 tokens user = concatMap (declTok user)
  where
-  declTok u (s,r) = if s `elem` map show u
-    then "%token<string_> " ++ r ++ "    /*   " ++ s ++ "   */\n"
-    else "%token " ++ r ++ "    /*   " ++ s ++ "   */\n"
+  declTok u (s,r) = if s `elem` u
+    then "%token<string_> " ++ r ++ "    /*   " ++ cStringEscape s ++ "   */\n"
+    else "%token " ++ r ++ "    /*   " ++ cStringEscape s ++ "   */\n"
 
+-- | Escape characters inside a C string.
+cStringEscape :: String -> String
+cStringEscape = concatMap escChar
+  where
+    escChar c
+      | c `elem` ("\"\\" :: String) = '\\':[c]
+      | otherwise = [c]
+
 specialToks :: CF -> String
 specialToks cf = concat [
   ifC catString "%token<string_> _STRING_\n",
@@ -191,20 +245,20 @@
   ifC catIdent "%token<string_> _IDENT_\n"
   ]
    where
-    ifC cat s = if isUsedCat cf cat then s else ""
+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
 
 startSymbol :: CF -> String
 startSymbol cf = "%start" +++ identCat (firstEntry cf)
 
 --The following functions are a (relatively) straightforward translation
 --of the ones in CFtoHappy.hs
-rulesForBison :: CF -> SymEnv -> Rules
-rulesForBison cf env = map mkOne $ ruleGroups cf where
-  mkOne (cat,rules) = constructRule cf env rules cat
+rulesForBison :: RecordPositions -> CF -> SymEnv -> Rules
+rulesForBison rp cf env = map mkOne $ ruleGroups cf where
+  mkOne (cat,rules) = constructRule rp cf env rules cat
 
 -- For every non-terminal, we construct a set of rules.
-constructRule :: CF -> SymEnv -> [Rule] -> NonTerminal -> (NonTerminal,[(Pattern,Action)])
-constructRule cf env rules nt = (nt,[(p, generateAction (identCat (normCat nt)) (funRule r) b m +++ result) |
+constructRule :: RecordPositions -> CF -> SymEnv -> [Rule] -> NonTerminal -> (NonTerminal,[(Pattern,Action)])
+constructRule rp cf env rules nt = (nt,[(p, generateAction rp (identCat (normCat nt)) (funRule r) b m +++ result) |
      r0 <- rules,
      let (b,r) = if isConsFun (funRule r0) && elem (valCat r0) revs
                    then (True,revSepListRule r0)
@@ -217,27 +271,28 @@
    result = if isEntry nt then resultName (identCat (normCat nt)) ++ "= $$;" else ""
 
 -- | Generates a string containing the semantic action.
--- >>> generateAction "Foo" "Bar" False ["$1"]
+-- >>> generateAction NoRecordPositions "Foo" "Bar" False ["$1"]
 -- "make_Bar($1);"
--- >>> generateAction "Foo" "_" False ["$1"]
+-- >>> generateAction NoRecordPositions "Foo" "_" False ["$1"]
 -- "$1;"
--- >>> generateAction "ListFoo" "[]" False []
+-- >>> generateAction NoRecordPositions "ListFoo" "[]" False []
 -- "0;"
--- >>> generateAction "ListFoo" "(:[])" False ["$1"]
+-- >>> generateAction NoRecordPositions "ListFoo" "(:[])" False ["$1"]
 -- "make_ListFoo($1, 0);"
--- >>> generateAction "ListFoo" "(:)" False ["$1","$2"]
+-- >>> generateAction NoRecordPositions "ListFoo" "(:)" False ["$1","$2"]
 -- "make_ListFoo($1, $2);"
--- >>> generateAction "ListFoo" "(:)" True ["$1","$2"]
+-- >>> generateAction NoRecordPositions "ListFoo" "(:)" True ["$1","$2"]
 -- "make_ListFoo($2, $1);"
-generateAction :: String -> Fun -> Bool -> [MetaVar] -> Action
-generateAction nt f b ms
-  | isCoercion f = unwords ms ++ ";"
+generateAction :: RecordPositions -> String -> Fun -> Bool -> [MetaVar] -> Action
+generateAction rp nt f b ms
+  | isCoercion f = unwords ms ++ ";" ++ loc
   | isNilFun f   = "0;"
   | isOneFun f   = concat ["make_", nt, "(", intercalate ", " ms', ", 0);"]
   | isConsFun f  = concat ["make_", nt, "(", intercalate ", " ms', ");"]
-  | otherwise    = concat ["make_", f, "(", intercalate ", " ms', ");"]
+  | otherwise    = concat ["make_", f, "(", intercalate ", " ms', ");", loc]
  where
   ms' = if b then reverse ms else ms
+  loc = if rp == RecordPositions then " $$->line_number = @$.first_line; $$->char_number = @$.first_column;" else ""
 
 -- Generate patterns and a set of metavariables indicating
 -- where in the pattern the non-terminal
@@ -247,8 +302,9 @@
   its -> (unwords (map mkIt its), metas its)
  where
    mkIt i = case i of
-     Left c -> fromMaybe (typeName (identCat c)) (lookup (show c) env)
-     Right s -> fromMaybe s (lookup s env)
+     Left (TokenCat s) -> fromMaybe (typeName s) $ lookup s env
+     Left c  -> identCat c
+     Right s -> fromMaybe s $ lookup s env
    metas its = [revIf c ('$': show i) | (i,Left c) <- zip [1 :: Int ..] its]
    revIf c m = if not (isConsFun (funRule r)) && elem c revs
                  then "reverse" ++ identCat (normCat c) ++ "(" ++ m ++ ")"
diff --git a/src/BNFC/Backend/C/CFtoCAbs.hs b/src/BNFC/Backend/C/CFtoCAbs.hs
--- a/src/BNFC/Backend/C/CFtoCAbs.hs
+++ b/src/BNFC/Backend/C/CFtoCAbs.hs
@@ -47,117 +47,114 @@
 import BNFC.CF
 import BNFC.PrettyPrint
 import BNFC.Utils((+++))
+import BNFC.Options (RecordPositions(..))
 import BNFC.Backend.Common.NamedVariables
 import Data.Function (on)
 import Data.List
 import Data.Char(toLower)
 
 
---The result is two files (.H file, .C file)
-cf2CAbs :: String -> CF -> (String, String)
-cf2CAbs _ cf = (mkHFile cf, mkCFile cf)
-
+-- | The result is two files (.H file, .C file)
+cf2CAbs
+  :: RecordPositions
+  -> String -- ^ Ignored.
+  -> CF     -- ^ Grammar.
+  -> (String, String) -- ^ @.H@ file, @.C@ file.
+cf2CAbs rp _ cf = (mkHFile rp cf, mkCFile cf)
 
 {- **** Header (.H) File Functions **** -}
 
---Makes the Header file.
-mkHFile :: CF -> String
-mkHFile cf = unlines
- [
-  "#ifndef ABSYN_HEADER",
-  "#define ABSYN_HEADER",
-  "",
-  header,
-  prTypeDefs user,
-  "/********************   Forward Declarations    ********************/\n",
-  concatMap prForward classes,
-  "",
-  "/********************   Abstract Syntax Classes    ********************/\n",
-  concatMap prDataH (getAbstractSyntax cf),
-  "",
-  "#endif"
- ]
- where
+-- | Makes the Header file.
+
+mkHFile :: RecordPositions -> CF -> String
+mkHFile rp cf = unlines
+    [ "#ifndef ABSYN_HEADER"
+    , "#define ABSYN_HEADER"
+    , ""
+    , header
+    , prTypeDefs user
+    , "/********************   Forward Declarations    ********************/\n"
+    , concatMap prForward classes
+    , ""
+    , "/********************   Abstract Syntax Classes    ********************/\n"
+    , concatMap (prDataH rp) (getAbstractSyntax cf)
+    , ""
+    , "#endif"
+    ]
+  where
   user = fst (unzip (tokenPragmas cf))
   header = "/* C++ Abstract Syntax Interface generated by the BNF Converter.*/\n"
+  rules :: [String]
   rules = getRules cf
-  classes = nub (rules ++ getClasses (allCats cf))
+  classes = nub (rules ++ getClasses (allCatsNorm cf))
   prForward s | not (isCoercion s) = unlines
-    [
-     "struct " ++ s ++ "_;",
-     "typedef struct " ++ s ++ "_ *" ++ s ++ ";"
+    [ "struct " ++ s ++ "_;"
+    , "typedef struct " ++ s ++ "_ *" ++ s ++ ";"
     ]
   prForward _ = ""
-  getRules cf = (map testRule (cfgRules cf))
-  getClasses = map show . filter (\c -> identCat (normCat c) == show c)
-  testRule (Rule f c _) =
-   if isList c
-   then if isConsFun f
-     then identCat (normCat c)
-     else "_" --ignore this
-   else "_"
+  getRules cf = map testRule (cfgRules cf)
+  getClasses = map show . filter isDataCat
+  testRule (Rule f c _)
+    | isList c && isConsFun f = identCat (normCat c)
+    | otherwise = "_"
 
 -- | Prints struct definitions for all categories.
-prDataH :: Data -> String
-prDataH (cat, rules) =
-   if isList cat
-      then unlines
-       [
-        "struct " ++ c' ++ "_",
-        "{",
-        "  " ++ mem +++ varName mem ++ ";",
-        "  " ++ c' +++ varName c' ++ ";",
-        "};",
-        "",
-        c' ++ " make_" ++ c' ++ "(" ++ mem ++ " p1, " ++ c' ++ " p2);"
-       ]
-      else unlines
-       [
-        "struct " ++ show cat ++ "_",
-
-        "{",
-        "  enum { " ++ intercalate ", " (map prKind rules) ++ " } kind;",
-        "  union",
-        "  {",
-        concatMap prUnion rules ++ "  } u;",
-        "};",
-        "",
-        concatMap (prRuleH cat) rules
-       ]
- where
-  c' = identCat (normCat cat)
-  mem = identCat (normCatOfList cat)
-  prKind (fun, _) = "is_" ++ fun
-  prUnion (_, []) = ""
-  prUnion (fun, cats) = "    struct { " ++ (render $ prInstVars (getVars cats)) ++ " } " ++ (memName fun) ++ ";\n"
+prDataH :: RecordPositions -> Data -> String
+prDataH rp (cat, rules)
+  | isList cat = unlines
+      [ "struct " ++ c' ++ "_"
+      , "{"
+      , "  " ++ mem +++ varName mem ++ ";"
+      , "  " ++ c' +++ varName c' ++ ";"
+      , "};"
+      , ""
+      , c' ++ " make_" ++ c' ++ "(" ++ mem ++ " p1, " ++ c' ++ " p2);"
+      ]
+  | otherwise = unlines
+      [ "struct " ++ show cat ++ "_"
+      , "{"
+      , if rp == RecordPositions then "  int line_number, char_number;" else ""
+      , "  enum { " ++ intercalate ", " (map prKind rules) ++ " } kind;"
+      , "  union"
+      , "  {"
+      , concatMap prUnion rules ++ "  } u;"
+      , "};"
+      , ""
+      , concatMap (prRuleH cat) rules
+      ]
+  where
+    c' = identCat (normCat cat)
+    mem = identCat (normCatOfList cat)
+    prKind (fun, _) = "is_" ++ fun
+    prUnion (_, []) = ""
+    prUnion (fun, cats) = "    struct { " ++ (render $ prInstVars (getVars cats)) ++ " } " ++ (memName fun) ++ ";\n"
 
 
---Interface definitions for rules vary on the type of rule.
+-- | Interface definitions for rules vary on the type of rule.
 prRuleH :: Cat -> (Fun, [Cat]) -> String
 prRuleH c (fun, cats) =
     if isNilFun fun || isOneFun fun || isConsFun fun
     then ""  --these are not represented in the AbSyn
     else --a standard rule
       show c ++ " make_" ++ fun ++ "(" ++ (prParamsH 0 (getVars cats)) ++ ");\n"
-   where
-     prParamsH :: Int -> [(String, a)] -> String
-     prParamsH _ [] = "void"
-     prParamsH n ((t,_):[]) = t ++ " p" ++ (show n)
-     prParamsH n ((t,_):vs) = (t ++ " p" ++ (show n) ++ ", ") ++ (prParamsH (n+1) vs)
+  where
+    prParamsH :: Int -> [(String, a)] -> String
+    prParamsH _ [] = "void"
+    prParamsH n ((t,_):[]) = t ++ " p" ++ (show n)
+    prParamsH n ((t,_):vs) = (t ++ " p" ++ (show n) ++ ", ") ++ (prParamsH (n+1) vs)
 
---typedefs in the Header make generation much nicer.
+-- typedefs in the Header make generation much nicer.
 prTypeDefs user = unlines
-  [
-   "/********************   TypeDef Section    ********************/",
-   "typedef int Integer;",
-   "typedef char Char;",
-   "typedef double Double;",
-   "typedef char* String;",
-   "typedef char* Ident;",
-   concatMap prUserDef user
-  ]
- where
-  prUserDef s = "typedef char* " ++ show s ++ ";\n"
+    [ "/********************   TypeDef Section    ********************/"
+    , "typedef int Integer;"
+    , "typedef char Char;"
+    , "typedef double Double;"
+    , "typedef char* String;"
+    , "typedef char* Ident;"
+    , concatMap prUserDef user
+    ]
+  where
+    prUserDef s = "typedef char* " ++ s ++ ";\n"
 
 -- | A class's instance variables. Print the variables declaration by grouping
 -- together the variables of the same type.
@@ -176,28 +173,24 @@
 
 {- **** Implementation (.C) File Functions **** -}
 
---Makes the .C file
+-- | Makes the .C file
 mkCFile :: CF -> String
 mkCFile cf = unlines
- [
-  header,
-  concatMap (render . prDataC) (getAbstractSyntax cf)
- ]
- where
+  [ header
+  , concatMap (render . prDataC) (getAbstractSyntax cf)
+  ]
+  where
   header = unlines
-   [
-    "/* C Abstract Syntax Implementation generated by the BNF Converter. */",
-    "",
-    "#include <stdio.h>",
-    "#include <stdlib.h>",
-    "#include \"Absyn.h\"",
-    ""
-   ]
+    [ "/* C Abstract Syntax Implementation generated by the BNF Converter. */"
+    , ""
+    , "#include <stdio.h>"
+    , "#include <stdlib.h>"
+    , "#include \"Absyn.h\""
+    , ""
+    ]
 
---This is not represented in the implementation.
---This is not represented in the implementation.
 prDataC :: Data -> Doc
-prDataC (cat, rules) = vsep $ map (prRuleC cat) rules
+prDataC (cat, rules) = vcat' $ map (prRuleC cat) rules
 
 -- | Classes for rules vary based on the type of rule.
 --
@@ -206,7 +199,7 @@
 -- <BLANKLINE>
 --
 -- * Linked list case. These are all built-in list functions.
--- Later we could include things like lookup,insert,delete,etc.
+-- Later we could include things like lookup, insert, delete, etc.
 -- >>> prRuleC (ListCat (Cat "A")) ("(:)", [Cat "A", Cat "B", Cat "B"])
 -- /********************   ListA    ********************/
 -- ListA make_ListA(A p1, ListA p2)
@@ -241,15 +234,15 @@
 -- }
 prRuleC :: Cat -> (String, [Cat]) -> Doc
 prRuleC _ (fun, _) | isNilFun fun || isOneFun fun = empty
-prRuleC cat (fun, _) | isConsFun fun = vsep
+prRuleC cat (fun, _) | isConsFun fun = vcat'
     [ "/********************   " <> c <> "    ********************/"
     , c <+> "make_" <> c <> parens (text m <+> "p1" <> "," <+> c <+> "p2")
     , lbrace
-    , nest 4 $ vsep
+    , nest 4 $ vcat'
         [ c <+> "tmp = (" <> c <> ") malloc(sizeof(*tmp));"
         , "if (!tmp)"
         , lbrace
-        , nest 4 $ vsep
+        , nest 4 $ vcat'
             [ "fprintf(stderr, \"Error: out of memory when allocating " <> c <> "!\\n\");"
             , "exit(1);" ]
         , rbrace
@@ -265,11 +258,11 @@
                                 -- expect a list category
     m = identCat (normCat c')
     m' = map toLower m ++ "_"
-prRuleC c (fun, cats) = vsep
+prRuleC c (fun, cats) = vcat'
     [ text $ "/********************   " ++ fun ++ "    ********************/"
     , prConstructorC c fun vs cats ]
-   where
-     vs = getVars cats
+  where
+    vs = getVars cats
 
 -- | The constructor just assigns the parameters to the corresponding instance
 -- variables.
@@ -288,14 +281,14 @@
 --     return tmp;
 -- }
 prConstructorC :: Cat -> String -> [IVar] -> [Cat] -> Doc
-prConstructorC cat c vs cats = vsep
+prConstructorC cat c vs cats = vcat'
     [ text (cat' ++ " make_" ++ c) <> parens args
     , lbrace
-    , nest 4 $ vsep
+    , nest 4 $ vcat'
         [ text $ cat' ++ " tmp = (" ++ cat' ++ ") malloc(sizeof(*tmp));"
         , text "if (!tmp)"
         , lbrace
-        , nest 4 $ vsep
+        , nest 4 $ vcat'
             [ text ("fprintf(stderr, \"Error: out of memory when allocating " ++ c ++ "!\\n\");")
             , text "exit(1);" ]
         , rbrace
@@ -303,10 +296,10 @@
         , prAssigns c vs params
         , text "return tmp;" ]
     , rbrace ]
- where
-   cat' = identCat (normCat cat)
-   (types, params) = unzip (prParams cats)
-   args = hsep $ punctuate comma $ zipWith (<+>) types params
+  where
+    cat' = identCat (normCat cat)
+    (types, params) = unzip (prParams cats)
+    args = hsep $ punctuate comma $ zipWith (<+>) types params
 
 -- | Prints the constructor's parameters. Returns pairs of type * name
 -- >>> prParams [Cat "O", Cat "E"]
diff --git a/src/BNFC/Backend/C/CFtoCPrinter.hs b/src/BNFC/Backend/C/CFtoCPrinter.hs
--- a/src/BNFC/Backend/C/CFtoCPrinter.hs
+++ b/src/BNFC/Backend/C/CFtoCPrinter.hs
@@ -77,7 +77,7 @@
   footer
  ]
  where
-  eps = allEntryPoints cf
+  eps = nub . map normCat $ allEntryPoints cf
   prPrints s | normCat s == s = "char *print" ++ s' ++ "(" ++ s' ++ " p);\n"
     where
       s' = identCat s
@@ -165,7 +165,7 @@
     footer
    ]
   where
-    eps = allEntryPoints cf
+    eps = nub . map normCat $ allEntryPoints cf
     header = unlines
      [
       "/*** BNFC-Generated Pretty Printer and Abstract Syntax Viewer ***/",
@@ -375,9 +375,9 @@
  ] --Not a list:
  else
  [
-   "void pp" ++ cl ++ "(" ++ cl ++ " _p_, int _i_)",
+   "void pp" ++ cl ++ "(" ++ cl ++ " p, int _i_)",
    "{",
-   "  switch(_p_->kind)",
+   "  switch(p->kind)",
    "  {",
    concatMap prPrintRule rules,
    "  default:",
@@ -433,9 +433,9 @@
 prPrintCat :: String -> Either (Cat, Doc) String -> String
 prPrintCat fnm (c) = case c of
   Right t -> "    " ++ render (renderX t) ++ ";\n"
-  Left (cat, nt) | isTokenCat cat -> "    pp" ++ basicFunName (render nt) ++ "(_p_->u." ++ v ++ "_." ++ render nt ++ ", " ++ show (precCat cat) ++ ");\n"
+  Left (cat, nt) | isTokenCat cat -> "    pp" ++ basicFunName (render nt) ++ "(p->u." ++ v ++ "_." ++ render nt ++ ", " ++ show (precCat cat) ++ ");\n"
   Left (InternalCat, _) -> "    /* Internal Category */\n"
-  Left (cat, nt) -> "    pp" ++ identCat (normCat cat) ++ "(_p_->u." ++ v ++ "_." ++ render nt ++ ", " ++ show (precCat cat) ++ ");\n"
+  Left (cat, nt) -> "    pp" ++ identCat (normCat cat) ++ "(p->u." ++ v ++ "_." ++ render nt ++ ", " ++ show (precCat cat) ++ ");\n"
  where
   v = map toLower (normFun fnm)
 
@@ -488,9 +488,9 @@
  ] -- Not a list:
  else
  [
-   "void sh" ++ cl ++ "(" ++ cl ++ " _p_)",
+   "void sh" ++ cl ++ "(" ++ cl ++ " p)",
    "{",
-   "  switch(_p_->kind)",
+   "  switch(p->kind)",
    "  {",
    concatMap prShowRule rules,
    "  default:",
@@ -541,10 +541,10 @@
 prShowCat :: Fun -> (Cat, Doc) -> String
 prShowCat fnm c = case c of
     (cat,nt) | isTokenCat cat ->
-        "    sh" ++ basicFunName (render nt) ++ "(_p_->u." ++ v ++ "_." ++ render nt ++ ");\n"
+        "    sh" ++ basicFunName (render nt) ++ "(p->u." ++ v ++ "_." ++ render nt ++ ");\n"
     (InternalCat, _) -> "    /* Internal Category */\n"
     (cat,nt) ->
-        "    sh" ++ identCat (normCat cat) ++ "(_p_->u." ++ v ++ "_." ++ render nt ++ ");\n"
+        "    sh" ++ identCat (normCat cat) ++ "(p->u." ++ v ++ "_." ++ render nt ++ ");\n"
   where v = map toLower (normFun fnm)
 
 {- **** Helper Functions Section **** -}
diff --git a/src/BNFC/Backend/C/CFtoCSkel.hs b/src/BNFC/Backend/C/CFtoCSkel.hs
--- a/src/BNFC/Backend/C/CFtoCSkel.hs
+++ b/src/BNFC/Backend/C/CFtoCSkel.hs
@@ -70,7 +70,7 @@
   footer
  ]
  where
-  user = fst (unzip (tokenPragmas cf))
+  user = map fst $ tokenPragmas cf
   header = unlines
    [
     "#ifndef SKELETON_HEADER",
@@ -80,9 +80,7 @@
     "#include \"Absyn.h\"",
     ""
    ]
-  prUserH user = "void visit" ++ u' ++ "(" ++ show user ++ " p);"
-    where
-     u' = let u = show user in toUpper (head u) : map toLower (tail u) --this is a hack to fix a potential capitalization problem.
+  prUserH u = "void visit" ++ basicFunNameS u ++ "(" ++ u ++ " p);"
   footer = unlines
    [
     "void visitIdent(Ident i);",
@@ -107,14 +105,13 @@
 -- | Makes the skeleton's .c File
 mkCFile :: CF -> [(Cat,[Rule])] -> String
 mkCFile cf groups = concat
-   [
-    header,
-    concatMap prData groups,
-    concatMap (prUser.show) user,
-    footer
-   ]
+  [ header
+  , concatMap prData groups
+  , concatMap prUser user
+  , footer
+  ]
   where
-    user = fst (unzip (tokenPragmas cf))
+    user = map fst $ tokenPragmas cf
     header = unlines [
       "/*** BNFC-Generated Visitor Traversal Skeleton. ***/",
       "/* This traverses the abstract syntax tree.",
@@ -129,13 +126,11 @@
       ]
     prUser u = unlines
      [
-      "void visit" ++ u' ++ "(" ++ u ++ " p)",
+      "void visit" ++ basicFunNameS u ++ "(" ++ u ++ " p)",
       "{",
       "  /* Code for " ++ u ++ " Goes Here */",
       "}"
      ]
-     where
-      u' = toUpper (head u) : map toLower (tail u) --this is a hack to fix a potential capitalization problem.
     footer = unlines
      [
       "void visitIdent(Ident i)",
@@ -180,9 +175,9 @@
       -- Not a list:
   | otherwise = unlines
                [
-                "void visit" ++ cl ++ "(" ++ cl ++ " _p_)",
+                "void visit" ++ cl ++ "(" ++ cl ++ " p)",
                 "{",
-                "  switch(_p_->kind)",
+                "  switch(p->kind)",
                 "  {",
                 concatMap (render . prPrintRule) rules,
                 "  default:",
@@ -201,22 +196,22 @@
 -- >>> prPrintRule (Rule "abc" undefined [Left ab, Left ab])
 --   case is_abc:
 --     /* Code for abc Goes Here */
---     visitab(_p_->u.abc_.ab_1);
---     visitab(_p_->u.abc_.ab_2);
+--     visitab(p->u.abc_.ab_1);
+--     visitab(p->u.abc_.ab_2);
 --     break;
 -- <BLANKLINE>
 -- >>> let ab = TokenCat "ab"
 -- >>> prPrintRule (Rule "abc" undefined [Left ab])
 --   case is_abc:
 --     /* Code for abc Goes Here */
---     visitAb(_p_->u.abc_.ab_);
+--     visitAb(p->u.abc_.ab_);
 --     break;
 -- <BLANKLINE>
 -- >>> prPrintRule (Rule "abc" undefined [Left ab, Left ab])
 --   case is_abc:
 --     /* Code for abc Goes Here */
---     visitAb(_p_->u.abc_.ab_1);
---     visitAb(_p_->u.abc_.ab_2);
+--     visitAb(p->u.abc_.ab_1);
+--     visitAb(p->u.abc_.ab_2);
 --     break;
 -- <BLANKLINE>
 prPrintRule :: Rule -> Doc
@@ -238,9 +233,14 @@
       let visitf = "visit" <> if isTokenCat cat
                        then basicFunName cat
                        else text (identCat (normCat cat))
-      in visitf <> parens ("_p_->u." <> text v <> "_." <> vname ) <> ";"
+      in visitf <> parens ("p->u." <> text v <> "_." <> vname ) <> ";"
     where v = map toLower $ normFun fnm
 
---The visit-function name of a basic type
+-- | The visit-function name of a basic type
+
 basicFunName :: Cat -> Doc
-basicFunName c = text (toUpper (head (show c)): tail (show c))
+basicFunName = text . basicFunNameS . catToStr
+
+basicFunNameS :: String -> String
+basicFunNameS (c:cs) = toUpper c : cs
+basicFunNameS []     = error "impossible: empty string in CFtoCSkel.basicFunNameS"
diff --git a/src/BNFC/Backend/C/CFtoFlexC.hs b/src/BNFC/Backend/C/CFtoFlexC.hs
--- a/src/BNFC/Backend/C/CFtoFlexC.hs
+++ b/src/BNFC/Backend/C/CFtoFlexC.hs
@@ -40,11 +40,10 @@
 module BNFC.Backend.C.CFtoFlexC (cf2flex, lexComments, cMacros) where
 
 import Prelude'
-
 import Data.Maybe (fromMaybe)
 
 import BNFC.CF
-import BNFC.Backend.CPP.NoSTL.RegToFlex
+import BNFC.Backend.C.RegToFlex
 import BNFC.Backend.Common.NamedVariables
 import BNFC.PrettyPrint
 import BNFC.Utils (cstring)
@@ -68,16 +67,18 @@
 prelude name = unlines
   [
    "/* -*- c -*- This FLex file was machine-generated by the BNF converter */",
-   "%option noyywrap",
+   -- noinput and nounput are most often unused
+   -- https://stackoverflow.com/questions/39075510/option-noinput-nounput-what-are-they-for
+   "%option noyywrap noinput nounput",
    "%{",
    "#define yylval " ++ name ++ "lval",
+   "#define yylloc " ++ name ++ "lloc",
    "#define YY_BUFFER_APPEND " ++ name ++ "_BUFFER_APPEND",
    "#define YY_BUFFER_RESET " ++ name ++ "_BUFFER_RESET",
-   "#define initialize_lexer " ++ name ++ "_initialize_lexer",
+   "#define init_lexer " ++ name ++ "_init_lexer",
    "#include <string.h>",
    "#include \"Parser.h\"",
    "#define YY_BUFFER_LENGTH 4096",
-   "extern int yy_mylinenumber ;",
    "char YY_PARSED_STRING[YY_BUFFER_LENGTH];",
    "void YY_BUFFER_APPEND(char *s)",
    "{",
@@ -89,6 +90,24 @@
    "  for(x = 0; x < YY_BUFFER_LENGTH; x++)",
    "    YY_PARSED_STRING[x] = 0;",
    "}",
+   -- https://www.gnu.org/software/bison/manual/html_node/Token-Locations.html
+   -- Flex is responsible for keeping tracking of the yylloc for Bison.
+   -- Flex also doesn't do this automatically so we need this function
+   -- https://stackoverflow.com/a/22125500/425756
+   "static void update_loc(YYLTYPE* loc, char* text)",
+   "{",
+   "  loc->first_line = loc->last_line;",
+   "  loc->first_column = loc->last_column;",
+   "  for (int i = 0; text[i] != '\\0'; ++i) {",
+   "      if (text[i] == '\\n') {",
+   "          ++loc->last_line;",
+   "          loc->last_column = 0; ",
+   "      } else {",
+   "          ++loc->last_column; ",
+   "      }",
+   "  }",
+   "}",
+   "#define YY_USER_ACTION update_loc(&yylloc, yytext);",
    "",
    "%}"
   ]
@@ -126,22 +145,19 @@
    ifC catDouble  "<YYINITIAL>{DIGIT}+\".\"{DIGIT}+(\"e\"(\\-)?{DIGIT}+)?      \t yylval.double_ = atof(yytext); return _DOUBLE_;\n",
    ifC catInteger "<YYINITIAL>{DIGIT}+      \t yylval.int_ = atoi(yytext); return _INTEGER_;\n",
    ifC catIdent   "<YYINITIAL>{LETTER}{IDENT}*      \t yylval.string_ = strdup(yytext); return _IDENT_;\n",
-   "\\n ++yy_mylinenumber ;\n",
    "<YYINITIAL>[ \\t\\r\\n\\f]      \t /* ignore white space. */;\n",
    "<YYINITIAL>.      \t return _ERROR_;\n",
    "%%\n",
    footer
   ]
   where
-   ifC cat s = if isUsedCat cf cat then s else ""
+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
    userDefTokens = unlines $
      ["<YYINITIAL>" ++ printRegFlex exp ++
       "     \t yylval.string_ = strdup(yytext); return " ++ sName name ++ ";"
        | (name, exp) <- tokenPragmas cf]
       where
-          sName n = case lookup (show n) env of
-              Just x -> x
-              Nothing -> show n
+        sName n = fromMaybe n $ lookup n env
    strStates = unlines --These handle escaped characters in Strings.
     [
      "<YYINITIAL>\"\\\"\"      \t BEGIN STRING;",
@@ -164,7 +180,18 @@
      "<CHARESC>.      \t BEGIN CHAREND; yylval.char_ = yytext[0]; return _CHAR_;",
      "<CHAREND>\"'\"      \t BEGIN YYINITIAL;"
     ]
-   footer = "void initialize_lexer(FILE *inp) { yyrestart(inp); BEGIN YYINITIAL; }"
+   footer = unlines
+    [
+     "void init_lexer(FILE *inp)",
+     "{",
+     "  yyrestart(inp);",
+     "  yylloc.first_line = 1;",
+     "  yylloc.first_column = 1;",
+     "  yylloc.last_line = 1;",
+     "  yylloc.last_column = 1;",
+     "  BEGIN YYINITIAL;",
+     "}"
+    ]
 
 -- ---------------------------------------------------------------------------
 -- Comments
@@ -178,32 +205,29 @@
 -- delimiters.
 --
 -- >>> lexComments (Just "myns.") ([("{-","-}")],["--"])
--- <YYINITIAL>"--"[^\n]*\n ++myns.yy_mylinenumber; // BNFC: comment "--";
+-- <YYINITIAL>"--"[^\n]*\n /* skip */; // BNFC: comment "--";
 -- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";
 -- <COMMENT>"-}" BEGIN YYINITIAL;
 -- <COMMENT>. /* skip */;
--- <COMMENT>[\n] ++myns.yy_mylinenumber;
+-- <COMMENT>[\n] /* skip */;
 lexComments :: Maybe String -> ([(String, String)], [String]) -> Doc
-lexComments ns (m,s) =
-    vcat (map (lexSingleComment ns) s ++ map (lexMultiComment ns) m)
+lexComments _ (m,s) =
+    vcat (map lexSingleComment s ++ map lexMultiComment m)
 
 -- | Create a lexer rule for single-line comments.
 -- The first argument is -- an optional c++ namespace
 -- The second argument is the delimiter that marks the beginning of the
 -- comment.
 --
--- >>> lexSingleComment (Just "mypackage.") "--"
--- <YYINITIAL>"--"[^\n]*\n ++mypackage.yy_mylinenumber; // BNFC: comment "--";
---
--- >>> lexSingleComment Nothing "--"
--- <YYINITIAL>"--"[^\n]*\n ++yy_mylinenumber; // BNFC: comment "--";
+-- >>> lexSingleComment "--"
+-- <YYINITIAL>"--"[^\n]*\n /* skip */; // BNFC: comment "--";
 --
--- >>> lexSingleComment Nothing "\""
--- <YYINITIAL>"\""[^\n]*\n ++yy_mylinenumber; // BNFC: comment "\"";
-lexSingleComment :: Maybe String -> String -> Doc
-lexSingleComment ns c =
+-- >>> lexSingleComment "\""
+-- <YYINITIAL>"\""[^\n]*\n /* skip */; // BNFC: comment "\"";
+lexSingleComment :: String -> Doc
+lexSingleComment c =
     "<YYINITIAL>" <> cstring c <> "[^\\n]*\\n"
-    <+> "++"<> text (fromMaybe "" ns)<>"yy_mylinenumber;"
+    <+> "/* skip */;"
     <+> "// BNFC: comment" <+> cstring c <> ";"
 
 -- | Create a lexer rule for multi-lines comments.
@@ -214,30 +238,24 @@
 -- comments. They could possibly start a comment with one character and end it
 -- with another.  However this seems rare.
 --
--- >>> lexMultiComment Nothing ("{-", "-}")
--- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";
--- <COMMENT>"-}" BEGIN YYINITIAL;
--- <COMMENT>. /* skip */;
--- <COMMENT>[\n] ++yy_mylinenumber;
---
--- >>> lexMultiComment (Just "foo.") ("{-", "-}")
+-- >>> lexMultiComment ("{-", "-}")
 -- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";
 -- <COMMENT>"-}" BEGIN YYINITIAL;
 -- <COMMENT>. /* skip */;
--- <COMMENT>[\n] ++foo.yy_mylinenumber;
+-- <COMMENT>[\n] /* skip */;
 --
--- >>> lexMultiComment Nothing ("\"'", "'\"")
+-- >>> lexMultiComment ("\"'", "'\"")
 -- <YYINITIAL>"\"'" BEGIN COMMENT; // BNFC: comment "\"'" "'\"";
 -- <COMMENT>"'\"" BEGIN YYINITIAL;
 -- <COMMENT>. /* skip */;
--- <COMMENT>[\n] ++yy_mylinenumber;
-lexMultiComment :: Maybe String -> (String, String) -> Doc
-lexMultiComment ns (b,e) = vcat
+-- <COMMENT>[\n] /* skip */;
+lexMultiComment :: (String, String) -> Doc
+lexMultiComment (b,e) = vcat
     [ "<YYINITIAL>" <> cstring b <+> "BEGIN COMMENT;"
         <+> "// BNFC: comment" <+> cstring b <+> cstring e <> ";"
     , "<COMMENT>" <> cstring e <+> "BEGIN YYINITIAL;"
     , "<COMMENT>. /* skip */;"
-    , "<COMMENT>[\\n] ++"<> text (fromMaybe "" ns) <>"yy_mylinenumber;"
+    , "<COMMENT>[\\n] /* skip */;"
     ]
 
 -- --There might be a possible bug here if a language includes 2 multi-line comments.
diff --git a/src/BNFC/Backend/C/RegToFlex.hs b/src/BNFC/Backend/C/RegToFlex.hs
new file mode 100644
--- /dev/null
+++ b/src/BNFC/Backend/C/RegToFlex.hs
@@ -0,0 +1,82 @@
+module BNFC.Backend.C.RegToFlex (printRegFlex) where
+
+-- modified from pretty-printer generated by the BNF converter
+
+import Data.Char (showLitChar)
+import AbsBNF
+
+-- the top-level printing method
+printRegFlex :: Reg -> String
+printRegFlex = render . prt 0
+
+-- you may want to change render and parenth
+
+render :: [String] -> String
+render = rend (0::Int) where
+  rend i ss = case ss of
+    "["      :ts -> cons "["  $ rend i ts
+    "("      :ts -> cons "("  $ rend i ts
+    t  : "," :ts -> cons t    $ space "," $ rend i ts
+    t  : ")" :ts -> cons t    $ cons ")"  $ rend i ts
+    t  : "]" :ts -> cons t    $ cons "]"  $ rend i ts
+    t        :ts -> space t   $ rend i ts
+    _            -> ""
+  cons s t  = s ++ t
+  space t s = if null s then t else t ++ s
+
+parenth :: [String] -> [String]
+parenth ss = ["("] ++ ss ++ [")"]
+
+-- the printer class does the job
+class Print a where
+  prt :: Int -> a -> [String]
+  prtList :: [a] -> [String]
+  prtList = concat . map (prt 0)
+
+instance Print a => Print [a] where
+  prt _ = prtList
+
+instance Print Char where
+  prt _ c = [[c]]
+  prtList s = map (concat . prt 0) s
+
+prPrec :: Int -> Int -> [String] -> [String]
+prPrec i j = if j<i then parenth else id
+
+instance Print Ident where
+  prt _ (Ident i) = [i]
+
+instance Print Reg where
+  prt i e = case e of
+   RSeq reg0 reg -> prPrec i 2 (concat [prt 2 reg0 , prt 3 reg])
+   RAlt reg0 reg -> prPrec i 1 (concat [prt 1 reg0 , ["|"] , prt 2 reg])
+
+   -- Flex does not support set difference. See link for valid patterns.
+   -- https://westes.github.io/flex/manual/Patterns.html#Patterns
+   -- RMinus reg0 reg -> prPrec i 1 (concat [prt 2 reg0 , ["#"] , prt 2 reg])
+   RMinus reg0 REps -> prt i reg0 -- REps is identity for set difference
+   RMinus RAny reg@(RChar _) ->  prPrec i 3 (concat [["[^"],prt 0 reg,["]"]])
+   RMinus RAny (RAlts str) ->  prPrec i 3 (concat [["[^"],prt 0 $ mkEsc str,["]"]])
+   -- FIXME: maybe we could add cases for char - RDigit, RLetter etc.
+   RMinus _ _ -> error  "Flex does not support general set difference"
+
+   RStar reg -> prPrec i 3 (concat [prt 3 reg , ["*"]])
+   RPlus reg -> prPrec i 3 (concat [prt 3 reg , ["+"]])
+   ROpt reg  -> prPrec i 3 (concat [prt 3 reg , ["?"]])
+   REps  -> prPrec i 3 (["[^.]"])
+   RChar c -> prPrec i 3 (prt 0 [mkEsc [c]])
+   RAlts str -> prPrec i 3 (concat [["["], prt 0 $ mkEsc str, ["]"]])
+   RSeqs str -> prPrec i 2 (concat (map (prt 0) $ mkEsc str))
+   RDigit  -> prPrec i 3 (concat [["{DIGIT}"]])
+   RLetter  -> prPrec i 3 (concat [["{LETTER}"]])
+   RUpper  -> prPrec i 3 (concat [["{CAPITAL}"]])
+   RLower  -> prPrec i 3 (concat [["{SMALL}"]])
+   RAny  -> prPrec i 3 (concat [["."]])
+
+-- Handle special characters in regular expressions.
+mkEsc :: String -> String
+mkEsc = concatMap escChar
+  where
+    escChar c
+      | c `elem` ("$+-*=<>[](){}!?.,;:^~|&%#/\\$_@\"" :: String) = '\\':[c]
+      | otherwise = showLitChar c ""
diff --git a/src/BNFC/Backend/CPP/Makefile.hs b/src/BNFC/Backend/CPP/Makefile.hs
--- a/src/BNFC/Backend/CPP/Makefile.hs
+++ b/src/BNFC/Backend/CPP/Makefile.hs
@@ -3,8 +3,8 @@
 import BNFC.Backend.Common.Makefile
 import BNFC.PrettyPrint
 
-makefile :: String -> Doc
-makefile name = vcat
+makefile :: String -> String -> Doc
+makefile name basename = vcat
     [ mkVar "CC" "g++"
     , mkVar "CCFLAGS" "-g -W -Wall"
     , ""
@@ -27,8 +27,10 @@
     , mkRule "distclean" ["clean"]
         [ "rm -f " ++ unwords
             [ "Absyn.C", "Absyn.H", "Test.C", "Parser.C", "Parser.H", "Lexer.C",
-              "Skeleton.C", "Skeleton.H", "Printer.C", "Printer.H", "Makefile " ]
-            ++ name ++ ".l " ++ name ++ ".y " ++ name ++ ".tex "]
+              "Skeleton.C", "Skeleton.H", "Printer.C", "Printer.H", basename,
+              name ++ ".l", name ++ ".y", name ++ ".tex"
+            ]
+        ]
     , mkRule testName [ "${OBJS}", "Test.o" ]
         [ "@echo \"Linking " ++ testName ++ "...\""
         , "${CC} ${CCFLAGS} ${OBJS} Test.o -o " ++ testName ]
diff --git a/src/BNFC/Backend/CPP/NoSTL.hs b/src/BNFC/Backend/CPP/NoSTL.hs
--- a/src/BNFC/Backend/CPP/NoSTL.hs
+++ b/src/BNFC/Backend/CPP/NoSTL.hs
@@ -19,6 +19,9 @@
 
 module BNFC.Backend.CPP.NoSTL (makeCppNoStl) where
 
+import Data.Char
+import Data.List (nub)
+
 import BNFC.Utils
 import BNFC.CF
 import BNFC.Options
@@ -29,7 +32,6 @@
 import BNFC.Backend.CPP.NoSTL.CFtoBison
 import BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel
 import BNFC.Backend.CPP.PrettyPrinter
-import Data.Char
 import qualified BNFC.Backend.Common.Makefile as Makefile
 
 makeCppNoStl :: SharedOptions -> CF -> MkFiles ()
@@ -107,10 +109,10 @@
     "    }",
     "  } else input = stdin;",
     "  /* The default entry point is used. For other options see Parser.H */",
-    "  " ++ def ++ " *parse_tree = p" ++ def ++ "(input);",
+    "  " ++ dat ++ " *parse_tree = p" ++ def ++ "(input);",
     "  if (parse_tree)",
     "  {",
-    "    printf(\"\\nParse Succesful!\\n\");",
+    "    printf(\"\\nParse Successful!\\n\");",
     "    if (!quiet) {",
     "      printf(\"\\n[Abstract Syntax]\\n\");",
     "      ShowAbsyn *s = new ShowAbsyn();",
@@ -126,14 +128,16 @@
     ""
    ]
   where
-   def = show (head (allEntryPoints cf))
+   cat = head (allEntryPoints cf)
+   dat = identCat $ normCat cat
+   def = identCat cat
 
 mkHeaderFile cf cats eps env = unlines
  [
   "#ifndef PARSER_HEADER_FILE",
   "#define PARSER_HEADER_FILE",
   "",
-  concatMap mkForwardDec cats,
+  concatMap mkForwardDec (nub $ map normCat cats),
   "typedef union",
   "{",
   "  int int_;",
@@ -150,26 +154,24 @@
   "#endif"
  ]
  where
-  mkForwardDec s | normCat s == s = "class " ++ identCat s ++ ";\n"
-  mkForwardDec _ = ""
+  mkForwardDec s = "class " ++ identCat s ++ ";\n"
   mkVar s | normCat s == s = "  " ++ identCat s ++"*" +++ map toLower (identCat s) ++ "_;\n"
   mkVar _ = ""
   mkDefines n [] = mkString n
   mkDefines n ((_,s):ss) = "#define " ++ s +++ show n ++ "\n" ++ mkDefines (n+1) ss
-  mkString n =  if isUsedCat cf catString
+  mkString n =  if isUsedCat cf (TokenCat catString)
    then ("#define _STRING_ " ++ show n ++ "\n") ++ mkChar (n+1)
    else mkChar n
-  mkChar n =  if isUsedCat cf catChar
+  mkChar n =  if isUsedCat cf (TokenCat catChar)
    then ("#define _CHAR_ " ++ show n ++ "\n") ++ mkInteger (n+1)
    else mkInteger n
-  mkInteger n =  if isUsedCat cf catInteger
+  mkInteger n =  if isUsedCat cf (TokenCat catInteger)
    then ("#define _INTEGER_ " ++ show n ++ "\n") ++ mkDouble (n+1)
    else mkDouble n
-  mkDouble n =  if isUsedCat cf catDouble
+  mkDouble n =  if isUsedCat cf (TokenCat catDouble)
    then ("#define _DOUBLE_ " ++ show n ++ "\n") ++ mkIdent(n+1)
    else mkIdent n
-  mkIdent n =  if isUsedCat cf catIdent
+  mkIdent n =  if isUsedCat cf (TokenCat catIdent)
    then "#define _IDENT_ " ++ show n ++ "\n"
    else ""
-  mkFunc s | normCat s == s = identCat s ++ "*" +++ "p" ++ identCat s ++ "(FILE *inp);\n"
-  mkFunc _ = ""
+  mkFunc s = identCat (normCat s) ++ "*" +++ "p" ++ identCat s ++ "(FILE *inp);\n"
diff --git a/src/BNFC/Backend/CPP/NoSTL/CFtoBison.hs b/src/BNFC/Backend/CPP/NoSTL/CFtoBison.hs
--- a/src/BNFC/Backend/CPP/NoSTL/CFtoBison.hs
+++ b/src/BNFC/Backend/CPP/NoSTL/CFtoBison.hs
@@ -60,16 +60,19 @@
 
 module BNFC.Backend.CPP.NoSTL.CFtoBison (cf2Bison) where
 
+import Data.Char (toLower, isUpper)
+import Data.List (intersperse, nub)
+import Data.Maybe (fromMaybe)
+
 import BNFC.CF
-import Data.List (intersperse)
 import BNFC.Backend.Common.NamedVariables hiding (varName)
+import BNFC.Backend.C.CFtoBisonC (startSymbol)
 import BNFC.Backend.CPP.STL.CFtoBisonSTL (union)
-import Data.Char (toLower,isUpper)
-import BNFC.Utils ((+++))
+import BNFC.PrettyPrint
 import BNFC.TypeChecker
+import BNFC.Utils ((+++), when)
+
 import ErrM
-import BNFC.Backend.C.CFtoBisonC (startSymbol)
-import BNFC.PrettyPrint
 
 --This follows the basic structure of CFtoHappy.
 
@@ -120,10 +123,14 @@
     , "}"
     , ""
     , definedRules cf
-    , unlines $ map (parseMethod name) (allCatsNorm cf)  -- (allEntryPoints cf), M.F. 2004-09-14 fix of [Ty2] bug.
-    , concatMap reverseList (filter isList (allCatsNorm cf))
+    , unlines $ map parseResult dats
+    , unlines $ map (parseMethod name) eps
+    , concatMap reverseList $ filter isList $ allCatsNorm cf
     , "%}"
     ]
+  where
+  eps  = allEntryPoints cf
+  dats = nub $ map normCat eps
 
 definedRules :: CF -> String
 definedRules cf = unlines [ rule f xs e | FunDef f xs e <- cfgPragmas cf]
@@ -172,16 +179,24 @@
         call x es = x ++ "(" ++ concat (intersperse ", " $ map cppExp es) ++ ")"
 
 
+-- | Generates declaration and initialization of the @YY_RESULT@ for a parser.
+--
+--   Different parsers (for different precedences of the same category)
+--   share such a declaration.
+--
+--   Expects a normalized category.
+parseResult :: Cat -> String
+parseResult cat =
+  "static " ++ cat' ++ "*" +++ resultName cat' +++ "= 0;"
+  where
+  cat' = identCat cat
+
+
 --This generates a parser method for each entry point.
 parseMethod :: String -> Cat -> String
-parseMethod _ cat =
-  -- if normCat cat /= cat     M.F. 2004-09-17 comment. No duplicates from allCatsIdNorm
-  -- then ""
-  -- else
-  unlines
+parseMethod _ cat = unlines
   [
-   cat' ++ "*" +++ (resultName cat') +++ "= 0;",
-   cat' ++"* p" ++ cat' ++ "(FILE *inp)",
+   cat' ++"* p" ++ par ++ "(FILE *inp)",
    "{",
    "  initialize_lexer(inp);",
    "  if (yyparse())",
@@ -196,6 +211,7 @@
   ]
  where
   cat' = identCat (normCat cat)
+  par  = identCat cat
 
 --This method generates list reversal functions for each list type.
 reverseList :: Cat -> String
@@ -228,11 +244,8 @@
 
 --declares terminal types.
 tokens :: [UserDef] -> SymEnv -> String
-tokens user ts = concatMap (declTok user) ts
- where
-  declTok u (s,r) = if elem s (map show u)
-    then "%token<string_> " ++ r ++ "    //   " ++ s ++ "\n"
-    else "%token " ++ r ++ "    //   " ++ s ++ "\n"
+tokens user = concatMap $ \ (s, r) ->
+  concat [ "%token", when (s `elem` user) "<string_>", " ", r, "    //   ", s, "\n" ]
 
 specialToks :: CF -> String
 specialToks cf = concat [
@@ -243,7 +256,7 @@
   ifC catIdent "%token<string_> _IDENT_\n"
   ]
    where
-    ifC cat s = if isUsedCat cf cat then s else ""
+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
 
 --The following functions are a (relatively) straightforward translation
 --of the ones in CFtoHappy.hs
@@ -290,12 +303,9 @@
   its -> (unwords (map mkIt its), metas its)
  where
    mkIt i = case i of
-     Left c -> case lookup (show c) env of
-       Just x -> x
-       Nothing -> typeName (identCat c)
-     Right s -> case lookup s env of
-       Just x -> x
-       Nothing -> s
+     Left (TokenCat s) -> fromMaybe (typeName s) $ lookup s env
+     Left  c -> identCat c
+     Right s -> fromMaybe s $ lookup s env
    metas its = [revIf c ('$': show i) | (i,Left c) <- zip [1 :: Int ..] its]
    revIf c m = if (not (isConsFun (funRule r)) && elem c revs)
                  then ("reverse" ++ (identCat (normCat c)) ++ "(" ++ m ++ ")")
diff --git a/src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs b/src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs
--- a/src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs
+++ b/src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs
@@ -206,10 +206,10 @@
    concatMap prUserDef user
   ]
  where
-  prUserDef s = "typedef char* " ++ show s ++ ";\n"
+  prUserDef s = "typedef char* " ++ s ++ ";\n"
 
 -- | A class's instance variables.
--- >>> prInstVars [Cat "MyTokn"] [("MyTokn",1), ("A",1), ("A",2)]
+-- >>> prInstVars ["MyTokn"] [("MyTokn",1), ("A",1), ("A",2)]
 -- MyTokn mytokn_1;
 -- A *a_1, *a_2;
 prInstVars :: [UserDef] -> [IVar] -> Doc
@@ -336,7 +336,7 @@
 
 -- | The constructor just assigns the parameters to the corresponding instance
 -- variables.
--- >>> prConstructorC [Cat "Integer"] "bla" [("A",1), ("Integer",1), ("A",2)] [Cat "A", Cat "Integer", Cat "A"]
+-- >>> prConstructorC ["Integer"] "bla" [("A",1), ("Integer",1), ("A",2)] [Cat "A", Cat "Integer", Cat "A"]
 -- bla::bla(A *p1, Integer p2, A *p3) { a_1 = p1; integer_ = p2; a_2 = p3; }
 prConstructorC :: [UserDef] -> String -> [IVar] -> [Cat] -> Doc
 prConstructorC user c vs cats =
@@ -412,7 +412,6 @@
 
 {- **** Helper Functions **** -}
 
---Checks if something is a basic or user-defined type.
+-- | Checks if something is a basic or user-defined type.
 isBasic :: [UserDef] -> String -> Bool
-isBasic user x =
-    x `elem` (map show user ++ ["Integer", "Char", "String", "Double", "Ident"])
+isBasic user x = x `elem` user || x `elem` specialCatsP
diff --git a/src/BNFC/Backend/CPP/NoSTL/CFtoCVisitSkel.hs b/src/BNFC/Backend/CPP/NoSTL/CFtoCVisitSkel.hs
--- a/src/BNFC/Backend/CPP/NoSTL/CFtoCVisitSkel.hs
+++ b/src/BNFC/Backend/CPP/NoSTL/CFtoCVisitSkel.hs
@@ -67,7 +67,7 @@
  [
   header,
   concatMap prDataH groups,
-  concatMap (prUserH.show) user,
+  concatMap prUserH user,
   footer
  ]
  where
@@ -129,7 +129,7 @@
    [
     header,
     concatMap (prData user) groups,
-    concatMap (prUser.show) user,
+    concatMap prUser user,
     footer
    ]
   where
@@ -258,16 +258,8 @@
 --This is because you don't -> a basic non-pointer type.
 isBasic :: [UserDef] -> String -> Bool
 isBasic user v =
-  if elem (init v) user'
-    then True
-    else if "integer_" `isPrefixOf` v then True
-    else if "char_" `isPrefixOf` v then True
-    else if "string_" `isPrefixOf` v then True
-    else if "double_" `isPrefixOf` v then True
-    else if "ident_" `isPrefixOf` v then True
-    else False
-  where
-   user' = map (map toLower.show) user
+  init v `elem` map (map toLower) user
+  || any (`isPrefixOf` v) [ "integer_" , "char_" , "string_" , "double_" , "ident_" ]
 
 --The visit-function name of a basic type
 funName :: String -> String
@@ -277,4 +269,4 @@
     else if "string_" `isPrefixOf` v then "String"
     else if "double_" `isPrefixOf` v then "Double"
     else if "ident_" `isPrefixOf` v then "Ident"
-    else (toUpper (head v)) : (init (tail v)) --User-defined type
+    else toUpper (head v) : init (tail v) -- User-defined type
diff --git a/src/BNFC/Backend/CPP/NoSTL/CFtoFlex.hs b/src/BNFC/Backend/CPP/NoSTL/CFtoFlex.hs
--- a/src/BNFC/Backend/CPP/NoSTL/CFtoFlex.hs
+++ b/src/BNFC/Backend/CPP/NoSTL/CFtoFlex.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
 {-
     BNF Converter: Flex generator
     Copyright (C) 2004  Author:  Michael Pellauer
@@ -37,12 +39,16 @@
 -}
 module BNFC.Backend.CPP.NoSTL.CFtoFlex (cf2flex) where
 
+import Prelude'
+import Data.Maybe (fromMaybe)
+
 import BNFC.CF
-import BNFC.Backend.C.CFtoFlexC (lexComments, cMacros)
-import BNFC.Backend.CPP.NoSTL.RegToFlex
+import BNFC.Backend.C.CFtoFlexC (cMacros)
+import BNFC.Backend.C.RegToFlex
 import BNFC.Backend.Common.NamedVariables
 import BNFC.Backend.CPP.STL.STLUtils
 import BNFC.PrettyPrint
+import BNFC.Utils (cstring)
 
 --The environment must be returned for the parser to use.
 cf2flex :: Maybe String -> String -> CF -> (String, SymEnv)
@@ -109,16 +115,14 @@
    footer
   ]
   where
-   ifC cat s = if isUsedCat cf cat then s else ""
+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
    ns = nsString inPackage
    userDefTokens = unlines $
      ["<YYINITIAL>" ++ printRegFlex exp ++
       "     \t " ++ ns ++ "yylval.string_ = strdup(yytext); return " ++ sName name ++ ";"
        | (name, exp) <- tokenPragmas cf]
       where
-          sName n = case lookup (show n) env of
-              Just x -> x
-              Nothing -> (show n)
+          sName n = fromMaybe n $ lookup n env
    strStates = unlines --These handle escaped characters in Strings.
     [
      "<YYINITIAL>\"\\\"\"      \t BEGIN STRING;",
@@ -148,6 +152,92 @@
     ]
 
 
+-- ---------------------------------------------------------------------------
+-- Comments
+
+-- | Create flex rules for single-line and multi-lines comments.
+-- The first argument is an optional namespace (for C++); the second
+-- argument is the set of comment delimiters as returned by BNFC.CF.comments.
+--
+-- This function is only compiling the results of applying either
+-- lexSingleComment or lexMultiComment on each comment delimiter or pair of
+-- delimiters.
+--
+-- >>> lexComments (Just "myns.") ([("{-","-}")],["--"])
+-- <YYINITIAL>"--"[^\n]*\n ++myns.yy_mylinenumber; // BNFC: comment "--";
+-- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";
+-- <COMMENT>"-}" BEGIN YYINITIAL;
+-- <COMMENT>. /* skip */;
+-- <COMMENT>[\n] ++myns.yy_mylinenumber;
+lexComments :: Maybe String -> ([(String, String)], [String]) -> Doc
+lexComments ns (m,s) =
+    vcat (map (lexSingleComment ns) s ++ map (lexMultiComment ns) m)
+
+-- | Create a lexer rule for single-line comments.
+-- The first argument is -- an optional c++ namespace
+-- The second argument is the delimiter that marks the beginning of the
+-- comment.
+--
+-- >>> lexSingleComment (Just "mypackage.") "--"
+-- <YYINITIAL>"--"[^\n]*\n ++mypackage.yy_mylinenumber; // BNFC: comment "--";
+--
+-- >>> lexSingleComment Nothing "--"
+-- <YYINITIAL>"--"[^\n]*\n ++yy_mylinenumber; // BNFC: comment "--";
+--
+-- >>> lexSingleComment Nothing "\""
+-- <YYINITIAL>"\""[^\n]*\n ++yy_mylinenumber; // BNFC: comment "\"";
+lexSingleComment :: Maybe String -> String -> Doc
+lexSingleComment ns c =
+    "<YYINITIAL>" <> cstring c <> "[^\\n]*\\n"
+    <+> "++"<> text (fromMaybe "" ns)<>"yy_mylinenumber;"
+    <+> "// BNFC: comment" <+> cstring c <> ";"
+
+-- | Create a lexer rule for multi-lines comments.
+-- The first argument is -- an optional c++ namespace
+-- The second arguments is the pair of delimiter for the multi-lines comment:
+-- start deleminiter and end delimiter.
+-- There might be a possible bug here if a language includes 2 multi-line
+-- comments. They could possibly start a comment with one character and end it
+-- with another.  However this seems rare.
+--
+-- >>> lexMultiComment Nothing ("{-", "-}")
+-- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";
+-- <COMMENT>"-}" BEGIN YYINITIAL;
+-- <COMMENT>. /* skip */;
+-- <COMMENT>[\n] ++yy_mylinenumber;
+--
+-- >>> lexMultiComment (Just "foo.") ("{-", "-}")
+-- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";
+-- <COMMENT>"-}" BEGIN YYINITIAL;
+-- <COMMENT>. /* skip */;
+-- <COMMENT>[\n] ++foo.yy_mylinenumber;
+--
+-- >>> lexMultiComment Nothing ("\"'", "'\"")
+-- <YYINITIAL>"\"'" BEGIN COMMENT; // BNFC: comment "\"'" "'\"";
+-- <COMMENT>"'\"" BEGIN YYINITIAL;
+-- <COMMENT>. /* skip */;
+-- <COMMENT>[\n] ++yy_mylinenumber;
+lexMultiComment :: Maybe String -> (String, String) -> Doc
+lexMultiComment ns (b,e) = vcat
+    [ "<YYINITIAL>" <> cstring b <+> "BEGIN COMMENT;"
+        <+> "// BNFC: comment" <+> cstring b <+> cstring e <> ";"
+    , "<COMMENT>" <> cstring e <+> "BEGIN YYINITIAL;"
+    , "<COMMENT>. /* skip */;"
+    , "<COMMENT>[\\n] ++"<> text (fromMaybe "" ns) <>"yy_mylinenumber;"
+    ]
+
+-- --There might be a possible bug here if a language includes 2 multi-line comments.
+-- --They could possibly start a comment with one character and end it with another.
+-- --However this seems rare.
+-- --
+-- lexMultiComment :: Maybe String -> (String, String) -> String
+-- lexMultiComment inPackage (b,e) = unlines [
+--   "<YYINITIAL>\"" ++ b ++ "\"      \t BEGIN COMMENT;",
+--   "<COMMENT>\"" ++ e ++ "\"      \t BEGIN YYINITIAL;",
+--   "<COMMENT>.      \t /* BNFC multi-line comment */;",
+--   "<COMMENT>[\\n]   ++" ++ nsString inPackage ++ "yy_mylinenumber ; \t /* BNFC multi-line comment */;"
+--  ---- "\\n  ++yy_mylinenumber ;"
+--   ]
 --Helper function that escapes characters in strings
 escapeChars :: String -> String
 escapeChars [] = []
diff --git a/src/BNFC/Backend/CPP/NoSTL/RegToFlex.hs b/src/BNFC/Backend/CPP/NoSTL/RegToFlex.hs
deleted file mode 100644
--- a/src/BNFC/Backend/CPP/NoSTL/RegToFlex.hs
+++ /dev/null
@@ -1,72 +0,0 @@
-module BNFC.Backend.CPP.NoSTL.RegToFlex (printRegFlex) where
-
--- modified from pretty-printer generated by the BNF converter
-
-import AbsBNF
-
--- the top-level printing method
-printRegFlex :: Reg -> String
-printRegFlex = render . prt 0
-
--- you may want to change render and parenth
-
-render :: [String] -> String
-render = rend (0::Int) where
-  rend i ss = case ss of
-    "["      :ts -> cons "["  $ rend i ts
-    "("      :ts -> cons "("  $ rend i ts
-    t  : "," :ts -> cons t    $ space "," $ rend i ts
-    t  : ")" :ts -> cons t    $ cons ")"  $ rend i ts
-    t  : "]" :ts -> cons t    $ cons "]"  $ rend i ts
-    t        :ts -> space t   $ rend i ts
-    _            -> ""
-  cons s t  = s ++ t
-  space t s = if null s then t else t ++ s
-
-parenth :: [String] -> [String]
-parenth ss = ["("] ++ ss ++ [")"]
-
--- the printer class does the job
-class Print a where
-  prt :: Int -> a -> [String]
-  prtList :: [a] -> [String]
-  prtList = concat . map (prt 0)
-
-instance Print a => Print [a] where
-  prt _ = prtList
-
-instance Print Char where
-  prt _ c = [[c]]
-  prtList s = map (concat . prt 0) s
-
-prPrec :: Int -> Int -> [String] -> [String]
-prPrec i j = if j<i then parenth else id
-
-instance Print Ident where
-  prt _ (Ident i) = [i]
-
-instance Print Reg where
-  prt i e = case e of
-   RSeq reg0 reg -> prPrec i 2 (concat [prt 2 reg0 , prt 3 reg])
-   RAlt reg0 reg -> prPrec i 1 (concat [prt 1 reg0 , ["|"] , prt 2 reg])
-   RMinus reg0 reg -> prPrec i 1 (concat [prt 2 reg0 , ["#"] , prt 2 reg])
-   RStar reg -> prPrec i 3 (concat [prt 3 reg , ["*"]])
-   RPlus reg -> prPrec i 3 (concat [prt 3 reg , ["+"]])
-   ROpt reg  -> prPrec i 3 (concat [prt 3 reg , ["?"]])
-   REps  -> prPrec i 3 (["[^.]"])
-   RChar c -> prPrec i 3 (prt 0 [mkEsc [c]])
-   RAlts str -> prPrec i 3 (concat [["["], prt 0 $ mkEsc str, ["]"]])
-   RSeqs str -> prPrec i 2 (concat (map (prt 0) $ mkEsc str))
-   RDigit  -> prPrec i 3 (concat [["{DIGIT}"]])
-   RLetter  -> prPrec i 3 (concat [["{LETTER}"]])
-   RUpper  -> prPrec i 3 (concat [["{CAPITAL}"]])
-   RLower  -> prPrec i 3 (concat [["{SMALL}"]])
-   RAny  -> prPrec i 3 (concat [["."]])
-
--- Handle special characters in regular expressions.
-mkEsc :: String -> String
-mkEsc = concatMap escChar
-  where
-    escChar c
-      | c `elem` ("$+-*=<>[](){}!?.,;:^~|&%#/\\$_@\"" :: String) = '\\':[c]
-      | otherwise = [c]
diff --git a/src/BNFC/Backend/CPP/PrettyPrinter.hs b/src/BNFC/Backend/CPP/PrettyPrinter.hs
--- a/src/BNFC/Backend/CPP/PrettyPrinter.hs
+++ b/src/BNFC/Backend/CPP/PrettyPrinter.hs
@@ -44,8 +44,9 @@
 
 positionRules :: CF -> [(Cat,[Rule])]
 positionRules cf =
-      [(cat,[Rule (show cat) cat [Left catString, Left catInteger]]) |
-        cat <- filter (isPositionCat cf) $ fst (unzip (tokenPragmas cf))]
+  [ (TokenCat cat, [Rule cat (TokenCat cat) $ map (Left . TokenCat) [catString, catInteger]])
+  | cat <- filter (isPositionCat cf) $ map fst (tokenPragmas cf)
+  ]
 
 {- **** Header (.H) File Methods **** -}
 
@@ -378,25 +379,26 @@
 
 {- **** Pretty Printer Methods **** -}
 
---Generates methods for the Pretty Printer
+-- | Generates methods for the Pretty Printer.
 prPrintData :: Bool -> Maybe String -> CF -> (Cat, [Rule]) -> String
 prPrintData True {- use STL -} _ _ (cat@(ListCat _), rules) =
     render $ genPrintVisitorList (cat, rules)
 prPrintData False {- use STL -} _ _ (cat@(ListCat _), rules) =
     genPrintVisitorListNoStl (cat, rules)
-prPrintData _ inPackage cf (cat, rules) = -- Not a list
- -- a position token
- if isPositionCat cf cat then unlines [
-   "void PrintAbsyn::visit" ++ show cat ++ "(" ++ show cat ++ " *p)",
-   "{",
-   "  visitIdent(p->string_);",
-   "}",
-   ""
-   ]
- else abstract ++ concatMap (prPrintRule inPackage) rules
- where
-   cl = identCat (normCat cat)
-   abstract = case lookupRule (show cat) rules of
+-- Not a list :
+prPrintData _ _inPackage cf (TokenCat cat, _rules) | isPositionCat cf cat = unlines $
+  -- a position token
+  [ "void PrintAbsyn::visit" ++ show cat ++ "(" ++ show cat ++ " *p)"
+  , "{"
+  , "  visitIdent(p->string_);"
+  , "}"
+  , ""
+  ]
+prPrintData _ inPackage _cf (cat, rules) = -- Not a list
+    abstract ++ concatMap (prPrintRule inPackage) rules
+  where
+  cl = identCat (normCat cat)
+  abstract = case lookupRule (show cat) rules of
     Just _ -> ""
     Nothing ->  "void PrintAbsyn::visit" ++ cl ++ "(" ++ cl +++ "*p) {} //abstract class\n\n"
 
diff --git a/src/BNFC/Backend/CPP/STL.hs b/src/BNFC/Backend/CPP/STL.hs
--- a/src/BNFC/Backend/CPP/STL.hs
+++ b/src/BNFC/Backend/CPP/STL.hs
@@ -21,6 +21,9 @@
 
 module BNFC.Backend.CPP.STL (makeCppStl,) where
 
+import Data.Char
+import Data.List (nub)
+
 import BNFC.Utils
 import BNFC.CF
 import BNFC.Options
@@ -32,7 +35,6 @@
 import BNFC.Backend.CPP.STL.CFtoCVisitSkelSTL
 import BNFC.Backend.CPP.PrettyPrinter
 import BNFC.Backend.CPP.STL.STLUtils
-import Data.Char
 import qualified BNFC.Backend.Common.Makefile as Makefile
 
 makeCppStl :: SharedOptions -> CF -> MkFiles ()
@@ -110,10 +112,10 @@
     "    }",
     "  } else input = stdin;",
     "  /* The default entry point is used. For other options see Parser.H */",
-    "  " ++ scope ++ def ++ " *parse_tree = " ++ scope ++ "p" ++ def ++ "(input);",
+    "  " ++ scope ++ dat ++ " *parse_tree = " ++ scope ++ "p" ++ def ++ "(input);",
     "  if (parse_tree)",
     "  {",
-    "    printf(\"\\nParse Succesful!\\n\");",
+    "    printf(\"\\nParse Successful!\\n\");",
     "    if (!quiet) {",
     "      printf(\"\\n[Abstract Syntax]\\n\");",
     "      " ++ scope ++ "ShowAbsyn *s = new " ++ scope ++ "ShowAbsyn();",
@@ -129,7 +131,9 @@
     ""
    ]
   where
-   def = show (head (allEntryPoints cf))
+   cat = head $ allEntryPoints cf
+   dat = identCat $ normCat cat
+   def = identCat cat
    scope = nsScope inPackage
 
 mkHeaderFile inPackage cf cats eps env = unlines
@@ -141,7 +145,7 @@
   "#include<string>",
   "",
   nsStart inPackage,
-  concatMap mkForwardDec cats,
+  concatMap mkForwardDec $ nub $ map normCat cats,
   "typedef union",
   "{",
   "  int int_;",
@@ -161,27 +165,25 @@
  ]
  where
   hdef = nsDefine inPackage "PARSER_HEADER_FILE"
-  mkForwardDec s | normCat s == s = "class " ++ identCat s ++ ";\n"
-  mkForwardDec _ = ""
+  mkForwardDec s = "class " ++ identCat s ++ ";\n"
   mkVar s | normCat s == s = "  " ++ identCat s ++"*" +++ map toLower (identCat s) ++ "_;\n"
   mkVar _ = ""
   mkDefines n [] = mkString n
   mkDefines n ((_,s):ss) = "#define " ++ s +++ show n ++ "\n" ++ mkDefines (n+1) ss -- "nsDefine inPackage s" not needed (see cf2flex::makeSymEnv)
-  mkString n =  if isUsedCat cf catString
+  mkString n =  if isUsedCat cf (TokenCat catString)
    then ("#define " ++ nsDefine inPackage "_STRING_ " ++ show n ++ "\n") ++ mkChar (n+1)
    else mkChar n
-  mkChar n =  if isUsedCat cf catChar
+  mkChar n =  if isUsedCat cf (TokenCat catChar)
    then ("#define " ++ nsDefine inPackage "_CHAR_ " ++ show n ++ "\n") ++ mkInteger (n+1)
    else mkInteger n
-  mkInteger n =  if isUsedCat cf catInteger
+  mkInteger n =  if isUsedCat cf (TokenCat catInteger)
    then ("#define " ++ nsDefine inPackage "_INTEGER_ " ++ show n ++ "\n") ++ mkDouble (n+1)
    else mkDouble n
-  mkDouble n =  if isUsedCat cf catDouble
+  mkDouble n =  if isUsedCat cf (TokenCat catDouble)
    then ("#define " ++ nsDefine inPackage "_DOUBLE_ " ++ show n ++ "\n") ++ mkIdent(n+1)
    else mkIdent n
-  mkIdent n =  if isUsedCat cf catIdent
+  mkIdent n =  if isUsedCat cf (TokenCat catIdent)
    then "#define " ++ nsDefine inPackage "_IDENT_ " ++ show n ++ "\n"
    else ""
-  mkFuncs s | normCat s == s = identCat s ++ "*" +++ "p" ++ identCat s ++ "(FILE *inp);\n" ++
-                               identCat s ++ "*" +++ "p" ++ identCat s ++ "(const char *str);\n"
-  mkFuncs _ = ""
+  mkFuncs s = identCat (normCat s) ++ "*" +++ "p" ++ identCat s ++ "(FILE *inp);\n" ++
+              identCat (normCat s) ++ "*" +++ "p" ++ identCat s ++ "(const char *str);\n"
diff --git a/src/BNFC/Backend/CPP/STL/CFtoBisonSTL.hs b/src/BNFC/Backend/CPP/STL/CFtoBisonSTL.hs
--- a/src/BNFC/Backend/CPP/STL/CFtoBisonSTL.hs
+++ b/src/BNFC/Backend/CPP/STL/CFtoBisonSTL.hs
@@ -1,4 +1,6 @@
 {-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE TupleSections #-}
 
 {-
     BNF Converter: C++ Bison generator
@@ -59,7 +61,7 @@
 import BNFC.Options (RecordPositions(..))
 import BNFC.PrettyPrint
 import BNFC.TypeChecker
-import BNFC.Utils ((+++))
+import BNFC.Utils ((+++), when)
 import ErrM
 
 --This follows the basic structure of CFtoHappy.
@@ -75,7 +77,7 @@
 cf2Bison rp inPackage name cf env
  = unlines
     [header inPackage name cf,
-     render $ union inPackage (positionCats cf ++ allCats cf),
+     render $ union inPackage (map TokenCat (positionCats cf) ++ allCats cf),
      maybe "" (\ns -> "%define api.prefix {" ++ ns ++ "yy}") inPackage,
      "%token _ERROR_",
      tokens user env,
@@ -120,12 +122,15 @@
     , ""
     , definedRules cf
     , nsStart inPackage
-    , unlines $ map (parseMethod inPackage name) (allCatsNorm cf ++ positionCats cf)  -- (allEntryPoints cf), M.F. 2004-09-14 fix of [Ty2] bug.
+    , unlines $ map parseResult dats
+    , unlines $ map (parseMethod inPackage name) eps
     , nsEnd inPackage
     , "%}"
     ]
   where
-   ns = nsString inPackage
+    ns   = nsString inPackage
+    eps  = allEntryPoints cf ++ map TokenCat (positionCats cf)
+    dats = nub $ map normCat eps
 
 definedRules :: CF -> String
 definedRules cf =
@@ -175,16 +180,23 @@
         call x es = x ++ "(" ++ intercalate ", " (map cppExp es) ++ ")"
 
 
+-- | Generates declaration and initialization of the @YY_RESULT@ for a parser.
+--
+--   Different parsers (for different precedences of the same category)
+--   share such a declaration.
+--
+--   Expects a normalized category.
+parseResult :: Cat -> String
+parseResult cat =
+  "static " ++ cat' ++ "*" +++ resultName cat' +++ "= 0;"
+  where
+  cat' = identCat cat
+
 --This generates a parser method for each entry point.
 parseMethod :: Maybe String -> String -> Cat -> String
-parseMethod inPackage _ cat =
-  -- if normCat cat /= cat     M.F. 2004-09-17 comment. No duplicates from allCatsIdNorm
-  -- then ""
-  -- else
-  unlines
+parseMethod inPackage _ cat = unlines
   [
-   "static " ++ cat' ++ "*" +++ resultName cat' +++ "= 0;",
-   cat' ++"* p" ++ cat' ++ "(FILE *inp)",
+   cat' ++ "* p" ++ par ++ "(FILE *inp)",
    "{",
    "  " ++ ns ++ "yy_mylinenumber = 1;",       -- O.F.
    "  " ++ ns ++ "initialize_lexer(inp);",
@@ -197,7 +209,7 @@
    "    return" +++ resultName cat' ++ ";",
    "  }",
    "}",
-   cat' ++"* p" ++ cat' ++ "(const char *str)",
+   cat' ++ "* p" ++ par ++ "(const char *str)",
    "{",
    "  YY_BUFFER_STATE buf;",
    "  int result;",
@@ -218,6 +230,7 @@
   ]
  where
   cat' = identCat (normCat cat)
+  par  = identCat cat
   ns = nsString inPackage
 
 
@@ -267,19 +280,16 @@
 
 --declares non-terminal types.
 declarations :: CF -> String
-declarations cf = concatMap (typeNT cf) (positionCats cf ++ allCats cf)
- where --don't define internal rules
-   typeNT cf nt | isPositionCat cf nt || rulesForCat cf nt /= [] =
-      "%type <" ++ varName nt ++ "> " ++ identCat nt ++ "\n"
-   typeNT _ _ = ""
+declarations cf = concatMap typeNT $
+  map TokenCat (positionCats cf) ++
+  filter (not . null . rulesForCat cf) (allCats cf) -- don't define internal rules
+  where
+  typeNT nt = "%type <" ++ varName nt ++ "> " ++ identCat nt ++ "\n"
 
 --declares terminal types.
 tokens :: [UserDef] -> SymEnv -> String
-tokens user = concatMap (declTok user)
- where
-  declTok u (s,r) = if s `elem` map show u
-    then "%token<string_> " ++ r ++ "    //   " ++ s ++ "\n"
-    else "%token " ++ r ++ "    //   " ++ s ++ "\n"
+tokens user = concatMap $ \ (s, r) ->
+  concat [ "%token", when (s `elem` user) "<string_>", " ", r, "    //   ", s, "\n" ]
 
 specialToks :: CF -> String
 specialToks cf = concat [
@@ -290,17 +300,17 @@
   ifC catIdent "%token<string_> _IDENT_\n"
   ]
    where
-    ifC cat s = if isUsedCat cf cat then s else ""
+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
 
 --The following functions are a (relatively) straightforward translation
 --of the ones in CFtoHappy.hs
 rulesForBison :: RecordPositions -> Maybe String -> String -> CF -> SymEnv -> Rules
 rulesForBison rp inPackage _ cf env = map mkOne (ruleGroups cf) ++ posRules where
   mkOne (cat,rules) = constructRule rp inPackage cf env rules cat
-  posRules = map mkPos $ positionCats cf
-  mkPos cat = (cat, [(fromMaybe (show cat) (lookup (show cat) env),
-   "$$ = new " ++ show cat ++ "($1," ++ nsString inPackage ++ "yy_mylinenumber) ; YY_RESULT_" ++
-   show cat ++ "_= $$ ;")])
+  posRules = (`map` positionCats cf) $ \ n -> (TokenCat n,
+    [( fromMaybe n $ lookup n env
+     , concat [ "$$ = new " , n , "($1," , nsString inPackage , "yy_mylinenumber) ; YY_RESULT_" , n , "_= $$ ;" ]
+     )])
 
 -- For every non-terminal, we construct a set of rules.
 constructRule ::
@@ -357,11 +367,12 @@
   []  -> ("/* empty */",[])
   its -> (unwords (map mkIt its), metas its)
  where
-   mkIt i = case i of
-     Left c -> case lookup (show c) env of
-       Just x | not (isPositionCat cf c) -> x
-       _ -> typeName (identCat c)
-     Right s -> fromMaybe s (lookup s env)
+   mkIt = \case
+     Left (TokenCat s)
+       | isPositionCat cf s -> typeName s
+       | otherwise -> fromMaybe (typeName s) $ lookup s env
+     Left c  -> identCat c
+     Right s -> fromMaybe s $ lookup s env
    metas its = [('$': show i,revert c) | (i,Left c) <- zip [1 :: Int ..] its]
 
    -- notice: reversibility with push_back vectors is the opposite
diff --git a/src/BNFC/Backend/CSharp.hs b/src/BNFC/Backend/CSharp.hs
--- a/src/BNFC/Backend/CSharp.hs
+++ b/src/BNFC/Backend/CSharp.hs
@@ -100,7 +100,7 @@
   liftIO $ putStrLn "-----------------------------------------------------------------------------"
   liftIO $ putStrLn ""
   where
-    makefile = vcat
+    makefile basename = vcat
         ["MONO = mono", "MONOC = gmcs"
         , "MONOCFLAGS = -optimize -reference:${PARSERREF}"
         , "GPLEX = ${MONO} gplex.exe", "GPPG = ${MONO} gppg.exe"
@@ -114,7 +114,7 @@
         , Makefile.mkRule "distclean" [ "clean" ]
             [ "rm -f ${CSFILES}"
             , "rm -f " ++ unwords [namespace <.> ext | ext <- [ "l","y","tex" ]]
-            , "rm -f Makefile" ]
+            , "rm -f " ++ basename ]
         , Makefile.mkRule "test" [ "Parser.cs", "Scanner.cs" ]
             [ "@echo \"Compiling test...\""
             , "${MONOC} ${MONOCFLAGS} -out:bin/test.exe ${CSFILES}" ]
@@ -305,7 +305,7 @@
   "}"
   ]
   where
-   def = show (head (allEntryPoints cf))
+   def = identCat (head (allEntryPoints cf))
 
 projectguid :: MkFiles String
 projectguid = do
diff --git a/src/BNFC/Backend/CSharp/CFtoGPLEX.hs b/src/BNFC/Backend/CSharp/CFtoGPLEX.hs
--- a/src/BNFC/Backend/CSharp/CFtoGPLEX.hs
+++ b/src/BNFC/Backend/CSharp/CFtoGPLEX.hs
@@ -38,10 +38,12 @@
 
 module BNFC.Backend.CSharp.CFtoGPLEX (cf2gplex) where
 
+import Data.List
+import Data.Maybe
+
 import BNFC.CF
 import BNFC.Backend.CSharp.RegToGPLEX
 import BNFC.Backend.Common.NamedVariables
-import Data.List
 import BNFC.Backend.CSharp.CSharpUtils
 
 --The environment must be returned for the parser to use.
@@ -163,14 +165,12 @@
   [("<YYINITIAL>."               , "return (int)Tokens.error;")]
   ]
   where
-   ifC cat s = if isUsedCat cf cat then s else []
+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else []
    userDefTokens = map tokenline (tokenPragmas cf)
      where
        tokenline (name, exp) = ("<YYINITIAL>" ++ printRegGPLEX exp , action name)
-       action n = "if(Trace) System.Console.Error.WriteLine(yytext); yylval." ++ varName (show$normCat n) ++ " = new " ++ identifier namespace (show n) ++ "(yytext); return (int)Tokens." ++ sName n ++ ";"
-       sName n = case lookup (show n) env of
-         Just x -> x
-         Nothing -> show n
+       action n = "if(Trace) System.Console.Error.WriteLine(yytext); yylval." ++ varName n ++ " = new " ++ identifier namespace n ++ "(yytext); return (int)Tokens." ++ sName n ++ ";"
+       sName n = fromMaybe n $ lookup n env
    -- These handle escaped characters in Strings.
    strStates = [
      ("<YYINITIAL>\"\\\"\"" , "BEGIN(STRING);"),
diff --git a/src/BNFC/Backend/CSharp/CFtoGPPG.hs b/src/BNFC/Backend/CSharp/CFtoGPPG.hs
--- a/src/BNFC/Backend/CSharp/CFtoGPPG.hs
+++ b/src/BNFC/Backend/CSharp/CFtoGPPG.hs
@@ -36,43 +36,52 @@
    **************************************************************
 -}
 
+{-# LANGUAGE PatternGuards #-}
+
 module BNFC.Backend.CSharp.CFtoGPPG (cf2gppg) where
 
+import Data.Char  (toLower)
+import Data.List  (intersperse)
+import Data.Maybe (fromMaybe)
+
 import BNFC.CF
-import Data.List (intersperse)
 import BNFC.Backend.Common.NamedVariables hiding (varName)
-import Data.Char (toLower)
-import BNFC.Utils ((+++))
-import BNFC.TypeChecker
-import ErrM
 import BNFC.Backend.Common.OOAbstract hiding (basetypes)
 import BNFC.Backend.CSharp.CSharpUtils
+import BNFC.TypeChecker
+import BNFC.Utils ((+++))
 
+import ErrM
+
 --This follows the basic structure of CFtoHappy.
 
 -- Type declarations
-type Rules       = [(NonTerminal,[(Pattern,Action)])]
+type Rules       = [OneRule]
+type OneRule     = (NonTerminal, [(Pattern, Action)])
 type Pattern     = String
 type Action      = String
 type MetaVar     = String
 
 --The environment comes from the CFtoGPLEX
 cf2gppg :: Namespace -> CF -> SymEnv -> String
-cf2gppg namespace cf env = unlines [
-  header namespace cf,
-  union namespace (positionCats cf ++ allCats cf ++ map strToCat (tokentypes (cf2cabs cf))),
-  tokens user env,
-  declarations cf,
-  "",
-  specialToks cf,
-  "",
-  "%%",
-  prRules (rulesForGPPG namespace cf env)
+cf2gppg namespace cf env = unlines $
+  [ header namespace cf
+  , union namespace $ concat $
+    [ positionCats cf
+    , allCats cf
+    , map strToCat $ tokentypes $ cf2cabs cf
+    ]
+  , tokens (map fst $ tokenPragmas cf) env
+  , declarations cf
+  , ""
+  , specialToks cf
+  , ""
+  , "%%"
+  , prRules $ rulesForGPPG namespace cf env
   ]
-  where
-    user = fst (unzip (tokenPragmas cf))
 
-positionCats cf = filter (isPositionCat cf) $ fst (unzip (tokenPragmas cf))
+positionCats :: CF -> [Cat]
+positionCats cf = map TokenCat $ filter (isPositionCat cf) $ map fst $ tokenPragmas cf
 
 header :: Namespace -> CF -> String
 header namespace cf = unlines [
@@ -146,20 +155,22 @@
       "  public " ++ identifier namespace (identCat (normCat cat)) +++ (varName (show$normCat cat)) ++ ";"
     catline _ = ""
 
---declares non-terminal types.
+-- | Declares non-terminal types.
 declarations :: CF -> String
-declarations cf = unlinesInline $ map (typeNT cf) (positionCats cf ++ allCats cf)
- where --don't define internal rules
-   typeNT cf nt | (isPositionCat cf nt || rulesForCat cf nt /= []) = "%type <" ++ (varName (show$normCat nt)) ++ "> " ++ (show$normCat nt)
-   typeNT _ _ = ""
+declarations cf = unlinesInline $ map typeNT $
+  positionCats cf ++
+  filter (not . null . rulesForCat cf) (allCats cf)  -- don't define internal rules
+  where
+  typeNT nt = "%type <" ++ varName x ++ "> " ++ x
+    where x = show $ normCat nt
 
 --declares terminal types.
 tokens :: [UserDef] -> SymEnv -> String
-tokens user ts = concatMap (declTok user) ts
+tokens user ts = concatMap declTok ts
   where
-    declTok u (s,r) = if elem s (map show u)
-      then "%token<" ++ varName (show$normCat$strToCat s) ++ "> " ++ r ++ "   //   " ++ show s ++ "\n"
-      else "%token " ++ r ++ "    //   " ++ show s ++ "\n"
+    declTok (s, r) = if s `elem` user
+      then "%token<" ++ varName (show$normCat$strToCat s) ++ "> " ++ r ++ "   //   " ++ s ++ "\n"
+      else "%token " ++ r ++ "    //   " ++ s ++ "\n"
 
 specialToks :: CF -> String
 specialToks cf = unlinesInline [
@@ -170,7 +181,7 @@
   ifC catIdent   "%token<string_> IDENT_"
   ]
   where
-    ifC cat s = if isUsedCat cf cat then s else ""
+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
 
 --The following functions are a (relatively) straightforward translation
 --of the ones in CFtoHappy.hs
@@ -178,10 +189,11 @@
 rulesForGPPG namespace cf env = (map mkOne $ ruleGroups cf) ++ posRules where
   mkOne (cat,rules) = constructRule namespace cf env rules cat
   posRules = map mkPos $ positionCats cf
-  mkPos cat = (cat, [(maybe (show cat) id (lookup (show cat) env),
-    "$$ = new " ++ show cat ++ "($1);")])
+  mkPos :: Cat -> OneRule
+  mkPos cat = (cat, [(fromMaybe s $ lookup s env, "$$ = new " ++ s ++ "($1);")])
+    where s = show cat
 
--- For every non-terminal, we construct a set of rules.
+-- | For every non-terminal, we construct a set of rules.
 constructRule :: Namespace ->
   CF -> SymEnv -> [Rule] -> NonTerminal -> (NonTerminal,[(Pattern,Action)])
 constructRule namespace cf env rules nt =
@@ -227,15 +239,15 @@
 generatePatterns cf env r _ = case rhsRule r of
   []  -> ("/* empty */",[])
   its -> (unwords (map mkIt its), metas its)
-  where
-    mkIt i = case i of
-      Left c -> case lookup (show c) env of
-        -- This used to be x, but that didn't work if we had a symbol "String" in env, and tried to use a normal String - it would use the symbol...
-        Just x | not (isPositionCat cf c) && (show c) `notElem` (map fst basetypes) -> x
-        _ -> typeName (identCat c)
-      Right s -> case lookup s env of
-        Just x -> x
-        Nothing -> s
+    where
+    mkIt = \case
+      Left c
+          | TokenCat tok <- c, isPositionCat cf tok -> fallback
+          | show c `elem` map fst basetypes         -> fallback
+          | otherwise                               -> fromMaybe fallback $ lookup (show c) env
+        -- This used to be x, but that didn't work if we had a symbol "String" in env, and tried to use a normal String - it would use the symbol...        _ -> fallback
+        where fallback = typeName (identCat c)
+      Right s -> fromMaybe s $ lookup s env
     metas its = [('$': show i,revert c) | (i,Left c) <- zip [1 :: Int ..] its]
 
     -- notice: reversibility with push_back vectors is the opposite
diff --git a/src/BNFC/Backend/Common/Makefile.hs b/src/BNFC/Backend/Common/Makefile.hs
--- a/src/BNFC/Backend/Common/Makefile.hs
+++ b/src/BNFC/Backend/Common/Makefile.hs
@@ -8,45 +8,57 @@
 import BNFC.Backend.Base (mkfile, Backend)
 import BNFC.PrettyPrint
 
--- | Creates a Makefile rule
+-- | Creates a Makefile rule.
+--
 -- >>> mkRule "main" ["file1","file2"] ["do something"]
--- main: file1 file2
+-- main : file1 file2
 -- 	do something
 -- <BLANKLINE>
 --
 -- >>> mkRule "main" ["program.exe"] []
--- main: program.exe
+-- main : program.exe
 -- <BLANKLINE>
-mkRule :: String   -- ^ The target name
-       -> [String] -- ^ Dependencies
-       -> [String] -- ^ Recipe
+--
+mkRule :: String   -- ^ The target name.
+       -> [String] -- ^ Dependencies.
+       -> [String] -- ^ Recipe.
        -> Doc
-mkRule target deps recipes =
-    text target <> ":" <+> hsep (map text deps)
-    $$ vcat [ "\t" <> text recipe | recipe <- recipes ]
-    $$ ""
+mkRule target deps recipe = vcat . concat $
+    [ [ text target <+> ":" <+> hsep (map text deps) ]
+    , map (("\t" <>) . text) recipe
+    , [ "" ]
+    ]
 
--- | Variable assignment
+-- | Variable assignment.
 --
 -- >>> mkVar "FOO" "bar"
 -- FOO=bar
+--
 mkVar :: String -> String -> Doc
 mkVar n v = text n <> "=" <> text v
 
---- | Variable referencing
---
--- >>> mkRefVar "FOO"
--- ${FOO}
-mkRefVar :: String -> Doc
-mkRefVar m  = case m of
-    "" -> ""
-    _ -> text $ refVar m
+-- UNUSED:
+-- -- | Variable referencing.
+-- --
+-- -- >>> mkRefVar "FOO"
+-- -- ${FOO}
+-- --
+-- mkRefVar :: String -> Doc
+-- mkRefVar m  = case m of
+--     "" -> empty
+--     _ -> text $ refVar m
 
+
+-- | Variable referencing.
+--
+-- >>> refVar "FOO"
+-- "${FOO}"
+--
 refVar :: String -> String
 refVar m = "${" ++ m ++ "}"
 
--- | Create the Makefile file using the name specified in the option
--- record.
-mkMakefile :: SharedOptions -> Doc -> Backend
-mkMakefile Options {make = Nothing} _ = return ()
-mkMakefile Options {make = Just makefile} content = mkfile makefile content
+-- | Create the Makefile file using the name specified in the option record.
+--
+mkMakefile :: SharedOptions -> (String -> Doc) -> Backend
+mkMakefile Options{make = Just m } mkContent = mkfile m (mkContent m)
+mkMakefile Options{make = Nothing} _         = return ()
diff --git a/src/BNFC/Backend/Common/NamedVariables.hs b/src/BNFC/Backend/Common/NamedVariables.hs
--- a/src/BNFC/Backend/Common/NamedVariables.hs
+++ b/src/BNFC/Backend/Common/NamedVariables.hs
@@ -81,7 +81,7 @@
 --The type of an instance variable
 --and a # unique to that type
 
-type UserDef = Cat --user-defined types
+type UserDef = TokenCat --user-defined types
 
 
 --A symbol-mapping environment.
diff --git a/src/BNFC/Backend/Common/OOAbstract.hs b/src/BNFC/Backend/Common/OOAbstract.hs
--- a/src/BNFC/Backend/Common/OOAbstract.hs
+++ b/src/BNFC/Backend/Common/OOAbstract.hs
@@ -82,9 +82,8 @@
   defineds   = defs
   }
  where
-  (pos,base) = partition (isPositionCat cf) $ fst (unzip (tokenPragmas cf))
+  (pos,  toks) = partition (isPositionCat cf) $ map fst $ tokenPragmas cf
   (lists,cats) = partition isList $ allCatsNorm cf
-  toks = map (show.normCat) base
   testRule (Rule f c _)
    | isList c  = Nothing
    | f == "_"  = Nothing
@@ -93,7 +92,7 @@
     (identCat c,[(f, classVars (map (status . identCat) cs)) | (f,cs) <- fcs])
   posdata =
     [("Visitable",  -- to give superclass
-     [(show c,[("String",False,"string_"),("Integer",False,"integer_")])]) | c<-pos]
+     [(c,[("String",False,"string_"),("Integer",False,"integer_")])]) | c<-pos]
   status cat = (cat, notElem cat (map fst basetypes ++ toks))
   defs = [f | FunDef f _ _ <- cfgPragmas cf]
 
diff --git a/src/BNFC/Backend/Haskell.hs b/src/BNFC/Backend/Haskell.hs
--- a/src/BNFC/Backend/Haskell.hs
+++ b/src/BNFC/Backend/Haskell.hs
@@ -19,41 +19,43 @@
 
 module BNFC.Backend.Haskell (makeHaskell, AlexVersion(..), makefile, testfile) where
 
-
+import qualified Control.Monad as Ctrl
+import Data.Functor    ((<$>))
+import System.FilePath ((<.>), (</>), pathSeparator)
+import Text.Printf     (printf)
+import Text.PrettyPrint
 
--- import BNFC.Utils
-import BNFC.Options hiding (Backend)
-import BNFC.CF
+import BNFC.Backend.Agda
 import BNFC.Backend.Base
 import BNFC.Backend.Haskell.CFtoHappy
 import BNFC.Backend.Haskell.CFtoAlex
 import BNFC.Backend.Haskell.CFtoAlex2
 import BNFC.Backend.Haskell.CFtoAlex3
-import BNFC.Backend.Txt2Tag
 import BNFC.Backend.Haskell.CFtoAbstract
 import BNFC.Backend.Haskell.CFtoTemplate
 import BNFC.Backend.Haskell.CFtoPrinter
 import BNFC.Backend.Haskell.CFtoLayout
-import BNFC.Backend.XML
 import BNFC.Backend.Haskell.HsOpts
-import BNFC.Backend.Haskell.ToCNF as ToCNF
 import BNFC.Backend.Haskell.MkErrM
 import BNFC.Backend.Haskell.MkSharedString
+import BNFC.Backend.Haskell.ToCNF as ToCNF
 import BNFC.Backend.Haskell.Utils (parserName)
+import BNFC.Backend.Txt2Tag
+import BNFC.Backend.XML
 import qualified BNFC.Backend.Common.Makefile as Makefile
 
-import System.FilePath (pathSeparator)
-import Control.Monad(when,unless)
-import Text.Printf (printf)
-import Text.PrettyPrint
-
--- naming conventions
-
+import BNFC.CF
+import BNFC.Options hiding (Backend)
+import BNFC.Utils (when, unless, getZonedTimeTruncatedToSeconds)
 
 
+-- | Entrypoint for the Haskell backend.
 
 makeHaskell :: SharedOptions -> CF -> Backend
 makeHaskell opts cf = do
+  -- Get current time in printable form.
+  time <- liftIO $ show <$> getZonedTimeTruncatedToSeconds
+
   let absMod = absFileM opts
       lexMod = alexFileM opts
       parMod = happyFileM opts
@@ -62,7 +64,11 @@
       errMod = errFileM opts
       shareMod = shareFileM opts
   do
+    -- Generate abstract syntax and pretty printer.
     mkfile (absFile opts) $ cf2Abstract (byteStrings opts) (ghcExtensions opts) (functor opts) absMod cf
+    mkfile (printerFile opts) $ cf2Printer (byteStrings opts) (functor opts) False prMod absMod cf
+
+    -- Generate Alex lexer.  Layout is resolved after lexing.
     case alexMode opts of
       Alex1 -> do
         mkfile (alexFile opts) $ cf2alex lexMod errMod cf
@@ -73,60 +79,239 @@
       Alex3 -> do
         mkfile (alexFile opts) $ cf2alex3 lexMod errMod shareMod (shareStrings opts) (byteStrings opts) cf
         liftIO $ printf "Use Alex 3.0 to compile %s.\n" (alexFile opts)
-    unless (cnf opts) $ do
+
+    Ctrl.when (shareStrings opts) $ mkfile (shareFile opts) $ sharedString shareMod (byteStrings opts) cf
+    Ctrl.when (hasLayout cf) $ mkfile (layoutFile opts) $ cf2Layout (alex1 opts) (inDir opts) layMod lexMod cf
+
+    -- Generate Happy parser and matching test program unless --cnf.
+    Ctrl.unless (cnf opts) $ do
       mkfile (happyFile opts) $
-        cf2HappyS parMod absMod lexMod errMod (glr opts) (byteStrings opts) (functor opts) cf
-      liftIO $ printf "%s Tested with Happy 1.15\n" (happyFile opts)
-    mkfile (tFile opts)        $ testfile opts cf
-    mkfile (txtFile opts)      $ cfToTxt (lang opts) cf
-    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod errMod (functor opts) cf
-    mkfile (printerFile opts)  $ cf2Printer (byteStrings opts) (functor opts) False prMod absMod cf
-    when (hasLayout cf) $ mkfile (layoutFile opts) $ cf2Layout (alex1 opts) (inDir opts) layMod lexMod cf
+        cf2Happy parMod absMod lexMod errMod (glr opts) (byteStrings opts) (functor opts) cf
+      -- liftIO $ printf "%s Tested with Happy 1.15\n" (happyFile opts)
+      mkfile (tFile opts)        $ testfile opts cf
+
+    -- Both Happy parser and skeleton (template) rely on Err.
     mkfile (errFile opts) $ mkErrM errMod (ghcExtensions opts)
-    when (shareStrings opts) $ mkfile (shareFile opts)    $ sharedString shareMod (byteStrings opts) cf
-    Makefile.mkMakefile opts $ makefile opts
+    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod errMod (functor opts) cf
+
+    -- Generate txt2tags documentation.
+    mkfile (txtFile opts)      $ cfToTxt (lang opts) cf
+
+    -- Generate XML and DTD printers.
     case xml opts of
       2 -> makeXML opts True cf
       1 -> makeXML opts False cf
       _ -> return ()
-    when (cnf opts) $ do
+
+    -- CNF backend.  Currently does not make use of layout.
+    Ctrl.when (cnf opts) $ do
       mkfile (cnfTablesFile opts) $ ToCNF.generate opts cf
-      mkfile "TestCNF.hs" $ ToCNF.genTestFile opts cf
-      mkfile "BenchCNF.hs" $ ToCNF.genBenchmark opts
+      mkfile (cnfTestFile opts)   $ ToCNF.genTestFile opts cf
+      mkfile (cnfBenchFile opts)  $ ToCNF.genBenchmark opts
 
+    -- Generate Agda bindings for AST, Printer and Parser.
+    Ctrl.when (agda opts) $ makeAgda time opts cf
 
-makefile :: Options -> Doc
-makefile opts = makeA where
-  glr_params = if glr opts == GLR then "--glr --decode " else ""
+    -- Generate Makefile.
+    Makefile.mkMakefile opts $ makefile opts
+
+
+-- | Generate the makefile (old version, with just one "all" target).
+_oldMakefile
+  :: Options
+  -> String    -- ^ Filename of the makefile.
+  -> Doc       -- ^ Content of the makefile.
+_oldMakefile opts makeFile = vcat
+  [ Makefile.mkRule "all" [] $ concat $
+      [ [ unwords $ [ "happy -gca" ] ++ glrParams ++ [ happyFile opts ] | not (cnf opts) ]
+      , [ "alex -g " ++ alexFile opts ]
+      , [ if cnf opts
+          then unwords [ "ghc --make", cnfTestFile opts, "-o", cnfTestFileExe opts ]
+          else unwords [ "ghc --make", tFile       opts, "-o", tFileExe       opts ]
+        ]
+      ]
+  , cleanRule opts
+  , distCleanRule opts makeFile
+  ]
+  where
+  glrParams :: [String]
+  glrParams = when (glr opts == GLR) $ [ "--glr", "--decode" ]
+
+-- | Rule to clean GHC and Latex generated files.
+cleanRule :: Options -> Doc
+cleanRule opts = Makefile.mkRule "clean" [] $ concat $
+  [ [ rmGen ]
+  , when (agda opts) rmAgda
+  ]
+  where
+  rmGen  = unwords $ [ "-rm", "-f" ] ++ map prefix gen
+  gen    = concat [ genHs, genLtx, genAg ]
+  genHs  = [ "*.hi", "*.o" ]
+  genLtx = [ "*.log", "*.aux", "*.dvi" ]
+  genAg  = when (agda opts) $ [ "*.agdai" ]
+  rmAgda = [ "-rm -rf MAlonzo" ]
+  prefix = if null dir then id else (dir </>)
+  dir    = codeDir opts
+
+-- | Rule to clean all files generated by BNFC and the subsequent tools.
+distCleanRule :: Options -> String -> Doc
+distCleanRule opts makeFile = Makefile.mkRule "distclean" ["clean"] $
+  [ unwords . concat $
+    [ [ "-rm -f" ]
+      -- Generated files that have a .bak variant
+    , concatMap (\ f -> alsoBak (f opts))
+      [ absFile        -- Abs.hs
+      , composOpFile   -- ComposOp.hs
+      , txtFile        -- Doc.txt
+      , errFile        -- ErrM.hs
+      , layoutFile     -- Layout.hs
+      , alexFile       -- Lex.x
+      , happyFile      -- Par.y
+      , printerFile    -- Print.hs
+      , shareFile      -- SharedString.hs -- only if: shareStrings opt
+      , templateFile   -- Skel.hs
+      , tFile          -- Test.hs
+      , xmlFile        -- XML.hs
+      , agdaASTFile    -- AST.agda
+      , agdaParserFile -- Parser.agda
+      , agdaLibFile    -- IOLib.agda
+      , agdaMainFile   -- Main.agda
+      , (\ opts -> dir ++ lang opts ++ ".dtd")
+      ]  -- TODO: clean up cnf files
+      -- Files that have no .bak variant
+    , map (\ (file, ext) -> mkFile withLang file ext opts)
+      [ ("Test"    , "")
+      , ("Lex"     , "hs")
+      , ("Par"     , "hs")
+      , ("Par"     , "info")
+      , ("ParData" , "hs")  -- only if --glr
+      ]
+    , [ "Main" | agda opts ]
+    , [ makeFile ]
+    ]
+  , if null dir then "" else "-rmdir -p " ++ dir
+  ]
+  where
   dir = let d = codeDir opts in if null d then "" else d ++ [pathSeparator]
-  makeA = vcat
-      [ Makefile.mkRule "all" []
-           ([ "happy -gca " ++ glr_params ++ happyFile opts | not (cnf opts) ] ++
-            [ "alex -g " ++ alexFile opts ] ++
-            [ if cnf opts
-              then "ghc --make TestCNF.hs"
-              else "ghc --make " ++ tFile opts ++ " -o " ++ mkFile withLang "Test" "" opts])
-      , Makefile.mkRule "clean" []
-          [ "-rm -f "  ++ unwords
-                (map (dir++) [ "*.log", "*.aux", "*.hi", "*.o", "*.dvi" ]) ]
-      ,  Makefile.mkRule "distclean" ["clean"]
-          [ "-rm -f " ++ unwords
-              [ mkFile withLang "Doc" "*" opts
-              , mkFile withLang "Lex" "*" opts
-              , mkFile withLang "Par" "*" opts
-              , mkFile withLang "Layout" "*" opts
-              , mkFile withLang "Skel" "*" opts
-              , mkFile withLang "Print" "*" opts
-              , mkFile withLang "Test" "*" opts
-              , mkFile withLang "Abs" "*" opts
-              , mkFile withLang "Test" "" opts
-              , mkFile noLang   "ErrM" "*" opts
-              , mkFile noLang   "SharedString" "*" opts
-              , mkFile noLang "ComposOp" "*" opts
-              , dir ++ lang opts ++ ".dtd"
-              , mkFile withLang "XML" "*" opts
-              , "Makefile*" ]
-          , if null dir then "" else "\t-rmdir -p " ++ dir ]
+
+  alsoBak :: FilePath -> [FilePath]
+  alsoBak s = [ s, s <.> "bak" ]
+
+makefileHeader :: Doc
+makefileHeader = vcat
+  [ "# Makefile generated by BNFC."
+  , ""
+  ]
+
+
+-- | Generate the makefile.
+makefile
+  :: Options
+  -> String    -- ^ Filename of the makefile.
+  -> Doc       -- ^ Content of the makefile.
+makefile opts makeFile = vcat
+  [ makefileHeader
+  , phonyRule
+  , defaultRule
+  , vcat [ "# Rules for building the parser." , "" ]
+  -- If option -o was given, we have no access to the grammar file
+  -- from the Makefile.  Thus, we have to drop the rule for
+  -- reinvokation of bnfc.
+  , when (isDefault outDir opts) $ bnfcRule
+  , unless (cnf opts) $ happyRule
+  , alexRule
+  , if cnf opts then testCNFRule else testParserRule
+  , when (agda opts) $ agdaRule
+  , vcat [ "# Rules for cleaning generated files." , "" ]
+  , cleanRule opts
+  , distCleanRule opts makeFile
+  , "# EOF"
+  ]
+  where
+  -- | List non-file targets here.
+  phonyRule :: Doc
+  phonyRule = vcat
+    [ "# List of goals not corresponding to file names."
+    , ""
+    , Makefile.mkRule ".PHONY" [ "all", "clean", "distclean" ] []
+    ]
+  -- | Default: build test parser(s).
+  defaultRule :: Doc
+  defaultRule = vcat
+     [ "# Default goal."
+     , ""
+     , Makefile.mkRule "all" tgts []
+     ]
+     where
+     tgts | cnf opts  = [ cnfTestFileExe opts ]
+          | otherwise = concat $
+              [ [ tFileExe opts ]
+              , [ "Main" | agda opts ]
+              ]
+
+  -- | Rule to reinvoke @bnfc@ to updated parser.
+  --   Reinvokation should not recreate @Makefile@!
+  bnfcRule :: Doc
+  bnfcRule = Makefile.mkRule tgts [ lbnfFile opts ] [ recipe ]
+    where
+    recipe    = unwords [ "bnfc", printOptions opts{ make = Nothing } ]
+    tgts      = unwords . concat $
+      [ alexEtc
+      , if cnf opts then [ cnfTestFile opts ] else [ happyFile opts, tFile opts ]
+      , when (agda opts) agdaFiles
+      ]
+    alexEtc   = map ($ opts) [ errFile, alexFile, printerFile ]
+    agdaFiles = map ($ opts) [ agdaASTFile, agdaParserFile, agdaLibFile, agdaMainFile ]
+
+  -- | Rule to invoke @happy@.
+  happyRule :: Doc
+  happyRule = Makefile.mkRule "%.hs" [ "%.y" ] [ recipe ]
+    where
+    recipe = unwords . concat $
+      [ [ "happy", "--ghc", "--coerce", "--array", "--info" ]
+      , when (glr opts == GLR) $ [ "--glr", "--decode" ]
+      , [ "$<" ]
+      ]
+
+  -- | Rule to invoke @alex@.
+  alexRule :: Doc
+  alexRule = Makefile.mkRule "%.hs" [ "%.x" ] [ "alex --ghc $<" ]
+
+  -- | Rule to build Haskell test parser.
+  testParserRule :: Doc
+  testParserRule = Makefile.mkRule tgt deps [ "ghc --make $< -o $@" ]
+    where
+    tgt :: String
+    tgt = tFileExe opts
+    deps :: [String]
+    deps = map ($ opts)
+      [ tFile {- must be first! -}
+      , errFile
+      , alexFileHs
+      , happyFileHs
+      , printerFile
+      ]
+
+  -- | Rule to build CNF test parser.
+  testCNFRule :: Doc
+  testCNFRule = Makefile.mkRule (cnfTestFileExe opts) deps [ "ghc --make $< -o $@" ]
+    where
+    deps = [ cnfTestFile opts {- must be first! -} , alexFileHs opts ]
+
+  -- | Rule to build Agda parser.
+  agdaRule :: Doc
+  agdaRule = Makefile.mkRule "Main" deps [ "agda --no-libraries --ghc --ghc-flag=-Wwarn $<" ]
+    where
+    deps = map ($ opts)
+      [ agdaMainFile  -- must be first!
+      , agdaASTFile
+      , agdaParserFile
+      , agdaLibFile
+      -- Haskell modules bound by Agda modules:
+      , errFile
+      , alexFileHs
+      , happyFileHs
+      , printerFile
       ]
 
 testfile :: Options -> CF -> String
diff --git a/src/BNFC/Backend/Haskell/CFtoAbstract.hs b/src/BNFC/Backend/Haskell/CFtoAbstract.hs
--- a/src/BNFC/Backend/Haskell/CFtoAbstract.hs
+++ b/src/BNFC/Backend/Haskell/CFtoAbstract.hs
@@ -1,163 +1,194 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-
-{-
-    BNF Converter: Abstract syntax Generator
-    Copyright (C) 2004  Author:  Markus Forberg
-
-    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 2 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, write to the Free Software
-    Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
--}
-
-module BNFC.Backend.Haskell.CFtoAbstract (cf2Abstract) where
-
-import Prelude'
-
-import BNFC.CF
-import BNFC.Utils((+++))
-import BNFC.Backend.Haskell.Utils (catToType, catvars)
-import Text.PrettyPrint
-
--- to produce a Haskell module
-cf2Abstract :: Bool     -- ^ Use ByteString instead of String
-            -> Bool     -- ^ Use GHC specific extensions
-            -> Bool     -- ^ Make the tree a functor
-            -> String   -- ^ module name
-            -> CF       -- ^ Grammar
-            -> String
-cf2Abstract byteStrings ghcExtensions functor name cf = unlines $
-  (if ghcExtensions then "{-# LANGUAGE DeriveDataTypeable #-}" else "") :
-  (if ghcExtensions then "{-# LANGUAGE DeriveGeneric #-}" else "") :
-  ("module "++name +++ "where\n") :
-  "-- Haskell module generated by the BNF converter\n" :
-  (if byteStrings then "import qualified Data.ByteString.Char8 as BS" else "") :
-  (if ghcExtensions then "import Data.Data (Data,Typeable)" else "") :
-  (if ghcExtensions then "import GHC.Generics (Generic)" else "") :
-  (map (render . \c -> prSpecialData byteStrings (isPositionCat cf c) derivingClasses c) (specialCats cf)
-  ++ map (render . prData functor derivingClasses) (cf2data cf))
-  where
-    derivingClasses = ["Eq","Ord","Show","Read"]
-        ++ if ghcExtensions then ["Data","Typeable","Generic"] else []
-
--- | >>> prData False ["Eq", "Ord", "Show", "Read"] (Cat "C", [("C1", [Cat "C"]), ("CIdent", [Cat "Ident"])])
--- data C = C1 C | CIdent Ident
---   deriving (Eq, Ord, Show, Read)
--- <BLANKLINE>
---
--- Nota that the layout adapts if it doesn't fit in a line:
--- >>> prData False ["Show"] (Cat "C", [("CAbracadabra",[]),("CEbrecedebre",[]),("CIbricidibri",[]),("CObrocodobro",[]),("CUbrucudubru",[])])
--- data C
---     = CAbracadabra
---     | CEbrecedebre
---     | CIbricidibri
---     | CObrocodobro
---     | CUbrucudubru
---   deriving (Show)
--- <BLANKLINE>
---
--- The if the first argument is True, generate a functor:
--- >>> prData True ["Show"] (Cat "C", [("C1", [Cat "C"]), ("CIdent", [TokenCat "Ident"])])
--- data C a = C1 a (C a) | CIdent a Ident
---   deriving (Show)
--- <BLANKLINE>
--- instance Functor C where
---     fmap f x = case x of
---         C1 a c -> C1 (f a) (fmap f c)
---         CIdent a ident -> CIdent (f a) ident
---
--- The case for lists
--- >>> prData True ["Show"] (Cat "ExpList", [("Exps", [ListCat (Cat "Exp")])])
--- data ExpList a = Exps a [Exp a]
---   deriving (Show)
--- <BLANKLINE>
--- instance Functor ExpList where
---     fmap f x = case x of
---         Exps a exps -> Exps (f a) (map (fmap f) exps)
-prData :: Bool -> [String] -> Data -> Doc
-prData functor derivingClasses (cat,rules) =
-    hang ("data" <+> dataType) 4 (constructors rules)
-    $+$ nest 2 (deriving_ derivingClasses)
-    $+$ ""
-    $+$ if functor then genFunctorInstance (cat, rules) else empty
-  where
-    prRule (fun,cats) =
-        hsep $ concat [[text fun], ["a" | functor], map prArg cats]
-    dataType =
-        if functor then text (show cat) <+> "a"
-                   else text (show cat)
-    prArg c  = catToType (if functor then Just "a" else Nothing) c
-    constructors [] = empty
-    constructors (h:t) = sep ("=" <+> prRule h : map (("|" <+>) . prRule) t)
-
--- | Generate a functor instance declaration:
--- >>> genFunctorInstance (Cat "C", [("C1", [Cat "C", Cat "C"]), ("CIdent", [TokenCat "Ident"])])
--- instance Functor C where
---     fmap f x = case x of
---         C1 a c1 c2 -> C1 (f a) (fmap f c1) (fmap f c2)
---         CIdent a ident -> CIdent (f a) ident
--- >>> genFunctorInstance (Cat "SomeLists", [("Ints", [ListCat (TokenCat "Integer")]), ("Exps", [ListCat (Cat "Exp")])])
--- instance Functor SomeLists where
---     fmap f x = case x of
---         Ints a integers -> Ints (f a) integers
---         Exps a exps -> Exps (f a) (map (fmap f) exps)
---
-genFunctorInstance :: Data -> Doc
-genFunctorInstance (cat, cons) =
-    "instance Functor" <+> text (show cat) <+> "where"
-    $+$ nest 4 ( "fmap f x = case x of" $+$ nest 4 (vcat (map mkCase cons)))
-  where
-    mkCase (f,args) =
-        let variables = catvars args
-        in text f <+> "a" <+> hsep variables
-          <+> "->" <+> text f <+> "(f a)" <+> hsep (map reccurse (zip args variables))
-    -- We reccursively call fmap on non-terminals only if they are not
-    -- token categories
-    reccurse (TokenCat _, var) = var
-    reccurse (ListCat (TokenCat _), var) = var
-    reccurse (ListCat _, var) = parens ("map (fmap f)" <+> var)
-    reccurse (_, var)          = parens ("fmap f" <+> var)
-
-
--- | Generate a newtype declaration for Ident types
---
--- >>> prSpecialData False False ["Show"] (Cat "Ident")
--- newtype Ident = Ident String deriving (Show)
---
--- >>> prSpecialData False True ["Show"] (Cat "Ident")
--- newtype Ident = Ident ((Int,Int),String) deriving (Show)
---
--- >>> prSpecialData True False ["Show"] (Cat "Ident")
--- newtype Ident = Ident BS.ByteString deriving (Show)
---
--- >>> prSpecialData True True ["Show"] (Cat "Ident")
--- newtype Ident = Ident ((Int,Int),BS.ByteString) deriving (Show)
-prSpecialData :: Bool     -- ^ If True, use ByteString instead of String
-              -> Bool     -- ^ If True, store the token position
-              -> [String] -- ^ Derived classes
-              -> Cat      -- ^ Category
-              -> Doc
-prSpecialData byteStrings position classes cat =
-    hang newtype_ 2 (deriving_ classes)
-  where
-    ppcat = text (show cat)
-    newtype_ = "newtype" <+> ppcat <+> "=" <+> ppcat <+> contentSpec
-    contentSpec | position  = parens ( "(Int,Int)," <> stringType)
-                | otherwise = stringType
-    stringType | byteStrings = "BS.ByteString"
-               | otherwise   = "String"
-
--- | Generate 'deriving' clause
--- >>> deriving_ ["Show","Read"]
--- deriving (Show, Read)
-deriving_ :: [String] -> Doc
-deriving_ cls = "deriving" <+> parens (hsep (punctuate "," (map text cls)))
+{-# LANGUAGE NoImplicitPrelude #-}
+
+{-
+    BNF Converter: Abstract syntax Generator
+    Copyright (C) 2004  Author:  Markus Forberg
+
+    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 2 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, write to the Free Software
+    Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
+-}
+
+module BNFC.Backend.Haskell.CFtoAbstract (cf2Abstract) where
+
+import Prelude'
+
+import BNFC.CF
+import BNFC.PrettyPrint
+import BNFC.Utils                 ( when )
+
+import BNFC.Backend.Haskell.Utils ( catToType, catvars )
+
+-- | Create a Haskell module containing data type definitions for the abstract syntax.
+
+cf2Abstract
+  :: Bool     -- ^ Use ByteString instead of String
+  -> Bool     -- ^ Use GHC specific extensions
+  -> Bool     -- ^ Make the tree a functor
+  -> String   -- ^ module name
+  -> CF       -- ^ Grammar
+  -> Doc
+cf2Abstract byteStrings ghcExtensions functor name cf = vsep . concat $
+    [ [ vcat
+        [ "-- Haskell data types for the abstract syntax."
+        , "-- Generated by the BNF converter."
+        ]
+      ]
+    , [ vcat
+        [ "{-# LANGUAGE DeriveDataTypeable #-}"
+        , "{-# LANGUAGE DeriveGeneric #-}"
+        ]
+      | ghcExtensions
+      ]
+    , [ hsep [ "module", text name, "where" ] ]
+    , [ vcat . concat $
+        [ [ "import qualified Data.ByteString.Char8 as BS" | byteStrings   ]
+        , [ "import Data.Data    (Data, Typeable)"         | ghcExtensions ]
+        , [ "import GHC.Generics (Generic)"                | ghcExtensions ]
+        ]
+      ]
+    , map (\ c -> prSpecialData byteStrings (isPositionCat cf c) derivingClasses c) $ specialCats cf
+    , concatMap (prData functor derivingClasses) $ cf2data cf
+    , [ "" ] -- ensure final newline
+    ]
+  where
+    derivingClasses = concat
+      [ [ "Eq", "Ord", "Show", "Read" ]
+      , when ghcExtensions ["Data","Typeable","Generic"]
+      ]
+
+-- |
+--
+-- >>> vsep $ prData False ["Eq", "Ord", "Show", "Read"] (Cat "C", [("C1", [Cat "C"]), ("CIdent", [Cat "Ident"])])
+-- data C = C1 C | CIdent Ident
+--   deriving (Eq, Ord, Show, Read)
+--
+-- Note that the layout adapts if it does not fit in one line:
+-- >>> vsep $ prData False ["Show"] (Cat "C", [("CAbracadabra",[]),("CEbrecedebre",[]),("CIbricidibri",[]),("CObrocodobro",[]),("CUbrucudubru",[])])
+-- data C
+--     = CAbracadabra
+--     | CEbrecedebre
+--     | CIbricidibri
+--     | CObrocodobro
+--     | CUbrucudubru
+--   deriving (Show)
+--
+-- If the first argument is True, generate a functor:
+-- >>> vsep $ prData True ["Show"] (Cat "C", [("C1", [Cat "C"]), ("CIdent", [TokenCat "Ident"])])
+-- data C a = C1 a (C a) | CIdent a Ident
+--   deriving (Show)
+-- <BLANKLINE>
+-- instance Functor C where
+--     fmap f x = case x of
+--         C1 a c -> C1 (f a) (fmap f c)
+--         CIdent a ident -> CIdent (f a) ident
+--
+-- The case for lists:
+-- >>> vsep $ prData True ["Show"] (Cat "ExpList", [("Exps", [ListCat (Cat "Exp")])])
+-- data ExpList a = Exps a [Exp a]
+--   deriving (Show)
+-- <BLANKLINE>
+-- instance Functor ExpList where
+--     fmap f x = case x of
+--         Exps a exps -> Exps (f a) (map (fmap f) exps)
+--
+prData :: Bool -> [String] -> Data -> [Doc]
+prData functor derivingClasses (cat,rules) = concat
+    [ [ hang ("data" <+> dataType) 4 (constructors rules)
+        $+$ nest 2 (deriving_ derivingClasses)
+      ]
+    , [ genFunctorInstance (cat, rules) | functor ]
+    ]
+  where
+    prRule (fun, cats) = hsep $ concat [ [text fun], ["a" | functor], map prArg cats ]
+    dataType           = hsep $ concat [ [text (show cat)], ["a" | functor] ]
+    prArg              = catToType $ if functor then Just "a" else Nothing
+    constructors []    = empty
+    constructors (h:t) = sep $ ["=" <+> prRule h] ++ map (("|" <+>) . prRule) t
+
+-- | Generate a functor instance declaration:
+--
+-- >>> genFunctorInstance (Cat "C", [("C1", [Cat "C", Cat "C"]), ("CIdent", [TokenCat "Ident"])])
+-- instance Functor C where
+--     fmap f x = case x of
+--         C1 a c1 c2 -> C1 (f a) (fmap f c1) (fmap f c2)
+--         CIdent a ident -> CIdent (f a) ident
+--
+-- >>> genFunctorInstance (Cat "SomeLists", [("Ints", [ListCat (TokenCat "Integer")]), ("Exps", [ListCat (Cat "Exp")])])
+-- instance Functor SomeLists where
+--     fmap f x = case x of
+--         Ints a integers -> Ints (f a) integers
+--         Exps a exps -> Exps (f a) (map (fmap f) exps)
+--
+genFunctorInstance :: Data -> Doc
+genFunctorInstance (cat, cons) =
+    "instance Functor" <+> text (show cat) <+> "where"
+    $+$ nest 4 ("fmap f x = case x of" $+$ nest 4 (vcat (map mkCase cons)))
+  where
+    mkCase (f, args) = hsep . concat $
+        [ [ text f, "a" ]
+        , vars
+        , [ "->", text f, "(f a)" ]
+        , zipWith recurse vars args
+        ]
+      where vars = catvars args
+    -- We recursively call fmap on non-terminals only if they are not token categories.
+    recurse var = \case
+      TokenCat{}         -> var
+      ListCat TokenCat{} -> var
+      ListCat{}          -> parens ("map (fmap f)" <+> var)
+      _                  -> parens ("fmap f"       <+> var)
+
+
+-- | Generate a newtype declaration for Ident types
+--
+-- >>> prSpecialData False False ["Show"] catIdent
+-- newtype Ident = Ident String
+--   deriving (Show)
+--
+-- >>> prSpecialData False True ["Show"] catIdent
+-- newtype Ident = Ident ((Int,Int),String)
+--   deriving (Show)
+--
+-- >>> prSpecialData True False ["Show"] catIdent
+-- newtype Ident = Ident BS.ByteString
+--   deriving (Show)
+--
+-- >>> prSpecialData True True ["Show"] catIdent
+-- newtype Ident = Ident ((Int,Int),BS.ByteString)
+--   deriving (Show)
+--
+prSpecialData
+  :: Bool     -- ^ If True, use ByteString instead of String
+  -> Bool     -- ^ If True, store the token position
+  -> [String] -- ^ Derived classes
+  -> TokenCat -- ^ Token category name
+  -> Doc
+prSpecialData byteStrings position classes cat = vcat
+    [ hsep [ "newtype", ppcat, "=", ppcat, contentSpec ]
+    , nest 2 $ deriving_ classes
+    ]
+  where
+    ppcat    = text cat
+    contentSpec | position    = parens ( "(Int,Int)," <> stringType)
+                | otherwise   = stringType
+    stringType  | byteStrings = "BS.ByteString"
+                | otherwise   = "String"
+
+-- | Generate 'deriving' clause
+--
+-- >>> deriving_ ["Show", "Read"]
+-- deriving (Show, Read)
+--
+deriving_ :: [String] -> Doc
+deriving_ cls = "deriving" <+> parens (hsep $ punctuate "," $ map text cls)
diff --git a/src/BNFC/Backend/Haskell/CFtoAlex.hs b/src/BNFC/Backend/Haskell/CFtoAlex.hs
--- a/src/BNFC/Backend/Haskell/CFtoAlex.hs
+++ b/src/BNFC/Backend/Haskell/CFtoAlex.hs
@@ -172,7 +172,8 @@
   "%}"
   ]
  where
-   ifC cat s = if isUsedCat cf cat then s else ""
+   ifC :: TokenCat -> String -> String
+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
    lexComments ([],[])           = []
    lexComments (xs,s1:ys) = "<>         ::= " ++ ('^':intersperse '^' s1) ++ " [.]* ^n\n" ++ lexComments (xs,ys)
    lexComments (([l1,l2],[r1,r2]):xs,[]) = concat
@@ -196,8 +197,8 @@
    aux (_,_) = " %s | %r "
 
    userDefTokenTypes = unlines
-     ["<mk_" ++ show name ++ "> ::= " ++ printRegAlex exp ++
-      "%{ mk_" ++ show name ++ " p = PT p . eitherResIdent T_"  ++ show name ++ " %}"
+     ["<mk_" ++ name ++ "> ::= " ++ printRegAlex exp ++
+      "%{ mk_" ++ name ++ " p = PT p . eitherResIdent T_"  ++ name ++ " %}"
                                         | (name,exp) <- tokenPragmas cf]
    userDefTokenConstrs = unlines
      [" | T_" ++ name ++ " String" | name <- tokenNames cf]
diff --git a/src/BNFC/Backend/Haskell/CFtoAlex2.hs b/src/BNFC/Backend/Haskell/CFtoAlex2.hs
--- a/src/BNFC/Backend/Haskell/CFtoAlex2.hs
+++ b/src/BNFC/Backend/Haskell/CFtoAlex2.hs
@@ -217,7 +217,8 @@
        | byteStrings = ("BS.ByteString", "BS.take", "BS.uncons", "BS.pack", "BS.unpack", "Nothing", "Just (c,s)")
        | otherwise   = ("String",        "take",    "",          "id",      "id",        "[]",      "(c:s)"     )
 
-   ifC cat s = if isUsedCat cf cat then s else ""
+   ifC :: TokenCat -> String -> String
+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
    lexComments ([],[])           = []
    lexComments (xs,s1:ys) = '\"' : s1 ++ "\"" ++ " [.]* ; -- Toss single line comments\n" ++ lexComments (xs, ys)
    lexComments (([l1,l2],[r1,r2]):xs,[]) = concat
@@ -240,7 +241,7 @@
 
    userDefTokenTypes = unlines
      [printRegAlex exp ++
-      " { tok (\\p s -> PT p (eitherResIdent (T_"  ++ show name ++ " . share) s)) }"
+      " { tok (\\p s -> PT p (eitherResIdent (T_"  ++ name ++ " . share) s)) }"
       | (name,exp) <- tokenPragmas cf]
    userDefTokenConstrs = unlines
      [" | T_" ++ name ++ " !"++stringType | name <- tokenNames cf]
diff --git a/src/BNFC/Backend/Haskell/CFtoAlex3.hs b/src/BNFC/Backend/Haskell/CFtoAlex3.hs
--- a/src/BNFC/Backend/Haskell/CFtoAlex3.hs
+++ b/src/BNFC/Backend/Haskell/CFtoAlex3.hs
@@ -38,43 +38,40 @@
    ]
 
 prelude :: String -> String -> String -> Bool -> Bool -> [String]
-prelude name _ shareMod shareStrings byteStrings = [
-  "-- -*- haskell -*-",
-  "-- This Alex file was machine-generated by the BNF converter",
-  "{",
-  "{-# OPTIONS -fno-warn-incomplete-patterns #-}",
-  "{-# OPTIONS_GHC -w #-}",
-  "module " ++ name ++ " where",
-  "",
-  -- "import " ++ errMod,
-  if shareStrings then "import " ++ shareMod else "",
-  if byteStrings  then "import qualified Data.ByteString.Char8 as BS" else "",
-  "import qualified Data.Bits",
-  "import Data.Word (Word8)",
-  "import Data.Char (ord)",
-  "}",
-  ""
+prelude name _ shareMod shareStrings byteStrings =
+  [ "-- -*- haskell -*-"
+  , "-- This Alex file was machine-generated by the BNF converter"
+  , "{"
+  , "{-# OPTIONS -fno-warn-incomplete-patterns #-}"
+  , "{-# OPTIONS_GHC -w #-}"
+  , "module " ++ name ++ " where"
+  , ""
+  , if shareStrings then "import " ++ shareMod else ""
+  , if byteStrings  then "import qualified Data.ByteString.Char8 as BS" else ""
+  , "import qualified Data.Bits"
+  , "import Data.Word (Word8)"
+  , "import Data.Char (ord)"
+  , "}"
+  , ""
   ]
 
 cMacros :: [String]
-cMacros = [
-  "$l = [a-zA-Z\\192 - \\255] # [\\215 \\247]    -- isolatin1 letter FIXME",
-  "$c = [A-Z\\192-\\221] # [\\215]    -- capital isolatin1 letter FIXME",
-  "$s = [a-z\\222-\\255] # [\\247]    -- small isolatin1 letter FIXME",
-  "$d = [0-9]                -- digit",
-  "$i = [$l $d _ ']          -- identifier character",
-  "$u = [\\0-\\255]          -- universal: any character"
+cMacros =
+  [ "$c = [A-Z\\192-\\221] # [\\215]  -- capital isolatin1 letter (215 = \\times) FIXME"
+  , "$s = [a-z\\222-\\255] # [\\247]  -- small   isolatin1 letter (247 = \\div  ) FIXME"
+  , "$l = [$c $s]         -- letter"
+  , "$d = [0-9]           -- digit"
+  , "$i = [$l $d _ ']     -- identifier character"
+  , "$u = [. \\n]          -- universal: any character"
   ]
 
 rMacros :: CF -> [String]
-rMacros cf =
-  let symbs = cfgSymbols cf
-  in
-  (if null symbs then [] else [
-   "@rsyms =    -- symbols and non-identifier-like reserved words",
-   "   " ++ unwords (intersperse "|" (map mkEsc symbs))
-   ])
+rMacros cf = if null symbs then [] else
+  [ "@rsyms =    -- symbols and non-identifier-like reserved words"
+  , "   " ++ unwords (intersperse "|" (map mkEsc symbs))
+  ]
  where
+  symbs = cfgSymbols cf
   mkEsc = unwords . esc
   esc s = if null a then rest else show a : rest
       where (a,r) = span isAlphaNum s
@@ -94,11 +91,11 @@
   userDefTokenTypes,
   ident,
 
-  ifC catString ("\\\" ([$u # [\\\" \\\\ \\n]] | (\\\\ (\\\" | \\\\ | \\' | n | t)))* \\\"" ++
-                  "{ tok (\\p s -> PT p (TL $ share $ unescapeInitTail s)) }"),
-  ifC catChar    "\\\' ($u # [\\\' \\\\] | \\\\ [\\\\ \\\' n t]) \\'  { tok (\\p s -> PT p (TC $ share s))  }",
-  ifC catInteger "$d+      { tok (\\p s -> PT p (TI $ share s))    }",
-  ifC catDouble  "$d+ \\. $d+ (e (\\-)? $d+)? { tok (\\p s -> PT p (TD $ share s)) }",
+  ifC catString ("\\\" ([$u # [\\\" \\\\ \\n]] | (\\\\ (\\\" | \\\\ | \\' | n | t | r | f)))* \\\"" ++
+                  "\n    { tok (\\p s -> PT p (TL $ share $ unescapeInitTail s)) }"),
+  ifC catChar    "\\\' ($u # [\\\' \\\\] | \\\\ [\\\\ \\\' n t r f]) \\'\n    { tok (\\p s -> PT p (TC $ share s))  }",
+  ifC catInteger "$d+\n    { tok (\\p s -> PT p (TI $ share s))    }",
+  ifC catDouble  "$d+ \\. $d+ (e (\\-)? $d+)?\n    { tok (\\p s -> PT p (TD $ share s)) }",
   "",
   "{",
   "",
@@ -175,6 +172,8 @@
   "    '\\\\':c:cs | elem c ['\\\"', '\\\\', '\\\''] -> c : unesc cs",
   "    '\\\\':'n':cs  -> '\\n' : unesc cs",
   "    '\\\\':'t':cs  -> '\\t' : unesc cs",
+  "    '\\\\':'r':cs  -> '\\r' : unesc cs",
+  "    '\\\\':'f':cs  -> '\\f' : unesc cs",
   "    '\"':[]    -> []",
   "    c:cs      -> c : unesc cs",
   "    _         -> []",
@@ -253,7 +252,8 @@
        | byteStrings = ("BS.ByteString", "BS.take", "BS.uncons", "BS.pack", "BS.unpack", "Nothing", "Just (c,s)")
        | otherwise   = ("String",        "take",    "",          "id",      "id",        "[]",      "(c:s)"     )
 
-   ifC cat s = if isUsedCat cf cat then s else ""
+   ifC :: TokenCat -> String -> String
+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
    lexComments ([],[])           = []
    lexComments (xs,s1:ys) = '\"' : s1 ++ "\"" ++ " [.]* ; -- Toss single line comments\n" ++ lexComments (xs, ys)
    lexComments (([l1,l2],[r1,r2]):xs,[]) = concat
@@ -272,11 +272,11 @@
 
    -- tokens consisting of special symbols
    pTSpec [] = ""
-   pTSpec _ = "@rsyms { tok (\\p s -> PT p (eitherResIdent (TV . share) s)) }"
+   pTSpec _ = "@rsyms\n    { tok (\\p s -> PT p (eitherResIdent (TV . share) s)) }"
 
    userDefTokenTypes = unlines
      [printRegAlex exp ++
-      " { tok (\\p s -> PT p (eitherResIdent (T_"  ++ show name ++ " . share) s)) }"
+      "\n    { tok (\\p s -> PT p (eitherResIdent (T_"  ++ name ++ " . share) s)) }"
       | (name,exp) <- tokenPragmas cf]
    userDefTokenConstrs = unlines
      [" | T_" ++ name ++ " !"++stringType | name <- tokenNames cf]
@@ -284,7 +284,7 @@
      ["  PT _ (T_" ++ name ++ " s) -> s" | name <- tokenNames cf]
 
    ident =
-     "$l $i*   { tok (\\p s -> PT p (eitherResIdent (TV . share) s)) }"
+     "$l $i*\n    { tok (\\p s -> PT p (eitherResIdent (TV . share) s)) }"
      --ifC "Ident"  "<ident>   ::= ^l ^i*   { ident  p = PT p . eitherResIdent TV }"
 
 
@@ -314,22 +314,18 @@
 printRegAlex :: Reg -> String
 printRegAlex = render . prt 0
 
--- you may want to change render and parenth
-
 render :: [String] -> String
-render = rend 0
-    where rend :: Int -> [String] -> String
-          rend i ss = case ss of
-                        "["      :ts -> cons "["  $ rend i ts
-                        "("      :ts -> cons "("  $ rend i ts
-                        t  : "," :ts -> cons t    $ space "," $ rend i ts
-                        t  : ")" :ts -> cons t    $ cons ")"  $ rend i ts
-                        t  : "]" :ts -> cons t    $ cons "]"  $ rend i ts
-                        t        :ts -> space t   $ rend i ts
-                        _            -> ""
-
-          cons s t  = s ++ t
-          space t s = if null s then t else t ++ " " ++ s
+render = \case
+    "["      : ts -> cons "["  $ render ts
+    "("      : ts -> cons "("  $ render ts
+    t  : "," : ts -> cons t    $ space "," $ render ts
+    t  : ")" : ts -> cons t    $ cons ")"  $ render ts
+    t  : "]" : ts -> cons t    $ cons "]"  $ render ts
+    t        : ts -> space t   $ render ts
+    _             -> ""
+  where
+  cons s t  = s ++ t
+  space t s = if null s then t else t ++ " " ++ s
 
 parenth :: [String] -> [String]
 parenth ss = ["("] ++ ss ++ [")"]
@@ -344,12 +340,15 @@
   prt _ = prtList
 
 instance Print Char where
-  prt _ c = case c of
-             '\n' -> ["\\n"]
-             '\t' -> ["\\t"]
-             c | isAlphaNum c -> [[c]]
-             c | isPrint c    -> ['\\':[c]]
-             c                -> ['\\':show (ord c)]
+  prt _ = \case
+    '\n'             -> ["\\n"]
+    '\t'             -> ["\\t"]
+    '\r'             -> ["\\r"]
+    '\f'             -> ["\\f"]
+    c | isAlphaNum c -> [[c]]
+    c | isPrint c    -> ['\\':[c]]
+    c                -> ['\\':show (ord c)]
+
   prtList = map (concat . prt 0)
 
 prPrec :: Int -> Int -> [String] -> [String]
diff --git a/src/BNFC/Backend/Haskell/CFtoHappy.hs b/src/BNFC/Backend/Haskell/CFtoHappy.hs
--- a/src/BNFC/Backend/Haskell/CFtoHappy.hs
+++ b/src/BNFC/Backend/Haskell/CFtoHappy.hs
@@ -17,15 +17,18 @@
     Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
 -}
 
-module BNFC.Backend.Haskell.CFtoHappy (cf2HappyS, convert) where
+module BNFC.Backend.Haskell.CFtoHappy (cf2Happy, convert) where
 
+import Data.Char
+import Data.List (intersperse)
+
 import BNFC.CF
 import BNFC.Backend.Common.StrUtils (escapeChars)
 import BNFC.Backend.Haskell.Utils (parserName, catToType)
---import Lexer
-import Data.Char
 import BNFC.Options (HappyMode(..))
 import BNFC.PrettyPrint
+import BNFC.Utils
+
 -- Type declarations
 
 type Rules       = [(NonTerminal,[(Pattern,Action)])]
@@ -37,50 +40,41 @@
 
 tokenName   = "Token"
 
--- Happy mode
-
-
-
-cf2HappyS :: String     -- ^ This module's name
-          -> String     -- ^ Abstract syntax module name
-          -> String     -- ^ Lexer module name
-          -> String     -- ^ ErrM module name
-          -> HappyMode  -- ^ Happy mode
-          -> Bool       -- ^ Use bytestring?
-          -> Bool       -- ^ AST is a functor?
-          -> CF         -- ^ Grammar
-          -> String     -- ^ Generated code
----- cf2HappyS :: String -> CF -> String
-cf2HappyS = cf2Happy
+-- | Generate a happy parser file from a grammar.
 
--- The main function, that given a CF and a CFCat to parse according to,
--- generates a happy module.
-cf2Happy name absName lexName errName mode byteStrings functor cf
- = unlines
-    [header name absName lexName errName mode byteStrings,
-     render $ declarations mode (allEntryPoints cf),
-     tokens (cfTokens cf),
-     specialToks cf,
-     delimiter,
-     specialRules byteStrings cf,
-     render $ prRules functor (rulesForHappy absName functor cf),
-     finalize byteStrings cf]
+cf2Happy
+  :: String     -- ^ This module's name.
+  -> String     -- ^ Abstract syntax module name.
+  -> String     -- ^ Lexer module name.
+  -> String     -- ^ ErrM module name.
+  -> HappyMode  -- ^ Happy mode.
+  -> Bool       -- ^ Use bytestring?
+  -> Bool       -- ^ AST is a functor?
+  -> CF         -- ^ Grammar.
+  -> String     -- ^ Generated code.
+cf2Happy name absName lexName errName mode byteStrings functor cf = unlines
+  [ header name absName lexName errName byteStrings
+  , render $ declarations mode (allEntryPoints cf)
+  , render $ tokens cf
+  , delimiter
+  , specialRules byteStrings cf
+  , render $ prRules functor (rulesForHappy absName functor cf)
+  , finalize byteStrings cf
+  ]
 
--- construct the header.
-header :: String -> String -> String -> String -> HappyMode -> Bool -> String
-header modName absName lexName errName mode byteStrings = unlines
-         ["-- This Happy file was machine-generated by the BNF converter",
-          "{",
-          "{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}",
-          case mode of
-            Standard -> "module " ++ modName ++ " where"
-            GLR      -> "-- module name filled in by Happy",
-          "import " ++ absName,
-          "import " ++ lexName,
-          "import " ++ errName,
-          if byteStrings then "import qualified Data.ByteString.Char8 as BS" else "",
-          "}"
-         ]
+-- | Construct the header.
+header :: String -> String -> String -> String -> Bool -> String
+header modName absName lexName errName byteStrings = unlines
+  [ "-- This Happy file was machine-generated by the BNF converter"
+  , "{"
+  , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}"
+  , "module " ++ modName ++ " where"
+  , "import " ++ absName
+  , "import " ++ lexName
+  , "import " ++ errName
+  , if byteStrings then "import qualified Data.ByteString.Char8 as BS" else ""
+  , "}"
+  ]
 
 -- | The declarations of a happy file.
 -- >>> declarations Standard [Cat "A", Cat "B", ListCat (Cat "B")]
@@ -97,22 +91,25 @@
         Standard -> "-- no lexer declaration"
         GLR      -> "%lexer { myLexer } { Err _ }",
       "%monad { Err } { thenM } { returnM }",
-      "%tokentype" <+> braces (text tokenName) ]
-  where generateP n = "%name" <+> parserName n <+> text n'
-          where n' = identCat n
+      "%tokentype" <+> braces (text tokenName)
+    ]
+  where
+  generateP n = "%name" <+> parserName n <+> text (identCat n)
 
 -- The useless delimiter symbol.
 delimiter :: String
 delimiter = "\n%%\n"
 
--- Generate the list of tokens and their identifiers.
-tokens :: [(String,Int)] -> String
-tokens toks = "%token\n" ++ prTokens toks
- where prTokens []         = []
-       prTokens ((t,k):tk) = "  " ++ render (convert t) ++
-                             " { " ++ oneTok t k ++ " }\n" ++
-                             prTokens tk
-       oneTok _ k = "PT _ (TS _ " ++ show k ++ ")"
+-- | Generate the list of tokens and their identifiers.
+tokens :: CF -> Doc
+tokens cf
+  -- Andreas, 2019-01-02: "%token" followed by nothing is a Happy parse error.
+  -- Thus, if we have no tokens, do not output anything.
+  | null ts   = empty
+  | otherwise = "%token" $$ (nest 2 $ vcat ts)
+  where
+    ts            = map prToken (cfTokens cf) ++ map text (specialToks cf)
+    prToken (t,k) = hsep [ convert t, lbrace, text ("PT _ (TS _ " ++ show k ++ ")"), rbrace ]
 
 -- Happy doesn't allow characters such as åäö to occur in the happy file. This
 -- is however not a restriction, just a naming paradigm in the happy source file.
@@ -126,47 +123,56 @@
     reversibles = cfgReversibleCats cf
 
 -- | For every non-terminal, we construct a set of rules. A rule is a sequence
--- of terminals and non-terminals, and an action to be performed
+-- of terminals and non-terminals, and an action to be performed.
+--
 -- >>> constructRule "Foo" False [] (Rule "EPlus" (Cat "Exp") [Left (Cat "Exp"), Right "+", Left (Cat "Exp")])
 -- ("Exp '+' Exp","Foo.EPlus $1 $3")
 --
--- If we're using functors, it adds an void value:
+-- If we're using functors, it adds void value:
+--
 -- >>> constructRule "Foo" True [] (Rule "EPlus" (Cat "Exp") [Left (Cat "Exp"), Right "+", Left (Cat "Exp")])
 -- ("Exp '+' Exp","Foo.EPlus () $1 $3")
 --
 -- List constructors should not be prefixed by the abstract module name:
+--
 -- >>> constructRule "Foo" False [] (Rule "(:)" (ListCat (Cat "A")) [Left (Cat "A"), Right",", Left (ListCat (Cat "A"))])
 -- ("A ',' ListA","(:) $1 $3")
+--
 -- >>> constructRule "Foo" False [] (Rule "(:[])" (ListCat (Cat "A")) [Left (Cat "A")])
 -- ("A","(:[]) $1")
 --
 -- Coercion are much simpler:
+--
 -- >>> constructRule "Foo" True [] (Rule "_" (Cat "Exp") [Right "(", Left (Cat "Exp"), Right ")"])
 -- ("'(' Exp ')'","$2")
 --
 -- As an optimization, a pair of list rules [C] ::= "" | C k [C] is
 -- left-recursivized into [C] ::= "" | [C] C k.
 -- This could be generalized to cover other forms of list rules.
+--
 -- >>> constructRule "Foo" False [ListCat (Cat "A")] (Rule "(:)" (ListCat (Cat "A")) [Left (Cat "A"), Right",", Left (ListCat (Cat "A"))])
 -- ("ListA A ','","flip (:) $1 $2")
 --
 -- Note that functors don't concern list constructors:
+--
 -- >>> constructRule "Abs" True [ListCat (Cat "A")] (Rule "(:)" (ListCat (Cat "A")) [Left (Cat "A"), Right",", Left (ListCat (Cat "A"))])
 -- ("ListA A ','","flip (:) $1 $2")
-constructRule :: String -> Bool -> [Cat] -> Rule -> (Pattern,Action)
+--
+constructRule :: String -> Bool -> [Cat] -> Rule -> (Pattern, Action)
 constructRule absName functor revs r0@(Rule fun cat _) = (pattern, action)
   where
     (pattern,metavars) = generatePatterns revs r
     action | isCoercion fun                 = unwords metavars
            | isConsFun fun && elem cat revs = unwords ("flip" : fun : metavars)
-           | isNilCons fun                  = unwords (underscore fun : metavars)
-           | functor                        = unwords (underscore fun : "()" : metavars)
-           | otherwise                      = unwords (underscore fun : metavars)
+           | isNilCons fun                  = unwords (qualify fun : metavars)
+           | functor                        = unwords (qualify fun : "()" : metavars)
+           | otherwise                      = unwords (qualify fun : metavars)
     r | isConsFun (funRule r0) && elem (valCat r0) revs = revSepListRule r0
       | otherwise                                       = r0
-    underscore f | isConsFun f || isNilCons f = f
-                 | isDefinedRule f = absName ++ "." ++ f ++ "_"
-                 | otherwise       = absName ++ "." ++ f
+    qualify f
+      | isConsFun f || isNilCons f = f
+      | isDefinedRule f = f ++ "_"  -- Definitions are local to Par.hs, not in Abs.hs
+      | otherwise       = absName ++ "." ++ f
 
 -- Generate patterns and a set of metavariables indicating
 -- where in the pattern the non-terminal
@@ -192,7 +198,7 @@
 -- Expr :: { Expr }
 -- Expr : Integer { EInt $1 } | Expr '+' Expr { EPlus $1 $3 }
 --
--- if there's a lot of cases, print on several lignes:
+-- if there's a lot of cases, print on several lines:
 -- >>> prRules False [(Cat "Expr", [("Abcd", "Action"), ("P2", "A2"), ("P3", "A3"), ("P4", "A4"), ("P5","A5")])]
 -- Expr :: { Expr }
 -- Expr : Abcd { Action }
@@ -210,10 +216,12 @@
 -- Expr : Integer { EInt () $1 } | Expr '+' Expr { EPlus () $1 $3 }
 --
 -- A list with coercion: in the type signature we need to get rid of the
--- coercion
+-- coercion.
+--
 -- >>> prRules True [(ListCat (CoercCat "Exp" 2), [("Exp2", "(:[]) $1"), ("Exp2 ',' ListExp2","(:) $1 $3")])]
 -- ListExp2 :: { [Exp ()] }
 -- ListExp2 : Exp2 { (:[]) $1 } | Exp2 ',' ListExp2 { (:) $1 $3 }
+--
 prRules :: Bool -> Rules -> Doc
 prRules functor = vcat . map prOne
   where
@@ -230,26 +238,30 @@
 
 finalize :: Bool -> CF -> String
 finalize byteStrings cf = unlines $
-   [
-     "{",
-     "\nreturnM :: a -> Err a",
-     "returnM = return",
-     "\nthenM :: Err a -> (a -> Err b) -> Err b",
-     "thenM = (>>=)",
-     "\nhappyError :: [" ++ tokenName ++ "] -> Err a",
-     "happyError ts =",
-     "  Bad $ \"syntax error at \" ++ tokenPos ts ++ ",
-     "  case ts of",
-     "    [] -> []",
-     "    [Err _] -> \" due to lexer error\"",
-     "    t:_ -> \" before `\" ++ " ++ stringUnpack ++ "(prToken t) ++ \"'\"",
-     "",
-     "myLexer = tokens"
-   ] ++ definedRules cf ++ [ "}" ]
-   where
-     stringUnpack
-       | byteStrings = "BS.unpack"
-       | otherwise   = "id"
+  [ "{"
+  , ""
+  , "returnM :: a -> Err a"
+  , "returnM = return"
+  , ""
+  , "thenM :: Err a -> (a -> Err b) -> Err b"
+  , "thenM = (>>=)"
+  , ""
+  , "happyError :: [" ++ tokenName ++ "] -> Err a"
+  , "happyError ts ="
+  , "  Bad $ \"syntax error at \" ++ tokenPos ts ++ "
+  , "  case ts of"
+  , "    []      -> []"
+  , "    [Err _] -> \" due to lexer error\""
+  , "    t:_     -> \" before `\" ++ " ++ stringUnpack ++ "(prToken t) ++ \"'\""
+  , ""
+  , "myLexer = tokens"
+  ] ++ definedRules cf ++
+  [ "}"
+  ]
+  where
+    stringUnpack
+      | byteStrings = "BS.unpack"
+      | otherwise   = "id"
 
 
 definedRules cf = [ mkDef f xs e | FunDef f xs e <- cfgPragmas cf ]
@@ -263,39 +275,33 @@
             | otherwise         = App x $ map underscore es
         underscore e          = e
 
--- aarne's modifs 8/1/2002:
--- Markus's modifs 11/02/2002
-
--- GF literals
-specialToks :: CF -> String
-specialToks cf = unlines (map aux (literals cf))
- where aux cat =
-        case show cat of
-          "Ident"  -> "L_ident  { PT _ (TV $$) }"
-          "String" -> "L_quoted { PT _ (TL $$) }"
-          "Integer" -> "L_integ  { PT _ (TI $$) }"
-          "Double" -> "L_doubl  { PT _ (TD $$) }"
-          "Char"   -> "L_charac { PT _ (TC $$) }"
-          own      -> "L_" ++ own ++ " { PT _ (T_" ++ own ++ " " ++ posn ++ ") }"
-         where
-           posn = if isPositionCat cf cat then "_" else "$$"
+-- | GF literals.
+specialToks :: CF -> [String]
+specialToks cf = (`map` literals cf) $ \case
+  "Ident"   -> "L_ident  { PT _ (TV $$) }"
+  "String"  -> "L_quoted { PT _ (TL $$) }"
+  "Integer" -> "L_integ  { PT _ (TI $$) }"
+  "Double"  -> "L_doubl  { PT _ (TD $$) }"
+  "Char"    -> "L_charac { PT _ (TC $$) }"
+  own       -> "L_" ++ own ++ " { PT _ (T_" ++ own ++ " " ++ posn ++ ") }"
+    where posn = if isPositionCat cf own then "_" else "$$"
 
 specialRules :: Bool -> CF -> String
-specialRules byteStrings cf = unlines $
-                  map aux (literals cf)
- where
-   aux cat =
-     case show cat of
-         "Ident"   -> "Ident   :: { Ident }   : L_ident  { Ident $1 }"
-         "String"  -> "String  :: { String }  : L_quoted { "++stringUnpack++" $1 }"
-         "Integer" -> "Integer :: { Integer } : L_integ  { (read ("++stringUnpack++" $1)) :: Integer }"
-         "Double"  -> "Double  :: { Double }  : L_doubl  { (read ("++stringUnpack++" $1)) :: Double }"
-         "Char"    -> "Char    :: { Char }    : L_charac { (read ("++stringUnpack++" $1)) :: Char }"
-         own       -> own ++ "    :: { " ++ own ++ "} : L_" ++ own ++ " { " ++ own ++ " ("++ posn ++ "$1)}"
-                -- PCC: take "own" as type name? (manual says newtype)
-      where
-         posn = if isPositionCat cf cat then "mkPosToken " else ""
-
-   stringUnpack
-     | byteStrings = "BS.unpack"
-     | otherwise   = ""
+specialRules byteStrings cf = unlines . intersperse "" . (`map` literals cf) $ \case
+    "Ident"   -> "Ident   :: { Ident }"
+            ++++ "Ident    : L_ident  { Ident $1 }"
+    "String"  -> "String  :: { String }"
+            ++++ "String   : L_quoted { "++stringUnpack++" $1 }"
+    "Integer" -> "Integer :: { Integer }"
+            ++++ "Integer  : L_integ  { (read ("++stringUnpack++" $1)) :: Integer }"
+    "Double"  -> "Double  :: { Double }"
+            ++++ "Double   : L_doubl  { (read ("++stringUnpack++" $1)) :: Double }"
+    "Char"    -> "Char    :: { Char }"
+            ++++ "Char     : L_charac { (read ("++stringUnpack++" $1)) :: Char }"
+    own       -> own ++ " :: { " ++ own ++ "}"
+            ++++ own ++ "  : L_" ++ own ++ " { " ++ own ++ " ("++ posn ++ "$1)}"
+      where posn = if isPositionCat cf own then "mkPosToken " else ""
+  where
+    stringUnpack
+      | byteStrings = "BS.unpack"
+      | otherwise   = ""
diff --git a/src/BNFC/Backend/Haskell/CFtoLayout.hs b/src/BNFC/Backend/Haskell/CFtoLayout.hs
--- a/src/BNFC/Backend/Haskell/CFtoLayout.hs
+++ b/src/BNFC/Backend/Haskell/CFtoLayout.hs
@@ -112,8 +112,13 @@
   "            -- Explicit layout, just move on. The case above",
   "            -- will push an explicit layout block.",
   "            t1:_ | isLayoutOpen t1 -> moveAlong st [t0] ts",
-  "                     -- at end of file, the start column doesn't matter",
-  "            _ -> let col = if null ts then column t0 else column (head ts)",
+  "                 -- The column of the next token determines the starting column",
+  "                 -- of the implicit layout block.",
+  "                 -- However, the next block needs to be strictly more indented",
+  "                 -- than the previous block.",
+  "            _ -> let col = max (indentation st + 1) $",
+  "                       -- at end of file, the start column doesn't matter",
+  "                       if null ts then column t0 else column (head ts)",
   "                     -- insert an open brace after the layout word",
   "                     b:ts' = addToken (nextPos t0) layoutOpen ts",
   "                     -- save the start column",
@@ -176,7 +181,7 @@
   "            -> [Token] -- ^ Any tokens just processed.",
   "            -> [Token] -- ^ the rest of the tokens.",
   "            -> [Token]",
-  "  moveAlong _  [] _  = error $ \"Layout error: moveAlong got [] as old tokens\"",
+  "  moveAlong _  [] _  = error \"Layout error: moveAlong got [] as old tokens\"",
   "  moveAlong st ot ts = ot ++ res (Just $ last ot) st ts",
   "",
   "  newLine :: Maybe Token -> Token -> Bool",
@@ -184,17 +189,23 @@
   "    Nothing -> True",
   "    Just t  -> line t /= line t0",
   "",
-  "data Block = Implicit Int -- ^ An implicit layout block with its start column.",
-  "           | Explicit",
-  "             deriving Show",
+  "data Block",
+  "   = Implicit Int -- ^ An implicit layout block with its start column.",
+  "   | Explicit",
+  "   deriving Show",
   "",
-  "type Position = Posn",
+  "-- | Get current indentation.  0 if we are in an explicit block.",
+  "indentation :: [Block] -> Int",
+  "indentation (Implicit n : _) = n",
+  "indentation _ = 0",
   "",
   "-- | Check if s block is implicit.",
   "isImplicit :: Block -> Bool",
   "isImplicit (Implicit _) = True",
   "isImplicit _ = False",
   "",
+  "type Position = Posn",
+  "",
   "-- | Insert a number of tokens at the begninning of a list of tokens.",
   "addTokens :: Position -- ^ Position of the first new token.",
   "          -> [String] -- ^ Token symbols.",
@@ -260,7 +271,7 @@
   "-- | Check if a token is one of the given symbols.",
   "isTokenIn :: [String] -> Token -> Bool",
   "isTokenIn ts t = case t of",
-  "  PT _ (TS r _) | elem r ts -> True",
+  "  PT _ (TS r _) | r `elem` ts -> True",
   "  _ -> False",
   "",
   "-- | Check if a word is a layout start token.",
diff --git a/src/BNFC/Backend/Haskell/CFtoPrinter.hs b/src/BNFC/Backend/Haskell/CFtoPrinter.hs
--- a/src/BNFC/Backend/Haskell/CFtoPrinter.hs
+++ b/src/BNFC/Backend/Haskell/CFtoPrinter.hs
@@ -36,30 +36,37 @@
 
 -- AR 15/2/2002
 
+type AbsMod = String
+
 -- | Derive pretty-printer from a BNF grammar.
 cf2Printer
   :: Bool    -- ^ Are identifiers @ByteString@s rather than @String@s?  (Option @--bytestrings@)
   -> Bool    -- ^ Option @--functor@?
   -> Bool    -- ^ @--haskell-gadt@?
   -> String  -- ^ Name of created Haskell module.
-  -> String  -- ^ Name of Haskell module for abstract syntax.
+  -> AbsMod  -- ^ Name of Haskell module for abstract syntax.
   -> CF      -- ^ Grammar.
   -> String
 cf2Printer byteStrings functor useGadt name absMod cf = unlines $ concat $
   -- Each of the following list entries is itself a list of lines
   [ prologue byteStrings useGadt name absMod
-  , integerRule cf
-  , doubleRule cf
-  , if hasIdent cf then identRule byteStrings cf else []
-  ] ++ [ ownPrintRule byteStrings cf own | (own,_) <- tokenPragmas cf ] ++
-  [ rules functor cf
+  , integerRule absMod cf
+  , doubleRule absMod cf
+  , if hasIdent cf then identRule absMod byteStrings cf else []
+  ] ++ [ ownPrintRule absMod byteStrings cf own | (own,_) <- tokenPragmas cf ] ++
+  [ rules absMod functor cf
   ]
 
 
-prologue :: Bool -> Bool -> String -> String -> [String]
+prologue :: Bool -> Bool -> String -> AbsMod -> [String]
 prologue byteStrings useGadt name absMod =
+  [ "{-# LANGUAGE CPP #-}"
+  , "#if __GLASGOW_HASKELL__ <= 708"
+  , "{-# LANGUAGE OverlappingInstances #-}"
+  , "#endif"
+  ] ++
   [ "{-# LANGUAGE GADTs, TypeSynonymInstances #-}" | useGadt ] ++
-  [ "{-# LANGUAGE FlexibleInstances, OverlappingInstances #-}"
+  [ "{-# LANGUAGE FlexibleInstances #-}"
   , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"
   , ""
   , "-- | Pretty-printer for " ++ takeWhile ('.' /=) name ++ "."
@@ -67,7 +74,7 @@
   , ""
   , "module " ++ name +++ "where"
   , ""
-  , "import " ++ absMod
+  , "import qualified " ++ absMod
   , "import Data.Char"
   ] ++ [ "import qualified Data.ByteString.Char8 as BS" | byteStrings ] ++
   [ ""
@@ -122,7 +129,7 @@
   , "  prtList :: Int -> [a] -> Doc"
   , "  prtList i = concatD . map (prt i)"
   , ""
-  , "instance Print a => Print [a] where"
+  , "instance {-# OVERLAPPABLE #-} Print a => Print [a] where"
   , "  prt = prtList"
   , ""
   , "instance Print Char where"
@@ -143,44 +150,64 @@
   ]
 
 -- | Printing instance for @Integer@, and possibly @[Integer]@.
-integerRule :: CF -> [String]
-integerRule cf = showsPrintRule cf $ TokenCat "Integer"
+integerRule :: AbsMod -> CF -> [String]
+integerRule absMod cf = showsPrintRule absMod cf $ TokenCat catInteger
 
 -- | Printing instance for @Double@, and possibly @[Double]@.
-doubleRule :: CF -> [String]
-doubleRule cf = showsPrintRule cf $ TokenCat "Double"
+doubleRule :: AbsMod -> CF -> [String]
+doubleRule absMod cf = showsPrintRule absMod cf $ TokenCat catDouble
 
-showsPrintRule :: CF -> Cat -> [String]
-showsPrintRule cf t =
-  [ "instance Print " ++ show t ++ " where"
+showsPrintRule :: AbsMod -> CF -> Cat -> [String]
+showsPrintRule absMod cf t =
+  [ unwords [ "instance Print" , qualifiedCat absMod t , "where" ]
   , "  prt _ x = doc (shows x)"
   ] ++ ifList cf t ++
   [ ""
   ]
 
+-- | Print category (data type name) qualified if user-defined.
+--
+qualifiedCat :: AbsMod -> Cat -> String
+qualifiedCat absMod t = case t of
+  TokenCat s
+    | s `elem` baseTokenCatNames -> unqualified
+    | otherwise                  -> qualified
+  Cat{}       -> qualified
+  ListCat c   -> concat [ "[", qualifiedCat absMod c, "]" ]
+  CoercCat{}  -> impossible
+  InternalCat -> impossible
+  where
+  unqualified = catToStr t
+  qualified   = qualify absMod unqualified
+  impossible  = error $ "impossible in Backend.Haskell.CFtoPrinter.qualifiedCat: " ++ show t
+
+qualify :: AbsMod -> String -> String
+qualify absMod s = concat [ absMod, "." , s ]
+
 -- | Printing instance for @Ident@, and possibly @[Ident]@.
-identRule :: Bool -> CF -> [String]
-identRule byteStrings cf = ownPrintRule byteStrings cf catIdent
+identRule :: AbsMod -> Bool -> CF -> [String]
+identRule absMod byteStrings cf = ownPrintRule absMod byteStrings cf catIdent
 
 -- | Printing identifiers and terminals.
-ownPrintRule :: Bool -> CF -> Cat -> [String]
-ownPrintRule byteStrings cf own =
-  [ "instance Print " ++ show own ++ " where"
-  , "  prt _ (" ++ show own ++ posn ++ ") = doc (showString " ++ stringUnpack ++ ")"
-  ] ++ ifList cf own ++
+ownPrintRule :: AbsMod -> Bool -> CF -> TokenCat -> [String]
+ownPrintRule absMod byteStrings cf own =
+  [ "instance Print " ++ q ++ " where"
+  , "  prt _ (" ++ q ++ posn ++ ") = doc (showString " ++ stringUnpack ++ ")"
+  ] ++ ifList cf (TokenCat own) ++
   [ ""
   ]
  where
+   q    = qualifiedCat absMod $ TokenCat own
    posn = if isPositionCat cf own then " (_,i)" else " i"
 
    stringUnpack | byteStrings = "(BS.unpack i)"
                 | otherwise   = "i"
 
 -- | Printing rules for the AST nodes.
-rules :: Bool -> CF -> [String]
-rules functor cf = do
+rules :: AbsMod -> Bool -> CF -> [String]
+rules absMod functor cf = do
     (cat, xs :: [(Fun, [Cat])]) <- cf2dataLists cf
-    [ render (case_fun functor cat (map (toArgs cat) xs)) ] ++ ifList cf cat ++ [ "" ]
+    [ render (case_fun absMod functor cat (map (toArgs cat) xs)) ] ++ ifList cf cat ++ [ "" ]
   where
     toArgs :: Cat -> (Fun, [Cat]) -> Rule
     toArgs cat (cons, _) =
@@ -192,20 +219,21 @@
         --   Foo. Bar ::= "bar" ;
         -- Of course, this will generate an arbitary printer for @Foo@.
         [] -> error $ "CFToPrinter.rules: no rhs found for: " ++ cons ++ ". " ++ show cat ++ " ::= ?"
+
 -- |
--- >>> case_fun False (Cat "A") [ (Rule "AA" (Cat "AB") [Right "xxx"]) ]
--- instance Print A where
+-- >>> case_fun "Abs" False (Cat "A") [ (Rule "AA" (Cat "AB") [Right "xxx"]) ]
+-- instance Print Abs.A where
 --   prt i e = case e of
---     AA -> prPrec i 0 (concatD [doc (showString "xxx")])
-case_fun :: Bool -> Cat -> [Rule] -> Doc
-case_fun functor cat xs =
+--     Abs.AA -> prPrec i 0 (concatD [doc (showString "xxx")])
+case_fun :: AbsMod -> Bool -> Cat -> [Rule] -> Doc
+case_fun absMod functor cat xs =
   -- trace ("case_fun: cat = " ++ show cat) $
   -- trace ("case_fun: xs  = " ++ show xs ) $
   vcat
     [ "instance Print" <+> type_ <+> "where"
     , nest 2 $ if isList cat then "prt = prtList" else vcat
         [ "prt i e = case e of"
-        , nest 2 $ vcat (map (mkPrintCase functor) xs)
+        , nest 2 $ vcat (map (mkPrintCase absMod functor) xs)
         ]
     ]
   where
@@ -213,38 +241,38 @@
      | functor   = case cat of
          ListCat{}  -> type' cat
          _ -> parens $ type' cat
-     | otherwise = text (show cat)
+     | otherwise = text (qualifiedCat absMod cat)
     type' = \case
       ListCat c    -> "[" <> type' c <> "]"
-      c@TokenCat{} -> text (show c)
-      c            -> text (show c) <+> "a"
+      c@TokenCat{} -> text (qualifiedCat absMod c)
+      c            -> text (qualifiedCat absMod c) <+> "a"
 
 -- | When writing the Print instance for a category (in case_fun), we have
 -- a different case for each constructor for this category.
 --
--- >>> mkPrintCase False (Rule "AA" (Cat "A") [Right "xxx"])
--- AA -> prPrec i 0 (concatD [doc (showString "xxx")])
+-- >>> mkPrintCase "Abs" False (Rule "AA" (Cat "A") [Right "xxx"])
+-- Abs.AA -> prPrec i 0 (concatD [doc (showString "xxx")])
 --
 -- Coercion levels are passed to @prPrec@.
 --
--- >>> mkPrintCase False (Rule "EInt" (CoercCat "Expr" 2) [Left (TokenCat "Integer")])
--- EInt n -> prPrec i 2 (concatD [prt 0 n])
+-- >>> mkPrintCase "Abs" False (Rule "EInt" (CoercCat "Expr" 2) [Left (TokenCat "Integer")])
+-- Abs.EInt n -> prPrec i 2 (concatD [prt 0 n])
 --
--- >>> mkPrintCase False (Rule "EPlus" (CoercCat "Expr" 1) [Left (Cat "Expr"), Right "+", Left (Cat "Expr")])
--- EPlus expr1 expr2 -> prPrec i 1 (concatD [prt 0 expr1, doc (showString "+"), prt 0 expr2])
+-- >>> mkPrintCase "Abs" False (Rule "EPlus" (CoercCat "Expr" 1) [Left (Cat "Expr"), Right "+", Left (Cat "Expr")])
+-- Abs.EPlus expr1 expr2 -> prPrec i 1 (concatD [prt 0 expr1, doc (showString "+"), prt 0 expr2])
 --
 -- If the AST is a functor, ignore first argument.
 --
--- >>> mkPrintCase True (Rule "EInt" (CoercCat "Expr" 2) [Left (TokenCat "Integer")])
--- EInt _ n -> prPrec i 2 (concatD [prt 0 n])
+-- >>> mkPrintCase "Abs" True (Rule "EInt" (CoercCat "Expr" 2) [Left (TokenCat "Integer")])
+-- Abs.EInt _ n -> prPrec i 2 (concatD [prt 0 n])
 --
 -- Skip internal categories.
 --
--- >>> mkPrintCase True (Rule "EInternal" (Cat "Expr") [Left InternalCat, Left (Cat "Expr")])
--- EInternal _ expr -> prPrec i 0 (concatD [prt 0 expr])
+-- >>> mkPrintCase "Abs" True (Rule "EInternal" (Cat "Expr") [Left InternalCat, Left (Cat "Expr")])
+-- Abs.EInternal _ expr -> prPrec i 0 (concatD [prt 0 expr])
 --
-mkPrintCase :: Bool -> Rule -> Doc
-mkPrintCase functor (Rule f cat rhs) =
+mkPrintCase :: AbsMod -> Bool -> Rule -> Doc
+mkPrintCase absMod functor (Rule f cat rhs) =
     pattern <+> "->"
     <+> "prPrec i" <+> integer (precCat cat) <+> parens (mkRhs (map render variables) rhs)
   where
@@ -252,7 +280,7 @@
     pattern
       | isOneFun  f = text "[" <+> head variables <+> "]"
       | isConsFun f = hsep $ intersperse (text ":") variables
-      | otherwise   = text f <+> (if functor then "_" else empty) <+> hsep variables
+      | otherwise   = text (qualify absMod f) <+> (if functor then "_" else empty) <+> hsep variables
     -- Creating variables names used in pattern matching. In addition to
     -- haskell's reserved words, `e` and `i` are used in the printing function
     -- and should be avoided
diff --git a/src/BNFC/Backend/Haskell/HsOpts.hs b/src/BNFC/Backend/Haskell/HsOpts.hs
--- a/src/BNFC/Backend/Haskell/HsOpts.hs
+++ b/src/BNFC/Backend/Haskell/HsOpts.hs
@@ -11,20 +11,22 @@
 alex1 opts = alexMode opts == Alex1
 
 absFile, absFileM,
- alexFile, alexFileM,
+ alexFile, alexFileHs, alexFileM,
  composOpFile, composOpFileM,
  gfAbs,
- happyFile, happyFileM,
+ happyFile, happyFileHs, happyFileM,
  errFile, errFileM,
  templateFile, templateFileM,
  printerFile, printerFileM,
  layoutFile, layoutFileM,
- tFile :: Options -> String
+ tFile, tFileExe :: Options -> String
 absFile       = mkFile withLang "Abs" "hs"
 absFileM      = mkMod  withLang "Abs"
 alexFile      = mkFile withLang "Lex" "x"
+alexFileHs    = mkFile withLang "Lex" "hs"
 alexFileM     = mkMod  withLang "Lex"
 happyFile     = mkFile withLang "Par" "y"
+happyFileHs   = mkFile withLang "Par" "hs"
 happyFileM    = mkMod  withLang "Par"
 txtFile       = mkFile withLang "Doc" "txt"
 templateFile  = mkFile withLang "Skel" "hs"
@@ -33,18 +35,49 @@
 printerFileM  = mkMod  withLang "Print"
 gfAbs         = mkFile withLang "" "Abs.gf"
 tFile         = mkFile withLang "Test" "hs"
+tFileExe      = mkFile withLang "Test" ""
 errFile       = mkFile noLang   "ErrM" "hs"
 errFileM      = mkMod  noLang   "ErrM"
 shareFile     = mkFile noLang   "SharedString" "hs"
 shareFileM    = mkMod  noLang   "SharedString"
 layoutFileM   = mkMod  withLang "Layout"
 layoutFile    = mkFile withLang "Layout" "hs"
-cnfTablesFile = mkFile withLang "CnfTables" "hs"
-cnfTablesFileM= mkMod  withLang "CnfTables"
 xmlFile       = mkFile withLang "XML" "hs"
 xmlFileM      = mkMod  withLang "XML"
 composOpFile  = mkFile noLang   "ComposOp" "hs"
-composOpFileM = mkMod noLang    "ComposOp"
+composOpFileM = mkMod  noLang   "ComposOp"
+
+-- Files created by the CNF variant
+
+cnfTablesFile, cnfTablesFileM
+  , cnfTestFile, cnfTestFileExe
+  , cnfBenchFile
+  :: Options -> String
+cnfTablesFile  = mkFile withLang "CnfTables" "hs"
+cnfTablesFileM = mkMod  withLang "CnfTables"
+cnfTestFile    = mkFile withLang "Test" "hs"  -- WAS: TestCNF, but just naming it Test is easier for testsuite
+cnfTestFileExe = mkFile withLang "Test" ""
+cnfBenchFile   = mkFile withLang "BenchCNF" "hs"
+
+-- Files created by the Agda backend
+
+agdaASTFile
+  , agdaASTFileM
+  , agdaParserFile
+  , agdaParserFileM
+  , agdaLibFile
+  , agdaLibFileM
+  , agdaMainFile
+  , agdaMainFileM
+ :: Options -> String
+agdaASTFile     = mkFile withLang "AST" "agda"
+agdaASTFileM    = mkMod  withLang "AST"
+agdaParserFile  = mkFile withLang "Parser" "agda"
+agdaParserFileM = mkMod  withLang "Parser"
+agdaLibFile     = mkFile noLang   "IOLib" "agda"
+agdaLibFileM    = mkMod  noLang   "IOLib"
+agdaMainFile    = mkFile noLang   "Main" "agda"
+agdaMainFileM   = mkMod  noLang   "Main"
 
 
 noLang :: Options -> String -> String
diff --git a/src/BNFC/Backend/Haskell/MkErrM.hs b/src/BNFC/Backend/Haskell/MkErrM.hs
--- a/src/BNFC/Backend/Haskell/MkErrM.hs
+++ b/src/BNFC/Backend/Haskell/MkErrM.hs
@@ -37,6 +37,8 @@
     , "-- the Error monad: like Maybe type with error msgs"
     , ""
     , "import Control.Monad (MonadPlus(..), liftM)"
+    -- From ghc-8.0 on, Applicative(..) is part of the Prelude,
+    -- thus, need not be imported:
     , if ghc then "#if __GLASGOW_HASKELL__ < 710" else empty
     , "import Control.Applicative (Applicative(..), Alternative(..))"
     , if ghc then "#else" else empty
@@ -48,9 +50,18 @@
     , ""
     , "instance Monad Err where"
     , "  return      = Ok"
-    , "  fail        = Bad"
     , "  Ok a  >>= f = f a"
     , "  Bad s >>= _ = Bad s"
+    -- From ghc-8.8 on, fail is no longer part of Monad.
+    -- Thus, by default, we do not add it.
+    -- Only if --ghc, we add it either to Monad or MonadFail.
+    , if ghc then "#if __GLASGOW_HASKELL__ < 808" else empty
+    , if ghc then "  fail        = Bad" else empty
+    , if ghc then "#else" else empty
+    , if ghc then "" else empty
+    , if ghc then "instance MonadFail Err where" else empty
+    , if ghc then "  fail = Bad" else empty
+    , if ghc then "#endif" else empty
     , ""
     , "instance Applicative Err where"
     , "  pure = Ok"
diff --git a/src/BNFC/Backend/Haskell/ToCNF.hs b/src/BNFC/Backend/Haskell/ToCNF.hs
--- a/src/BNFC/Backend/Haskell/ToCNF.hs
+++ b/src/BNFC/Backend/Haskell/ToCNF.hs
@@ -37,7 +37,9 @@
 import Control.Applicative hiding (Const)
 #endif
 import qualified Data.Map as M
+#if !(MIN_VERSION_base(4,11,0))
 import Data.Monoid
+#endif
 import Data.Pair
 import Text.PrettyPrint.HughesPJ hiding (first,(<>))
 
@@ -45,21 +47,24 @@
 
 incomment x = "{-" <> x <> "-}"
 
-generate opts cf0 = render $ vcat [header opts
-                                  ,genShowFunction cf0
-                                  ,genCatTags cf1
-                                  ,genDesc cf1 descriptions
-                                  ,genNeighborSet neighbors
-                                  ,genCombTable units (onRules (filter (not . isUnitRule)) cf)
-                                  ,genTokTable units cf
-                                  ,incomment $ vcat
-                                   ["Normalised grammar:"
-                                   ,text $ show cf
-                                   ,"Unit relation:"
-                                   ,prettyUnitSet units
-                                   ]
-                                  ]
-  where (cf1,cf,units,descriptions,neighbors) = toCNF cf0
+generate :: Options -> CF -> Doc
+generate opts cf0 = vcat $
+  [ header opts
+  , genShowFunction cf0
+  , genCatTags cf1
+  , genDesc cf1 descriptions
+  , genNeighborSet neighbors
+  , genCombTable units $ onRules (filter (not . isUnitRule)) cf
+  , genTokTable units cf
+  , incomment $ vcat $
+    [ "Normalised grammar:"
+    , text $ show cf
+    , "Unit relation:"
+    , prettyUnitSet units
+    ]
+  ]
+  where
+  (cf1, cf, units, descriptions, neighbors) = toCNF cf0
 
 class Pretty a where
   pretty :: a -> Doc
@@ -74,146 +79,200 @@
 instance Pretty String where
   pretty = text
 
-prettyUnitSet units = vcat [prettyExp f <> " : " <> catTag cat <> " --> " <> text (show cat') | (cat,x) <- M.assocs units, (f,cat') <- x]
-
-header opts
-       = vcat ["{-# LANGUAGE MagicHash, FlexibleInstances #-}"
-              ,"module " <> text (cnfTablesFileM opts) <> " where"
-              ,"import GHC.Prim"
-              ,"import Control.Applicative hiding (Const)"
-              ,"import Algebra.RingUtils"
-              ,"import Parsing.Chart ()"
-              ,"import " <> text (absFileM  opts)
-              ,"import " <> text (alexFileM opts)
-              ,"import " <> text ( printerFileM  opts)
-              ,"readInteger :: String -> Integer"
-              ,"readInteger = read"
-              ,"readDouble :: String -> Double"
-              ,"readDouble = read"
-              ,"instance RingP [(CATEGORY,Any)] where"
-              ,"  mul p a b = trav [map (app tx ty) l :/: map (app tx ty) r | (x,tx) <- a, (y,ty) <- b, let l:/:r = combine p x y]"
-              ,"    where trav :: [Pair [a]] -> Pair [a]"
-              ,"          trav [] = pure []"
-              ,"          trav (x:xs) = (++) <$> x <*> trav xs"
-              ,"          app tx ty (z,f)  = (z, f tx ty)"
-              ]
+prettyUnitSet units = vcat $
+  [ prettyExp f <> " : " <> catTag cat <> " --> " <> text (show cat')
+  | (cat, x)  <- M.assocs units
+  , (f, cat') <- x
+  ]
 
-genShowFunction cf = hang "showAst (cat,ast) = case cat of " 6
-       (vcat [catTag (Left cat) <> " -> printTree ((unsafeCoerce# ast)::" <> text (show cat) <> ")"
-             | cat <- filter isDataCat $ allCats cf] $$
-        "_ -> \"Unprintable category\"")
+header opts = vcat $
+  [ "{-# LANGUAGE MagicHash, FlexibleInstances #-}"
+  , ""
+  , "module " <> text (cnfTablesFileM opts) <> " where"
+  , ""
+  , "import GHC.Prim"
+  , "import Control.Applicative hiding (Const)"
+  , ""
+  , "import Algebra.RingUtils"
+  , "import Parsing.Chart ()"
+  , ""
+  , "import " <> text (absFileM  opts)
+  , "import " <> text (alexFileM opts)
+  , "import " <> text ( printerFileM  opts)
+  , ""
+  , "readInteger :: String -> Integer"
+  , "readInteger = read"
+  , ""
+  , "readDouble :: String -> Double"
+  , "readDouble = read"
+  , ""
+  , "instance RingP [(CATEGORY,a)] where"
+  , "  mul p a b = trav [ map (app tx ty) l :/: map (app tx ty) r | (x, tx) <- a, (y, ty) <- b, let l:/:r = combine p x y ]"
+  , "    where "
+  , "    trav :: [Pair [a]] -> Pair [a]"
+  , "    trav []     = pure []"
+  , "    trav (x:xs) = (++) <$> x <*> trav xs"
+  , "    app tx ty (z, f)  = (z, f tx ty)"
+  , ""
+  ]
 
+genShowFunction cf =
+  hang "showAst (cat, ast) = case cat of " 6 $ vcat $
+    [ vcat
+      [ hsep [ catTag (Left cat), "->", "printTree", parens ("(unsafeCoerce# ast) ::" <+> text (show cat)) ]
+      | cat <- filter isDataCat $ allCats cf
+      ]
+    , "_ -> \"Unprintable category\""
+    ]
 
 genCatTags :: CFG Exp -> Doc
-genCatTags cf = "data CATEGORY = " <> punctuate' "|" (map catTag (allSyms cf)) $$
-                "  deriving (Eq,Ord,Show)"
+genCatTags cf = vcat
+  [ "data CATEGORY = " <> punctuate' "|" (map catTag (allSyms cf))
+  , "  deriving (Eq, Ord, Show)"
+  ]
 
 genDesc :: CFG Exp -> CatDescriptions -> Doc
-genDesc cf descs = vcat ["describe " <> catTag s <> " = " <> text (show (descOf s)) | s <- allSyms cf]
-  where descOf :: Either Cat String -> String
-        descOf (Right x) = "token " <> x
-        descOf (Left x) = maybe (show x) render $ M.lookup x descs
+genDesc cf descs = vcat $
+  [ "describe " <> catTag s <> " = " <> text (show (descOf s))
+  | s <- allSyms cf
+  ]
+  where
+  descOf :: Either Cat String -> String
+  descOf (Right x) = "token " <> x
+  descOf (Left  x) = maybe (show x) render $ M.lookup x descs
 
 genCombTable :: UnitRel Cat -> CFG Exp -> Doc
-genCombTable units cf =
-     "combine :: Bool -> CATEGORY -> CATEGORY -> Pair [(CATEGORY, Any -> Any -> Any)]"
-  $$ genCombine units cf
-  $$ "combine _ _ _ = pure []"
+genCombTable units cf = vcat
+  [ "combine :: Bool -> CATEGORY -> CATEGORY -> Pair [(CATEGORY, a -> a -> a)]"
+  , genCombine units cf
+  , "combine _ _ _ = pure []"
+  ]
 
 allSyms :: CFG Exp -> [Either Cat String]
-allSyms cf = map Left (allCats cf  ++ literals cf) ++ map (Right . fst) (cfTokens cf)
-
+allSyms cf = concat $
+  [ map Left $ allCats cf
+  , map (Left . TokenCat) $ literals cf
+  , map (Right . fst) $ cfTokens cf
+  ]
 
-ppPair (x,y) = parens $ x <> comma <> " " <> y
+ppPair (x, y) = parens $ hsep [ x <> comma, y ]
 
 unsafeCoerce' = app' (Con "unsafeCoerce#")
 
+prettyPair (x :/: y) = sep [ x, ":/:", y ]
 
-prettyPair (x :/: y) = sep [x,":/:",y]
 prettyListFun xs = parens $ sep (map (<> "$") xs) <> "[]"
 
 
 genCombine :: UnitRel Cat -> CFG Exp -> Doc
 genCombine units cf = vcat $ map genEntry $ group' $ map (alt units) (cfgRules cf)
-  where genEntry :: ((RHSEl,RHSEl),[(Cat,Exp)]) -> Doc
-        genEntry ((r1,r2),cs) = "combine p " <> catTag r1 <> " " <> catTag r2 <> " = " <> prettyPair (genList <$> splitOptim (Left . fst) cf cs)
-        mkLam body = "\\x y -> " <> body
-        genList xs = prettyListFun [p (ppPair (catTag . Left $ x, mkLam . prettyExp . unsafeCoerce' $ y)) | ((x,y),p) <- xs]
+  where
+  genEntry :: ((RHSEl,RHSEl),[(Cat,Exp)]) -> Doc
+  genEntry ((r1,r2),cs) = hsep $
+    [ "combine p", catTag r1, catTag r2, equals
+    , prettyPair (genList <$> splitOptim (Left . fst) cf cs)
+    ]
+  mkLam body = "\\ x y -> " <> body
+  genList xs = prettyListFun $
+    [ p $ ppPair (catTag . Left $ x, mkLam . prettyExp . unsafeCoerce' $ y)
+    | ((x, y), p) <- xs
+    ]
 
 alt :: UnitRel Cat -> Rul Exp -> ((RHSEl,RHSEl),[(Cat,Exp)])
-alt units (Rule f c [r1,r2]) = ((r1,r2),initial:others)
-  where initial = (c, f `appMany` args)
-        others = [(c', f' `app'` (f `appMany` args)) | (f',c') <- lookupMulti (Left c) units]
-        args = map (unsafeCoerce' . Con) $ ["x"|isCat r1]++["y"|isCat r2]
+alt units (Rule f c [r1, r2]) = ((r1, r2), initial:others)
+  where
+  initial = (c, f `appMany` args)
+  others  = [ (c', f' `app'` (f `appMany` args))
+            | (f',c') <- lookupMulti (Left c) units
+            ]
+  args    = map (unsafeCoerce' . Con) $ [ "x" | isCat r1 ] ++ [ "y" | isCat r2 ]
 alt _ _ = error "Only works with binary rules"
 
 
 
 genTokTable :: UnitRel Cat -> CFG Exp -> Doc
-genTokTable units cf = "tokenToCats :: Bool -> Token -> Pair [(CATEGORY,Any)]" $$
-                       vcat (map (genSpecEntry cf units) (tokInfo cf)) $$
-                       vcat (map (genTokEntry cf units) (cfTokens cf)) $$
-                       "tokenToCats p t = error (\"unknown token: \" ++ show t)"
+genTokTable units cf = vcat
+  [ "tokenToCats :: Bool -> Token -> Pair [(CATEGORY,a)]"
+  , vcat $ map (genSpecEntry cf units) $ tokInfo  cf
+  , vcat $ map (genTokEntry  cf units) $ cfTokens cf
+  , "tokenToCats p t = error (\"unknown token: \" ++ show t)"
+  ]
 
-tokInfo cf = (catChar,"TC",Con "head"):
-             (catString,"TL",Id):
-             (catInteger,"TI",Con "readInteger"):
-             (catDouble,"TD",Con "readDouble"):
-             [(catIdent,"TV",Con "Ident")|hasIdent cf] ++
-             [(t,"T_" <> text (show t),(Con (show t))) | (t,_) <- tokenPragmas cf]
+tokInfo cf = concat $
+  [ [ (catChar   , "TC", Con "head")
+    , (catString , "TL", Id)
+    , (catInteger, "TI", Con "readInteger")
+    , (catDouble , "TD", Con "readDouble")
+    ]
+  , [ (catIdent,"TV", Con "Ident") | hasIdent cf ]
+  , [ (t, "T_" <> text t, Con t)   | (t, _) <- tokenPragmas cf ]
+  ]
 
 genTokCommon cf xs = prettyPair (gen <$> splitOptim fst cf xs)
-  where gen ys = prettyListFun [p (ppPair (catTag x,y)) | ((x,y),p) <- ys]
+  where gen ys = prettyListFun [ p (ppPair (catTag x, y)) | ((x, y), p) <- ys ]
 
-genSpecEntry cf units (tokName,constrName,fun) = "tokenToCats p (PT (Pn _ l c) (" <> constrName <> " x)) = " <> genTokCommon cf xs
-  where xs = map (second (prettyExp . (\f -> unsafeCoerce' (f `app'` tokArgs)))) $
-             (Left tokName, fun) : [(Left c,f `after` fun) | (f,c) <- lookupMulti (Left tokName) units]
-        tokArgs | isPositionCat cf tokName = Con "((l,c),x)"
-                | otherwise = Con "x"
+genSpecEntry cf units (tokName, constrName, fun) =
+    "tokenToCats p (PT (Pn _ l c) (" <> constrName <> " x)) = " <> genTokCommon cf xs
+  where
+  xs = map (second (prettyExp . (\ f -> unsafeCoerce' (f `app'` tokArgs)))) $
+         (Left $ TokenCat tokName, fun) : [ (Left c, f `after` fun) | (f, c) <- lookupMulti (Left $ TokenCat tokName) units ]
+  tokArgs | isPositionCat cf tokName = Con "((l, c), x)"
+          | otherwise                = Con "x"
 
 genTokEntry cf units (tok,x) =
   " -- " <> text tok $$
   "tokenToCats p (PT posn (TS _ " <> int x <> ")) = " <> genTokCommon cf xs
-  where xs = (Right tok, tokVal) :
-             [(Left c,prettyExp (unsafeCoerce' f)) | (f,c) <- lookupMulti (Right tok) units]
-        tokVal = "error" <> (text $ show $ "cannot access value of token: " ++ tok)
+  where
+  xs = (Right tok, tokVal) :
+         [ (Left c, prettyExp (unsafeCoerce' f)) | (f, c) <- lookupMulti (Right tok) units ]
+  tokVal = "error" <> (text $ show $ "cannot access value of token: " ++ tok)
 
 ppList = brackets . punctuate' ", "
 
-genNeighborSet ns = vcat
-              ["neighbors " <> catTag x <> " = " <> ppList (map catTag y)
-              | (x,y) <- ns] $$
-               "neighbors _ = []"
+genNeighborSet ns = vcat $
+  [ vcat [ hsep [ "neighbors", catTag x, equals, ppList (map catTag y) ] | (x, y) <- ns ]
+  , "neighbors _ = []"
+  ]
 
 ------------------------
 -- Test file generation
 
-genTestFile opts _ = render $ vcat
-    ["module Main where"
-    ,"import " <> text ( alexFileM     opts)
-    ,"import " <> text ( cnfTablesFileM opts)
-    ,"import Parsing.TestProgram"
-    ,"main = mainTest showAst tokenToCats tokens tokenLineCol describe neighbors"]
+genTestFile :: Options -> CF -> Doc
+genTestFile opts _ = vcat $
+  [ "module Main where"
+  , ""
+  , "import Parsing.TestProgram"
+  , "import" <+> text (alexFileM      opts)
+  , "import" <+> text (cnfTablesFileM opts)
+  , ""
+  , "main = mainTest showAst tokenToCats tokens tokenLineCol describe neighbors"
+  ]
 
 
-genBenchmark opts = render $ vcat
-   ["import System.Environment ( getArgs )"
-   ,"import "<> text ( alexFileM opts) <> " as Lexer"
-   ,"import "<> text ( cnfTablesFileM opts) <> " as Parser"
-   ,"import GHC.Exts"
-   ,"import Parsing.Chart"
-   ,"import Criterion.Main"
-   ,"import Algebra.RingUtils"
-   ,"import Control.Applicative"
-   ,"type T = [(CATEGORY,Any)]"
-   ,"pLGrammar :: [Pair T] -> MT2 T"
-   ,"pLGrammar = mkTree"
-   ,"main = do"
-   ,"  f:_ <- getArgs"
-   ,"  s <- readFile f"
-   ,"  let ts = zipWith tokenToCats (cycle [False,True]) (Lexer.tokens s)"
-   ,"      (ts1,x:ts2) = splitAt (length ts `div` 2) ts"
-   ,"      cs = [mkTree ts1,mkTree' ts2]"
-   ,"      work [c1,c2] = show $ map fst $ root $ mergein False c1 x c2"
-   ,"  defaultMain [bench f $ nf work cs] -- note the hack!!!"
+genBenchmark opts = vcat $
+   [ "import Control.Applicative"
+   , "import GHC.Exts"
+   , "import System.Environment ( getArgs )"
+   , ""
+   , "import Criterion.Main"
+   , ""
+   , "import Algebra.RingUtils"
+   , "import Parsing.Chart"
+   , ""
+   , "import" <+> text (alexFileM opts)      <+> "as Lexer"
+   , "import" <+> text (cnfTablesFileM opts) <+> "as Parser"
+   , ""
+   , "type T = [(CATEGORY,a)]"
+   , ""
+   , "pLGrammar :: [Pair T] -> MT2 T"
+   , "pLGrammar = mkTree"
+   , ""
+   , "main = do"
+   , "  f:_ <- getArgs"
+   , "  s   <- readFile f"
+   , "  let ts            = zipWith tokenToCats (cycle [False, True]) (Lexer.tokens s)"
+   , "      (ts1, x:ts2)  = splitAt (length ts `div` 2) ts"
+   , "      cs            = [mkTree ts1, mkTree' ts2]"
+   , "      work [c1, c2] = show $ map fst $ root $ mergein False c1 x c2"
+   , "  defaultMain [bench f $ nf work cs] -- note the hack!!!"
    ]
diff --git a/src/BNFC/Backend/Haskell/Utils.hs b/src/BNFC/Backend/Haskell/Utils.hs
--- a/src/BNFC/Backend/Haskell/Utils.hs
+++ b/src/BNFC/Backend/Haskell/Utils.hs
@@ -9,19 +9,23 @@
 
 import Prelude'
 
-import Text.PrettyPrint
+import BNFC.PrettyPrint
 import BNFC.CF (Cat(..), identCat, normCat)
 import BNFC.Utils (mkNames, NameStyle(..))
 
--- | Create a valid parser function name for a given category
+-- | Create a valid parser function name for a given category.
+--
 -- >>> parserName (Cat "Abcd")
 -- pAbcd
+--
 -- >>> parserName (ListCat (Cat "Xyz"))
 -- pListXyz
+--
 parserName :: Cat -> Doc
 parserName = ("p" <>) . text . identCat
 
--- | Haskell's reserved words
+-- | Haskell's reserved words.
+--
 hsReservedWords :: [String]
 hsReservedWords =
     [ "as"
@@ -32,6 +36,7 @@
     , "deriving"
     , "do"
     , "else"
+    , "foreign"
     , "hiding"
     , "if"
     , "import"
@@ -51,7 +56,8 @@
     ]
 
 
--- | Render a category from the grammar to a Haskell type
+-- | Render a category from the grammar to a Haskell type.
+--
 -- >>> catToType Nothing (Cat "A")
 -- A
 -- >>> catToType Nothing (ListCat (Cat "A"))
@@ -59,8 +65,7 @@
 -- >>> catToType Nothing (TokenCat "Ident")
 -- Ident
 --
--- Note that there is no haskell type for coerced categories: they should be
--- normalized
+-- Note that there is no haskell type for coerced categories: they should be normalized:
 -- >>> catToType Nothing (CoercCat "Expr" 2)
 -- Expr
 --
@@ -83,42 +88,48 @@
 --
 -- >>> catToType (Just "()") (ListCat (CoercCat "Exp" 2))
 -- [Exp ()]
+--
 catToType :: Maybe Doc -> Cat -> Doc
-catToType param cat = maybeParens $ catToType' param cat
+catToType param cat = parensIf isApp $ catToType' param cat
   where
-    maybeParens = case (param,cat) of
-        (Just _, Cat _) -> parens
-        _ -> id
+    isApp = case (param, cat) of
+        (Just _, Cat _) -> True
+        _ -> False
     catToType' _ InternalCat = error "Can't create a haskell type for internal category"
-    catToType' Nothing c = text $ show $ normCat c
-    catToType' (Just p) (Cat c) = text c <+> p
+    catToType' Nothing  c              = text $ show $ normCat c
+    catToType' (Just p) (Cat c)        = text c <+> p
     catToType' (Just p) (CoercCat c _) = text c <+> p
-    catToType' (Just _) (TokenCat c) = text c
-    catToType' (Just p) (ListCat c) = lbrack <> catToType' (Just p) c <> rbrack
+    catToType' (Just _) (TokenCat c)   = text c
+    catToType' (Just p) (ListCat c)    = brackets $ catToType' (Just p) c
 
 
--- | gives you a list of variables usable for pattern matching.
--- Ex: if you have the rule Aba. S ::= A B A ; with the generated data type
+-- | Gives a list of variables usable for pattern matching.
+--
+-- Example: Given the rule @Aba. S ::= A B A ;@ with the generated data type
+-- @
 --   data S = Aba A B A
--- Given the lit of categories in the RHS of the rule (A B A), we generate the
+-- @
+-- from the list of categories on the RHS of the rule [A,B,A], we generate the
 -- list [a1,b,a2] to be used in a pattern matching like
--- case s of
+-- @
+--   case s of
 --     Aba a1 b a2 -> ...
 --     ...
+-- @
 --
 -- >>> catvars [Cat "A", Cat "B", Cat "A"]
 -- [a1,b,a2]
 --
--- It should avoid reserved words
+-- It should avoid reserved words:
 -- >>> catvars [Cat "IF", Cat "Case", Cat "Type", Cat "If"]
 -- [if_1,case_,type_,if_2]
 --
--- It uses an -s to mark lists:
+-- It uses a suffix -s to mark lists:
 -- >>> catvars [Cat "A", ListCat (Cat "A"), ListCat (ListCat (Cat "A"))]
 -- [a,as_,ass]
+--
 catvars :: [Cat] -> [Doc]
 catvars = map text . mkNames hsReservedWords LowerCase . map var
   where
     var (ListCat c) = var c ++ "s"
     var xs          = show xs
-
diff --git a/src/BNFC/Backend/HaskellGADT.hs b/src/BNFC/Backend/HaskellGADT.hs
--- a/src/BNFC/Backend/HaskellGADT.hs
+++ b/src/BNFC/Backend/HaskellGADT.hs
@@ -67,7 +67,7 @@
         mkfile (alexFile opts) $ cf2alex3 lexMod errMod shareMod (shareStrings opts) (byteStrings opts) cf
         liftIO $ putStrLn "   (Use Alex 3.0 to compile.)"
     mkfile (happyFile opts) $
-      cf2HappyS parMod absMod lexMod errMod (glr opts) (byteStrings opts) False cf
+      cf2Happy parMod absMod lexMod errMod (glr opts) (byteStrings opts) False cf
     liftIO $ putStrLn "   (Tested with Happy 1.15)"
     mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod errMod cf
     mkfile (printerFile opts)  $ cf2Printer False False True prMod absMod cf
diff --git a/src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs b/src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs
--- a/src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs
+++ b/src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs
@@ -17,6 +17,8 @@
     Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
 -}
 
+{-# LANGUAGE PatternGuards #-}
+
 module BNFC.Backend.HaskellGADT.CFtoAbstractGADT (cf2Abstract) where
 
 import BNFC.CF
@@ -68,15 +70,19 @@
 mkRealType cat = cat ++ "_" -- FIXME: make sure that there is no such category already
 
 prTreeType :: Bool -> CF -> [String]
-prTreeType byteStrings cf = "data Tree :: Tag -> * where" : map (("    "++) . prTreeCons) (cf2cons cf)
- where
- prTreeCons c
-      | isPositionCat cf cat = fun +++ ":: ((Int,Int),"++stringType++") -> Tree" +++ mkRealType (show cat)
-      | otherwise = fun +++ "::" +++ concat [show c +++ "-> " | (c,_) <- consVars c] ++ "Tree" +++ mkRealType (show cat)
-  where (cat,fun) = (consCat c, consFun c)
-        stringType
-          | byteStrings = "BS.ByteString"
-          | otherwise   = "String"
+prTreeType byteStrings cf =
+  "data Tree :: Tag -> * where" : map (("    " ++) . prTreeCons) (cf2cons cf)
+  where
+  prTreeCons c
+      | TokenCat tok <- cat, isPositionCat cf tok =
+          fun +++ ":: ((Int,Int),"++stringType++") -> Tree" +++ mkRealType tok
+      | otherwise =
+          fun +++ "::" +++ concat [show c +++ "-> " | (c,_) <- consVars c] ++ "Tree" +++ mkRealType (show cat)
+    where
+    (cat,fun) = (consCat c, consFun c)
+    stringType
+      | byteStrings = "BS.ByteString"
+      | otherwise   = "String"
 
 prCompos :: CF -> [String]
 prCompos cf =
diff --git a/src/BNFC/Backend/HaskellGADT/HaskellGADTCommon.hs b/src/BNFC/Backend/HaskellGADT/HaskellGADTCommon.hs
--- a/src/BNFC/Backend/HaskellGADT/HaskellGADTCommon.hs
+++ b/src/BNFC/Backend/HaskellGADT/HaskellGADTCommon.hs
@@ -39,7 +39,7 @@
         , consVars = zip cats (mkVars cats), consRhs = rhsFun cf fun
         } | (cat,rules) <- cf2data cf, (fun,cats) <- rules]
     ++ [ Constructor
-        { consCat = cat, consFun = show cat, consPrec = 0
+        { consCat = TokenCat cat, consFun = cat, consPrec = 0
         , consVars = [(Cat "String","str")], consRhs = [Left (Cat "String")]
         } | cat <- specialCats cf]
   where
@@ -57,7 +57,7 @@
         var (Cat "String")  = "str"
         var (Cat "Char")    = "c"
         var (Cat "Double")  = "d"
-        var xs        = map toLower $show xs
+        var xs        = map toLower $ show xs
         checkRes s |  s `elem` reservedHaskell = s ++ "'"
                    | otherwise              = s
         reservedHaskell =
@@ -78,5 +78,7 @@
 rhsFun cf f = rhsRule $ ruleFun cf f
 
 isTreeType :: CF -> Cat -> Bool
-isTreeType cf c | isList c  = isTreeType cf (catOfList c)
-                | otherwise = c `elem` (allCats cf ++ specialCats cf)
+isTreeType cf (TokenCat c) = c `elem` specialCats cf
+isTreeType cf c
+  | isList c  = isTreeType cf (catOfList c)
+  | otherwise = c `elem` allCats cf
diff --git a/src/BNFC/Backend/HaskellProfile.hs b/src/BNFC/Backend/HaskellProfile.hs
--- a/src/BNFC/Backend/HaskellProfile.hs
+++ b/src/BNFC/Backend/HaskellProfile.hs
@@ -197,4 +197,4 @@
                  "    _   -> do progName <- getProgName",
                  "              putStrLn $ progName ++ \": excess arguments.\""
                  ]
-                  where firstParser = 'p' : show (firstEntry cf)
+                  where firstParser = 'p' : identCat (firstEntry cf)
diff --git a/src/BNFC/Backend/HaskellProfile/CFtoHappyProfile.hs b/src/BNFC/Backend/HaskellProfile/CFtoHappyProfile.hs
--- a/src/BNFC/Backend/HaskellProfile/CFtoHappyProfile.hs
+++ b/src/BNFC/Backend/HaskellProfile/CFtoHappyProfile.hs
@@ -185,27 +185,21 @@
 
 -- GF literals
 specialToks :: CFP -> String
-specialToks cf = unlines (map aux (literals cf))
-  where aux cat = case cat of
-            Cat "Ident"  -> "L_ident  { PT _ (TV $$) }"
-            Cat "String" -> "L_quoted { PT _ (TL $$) }"
-            Cat "Integer" -> "L_integ  { PT _ (TI $$) }"
-            Cat "Double" -> "L_doubl  { PT _ (TD $$) }"
-            Cat "Char"   -> "L_charac { PT _ (TC $$) }"
-            own      -> "L_" ++ show own ++ " { PT _ (T_" ++ show own ++ " " ++ posn ++ ") }"
-          where posn = if isPositionCat cf cat then "_" else "$$"
+specialToks cf = unlines . (`map` literals cf) $ \case
+  "Ident"   -> "L_ident  { PT _ (TV $$) }"
+  "String"  -> "L_quoted { PT _ (TL $$) }"
+  "Integer" -> "L_integ  { PT _ (TI $$) }"
+  "Double"  -> "L_doubl  { PT _ (TD $$) }"
+  "Char"    -> "L_charac { PT _ (TC $$) }"
+  own       -> "L_" ++ own ++ " { PT _ (T_" ++ own ++ " " ++ posn ++ ") }"
+    where posn = if isPositionCat cf own then "_" else "$$"
 
 specialRules :: CFP -> String
-specialRules cf = unlines $
-                  map aux (literals cf)
- where
-   aux cat =
-     case cat of
-         Cat "Ident"   -> "Ident   : L_ident  { mkAtTree (AV (Ident $1)) }"
-         Cat "String"  -> "String  : L_quoted { mkAtTree (AS $1) }"
-         Cat "Integer" -> "Integer : L_integ  { mkAtTree (AI ((read $1) :: Integer)) }"
-         Cat "Double"  -> "Double  : L_doubl  { (read $1) :: Double }" ----
-         Cat "Char"    -> "Char    : L_charac { (read $1) :: Char }"   ----
-         own       -> show own ++ "    : L_" ++ show own ++ " { " ++ show own ++ " ("++ posn ++ "$1)}"
-      where
-         posn = if isPositionCat cf cat then "mkPosToken " else ""
+specialRules cf = unlines . (`map` literals cf) $ \case
+  "Ident"   -> "Ident   : L_ident  { mkAtTree (AV (Ident $1)) }"
+  "String"  -> "String  : L_quoted { mkAtTree (AS $1) }"
+  "Integer" -> "Integer : L_integ  { mkAtTree (AI ((read $1) :: Integer)) }"
+  "Double"  -> "Double  : L_doubl  { (read $1) :: Double }"
+  "Char"    -> "Char    : L_charac { (read $1) :: Char }"
+  own       -> concat [ own , " : L_" , own , " { " , own , " (" , posn , "$1)}" ]
+    where posn = if isPositionCat cf own then "mkPosToken " else ""
diff --git a/src/BNFC/Backend/Java.hs b/src/BNFC/Backend/Java.hs
--- a/src/BNFC/Backend/Java.hs
+++ b/src/BNFC/Backend/Java.hs
@@ -139,8 +139,8 @@
     lexmake      = makelexerdetails  (lexer parselexspec)
     rp           = (Options.linenumbers options)
 
-makefile ::  FilePath -> FilePath -> [String] -> ParserLexerSpecification -> Doc
-makefile  dirBase dirAbsyn absynFileNames jlexpar = vcat $
+makefile ::  FilePath -> FilePath -> [String] -> ParserLexerSpecification -> String -> Doc
+makefile  dirBase dirAbsyn absynFileNames jlexpar basename = vcat $
     makeVars [  ("JAVAC", "javac"),
                 ("JAVAC_FLAGS", "-sourcepath ."),
                 ( "JAVA", "java"),
@@ -211,8 +211,10 @@
                       , "Test.java"
                       ]
                     ++ dotJava (results parmake)
-                    ++ ["*.class"])
-        , " rm -f Makefile"
+                    ++ ["*.class"]
+                    ++ other_results lexmake
+                    ++ other_results parmake)
+        , " rm -f " ++ basename
         , " rmdir -p " ++ dirBase
         ]
     ]
@@ -241,61 +243,84 @@
     -- ^ the CF bundle
     -> String
 
+-- | Record to name arguments of 'javaTest'.
+data JavaTestParams = JavaTestParams
+  { jtpImports            :: [Doc]
+      -- ^ List of imported packages.
+  , jtpErr                :: String
+      -- ^ Name of the exception thrown in case of parsing failure.
+  , jtpErrHand            :: (String -> [Doc])
+      -- ^ Handler for the exception thrown.
+  , jtpLexerConstruction  :: (Doc -> Doc -> Doc)
+      -- ^ Function formulating the construction of the lexer object.
+  , jtpParserConstruction :: (Doc -> Doc -> Doc)
+      -- ^ As above, for parser object.
+  , jtpShowAlternatives   :: ([Cat] -> [Doc])
+      -- ^ Pretty-print the names of the methods corresponding to entry points to the user.
+  , jtpInvocation         :: (Doc -> Doc -> Doc -> Doc -> Doc)
+      -- ^ Function formulating the invocation of the parser tool within Java.
+  , jtpErrMsg             :: String
+      -- ^ Error string output in consequence of a parsing failure.
+  }
+
 -- | Test class details for J(F)Lex + CUP
 cuptest :: TestClass
-cuptest =
-  javaTest
-    ["java_cup.runtime"]
-    "Throwable"
-    (const [])
-    (\x i -> x <> i <> ";")
-    (\x i -> x <> "(" <> i <> ", " <> i <> ".getSymbolFactory());")
-    showOpts
-    (\_ pabs enti ->
-        pabs <> "." <> enti <+> "ast = p."<> "p" <> enti
-             <> "();")
-    locs
-  where
-    locs = "At line \" + String.valueOf(t.l.line_num()) + \","
-            ++ " near \\\"\" + t.l.buff() + \"\\\" :"
-    showOpts _ = ["not available."]
-
-
+cuptest = javaTest $ JavaTestParams
+  { jtpImports            = ["java_cup.runtime"]
+  , jtpErr                = "Throwable"
+  , jtpErrHand            = const []
+  , jtpLexerConstruction  = \ x i -> x <> i <> ";"
+  , jtpParserConstruction = \ x i -> x <> "(" <> i <> ", " <> i <> ".getSymbolFactory());"
+  , jtpShowAlternatives   = const $ ["not available."]
+  , jtpInvocation         = \ _ pabs dat enti -> hcat [ pabs, ".", dat, " ast = p.p", enti, "();" ]
+  , jtpErrMsg             = unwords $
+      [ "At line \" + String.valueOf(t.l.line_num()) + \","
+      , "near \\\"\" + t.l.buff() + \"\\\" :"
+      ]
+  }
 
 -- | Test class details for ANTLR4
 antlrtest :: TestClass
-antlrtest =
-  javaTest
-    [ "org.antlr.v4.runtime","org.antlr.v4.runtime.atn"
-    , "org.antlr.v4.runtime.dfa","java.util"
-    ]
-    "TestError"
-    antlrErrorHandling
-    (\x i ->  vcat
-           [ x <> "(new ANTLRInputStream" <> i <>");"
-           , "l.addErrorListener(new BNFCErrorListener());"
-           ])
-    (\x i -> vcat
-           [x <> "(new CommonTokenStream(" <> i <>"));"
-           , "p.addErrorListener(new BNFCErrorListener());"
-           ])
-    showOpts
-    (\pbase pabs enti -> vcat
-           [
+antlrtest = javaTest $ JavaTestParams
+  { jtpImports =
+      [ "org.antlr.v4.runtime"
+      , "org.antlr.v4.runtime.atn"
+      , "org.antlr.v4.runtime.dfa"
+      , "java.util"
+      ]
+  , jtpErr =
+      "TestError"
+  , jtpErrHand =
+      antlrErrorHandling
+  , jtpLexerConstruction  =
+      \ x i -> vcat
+        [ x <> "(new ANTLRInputStream" <> i <>");"
+        , "l.addErrorListener(new BNFCErrorListener());"
+        ]
+  , jtpParserConstruction =
+      \ x i -> vcat
+        [ x <> "(new CommonTokenStream(" <> i <>"));"
+        , "p.addErrorListener(new BNFCErrorListener());"
+        ]
+  , jtpShowAlternatives   =
+      showOpts
+  , jtpInvocation         =
+      \ pbase pabs dat enti -> vcat
+         [
            let rulename = getRuleName (show enti)
                typename = text rulename
                methodname = text $ firstLowerCase rulename
            in
-               pbase <> "." <> typename <> "Context pc = p."
-                     <> methodname <> "();"
-               , "org.antlr.v4.runtime.Token _tkn = p.getInputStream()"
-                 <> ".getTokenSource().nextToken();"
-               , "if(_tkn.getType() != -1) throw new TestError"
+               pbase <> "." <> typename <> "Context pc = p." <> methodname <> "();"
+         , "org.antlr.v4.runtime.Token _tkn = p.getInputStream().getTokenSource().nextToken();"
+         , "if(_tkn.getType() != -1) throw new TestError"
                  <> "(\"Stream does not end with EOF\","
-                 <> "_tkn.getLine(),_tkn.getCharPositionInLine());",
-               pabs <> "." <> enti <+> "ast = pc.result;"
-           ])
-           "At line \" + e.line + \", column \" + e.column + \" :"
+                 <> "_tkn.getLine(),_tkn.getCharPositionInLine());"
+         , pabs <> "." <> dat <+> "ast = pc.result;"
+         ]
+  , jtpErrMsg             =
+      "At line \" + e.line + \", column \" + e.column + \" :"
+  }
   where
     showOpts [] = []
     showOpts (x:xs)
@@ -412,6 +437,10 @@
       -- | list of names (without extension!) of files resulting from the
       -- application of the tool which are relevant to a make rule
     , results             :: [String]
+      -- | list of names of files resulting from the application of
+      -- the tool which are irrelevant to the make rules but need to
+      -- be cleaned
+    , other_results       :: [String]
       -- | if true, the files are moved to the base directory, otherwise
       -- they are left where they are
     , moveresults         :: Bool
@@ -434,6 +463,7 @@
     , toolversion         = "1.2.6."
     , supportsEntryPoints = False
     , results             = ["Yylex"]
+    , other_results       = []
     , moveresults         = False
     }
 
@@ -449,9 +479,10 @@
     , filename            = "_cup"
     , fileextension       = "cup"
     , toolname            = "CUP"
-    , toolversion         = "0.10k"
+    , toolversion         = "0.11b"
     , supportsEntryPoints = False
     , results             = ["parser", "sym"]
+    , other_results       = []
     , moveresults         = True
     }
   where
@@ -475,6 +506,7 @@
     , toolversion         = "4.5.1"
     , supportsEntryPoints = True
     , results             = [l]
+    , other_results       = map (l ++) [".tokens","BaseListener.java","Listener.java"]
     , moveresults         = False
     }
 
@@ -528,56 +560,40 @@
         : partialParserGoals dbas rest
 
 -- | Creates the Test.java class.
-javaTest :: [Doc]
-            -- ^ list of imported packages
-            -> String
-            -- ^ name of the exception thrown in case of parsing failure
-            -> (String -> [Doc])
-            -- ^ handler for the exception thrown
-            -> (Doc -> Doc -> Doc)
-            -- ^ function formulating the construction of the lexer object
-            -> (Doc -> Doc -> Doc)
-            -- ^ as above, for parser object
-            -> ([Cat] -> [Doc])
-            -- ^ Function processing the names of the methods corresponding
-            -- to entry points
-            -> (Doc -> Doc -> Doc -> Doc)
-            -- ^ function formulating the invocation of the parser tool within
-            -- Java
-            -> String
-            -- ^ error string output in consequence of a parsing failure
-            -> TestClass
-javaTest imports
+javaTest :: JavaTestParams -> TestClass
+javaTest (JavaTestParams
+    imports
     err
     errhand
     lexerconstruction
     parserconstruction
     showOpts
     invocation
-    errmsg
+    errmsg)
     lexer
     parser
     packageBase
     packageAbsyn
     cf =
-    render $ vcat $
-        [ "package" <+> text packageBase <> ";"
+    render $ vcat $ concat $
+      [ [ "package" <+> text packageBase <> ";"
         , "import" <+> text packageBase <> ".*;"
         , "import" <+> text packageAbsyn <> ".*;"
         , "import java.io.*;"
         ]
-        ++ map importfun imports
-        ++ errhand err
-        ++[ ""
+      , map importfun imports
+      , errhand err
+      , [ ""
         , "public class Test"
         , codeblock 2
             [ lx <+> "l;"
             , px <+> "p;"
             , ""
             , "public Test(String[] args)"
-            , codeblock 2 [
-                "try"
-                , codeblock 2 [ "Reader input;"
+            , codeblock 2
+                [ "try"
+                , codeblock 2
+                    [ "Reader input;"
                     , "if (args.length == 0)"
                        <> "input = new InputStreamReader(System.in);"
                     , "else input = new FileReader(args[0]);"
@@ -591,13 +607,13 @@
                 , "p = new "<> parserconstruction px "l"
                 ]
             , ""
-            , "public" <+> text packageAbsyn <> "." <> absentity
-                <+>"parse() throws Exception"
+            , "public" <+> text packageAbsyn <> "." <> dat
+                <+> "parse() throws Exception"
             , codeblock 2
                 [ "/* The default parser is the first-defined entry point. */"
                 , "/* Other options are: */"
                 , "/* " <> fsep (punctuate "," (showOpts (tail eps))) <> " */"
-                , invocation px (text packageAbsyn) absentity
+                , invocation px (text packageAbsyn) dat absentity
                 , printOuts [ "\"Parse Succesful!\""
                     , "\"[Abstract Syntax]\""
                     , "PrettyPrinter.show(ast)"
@@ -619,6 +635,7 @@
                 ]
             ]
         ]
+      ]
     where
       printOuts x    = vcat $ map javaPrintOut (messages x)
       messages x     = "" : intersperse "" x
@@ -626,7 +643,8 @@
       importfun x    = "import" <+> x <> ".*;"
       lx             = text lexer
       px             = text parser
-      absentity      = text $ show def
+      dat            = text $ identCat $ normCat def  -- Use for AST types.
+      absentity      = text $ identCat def            -- Use for parser/printer name.
       eps            = allEntryPoints cf
       def            = head eps
 
diff --git a/src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs b/src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs
--- a/src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs
+++ b/src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs
@@ -130,16 +130,16 @@
         "IDENT : IDENTIFIER_FIRST (IDENTIFIER_FIRST | DIGIT)*;"
         ]
     , "// Whitespace"
-    , "WS : (' ' | '\\r' | '\\t' | '\\n')+ ->  skip;"
+    , "WS : (' ' | '\\r' | '\\t' | '\\n' | '\\f')+ ->  skip;"
     , "// Escapable sequences"
     , "fragment"
-    , "Escapable : ('\"' | '\\\\' | 'n' | 't' | 'r');"
+    , "Escapable : ('\"' | '\\\\' | 'n' | 't' | 'r' | 'f');"
     , "ErrorToken : . ;"
     , ifString stringmodes
     , ifChar charmodes
     ]
   where
-    ifC cat s     = if isUsedCat cf cat then vcat s else ""
+    ifC cat s     = if isUsedCat cf (TokenCat cat) then vcat s else ""
     ifString      = ifC catString
     ifChar        = ifC catChar
     strdec        = [ "// String token type"
@@ -147,7 +147,7 @@
                     ]
     chardec       = ["CHAR : '\\''   -> more, mode(CHARMODE);"]
     userDefTokens = vcat
-        [ text (show name) <>" : " <> text (printRegJLex exp) <> ";"
+        [ text name <> " : " <> text (printRegJLex exp) <> ";"
         | (name, exp) <- tokenPragmas cf ]
     stringmodes   = [ "mode STRESCAPE;"
         , "STRESCAPED : Escapable  -> more, popMode ;"
diff --git a/src/BNFC/Backend/Java/CFtoComposVisitor.hs b/src/BNFC/Backend/Java/CFtoComposVisitor.hs
--- a/src/BNFC/Backend/Java/CFtoComposVisitor.hs
+++ b/src/BNFC/Backend/Java/CFtoComposVisitor.hs
@@ -73,7 +73,7 @@
 
 -- | Traverses a standard rule.
 --
--- >>> prRule "lang.absyn" [Cat "A"] (Cat "B") (Rule "F" (Cat "B") [Left (Cat "A"), Right "+", Left (ListCat (Cat "B"))])
+-- >>> prRule "lang.absyn" ["A"] (Cat "B") (Rule "F" (Cat "B") [Left (Cat "A"), Right "+", Left (ListCat (Cat "B"))])
 --     public B visit(lang.absyn.F p, A arg)
 --     {
 --       String a_ = p.a_;
@@ -100,7 +100,7 @@
 
 -- | Traverses a class's instance variables.
 --
--- >>> prCat [Cat "A"] (Cat "A", "a_")
+-- >>> prCat ["A"] (Cat "A", "a_")
 -- String a_ = p.a_;
 --
 -- >>> prCat [] (ListCat (Cat "Integer"), "listinteger_")
@@ -135,4 +135,4 @@
 
 isBasicType :: [UserDef] -> String -> Bool
 isBasicType user v =
-    v `elem` (map show user ++ ["Integer","Character","String","Double"])
+    v `elem` (user ++ ["Integer","Character","String","Double"])
diff --git a/src/BNFC/Backend/Java/CFtoCup15.hs b/src/BNFC/Backend/Java/CFtoCup15.hs
--- a/src/BNFC/Backend/Java/CFtoCup15.hs
+++ b/src/BNFC/Backend/Java/CFtoCup15.hs
@@ -158,24 +158,23 @@
 
 -- peteg: FIXME JavaCUP can only cope with one entry point AFAIK.
 prEntryPoint :: CF -> String
-prEntryPoint cf = unlines ["", "start with " ++ show (firstEntry cf) ++ ";", ""]
+prEntryPoint cf = unlines ["", "start with " ++ identCat (firstEntry cf) ++ ";", ""]
 --                  [ep]  -> unlines ["", "start with " ++ ep ++ ";", ""]
 --                  eps   -> error $ "FIXME multiple entry points." ++ show eps
 
 --This generates a parser method for each entry point.
 parseMethod :: String -> Cat -> String
-parseMethod packageAbsyn cat =
-  if normCat cat /= cat
-    then ""
-    else unlines
-             [ "  public" +++ packageAbsyn ++ "." ++ cat' +++ "p" ++ cat' ++ "()"
+parseMethod packageAbsyn cat = unlines
+             [ "  public" +++ packageAbsyn ++ "." ++ dat +++ "p" ++ cat' ++ "()"
                  ++ " throws Exception"
              , "  {"
              , "    java_cup.runtime.Symbol res = parse();"
-             , "    return (" ++ packageAbsyn ++ "." ++ cat' ++ ") res.value;"
+             , "    return (" ++ packageAbsyn ++ "." ++ dat ++ ") res.value;"
              , "  }"
              ]
-    where cat' = identCat (normCat cat)
+    where
+    dat  = identCat (normCat cat)
+    cat' = identCat cat
 
 --non-terminal types
 declarations :: String -> [Cat] -> String
@@ -199,7 +198,7 @@
   , ifC catIdent   "terminal String _IDENT_;"
   ]
    where
-    ifC cat s = if isUsedCat cf cat then s else ""
+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
 
 specialRules:: CF -> String
 specialRules cf =
diff --git a/src/BNFC/Backend/Java/CFtoFoldVisitor.hs b/src/BNFC/Backend/Java/CFtoFoldVisitor.hs
--- a/src/BNFC/Backend/Java/CFtoFoldVisitor.hs
+++ b/src/BNFC/Backend/Java/CFtoFoldVisitor.hs
@@ -75,7 +75,7 @@
 prRule  _ _ _ _ = ""
 
 -- | Traverses a class's instance variables.
--- >>> prCat [Cat "A"] (Cat "A", "a_")
+-- >>> prCat ["A"] (Cat "A", "a_")
 -- <BLANKLINE>
 -- >>> prCat [] (ListCat (Cat "Integer"), "listinteger_")
 -- <BLANKLINE>
@@ -102,4 +102,4 @@
 
 --Just checks if something is a basic or user-defined type.
 isBasicType :: [UserDef] -> String -> Bool
-isBasicType user v = v `elem` (map show user ++ ["Integer","Character","String","Double"])
+isBasicType user v = v `elem` (user ++ ["Integer","Character","String","Double"])
diff --git a/src/BNFC/Backend/Java/CFtoJLex15.hs b/src/BNFC/Backend/Java/CFtoJLex15.hs
--- a/src/BNFC/Backend/Java/CFtoJLex15.hs
+++ b/src/BNFC/Backend/Java/CFtoJLex15.hs
@@ -50,21 +50,18 @@
 import BNFC.Utils (cstring)
 import Text.PrettyPrint
 
---The environment must be returned for the parser to use.
+-- | The environment is returned for further use in the parser.
 cf2jlex :: JavaLexerParser -> RecordPositions -> String -> CF -> (Doc, SymEnv)
-cf2jlex jflex rp packageBase cf = (vcat
- [
-  prelude jflex rp packageBase,
-  cMacros,
-  lexSymbols jflex env,
-  restOfJLex jflex rp cf
- ], env)
+cf2jlex jflex rp packageBase cf = (, env) . vcat $
+  [ prelude jflex rp packageBase
+  , cMacros
+  , lexSymbols jflex env
+  , restOfJLex jflex rp cf
+  ]
   where
-   env = makeSymEnv (cfgSymbols cf ++ reservedWords cf) (0 :: Int)
-   makeSymEnv [] _ = []
-   makeSymEnv (s:symbs) n = (s, "_SYMB_" ++ show n) : makeSymEnv symbs (n+1)
+  env = zipWith (\ s n -> (s, "_SYMB_" ++ show n)) (cfgSymbols cf ++ reservedWords cf) [(0 :: Int)..]
 
--- | File prelude
+-- | File prelude.
 prelude :: JavaLexerParser -> RecordPositions -> String -> Doc
 prelude jflex rp packageBase = vcat
     [ "// This JLex file was machine-generated by the BNF converter"
@@ -113,15 +110,16 @@
         else ""
     ]
   where
-    positionDeclarations =
+    positionDeclarations
       -- JFlex always defines yyline, yychar, yycolumn, even if unused.
-      if jflex == JFlexCup then ""
-        else if rp == RecordPositions then "int yycolumn = unknown - 1;"
-          else vcat
+      | jflex == JFlexCup     = ""
+      | rp == RecordPositions = "int yycolumn = unknown - 1;"
+      | otherwise             = vcat
             -- subtract one so that one based numbering still ends up with unknown.
             [ "int yyline = unknown - 1;"
             , "int yycolumn = unknown - 1;"
-            , "int yychar = unknown;" ]
+            , "int yychar = unknown;"
+            ]
 
 --For now all categories are included.
 --Optimally only the ones that are used should be generated.
@@ -185,10 +183,11 @@
         else ". { throw new Error(\"Illegal Character <\"+yytext()+\">\"); }"
     ]
   where
-    ifC cat s = if isUsedCat cf cat then s else ""
+    ifC :: TokenCat -> Doc -> Doc
+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""
     userDefTokens = vcat
         [ "<YYINITIAL>" <> text (printRegJLex exp)
-            <+> "{ return cf.newSymbol(\"\", sym." <> text (show name)
+            <+> "{ return cf.newSymbol(\"\", sym." <> text name
             <> ", left_loc(), right_loc(), yytext().intern()); }"
         | (name, exp) <- tokenPragmas cf ]
     strStates = vcat --These handle escaped characters in Strings.
@@ -202,9 +201,11 @@
           then "<STRING><<EOF>> { throw new Error(\"Unterminated string at EOF, beginning at \" + left.getLine() + \":\" + left.getColumn()); }"
           else ""
         , "<ESCAPED>n { pstring +=  \"\\n\"; yybegin(STRING); }"
+        , "<ESCAPED>t  { pstring += \"\\t\"; yybegin(STRING); }"
+        , "<ESCAPED>r  { pstring += \"\\r\"; yybegin(STRING); }"
+        , "<ESCAPED>f  { pstring += \"\\f\"; yybegin(STRING); }"
         , "<ESCAPED>\\\" { pstring += \"\\\"\"; yybegin(STRING); }"
         , "<ESCAPED>\\\\ { pstring += \"\\\\\"; yybegin(STRING); }"
-        , "<ESCAPED>t  { pstring += \"\\t\"; yybegin(STRING); }"
         , "<ESCAPED>.  { pstring += yytext(); yybegin(STRING); }"
         , "<ESCAPED>\\r\\n|\\r|\\n { throw new Error(\"Unterminated string on line \" + left.getLine() " <>
           (if jflex == JFlexCup then "+ \" beginning at column \" + left.getColumn()" else "") <> "); }"
@@ -223,6 +224,8 @@
           else ""
         , "<CHARESC>n { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\n')); }"
         , "<CHARESC>t { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\t')); }"
+        , "<CHARESC>r { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\r')); }"
+        , "<CHARESC>f { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\f')); }"
         , "<CHARESC>. { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character(yytext().charAt(0))); }"
         , "<CHARESC>\\r\\n|\\r|\\n { throw new Error(\"Unterminated character literal on line \" + left.getLine() " <>
           (if jflex == JFlexCup then "+ \" beginning at column \" + left.getColumn()" else "") <> "); }"
diff --git a/src/BNFC/Backend/Java/CFtoJavaAbs15.hs b/src/BNFC/Backend/Java/CFtoJavaAbs15.hs
--- a/src/BNFC/Backend/Java/CFtoJavaAbs15.hs
+++ b/src/BNFC/Backend/Java/CFtoJavaAbs15.hs
@@ -283,10 +283,11 @@
 -- | This makes up for the fact that there's no typedef in Java.
 
 typename :: String -> [UserDef] -> String
-typename t user | t == "Ident"            = "String"
-                | t == "Char"             = "Character"
-                | t `elem` map show user  = "String"
-                | otherwise               = t
+typename t user
+  | t == "Ident"   = "String"
+  | t == "Char"    = "Character"
+  | t `elem` user  = "String"
+  | otherwise      = t
 
 -- | Print the Java type corresponding to a category.
 cat2JavaType :: [UserDef] -> Cat -> String
diff --git a/src/BNFC/Backend/Java/CFtoJavaPrinter15.hs b/src/BNFC/Backend/Java/CFtoJavaPrinter15.hs
--- a/src/BNFC/Backend/Java/CFtoJavaPrinter15.hs
+++ b/src/BNFC/Backend/Java/CFtoJavaPrinter15.hs
@@ -190,11 +190,11 @@
 
 prEntryPoints :: String -> CF -> String
 prEntryPoints packageAbsyn cf =
-    msg ++ concatMap prEntryPoint (allCats cf) ++ msg2
+    msg ++ concatMap prEntryPoint (allCatsNorm cf) ++ msg2
  where
   msg = "  //  print and show methods are defined for each category.\n"
   msg2 = "  /***   You shouldn't need to change anything beyond this point.   ***/\n"
-  prEntryPoint cat | normCat cat == cat = unlines
+  prEntryPoint cat = unlines
    [
     "  public static String print(" ++ packageAbsyn ++ "." ++ cat' ++ " foo)",
     "  {",
@@ -214,7 +214,6 @@
    ]
    where
     cat' = identCat cat
-  prEntryPoint _ = ""
 
 prData :: String ->  [UserDef] -> (Cat, [Rule]) -> String
 prData packageAbsyn user (cat, rules) = unlines k
diff --git a/src/BNFC/Backend/Java/CFtoVisitSkel15.hs b/src/BNFC/Backend/Java/CFtoVisitSkel15.hs
--- a/src/BNFC/Backend/Java/CFtoVisitSkel15.hs
+++ b/src/BNFC/Backend/Java/CFtoVisitSkel15.hs
@@ -126,9 +126,9 @@
 -- p.a_.accept(new AVisitor<R,A>(), arg);
 -- >>> prCat [] (TokenCat "Integer", "integer_")
 -- //p.integer_;
--- >>> prCat [Cat "A"] (TokenCat "A", "a_")
+-- >>> prCat ["A"] (TokenCat "A", "a_")
 -- //p.a_;
--- >>> prCat [Cat "A"] (TokenCat "A", "a_2")
+-- >>> prCat ["A"] (TokenCat "A", "a_2")
 -- //p.a_2;
 -- >>> prCat [] (ListCat (Cat "A"), "lista_")
 -- for (A x: p.lista_)
diff --git a/src/BNFC/Backend/Java/RegToJLex.hs b/src/BNFC/Backend/Java/RegToJLex.hs
--- a/src/BNFC/Backend/Java/RegToJLex.hs
+++ b/src/BNFC/Backend/Java/RegToJLex.hs
@@ -2,6 +2,7 @@
 
 -- modified from pretty-printer generated by the BNF converter
 
+import Data.Char (showLitChar)
 import AbsBNF
 import BNFC.Options (JavaLexerParser(..))
 
@@ -44,14 +45,14 @@
 escapeChar _ '^' = "\\x5E" -- special case, since \^ is a control character escape
 escapeChar JFlexCup x | x `elem` jflexReserved = '\\' : [x]
 escapeChar _ x | x `elem` jlexReserved = '\\' : [x]
-escapeChar _ x = [x]
+escapeChar _ x = showLitChar x ""
 
 -- Characters that must be escaped in JLex regular expressions
 jlexReserved :: [Char]
 jlexReserved = ['?','*','+','|','(',')','^','$','.','[',']','{','}','"','\\']
 
 jflexReserved :: [Char]
-jflexReserved = '~':'!':'/':jlexReserved
+jflexReserved = '~':'!':'/':[]  -- plus the @jlexReserved@, but they are tested separately
 
 
 prPrec :: Int -> Int -> [String] -> [String]
diff --git a/src/BNFC/Backend/Latex.hs b/src/BNFC/Backend/Latex.hs
--- a/src/BNFC/Backend/Latex.hs
+++ b/src/BNFC/Backend/Latex.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-
     BNF Converter: Latex Generator
     Copyright (C) 2004  Author:  Markus Forberg, Aarne Ranta
@@ -19,7 +20,9 @@
 module BNFC.Backend.Latex where
 
 import Data.List
+#if !(MIN_VERSION_base(4,8,0))
 import Data.Monoid
+#endif
 import System.FilePath ((<.>),replaceExtension)
 import Text.Printf
 
@@ -41,20 +44,21 @@
 
 -- | Create a makefile for the given tex file
 --
--- >>> makefile "myFile.tex"
--- all: myFile.pdf
+-- >>> makefile "myFile.tex" "Makefile"
+-- all : myFile.pdf
 -- <BLANKLINE>
--- myFile.pdf: myFile.tex
+-- myFile.pdf : myFile.tex
 -- 	pdflatex myFile.tex
 -- <BLANKLINE>
--- clean:
+-- clean :
 -- 	-rm myFile.pdf myFile.aux myFile.log
 -- <BLANKLINE>
--- cleanall: clean
+-- cleanall : clean
 -- 	-rm Makefile myFile.tex
 -- <BLANKLINE>
-makefile :: String -> Doc
-makefile texfile = vcat
+--
+makefile :: String -> String -> Doc
+makefile texfile basename = vcat
     [ Makefile.mkRule "all" [pdffile]
         []
     , Makefile.mkRule pdffile [texfile]
@@ -62,7 +66,7 @@
     , Makefile.mkRule "clean" []
         [ unwords [ "-rm", pdffile, auxfile, logfile ]]
     , Makefile.mkRule "cleanall" ["clean"]
-        [ "-rm Makefile " ++ texfile ]
+        [ unwords [ "-rm", basename, texfile ]]
     ]
   where pdffile = replaceExtension texfile "pdf"
         auxfile = replaceExtension texfile "aux"
@@ -119,32 +123,33 @@
 
 prtLiterals :: String -> CF -> String
 prtLiterals _ cf =
-  unlines $ map stringLit $
-    filter (`notElem` [Cat "Ident"]) $
-      literals cf
+  unlines . concat . intersperse [""] . map stringLit . filter (/= catIdent) $ literals cf
 
-stringLit :: Cat -> String
-stringLit cat = unlines $ case cat of
-  Cat "Char" -> ["Character literals \\nonterminal{Char}\\ have the form",
-                 "\\terminal{'}$c$\\terminal{'}, where $c$ is any single character.",
-                 ""
-                ]
-  Cat "String" -> ["String literals \\nonterminal{String}\\ have the form",
-                 "\\terminal{\"}$x$\\terminal{\"}, where $x$ is any sequence of any characters",
-                 "except \\terminal{\"}\\ unless preceded by \\verb6\\6.",
-                 ""]
-  Cat "Integer" -> ["Integer literals \\nonterminal{Int}\\ are nonempty sequences of digits.",
-                 ""]
-  Cat "Double" -> ["Double-precision float literals \\nonterminal{Double}\\ have the structure",
-                   "indicated by the regular expression" +++
-                      "$\\nonterminal{digit}+ \\mbox{{\\it `.'}} \\nonterminal{digit}+ (\\mbox{{\\it `e'}} \\mbox{{\\it `-'}}? \\nonterminal{digit}+)?$ i.e.\\",
-                   "two sequences of digits separated by a decimal point, optionally",
-                   "followed by an unsigned or negative exponent.",
-                   ""]
+stringLit :: TokenCat -> [String]
+stringLit = \case
+  "Char" ->
+    [ "Character literals \\nonterminal{Char}\\ have the form"
+    , "\\terminal{'}$c$\\terminal{'}, where $c$ is any single character."
+    ]
+  "String" ->
+    [ "String literals \\nonterminal{String}\\ have the form"
+    , "\\terminal{\"}$x$\\terminal{\"}, where $x$ is any sequence of any characters"
+    , "except \\terminal{\"}\\ unless preceded by \\verb6\\6."
+    ]
+  "Integer" ->
+    [ "Integer literals \\nonterminal{Int}\\ are nonempty sequences of digits."
+    ]
+  "Double" ->
+    [ "Double-precision float literals \\nonterminal{Double}\\ have the structure"
+    , "indicated by the regular expression" +++
+      "$\\nonterminal{digit}+ \\mbox{{\\it `.'}} \\nonterminal{digit}+ (\\mbox{{\\it `e'}} \\mbox{{\\it `-'}}? \\nonterminal{digit}+)?$ i.e.\\"
+    , "two sequences of digits separated by a decimal point, optionally"
+    , "followed by an unsigned or negative exponent."
+    ]
   _ -> []
 
 prtOwnToken (name,reg) = unlines
-  [ show name +++ "literals are recognized by the regular expression",
+  [ name +++ "literals are recognized by the regular expression",
    "\\(" ++
    latexRegExp reg ++
    "\\)"
@@ -204,9 +209,9 @@
 prtBNF name cf = unlines
   [ "\\section*{The syntactic structure of " ++ name ++ "}"
   , ""
-  , "Non-terminals are enclosed between $\\langle$ and $\\rangle$. "
-  , "The symbols " ++ arrow ++ " (production), " ++ delimiter ++ " (union) "
-  , "and " ++ empty ++ " (empty rule) belong to the BNF notation. "
+  , "Non-terminals are enclosed between $\\langle$ and $\\rangle$."
+  , "The symbols " ++ arrow ++ " (production), " ++ delimiter ++ " (union)"
+  , "and " ++ empty ++ " (empty rule) belong to the BNF notation."
   , "All other symbols are terminals.\\\\"
   , prtRules (ruleGroups cf)
   ]
@@ -287,7 +292,8 @@
  [ "%This Latex file is machine-generated by the BNF-converter"
  , ""
  , "\\documentclass[a4paper,11pt]{article}"
- -- "\\usepackage{isolatin1}"
+ , "\\usepackage[T1]{fontenc}"
+ , "\\usepackage[utf8x]{inputenc}"
  , "\\setlength{\\parindent}{0mm}"
  , "\\setlength{\\parskip}{1mm}"
  , ""
diff --git a/src/BNFC/Backend/OCaml.hs b/src/BNFC/Backend/OCaml.hs
--- a/src/BNFC/Backend/OCaml.hs
+++ b/src/BNFC/Backend/OCaml.hs
@@ -110,8 +110,8 @@
                    sep = if null pref || null dir then "" else [pathSeparator]
                  in pref ++ sep ++ dir
 
-makefile :: SharedOptions -> Doc
-makefile opts = vcat
+makefile :: SharedOptions -> String -> Doc
+makefile opts basename = vcat
     [ mkVar "OCAMLC" "ocamlc"
     , mkVar "OCAMLYACC" "ocamlyacc"
     , mkVar "OCAMLLEX" "ocamllex"
@@ -140,7 +140,7 @@
                                  mkFile withLang "Abs" "*" opts,
                                  mkFile withLang "Test" "" opts,
                                  utilFile opts,
-                                 "Makefile*" ]]
+                                 basename ]]
     ]
   where dir = let d = codeDir opts in if null d then "" else d ++ [pathSeparator]
 
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs b/src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs
@@ -62,11 +62,11 @@
 mkTupleType :: [Cat] -> Doc
 mkTupleType = hsep . intersperse (char '*') . map (text . fixType)
 
-prSpecialData :: CF -> Cat -> String
-prSpecialData cf cat = fixType cat +++ "=" +++ show cat +++ "of" +++ contentSpec cf cat
+prSpecialData :: CF -> TokenCat -> String
+prSpecialData cf cat = fixType (TokenCat cat) +++ "=" +++ cat +++ "of" +++ contentSpec cf cat
 
 --  unwords ["newtype",cat,"=",cat,contentSpec cf cat,"deriving (Eq,Ord,Show)"]
 
-contentSpec :: CF -> Cat -> String
+contentSpec :: CF -> TokenCat -> String
 contentSpec cf cat = -- if isPositionCat cf cat then "((Int,Int),String)" else "String"
     if isPositionCat cf cat then "((int * int) * string)" else "string"
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlLex.hs b/src/BNFC/Backend/OCaml/CFtoOCamlLex.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlLex.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlLex.hs
@@ -32,10 +32,11 @@
 import Text.PrettyPrint hiding (render)
 import qualified Text.PrettyPrint as PP
 
-import BNFC.CF
 import AbsBNF
+import BNFC.CF
 import BNFC.Backend.OCaml.CFtoOCamlYacc (terminal)
-import BNFC.Utils ((+++), cstring, cchar)
+import BNFC.Backend.OCaml.OCamlUtil (mkEsc)
+import BNFC.Utils (cstring, cchar, unless)
 
 cf2ocamllex :: String -> String -> CF -> String
 cf2ocamllex _ parserMod cf =
@@ -59,6 +60,8 @@
   "      '\\\\'::c::cs when List.mem c ['\\\"'; '\\\\'; '\\\''] -> c :: unesc cs",
   "    | '\\\\'::'n'::cs  -> '\\n' :: unesc cs",
   "    | '\\\\'::'t'::cs  -> '\\t' :: unesc cs",
+  "    | '\\\\'::'r'::cs  -> '\\r' :: unesc cs",
+  -- "    | '\\\\'::'f'::cs  -> '\\f' :: unesc cs",  -- \f not supported by ocaml
   "    | '\\\"'::[]    -> []",
   "    | c::cs      -> c :: unesc cs",
   "    | _         -> []",
@@ -84,36 +87,35 @@
 
 -- | set up hashtables for reserved symbols and words
 hashtables :: CF -> String
-hashtables cf = ht "symbol_table" (cfgSymbols cf )  ++ "\n" ++
-                ht "resword_table" (reservedWords cf)
-    where ht _ syms | null syms = ""
-          ht table syms = unlines [
-                "let" +++ table +++ "= Hashtbl.create " ++ show (length syms),
-                "let _ = List.iter (fun (kwd, tok) -> Hashtbl.add" +++ table
-                         +++ "kwd tok)",
-                "                  [" ++ concat (intersperse ";" keyvals) ++ "]"
-            ]
-            where keyvals = map (\(x,y) -> "(" ++ x ++ ", " ++ y ++ ")")
-                          (zip (map show syms) (map (terminal cf) syms))
-
+hashtables cf = unlines . concat $
+  [ ht "symbol_table"  $ cfgSymbols cf
+  , ht "resword_table" $ reservedWords cf
+  ]
+  where
+  ht table syms = unless (null syms) $
+    [ unwords [ "let", table, "= Hashtbl.create", show (length syms)                  ]
+    , unwords [ "let _ = List.iter (fun (kwd, tok) -> Hashtbl.add", table, "kwd tok)" ]
+    , concat  [ "                  [", concat (intersperse ";" keyvals), "]"          ]
+    ]
+    where
+    keyvals = map (\ s -> concat [ "(", mkEsc s, ", ", terminal cf s, ")" ]) syms
 
 
 definitions :: CF -> [String]
-definitions cf = concat [
-        cMacros,
-        rMacros cf,
-        uMacros cf
-    ]
-
+definitions cf = concat $
+  [ cMacros
+  , rMacros cf
+  , uMacros cf
+  ]
 
 cMacros :: [String]
 cMacros = [
   "let l = ['a'-'z' 'A'-'Z' '\\192' - '\\255'] # ['\\215' '\\247']    (*  isolatin1 letter FIXME *)",
   "let c = ['A'-'Z' '\\192'-'\\221'] # ['\\215']    (*  capital isolatin1 letter FIXME *)",
   "let s = ['a'-'z' '\\222'-'\\255'] # ['\\247']    (*  small isolatin1 letter FIXME *)",
-  "let d = ['0'-'9']                (*  digit *)",
-  "let i = l | d | ['_' '\\'']          (*  identifier character *)",
-  "let u = ['\\000'-'\\255']           (* universal: any character *)"
+  "let d = ['0'-'9']                             (*  digit *)",
+  "let i = l | d | ['_' '\\'']                    (*  identifier character *)",
+  "let u = _                                     (* universal: any character *)"
   ]
 
 rMacros :: CF -> [String]
@@ -124,9 +126,6 @@
    "let rsyms =    (* reserved words consisting of special symbols *)",
    "            " ++ unwords (intersperse "|" (map mkEsc symbs))
    ])
- where
-  mkEsc s = "\"" ++ concat (map f s) ++ "\""
-  f x = if x `elem` ['"','\\'] then  "\\" ++ [x] else [x]
 
 -- user macros, derived from the user-defined tokens
 uMacros :: CF -> [String]
@@ -135,8 +134,7 @@
 -- returns the tuple of (reg_name, reg_representation, token_name)
 userTokens :: CF -> [(String, String, String)]
 userTokens cf =
-  let regName = map toLower . show in
-  [(regName name, printRegOCaml reg, show name) | (name, reg) <- tokenPragmas cf]
+  [ (map toLower name, printRegOCaml reg, name) | (name, reg) <- tokenPragmas cf ]
 
 
 
@@ -212,10 +210,10 @@
     , ( "d+ '.' d+ ('e' ('-')? d+)?"
       , "let f = lexeme lexbuf in TOK_Double (float_of_string f)" )
     -- strings
-    , ( "'\\\"' ((u # ['\\\"' '\\\\' '\\n']) | ('\\\\' ('\\\"' | '\\\\' | '\\\'' | 'n' | 't')))* '\\\"'"
+    , ( "'\\\"' ((u # ['\\\"' '\\\\' '\\n']) | ('\\\\' ('\\\"' | '\\\\' | '\\\'' | 'n' | 't' | 'r')))* '\\\"'"
       , "let s = lexeme lexbuf in TOK_String (unescapeInitTail s)" )
     -- chars
-    , ( "'\\'' ((u # ['\\\'' '\\\\']) | ('\\\\' ('\\\\' | '\\\'' | 'n' | 't'))) '\\\''"
+    , ( "'\\'' ((u # ['\\\'' '\\\\']) | ('\\\\' ('\\\\' | '\\\'' | 'n' | 't' | 'r'))) '\\\''"
       , "let s = lexeme lexbuf in TOK_Char s.[1]")
     -- spaces
     , ( "[' ' '\\t']", "token lexbuf")
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs b/src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs
@@ -21,7 +21,7 @@
 
 -- based on BNFC Haskell backend
 
-module BNFC.Backend.OCaml.CFtoOCamlPrinter (cf2Printer) where
+module BNFC.Backend.OCaml.CFtoOCamlPrinter (cf2Printer, prtFun) where
 
 import Prelude'
 
@@ -111,33 +111,34 @@
 
 charRule cf = unlines [
     "let rec prtChar (_:int) (c:char) : doc = render (\"'\" ^ Char.escaped c ^ \"'\")",
-    ifList cf catChar,
+    ifList cf (TokenCat catChar),
     ""
     ]
 
 integerRule cf = unlines [
     "let rec prtInt (_:int) (i:int) : doc = render (string_of_int i)",
-    ifList cf catInteger,
+    ifList cf (TokenCat catInteger),
     ""
     ]
 
 doubleRule cf = unlines [
     "let rec prtFloat (_:int) (f:float) : doc = render (sprintf \"%f\" f)",
-    ifList cf catDouble,
+    ifList cf (TokenCat catDouble),
     ""
     ]
 
 stringRule cf = unlines [
     "let rec prtString (_:int) (s:string) : doc = render (\"\\\"\" ^ String.escaped s ^ \"\\\"\")",
-    ifList cf catString,
+    ifList cf (TokenCat catString),
     ""
     ]
 
 identRule cf = ownPrintRule cf catIdent
 
+ownPrintRule :: CF -> TokenCat -> String
 ownPrintRule cf own = unlines $ [
-  "let rec" +++ prtFun own +++ "_ (" ++ show own ++ posn ++ ") : doc = render i",
-  ifList cf own
+  "let rec" +++ prtFun (TokenCat own) +++ "_ (" ++ own ++ posn ++ ") : doc = render i",
+  ifList cf (TokenCat own)
   ]
  where
    posn = if isPositionCat cf own then " (_,i)" else " i"
@@ -227,7 +228,7 @@
  where
   mk args (Left InternalCat : items)      = mk args items
   mk (arg:args) (Left c : items)  = (prt c +++ arg)        : mk args items
-  mk args       (Right s : items) = ("render " ++ show s) : mk args items
+  mk args       (Right s : items) = ("render " ++ mkEsc s) : mk args items
   mk _ _ = []
   prt c = prtFun c +++ show (precCat c)
 
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlShow.hs b/src/BNFC/Backend/OCaml/CFtoOCamlShow.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlShow.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlShow.hs
@@ -21,7 +21,7 @@
 -- on camlp4. Here we generate our own "show module".
 
 
-module BNFC.Backend.OCaml.CFtoOCamlShow (cf2show) where
+module BNFC.Backend.OCaml.CFtoOCamlShow (cf2show, showsFunQual) where
 
 import Data.Char(toLower)
 import Data.List (intersperse)
@@ -86,12 +86,12 @@
 doubleRule _ = "let showFloat (f:float) : showable = s2s (string_of_float f)"
 
 
-identRule cf = ownPrintRule cf (Cat "Ident")
+identRule cf = ownPrintRule cf catIdent
 
-ownPrintRule cf own = unlines $ [
-  "let rec" +++ showsFun own +++ "(" ++ show own ++ posn ++ ") : showable = s2s \""
-  ++ show own ++ " \" >> showString i"
-  ]
+ownPrintRule :: CF -> TokenCat -> String
+ownPrintRule cf own =
+  "let rec" +++ showsFun (TokenCat own) +++ "(" ++ own ++ posn ++ ") : showable = s2s \""
+  ++ own ++ " \" >> showString i"
  where
    posn = if isPositionCat cf own then " (_,i)" else " i"
 
@@ -119,9 +119,8 @@
         | otherwise              = s
    ruleOf s = fromJust $ lookupRule s (cfgRules cf)
 
---- case_fun :: Cat -> [(Constructor,Rule)] -> String
+-- case_fun :: Cat -> [(Constructor,Rule)] -> String
 case_fun cat xs = unlines [
---  "instance Print" +++ cat +++ "where",
   showsFun cat +++ "(e:" ++ fixType cat ++ ") : showable = match e with",
   unlines $ insertBar $ map (\ ((c,xx),r) ->
     "   " ++ c +++ mkTuple xx +++ "->" +++
@@ -143,6 +142,10 @@
   mk _ _ = []
 
 showsFun :: Cat -> String
-showsFun c = case c of
-    ListCat t -> "showList" +++ showsFun t
-    _ -> "show" ++ (fixTypeUpper $ normCat c)
+showsFun = showsFunQual id
+
+showsFunQual :: (String -> String) -> Cat -> String
+showsFunQual qual = loop where
+  loop = \case
+    ListCat c -> qual "showList" +++ loop c
+    c         -> qual "show" ++ (fixTypeUpper $ normCat c)
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlTest.hs b/src/BNFC/Backend/OCaml/CFtoOCamlTest.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlTest.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlTest.hs
@@ -27,6 +27,9 @@
 
 import BNFC.CF
 import BNFC.Backend.OCaml.OCamlUtil
+import BNFC.Backend.OCaml.CFtoOCamlYacc    (epName)
+import BNFC.Backend.OCaml.CFtoOCamlPrinter (prtFun)
+import BNFC.Backend.OCaml.CFtoOCamlShow    (showsFunQual)
 
 -- | OCaml comment
 -- >>> comment "I'm a comment"
@@ -43,15 +46,17 @@
 ocamlTestfile :: String -> String -> String -> String -> String -> CF -> Doc
 ocamlTestfile absM lexM parM printM showM cf =
     let
-        lexerName = text lexM <> ".token"
-        parserName = text parM <> ".p" <> topTypeC
-        printerName =
-            text printM <> ".printTree " <> text printM <> ".prt" <> topTypeC
-        showFun =
-            parens ("fun x ->" <+> text showM <> ".show"
-                    <+> parens (text showM <> ".show" <> topTypeC <+> "x"))
-        topTypeC = text $ fixTypeUpper (firstEntry cf)
-        topType = text absM <> "." <> text (fixType (firstEntry cf))
+        cat         = firstEntry cf
+        qualify q x = concat [ q, ".", x ]
+        lexerName   = text $ qualify lexM "token"
+        parserName  = text $ qualify parM $ epName cat
+        printerName = hsep $ map (text . qualify printM) [ "printTree", prtFun cat ]
+        showFun     = parens . hsep $
+          [ "fun x ->"
+          , text $ qualify showM "show"
+          , parens $ text (showsFunQual (qualify showM) cat) <+> "x"
+          ]
+        topType     = text absM <> "." <> text (fixType $ normCat cat)
     in vcat
         [ comment "automatically generated by the BNF Converter"
         , ""
diff --git a/src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs b/src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs
--- a/src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs
+++ b/src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs
@@ -22,7 +22,7 @@
 
 module BNFC.Backend.OCaml.CFtoOCamlYacc
        (
-       cf2ocamlyacc, terminal
+       cf2ocamlyacc, terminal, epName
        )
         where
 
@@ -108,16 +108,16 @@
           spaceToUnderscore x = x
 
 specialTokens :: CF -> String
-specialTokens cf = unlines ("%token TOK_EOF" : map aux (nub $ ["Ident","String","Integer","Double","Char"] ++ map show (literals cf)))
-    where aux cat = "%token" +++ (case cat of
-            "Ident"   -> "<string>"
-            "String"  -> "<string>"
-            "Integer" -> "<int>"
-            "Double"  -> "<float>"
-            "Char"    -> "<char>"
-            _         -> "<string>"      )
-           +++ "TOK_" ++ cat
-
+specialTokens cf = unlines . ("%token TOK_EOF" :) $
+  map (\ n -> "%token" +++ aux n +++ "TOK_" ++ n) $ nub $ specialCatsP ++ literals cf
+  where
+  aux = \case
+    "Ident"   -> "<string>"
+    "String"  -> "<string>"
+    "Integer" -> "<int>"
+    "Double"  -> "<float>"
+    "Char"    -> "<char>"
+    _         -> "<string>"
 
 entryPoints :: String -> CF -> String
 entryPoints absName cf = unlines $
@@ -125,9 +125,9 @@
         concat (intersperse " " (map epName eps)))
     :
     (map typing eps)
-    where eps = (nub $ map normCat (allEntryPoints cf))
+    where eps = allEntryPoints cf
           typing :: Cat -> String
-          typing c = "%type" +++ "<" ++ qualify c ++ ">" +++ epName c
+          typing c = "%type" +++ "<" ++ qualify (normCat c) ++ ">" +++ epName c
           qualify c = if c `elem` [ TokenCat "Integer", TokenCat "Double", TokenCat "Char",
                                     TokenCat "String", ListCat (TokenCat "Integer"),
                                     ListCat (TokenCat "Double"),
@@ -143,7 +143,7 @@
                     c:cs -> toUpper c : cs
 
 entryPointRules :: CF -> String
-entryPointRules cf = unlines $ map mkRule (nub $ map normCat (allEntryPoints cf))
+entryPointRules cf = unlines $ map mkRule $ allEntryPoints cf
     where
         mkRule :: Cat -> String
         mkRule s = unlines [
@@ -216,22 +216,14 @@
    revs = cfgReversibleCats cf
 
 
-
-
-
 specialRules :: CF -> String
-specialRules cf = unlines $
-                  map aux (literals cf)
- where
-   aux cat =
-     case cat of
-         TokenCat "Ident"   -> "ident : TOK_Ident  { Ident $1 };"
-         TokenCat "String"  -> "string : TOK_String { $1 };"
-         TokenCat "Integer" -> "int :  TOK_Integer  { $1 };"
-         TokenCat "Double"  -> "float : TOK_Double  { $1 };"
-         TokenCat "Char"    -> "char : TOK_Char { $1 };"
-         own       -> (fixType own) ++ " : TOK_" ++ show own ++
-                      " { " ++ show own ++ " ("++ posn ++ "$1)};"
-                -- PCC: take "own" as type name? (manual says newtype)
-      where -- ignore position categories for now
-         posn = "" -- if isPositionCat cf cat then "mkPosToken " else ""
+specialRules cf = unlines $ (`map` literals cf) $ \case
+  "Ident"   -> "ident : TOK_Ident  { Ident $1 };"
+  "String"  -> "string : TOK_String { $1 };"
+  "Integer" -> "int :  TOK_Integer  { $1 };"
+  "Double"  -> "float : TOK_Double  { $1 };"
+  "Char"    -> "char : TOK_Char { $1 };"
+  own       -> concat $
+    [ fixType (TokenCat own), " : TOK_", own, " { ", own, " (",  posn, "$1)};" ]
+    where -- ignore position categories for now
+    posn = "" -- if isPositionCat cf own then "mkPosToken " else ""
diff --git a/src/BNFC/Backend/OCaml/OCamlUtil.hs b/src/BNFC/Backend/OCaml/OCamlUtil.hs
--- a/src/BNFC/Backend/OCaml/OCamlUtil.hs
+++ b/src/BNFC/Backend/OCaml/OCamlUtil.hs
@@ -67,3 +67,9 @@
      []   -> []
      [d]  -> ["let rec" +++ d]
      d:ds -> ("let rec" +++ d) : map ("and" +++) ds
+
+-- | Escape @"@ and @\@.  TODO: escape unprintable characters!?
+mkEsc :: String -> String
+mkEsc s = "\"" ++ concatMap f s ++ "\""
+  where
+  f x = if x `elem` ['"','\\'] then "\\" ++ [x] else [x]
diff --git a/src/BNFC/Backend/Txt2Tag.hs b/src/BNFC/Backend/Txt2Tag.hs
--- a/src/BNFC/Backend/Txt2Tag.hs
+++ b/src/BNFC/Backend/Txt2Tag.hs
@@ -44,18 +44,18 @@
                ]
 
 prtTerminals :: String -> CF -> String
-prtTerminals name cf = unlines [
-                               "==The lexical structure of " ++ name ++ "==",
-                               identSection cf,
-                               "===Literals===",
-                               prtLiterals name cf,
-                               unlines (map prtOwnToken (tokenPragmas cf)),
-                               "===Reserved words and symbols===",
-                               prtReserved name cf,
-                               prtSymb name cf,
-                               "===Comments===",
-                               prtComments $ comments cf
-                               ]
+prtTerminals name cf = unlines $
+  [ "==The lexical structure of " ++ name ++ "=="
+  , identSection cf
+  , "===Literals==="
+  , prtLiterals cf
+  , unlines (map prtOwnToken (tokenPragmas cf))
+  , "===Reserved words and symbols==="
+  , prtReserved name cf
+  , prtSymb name cf
+  , "===Comments==="
+  , prtComments $ comments cf
+  ]
 
 identSection cf = if not (hasIdent cf) then [] else
                     unlines [
@@ -71,14 +71,13 @@
    "reserved words excluded."
   ]
 
-prtLiterals :: String -> CF -> String
-prtLiterals _ cf =
+prtLiterals :: CF -> String
+prtLiterals cf =
   unlines $ map stringLit $
-    filter (`notElem` [Cat "Ident"]) $
-      literals cf
+    filter (/= catIdent) $ literals cf
 
-stringLit :: Cat -> String
-stringLit cat = unlines $ case show cat of
+stringLit :: TokenCat -> String
+stringLit = unlines . \case
   "Char" -> ["Character literals //Char// have the form",
              "``'``//c//``'``, where //c// is any single character.",
              ""
@@ -98,7 +97,7 @@
   _ -> []
 
 prtOwnToken (name,reg) = unlines
-  [show name +++ "literals are recognized by the regular expression",
+  [name +++ "literals are recognized by the regular expression",
    "```" ++
    latexRegExp reg ++
    "```"
diff --git a/src/BNFC/Backend/XML.hs b/src/BNFC/Backend/XML.hs
--- a/src/BNFC/Backend/XML.hs
+++ b/src/BNFC/Backend/XML.hs
@@ -193,11 +193,12 @@
   "  prt i x = elemTokS i" +++ "\"" ++ t ++ "\"" +++ "x"
   ]
 
-identRule cf = ownPrintRule cf (Cat "Ident")
+identRule cf = ownPrintRule cf catIdent
 
-ownPrintRule cf cat = unlines [
-  "instance XPrint " ++ show cat ++ " where",
-  "  prt i (" ++ show cat ++ posn ++ ") = elemTok i" +++ "\"" ++ show cat ++ "\"" +++ "x"
+ownPrintRule :: CF -> TokenCat -> String
+ownPrintRule cf cat = unlines $
+  [ "instance XPrint " ++ cat ++ " where"
+  , "  prt i (" ++ cat ++ posn ++ ") = elemTok i" +++ "\"" ++ cat ++ "\"" +++ "x"
   ]
  where
    posn = if isPositionCat cf cat then " (_,x)" else " x"
@@ -226,7 +227,7 @@
                           "newtype","of","then","type","where","as","qualified","hiding"]
    ruleOf s = fromJust $ lookupRule s (cfgRules cf)
 
---- case_fun :: Cat -> [(Constructor,Rule)] -> String
+-- case_fun :: Cat -> [(Constructor,Rule)] -> String
 case_fun cat xs = unlines [
   "instance XPrint" +++ show cat +++ "where",
   "  prt i" +++ "e = case e of",
diff --git a/src/BNFC/CF.hs b/src/BNFC/CF.hs
--- a/src/BNFC/CF.hs
+++ b/src/BNFC/CF.hs
@@ -1,4 +1,8 @@
-{-# LANGUAGE PatternGuards, DeriveFunctor #-}
+{-# LANGUAGE DeriveFunctor #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE RecordWildCards #-}
+
 {-
     BNF Converter: Abstract syntax
     Copyright (C) 2004  Author:  Markus Forsberg, Michael Pellauer, Aarne Ranta
@@ -28,7 +32,8 @@
             Literal,
             Symbol,
             KeyWord,
-            Cat(..), strToCat,
+            Cat(..), strToCat, catToStr,
+            TokenCat,
             catString, catInteger, catDouble, catChar, catIdent,
             NonTerminal,
             Fun,
@@ -41,6 +46,7 @@
             -- Literal categories, constants,
             firstCat,       -- the first value category in the grammar.
             firstEntry,     -- the first entry or the first value category
+            baseTokenCatNames,  -- "Char", "Double", "Integer", "String"
             specialCats,    -- ident
             specialCatsP,   -- all literals
             specialData,    -- special data
@@ -61,9 +67,8 @@
             rulesForNormalizedCat,    -- rules for a given category
             ruleGroups,     -- Categories are grouped with their rules.
             ruleGroupsInternals, --As above, but includes internal cats.
-            notUniqueNames, -- list of not unique names (replaces the following 2)
---          notUniqueFuns,   -- Returns a list of function labels that are not unique.
---            badInheritence, -- Returns a list of all function labels that can cause problems in languages with inheritence.
+            allNames,        -- Checking for non-unique names, like @Name. Name ::= Ident;@.
+            filterNonUnique,
             isList,         -- Checks if a category is a list category.
             isTokenCat,
             sameCat,
@@ -216,12 +221,12 @@
               deriving (Show)
 
 -- | User-defined regular expression tokens
-tokenPragmas :: CFG f -> [(Cat,Reg)]
-tokenPragmas cf = [ (TokenCat name, e) | TokenReg name _ e <- cfgPragmas cf ]
+tokenPragmas :: CFG f -> [(TokenCat,Reg)]
+tokenPragmas cf = [ (name, e) | TokenReg name _ e <- cfgPragmas cf ]
 
 -- | The names of all user-defined tokens.
 tokenNames :: CFG f -> [String]
-tokenNames cf = map (show . fst) (tokenPragmas cf)
+tokenNames cf = map fst (tokenPragmas cf)
 
 layoutPragmas :: CF -> (Bool,[String],[String])
 layoutPragmas cf = let ps = cfgPragmas cf in (
@@ -234,7 +239,7 @@
 hasLayout cf = case layoutPragmas cf of
   (t,ws,_) -> t || not (null ws)   -- (True,[],_) means: top-level layout only
 
--- | Literal: Char, String, Ident, Integer, Double
+-- | Literal: builtin-token types Char, String, Ident, Integer, Double.
 type Literal = String
 type Symbol  = String
 type KeyWord = String
@@ -243,26 +248,30 @@
 -- Categories
 ------------------------------------------------------------------------------
 
--- | Categories are the Non-terminals of the grammar.
+-- | Categories are the non-terminals of the grammar.
 data Cat
   = InternalCat       -- ^ Internal category, inserted in 1st
-                      -- position in "internal" rules,
-                      -- essentially ensuring that they are never parsed.
-  | Cat String
-  | TokenCat String   -- ^ Token types (like @Ident@).
-  | ListCat Cat
-  | CoercCat String Integer
+                      --   position in "internal" rules,
+                      --   essentially ensuring that they are never parsed.
+  | Cat String               -- ^ Ordinary non-terminal.
+  | TokenCat TokenCat        -- ^ Token types (like @Ident@, @Integer@, ..., user-defined).
+  | ListCat Cat              -- ^ List non-terminals, e.g., @[Ident]@, @[Exp]@, @[Exp1]@.
+  | CoercCat String Integer  -- ^ E.g. @Exp1@, @Exp2.
   deriving (Eq, Ord)
 
+type TokenCat = String
+
 -- An alias for Cat used in many backends:
 type NonTerminal = Cat
 
 -- | Render category symbols as strings
-catToStr InternalCat = "#"
-catToStr (Cat s) = s
-catToStr (TokenCat s) = s
-catToStr (ListCat c) = "[" ++ show c ++ "]"
-catToStr (CoercCat s i) = s ++ show i
+catToStr :: Cat -> String
+catToStr = \case
+  InternalCat  -> "#"
+  Cat s        -> s
+  TokenCat s   -> s
+  ListCat c    -> "[" ++ catToStr c ++ "]"
+  CoercCat s i -> s ++ show i
 
 instance Show Cat where
   show = catToStr
@@ -286,16 +295,20 @@
         cat2cat (AbsBNF.ListCat c) = ListCat (cat2cat c)
 
 -- Build-in categories contants
-catString, catInteger, catDouble, catChar, catIdent :: Cat
-catString  = TokenCat "String"
-catInteger = TokenCat "Integer"
-catDouble  = TokenCat "Double"
-catChar    = TokenCat "Char"
-catIdent   = TokenCat "Ident"
+catString, catInteger, catDouble, catChar, catIdent :: TokenCat
+catString  = "String"
+catInteger = "Integer"
+catDouble  = "Double"
+catChar    = "Char"
+catIdent   = "Ident"
 
+-- | Token categories corresponding to base types.
+baseTokenCatNames :: [TokenCat]
+baseTokenCatNames = [ catChar, catDouble, catInteger, catString ]
+
 -- the parser needs these
-specialCatsP :: [String]
-specialCatsP = words "Ident Integer String Char Double"
+specialCatsP :: [TokenCat]
+specialCatsP = catIdent : baseTokenCatNames
 
 -- | Does the category correspond to a data type?
 isDataCat :: Cat -> Bool
@@ -388,8 +401,6 @@
 
 ------------------------------------------------------------------------------
 
-type Name = String
-
 -- | Abstract syntax tree.
 newtype Tree = Tree (Fun,[Tree])
 
@@ -407,12 +418,19 @@
 
 -- aggressively ban nonunique names (AR 31/5/2012)
 
-notUniqueNames :: [Name] -> CF -> [Fun]
-notUniqueNames reserved cf = [head xs | xs <- xss, length xs > 1] where
-  xss = group (sort names)
-  names = reserved ++ allCatsIdNorm cf ++ allFuns cf
-  allFuns g = [ f | f <- map funRule (cfgRules g), not (isNilCons f || isCoercion f)]
+-- | Categories and constructors.
+allNames :: CF -> [Fun]
+allNames cf = allCatsIdNorm cf ++
+  [ f | f <- map funRule $ cfgRules cf
+      , not $ isNilCons f
+      , not $ isCoercion f
+  ]
 
+-- | Get all elements with more than one occurrence.
+filterNonUnique :: (Ord a) => [a] -> [a]
+filterNonUnique xs = [ x | (x:_:_) <- group $ sort xs ]
+
+
 -- | Extract the comment pragmas.
 commentPragmas :: [Pragma] -> [Pragma]
 commentPragmas = filter isComment
@@ -445,11 +463,11 @@
 
 -- | Gets all normalized identified Categories
 allCatsIdNorm :: CF -> [String]
-allCatsIdNorm = nub . map (identCat . normCat) . allCats
+allCatsIdNorm = nub . map (identCat . normCat . valCat) . cfgRules
 
 -- | Get all normalized Cat
 allCatsNorm :: CF -> [Cat]
-allCatsNorm = nub . map normCat . allCats
+allCatsNorm = nub . map (normCat . valCat) . cfgRules
 
 -- | Is the category is used on an rhs?
 isUsedCat :: CFG f -> Cat -> Bool
@@ -464,11 +482,8 @@
 ruleGroupsInternals cf = [(c, rulesForCat' cf c) | c <- allCats cf]
 
 -- | Get all literals of a grammar. (e.g. String, Double)
-literals :: CFG f -> [Cat]
-literals cf = [TokenCat l | l <- lits] ++ owns
- where
-   lits = cfgLiterals cf
-   owns = map fst (tokenPragmas cf)
+literals :: CFG f -> [TokenCat]
+literals cf = cfgLiterals cf ++ map fst (tokenPragmas cf)
 
 -- | Get the keywords of a grammar.
 reservedWords :: CFG f -> [String]
@@ -490,15 +505,15 @@
 
 -- | Whether the grammar uses the predefined Ident type.
 hasIdent :: CFG f -> Bool
-hasIdent cf = isUsedCat cf catIdent
+hasIdent cf = isUsedCat cf $ TokenCat catIdent
 
 
 -- these need new datatypes
 
 -- | Categories corresponding to tokens. These end up in the
 -- AST. (unlike tokens returned by 'cfTokens')
-specialCats :: CF -> [Cat]
-specialCats cf = (if hasIdent cf then (TokenCat "Ident":) else id) (map fst (tokenPragmas cf))
+specialCats :: CF -> [TokenCat]
+specialCats cf = (if hasIdent cf then (catIdent:) else id) (map fst (tokenPragmas cf))
 
 -- to print parse trees
 prTree :: Tree -> String
@@ -518,7 +533,7 @@
 -- All categories are normalized, so a rule like:
 --     EAdd . Exp2 ::= Exp2 "+" Exp3 ;
 -- Will give the following signature: EAdd : Exp -> Exp -> Exp
-getAbstractSyntax :: CF -> [(Cat, [(Fun, [Cat])])]
+getAbstractSyntax :: CF -> [Data]
 getAbstractSyntax cf = [ ( c, nub (constructors c) ) | c <- allCatsNorm cf ]
   where
     constructors cat = do
@@ -542,18 +557,18 @@
                               let f = funRule r,
                               not (isDefinedRule f),
                               not (isCoercion f), sameCat cat (valCat r)]))
-      | cat <- filter predicate (allCats cf)]
+      | cat <- nub $ map normCat $ filter predicate $ allCats cf ]
  where
-  mkData (Rule f _ its) = (f,[normCat c | Left c <- its, c /= InternalCat])
+  mkData (Rule f _ its) = (f, [normCat c | Left c <- its, c /= InternalCat])
 
 cf2data :: CF -> [Data]
-cf2data = cf2data' isDataCat
+cf2data = cf2data' $ isDataCat . normCat
 
 cf2dataLists :: CF -> [Data]
-cf2dataLists = cf2data' isDataOrListCat
+cf2dataLists = cf2data' $ isDataOrListCat . normCat
 
 specialData :: CF -> [Data]
-specialData cf = [(c,[(show c,[TokenCat "String"])]) | c <- specialCats cf] where
+specialData cf = [(TokenCat name, [(name, [TokenCat catString])]) | name <- specialCats cf]
 
 -- to deal with coercions
 
@@ -638,8 +653,8 @@
 
 
 -- | Does the category have a position stored in AST?
-isPositionCat :: CFG f -> Cat -> Bool
-isPositionCat cf cat =  or [b | TokenReg name b _ <- cfgPragmas cf, TokenCat name == cat]
+isPositionCat :: CFG f -> TokenCat -> Bool
+isPositionCat cf cat = or [ b | TokenReg name b _ <- cfgPragmas cf, name == cat]
 
 -- | Grammar with permutation profile à la GF. AR 22/9/2004
 type CFP   = CFG FunP
diff --git a/src/BNFC/GetCF.hs b/src/BNFC/GetCF.hs
--- a/src/BNFC/GetCF.hs
+++ b/src/BNFC/GetCF.hs
@@ -20,28 +20,37 @@
 
 module BNFC.GetCF where
 
+import Control.Arrow (left)
+import Control.Monad.State (State, evalState, get, modify)
+
+import Data.Char
+import Data.Either  (partitionEithers)
+import Data.Functor ((<$>))
+import Data.List    (nub, partition)
+import Data.Maybe   (mapMaybe)
+
+import qualified Data.Foldable as Fold
+
+import System.Exit (exitFailure)
+import System.IO   (hPutStrLn, stderr)
+
+-- Local imports:
+
 import qualified AbsBNF as Abs
 import ParBNF
+import ErrM
+
 import BNFC.CF
 import BNFC.Options
 import BNFC.TypeChecker
 import BNFC.Utils
 
-import Control.Arrow (left)
-import Control.Monad.State
-import Data.Char
-import Data.Either (partitionEithers)
-import Data.List(nub,partition)
-import Data.Maybe (mapMaybe)
-import ErrM
-import System.Exit (exitFailure)
-import System.IO (hPutStrLn, stderr)
 
 -- $setup
 -- >>> import PrintBNF
 
 parseCF :: SharedOptions -> Target -> String -> IO CF
-parseCF opts t s = liftM cfp2cf (parseCFP opts t s)
+parseCF opts t s = cfp2cf <$> parseCFP opts t s
 
 parseCFP :: SharedOptions -> Target -> String -> IO CFP
 parseCFP opts target content = do
@@ -51,36 +60,55 @@
                     >>= markTokenCategories
   let cf = cfp2cf cfp
   runErr $ checkDefinitions cf
-  let msgs3 = checkTokens cf
 
-  let reserved = [lang opts | target == TargetJava ]
+  -- Some backends do not allow the grammar name to coincide with
+  -- one of the category or constructor names.
+  let names    = allNames cf
+  () <- when (target == TargetJava && lang opts `elem` names) $
+      die $ unwords $
+        [ "ERROR of backend", show target ++ ":"
+        , "the language name"
+        , lang opts
+        , "conflicts with a name defined in the grammar."
+        ]
 
-  -- Warn of fail if the grammar use non unique names
-  case filter (not . isDefinedRule) $ notUniqueNames reserved cf of
+  -- Warn of fail if the grammar uses non unique names
+  case filter (not . isDefinedRule) $ filterNonUnique names of
     [] -> return ()
-    ns| target `notElem` [TargetHaskell,TargetHaskellGadt,TargetOCaml]
-      -> fail $ "ERROR: names not unique: " ++ unwords ns
-      | otherwise
-      -> do putStrLn $ "Warning: names not unique: " ++ unwords ns
-            putStrLn "This can be an error in other back ends."
+    ns | target `notElem` [TargetHaskell,TargetHaskellGadt,TargetOCaml]
+       -> die $ unlines $
+            [ "ERROR: names not unique: " ++ unwords ns
+            , "This is an error in the backend " ++ show target
+            ]
+       | otherwise
+       -> putStrLn $ unlines $
+            [ "Warning: names not unique: " ++ unwords ns
+            , "This can be an error in other back ends."
+            ]
 
-  -- Print msgs3
-  putStrLn $ unlines msgs3
+  -- Print warnings if user defined nullable tokens.
+  Fold.mapM_ putStrLn $ checkTokens cf
 
   -- Print the number of rules
-  putStrLn $ show (length (cfgRules cf)) +++ "rules accepted\n"
+  let nRules = length (cfgRules cf)
+  -- Note: the match against () is necessary for type class instance resolution.
+  () <- when (nRules == 0) $ die $ "ERROR: the grammar contains no rules."
+  putStrLn $ show nRules +++ "rules accepted\n"
 
   -- Print a warning if comment delimiter are bigger than 2 characters
   let c3s = [(b,e) | (b,e) <- fst (comments cf), length b > 2 || length e > 2]
-  unless (null c3s) $do
+  unless (null c3s) $ do
       putStrLn "Warning: comment delimiters longer than 2 characters ignored in Haskell:"
       mapM_ putStrLn [b +++ "-" +++ e | (b,e) <- c3s]
   return cfp
 
   where
     runErr (Ok a) = return a
-    runErr (Bad msg) = hPutStrLn stderr msg >> exitFailure
+    runErr (Bad msg) = die msg
 
+die :: String -> IO a
+die msg = hPutStrLn stderr msg >> exitFailure
+
 {-
     case filter (not . isDefinedRule) $ notUniqueFuns cf of
      [] -> case (badInheritence cf) of
@@ -117,7 +145,8 @@
                   (symbols,keywords) = partition notIdent reservedWords
                   notIdent s         = null s || not (isAlpha (head s)) || any (not . isIdentRest) s
                   isIdentRest c      = isAlphaNum c || c == '_' || c == '\''
-                  reservedWords      = nub [t | r <- rules, Right t <- rhsRule r]
+                  reservedWords      = nub [t | r <- rules, isParsable r, Right t <- rhsRule r]
+                     -- Issue #204: exclude keywords from internal rules
               in CFG pragma literals symbols keywords [] rules
     case mapMaybe (checkRule (cfp2cf cf0)) (cfgRules cf0) of
       [] -> return ()
@@ -343,16 +372,18 @@
 
 --------------------------------------------------------------------------------
 
---checkTokens :: CFG f -> [String]
-checkTokens cf =
-    if null ns
-    then []
-    else ["Warning : ", -- change to error in a future version
-          "  The following tokens accept the empty string: ",
-          "    "++unwords ns,
-          "  This is error-prone and will not be supported in the future."]
+-- | Check if any of the user-defined terminal categories is nullable.
+checkTokens :: CFG f -> Maybe String
+checkTokens cf
+  | null ns   = Nothing
+  | otherwise = Just $ unlines
+      [ "Warning : "  -- TODO: change to error in a future version
+      , "  The following tokens accept the empty string: "
+      , "    " ++ unwords ns
+      , "  This is error-prone and will not be supported in the future."
+      ]
   where
-    ns = map (show.fst) . filter (nullable.snd) $ tokenPragmas cf
+    ns = map (show . fst) . filter (nullable . snd) $ tokenPragmas cf
 
 -- | Check if a regular expression is nullable (accepts the empty string)
 nullable :: Abs.Reg -> Bool
@@ -464,7 +495,7 @@
     expand other = return [other]
     mkRule :: Abs.Ident -> Abs.RHS -> State [(String, Int)] Abs.Def
     mkRule ident (Abs.RHS rhs) = do
-      fun <- liftM (Abs.LabNoP . Abs.Id . Abs.Ident) (mkName ident rhs)
+      fun <- Abs.LabNoP . Abs.Id . Abs.Ident <$> mkName ident rhs
       return (Abs.Rule fun (Abs.IdCat ident) rhs)
     mkName :: Abs.Ident -> [Abs.Item] -> State [(String, Int)] String
     mkName (Abs.Ident cat) [Abs.Terminal s]
@@ -472,6 +503,6 @@
     mkName (Abs.Ident cat) [Abs.NTerminal (Abs.IdCat (Abs.Ident s))] =
         return (cat ++ s)
     mkName (Abs.Ident cat) _ = do
-        i <- liftM (maybe 1 (+1) . lookup cat) get
+        i <- maybe 1 (+1) . lookup cat <$> get
         modify ((cat, i):)
         return (cat ++ show i)
diff --git a/src/BNFC/Lexing.hs b/src/BNFC/Lexing.hs
--- a/src/BNFC/Lexing.hs
+++ b/src/BNFC/Lexing.hs
@@ -26,7 +26,7 @@
     [ (mkRegMultilineComment b e, LexComment) | (b,e) <- fst (comments cf) ]
     ++
     -- user tokens
-    [ (reg, LexToken name) | (Cat name, reg) <- tokenPragmas cf]
+    [ (reg, LexToken name) | (name, reg) <- tokenPragmas cf]
     ++
     -- predefined tokens
     [ ( regIdent, LexToken "Ident" ) ]
diff --git a/src/BNFC/MultiView.hs b/src/BNFC/MultiView.hs
--- a/src/BNFC/MultiView.hs
+++ b/src/BNFC/MultiView.hs
@@ -20,6 +20,8 @@
 
 module BNFC.MultiView where
 
+import Data.Maybe
+
 import ParBNF
 import PrintBNF
 import AbsBNF
@@ -39,17 +41,14 @@
 
 extract :: String -> LGrammar -> [(FilePath, Grammar)]
 extract name (LGr ldefs) =
-  [(file lang,Grammar [unldef ldef | ldef <- ldefs, isFor lang ldef]) |
+  [(file lang,Grammar $ mapMaybe (getDef lang) ldefs) |
       lang <- views]
  where
    views = [lang | LDefView langs <- ldefs, Ident lang <- langs]
-   isFor lang ldef = case ldef of
-     DefAll _ -> True
-     DefSome ids _ -> elem (Ident lang) ids
-     _ -> False
-   unldef ldef = case ldef of
-     DefAll d -> d
-     DefSome _ d -> d
+   getDef lang ldef = case ldef of
+     DefAll d -> Just d
+     DefSome ids d | elem (Ident lang) ids -> Just d
+     _ -> Nothing
    file lang = name ++ "_" ++ lang ++ ".cf"
 
 --- the entrypoint is the same for all languages - could be different
@@ -59,11 +58,11 @@
   [c | Entryp (Ident c:_) <- rs] ++
   [c | Rule _ (IdCat (Ident c)) _ <- rs]
  where
-   rs = concatMap getR rs0
+   rs = mapMaybe getR rs0
    getR d = case d of
-     DefAll d -> [d]
-     DefSome _ d -> [d]
-     _ -> [] --- LDefView
+     DefAll d -> Just d
+     DefSome _ d -> Just d
+     _LDefView -> Nothing
 
 writeCF :: (FilePath, Grammar) -> IO ()
 writeCF (file,gr) = do
@@ -87,14 +86,14 @@
   let content = makefile xx abs cncs
   writeFile "Makefile" content
 
-makefile xx abs cncs = unlines $
+makefile _ abs cncs = unlines $
   "all:" :
   ["\tmake -f Makefile_" ++ cnc | cnc <- cncs] ++
   ["\tghc --make -o TestTrans" ++ abs ++ " TestTrans" ++ abs,
    ""
   ]
 
-testfile cat xx abs cncs = unlines $
+testfile cat _ abs cncs = unlines $
   ["module Main where"] ++
   ["import qualified Lex" ++ cnc | cnc <- cncs] ++
   ["import qualified Par" ++ cnc | cnc <- cncs] ++
diff --git a/src/BNFC/Options.hs b/src/BNFC/Options.hs
--- a/src/BNFC/Options.hs
+++ b/src/BNFC/Options.hs
@@ -1,13 +1,20 @@
+{-# LANGUAGE LambdaCase #-}
+
 module BNFC.Options where
 
-import BNFC.CF (CF)
-import Data.Maybe (fromMaybe)
-import Data.Version ( showVersion )
-import Paths_BNFC ( version )
+import Data.Maybe      (fromMaybe, maybeToList)
+import Data.Monoid     (Monoid) -- ghc 7.8
+import Data.Version    (showVersion )
+
 import System.Console.GetOpt
 import System.FilePath (takeBaseName)
-import Text.Printf (printf)
 
+import Text.Printf     (printf)
+
+import Paths_BNFC      (version)
+import BNFC.CF         (CF)
+import BNFC.Utils      (unless)
+
 -- ~~~ Option data structures ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 -- | To decouple the option parsing from the execution of the program,
 -- we introduce a data structure that holds the result of the
@@ -28,12 +35,16 @@
 data Target = TargetC | TargetCpp | TargetCppNoStl | TargetCSharp
             | TargetHaskell | TargetHaskellGadt | TargetLatex
             | TargetJava | TargetOCaml | TargetProfile | TargetPygments
-  deriving (Eq,Bounded, Enum,Ord)
+  deriving (Eq, Bounded, Enum, Ord)
 
--- Create a list of all target using the enum and bounded classes
+-- | List of all targets (using the enum and bounded classes).
 targets :: [Target]
 targets = [minBound..]
 
+-- | List of Haskell target.
+haskellTargets :: [Target]
+haskellTargets = [ TargetHaskell, TargetHaskellGadt, TargetProfile ]
+
 instance Show Target where
   show TargetC            = "C"
   show TargetCpp          = "C++"
@@ -61,61 +72,155 @@
 data RecordPositions = RecordPositions | NoRecordPositions
     deriving (Eq,Show,Ord)
 
--- | This is the option record that is passed to the different backends
+-- | This is the option record that is passed to the different backends.
 data SharedOptions = Options
-  -- Option shared by at least 2 backends
-  { target :: Target
-  , make :: Maybe String     -- ^ The name of the Makefile to generate
-  -- or Nothing for no Makefile.
-  , inPackage :: Maybe String -- ^ The hierarchical package to put
-                              --   the modules in, or Nothing.
-  , cnf :: Bool               -- ^ Generate CNF-like tables?
-  , lang :: String
-  -- Haskell specific:
-  , alexMode :: AlexVersion
-  , javaLexerParser :: JavaLexerParser
-  , inDir :: Bool
-  , shareStrings :: Bool
-  , byteStrings :: Bool
-  , glr :: HappyMode
-  , xml :: Int
-  , ghcExtensions :: Bool
-  -- C++ specific
+  --- Option shared by at least 2 backends
+  { lbnfFile    :: FilePath        -- ^ The input file BNFC processes.
+  , lang        :: String          -- ^ The language we generate: the basename of 'lbnfFile'.
+  , outDir      :: FilePath        -- ^ Target directory for generated files.
+  , target      :: Target          -- ^ E.g. @--haskell@.
+  , make        :: Maybe String    -- ^ The name of the Makefile to generate or Nothing for no Makefile.
+  , inPackage   :: Maybe String    -- ^ The hierarchical package to put the modules in, or Nothing.
   , linenumbers :: RecordPositions -- ^ Add and set line_number field for syntax classes
-  -- C# specific
-  , visualStudio :: Bool      -- ^ Generate Visual Studio solution/project files
-  , wcf :: Bool               -- ^ Windows Communication Foundation
-  , functor :: Bool
-  , outDir :: FilePath        -- ^ Target directory for generated files
-  } deriving (Eq,Show,Ord)
+  --- Haskell specific:
+  , inDir         :: Bool        -- ^ Option @-d@.
+  , ghcExtensions :: Bool        -- ^ Option @--ghc@.
+  , functor       :: Bool        -- ^ Option @--functor@.  Make AST functorial?
+  , alexMode      :: AlexVersion -- ^ Options @--alex@.
+  , shareStrings  :: Bool        -- ^ Option @--sharestrings@.
+  , byteStrings   :: Bool        -- ^ Option @--bytestrings@.
+  , glr           :: HappyMode   -- ^ Happy option @--glr@.
+  , xml           :: Int         -- ^ Options @--xml@, generate DTD and XML printers.
+  , cnf           :: Bool        -- ^ Option @--cnf@. Generate CNF-like tables?
+  , agda          :: Bool        -- ^ Option @--agda@. Create bindings for Agda?
+  --- Java specific
+  , javaLexerParser :: JavaLexerParser
+  --- C# specific
+  , visualStudio  :: Bool        -- ^ Generate Visual Studio solution/project files.
+  , wcf           :: Bool        -- ^ Windows Communication Foundation.
+  } deriving (Eq, Ord, Show)
 
--- | We take this oportunity to define the type of the backend functions
-type Backend = SharedOptions  -- ^ options
+-- | We take this oportunity to define the type of the backend functions.
+type Backend = SharedOptions  -- ^ Options
             -> CF             -- ^ Grammar
             -> IO ()
 
 defaultOptions :: SharedOptions
 defaultOptions = Options
-  { cnf = False
-  , target = TargetHaskell
-  , inPackage = Nothing
-  , make = Nothing
-  , alexMode = Alex3
-  , inDir = False
-  , shareStrings = False
-  , byteStrings = False
-  , glr = Standard
-  , xml = 0
-  , ghcExtensions = False
-  , lang = error "lang not set"
-  , linenumbers = NoRecordPositions
-  , visualStudio = False
-  , wcf = False
-  , functor = False
-  , outDir  = "."
+  { lbnfFile        = error "lbnfFile not set"
+  , lang            = error "lang not set"
+  , outDir          = "."
+  , target          = TargetHaskell
+  , make            = Nothing
+  , inPackage       = Nothing
+  , linenumbers     = NoRecordPositions
+  -- Haskell specific
+  , inDir           = False
+  , ghcExtensions   = False
+  , functor         = False
+  , alexMode        = Alex3
+  , shareStrings    = False
+  , byteStrings     = False
+  , glr             = Standard
+  , xml             = 0
+  , cnf             = False
+  , agda            = False
+  -- Java specific
   , javaLexerParser = JLexCup
+  -- C# specific
+  , visualStudio    = False
+  , wcf             = False
   }
 
+-- | Check whether an option is unchanged from the default.
+isDefault :: (Eq a)
+  => (SharedOptions -> a)  -- ^ Option field name.
+  -> SharedOptions         -- ^ Options.
+  -> Bool
+isDefault flag opts = flag opts == flag defaultOptions
+
+-- | Return something in case option differs from default.
+unlessDefault :: (Monoid m, Eq a)
+  => (SharedOptions -> a)  -- ^ Option field name.
+  -> SharedOptions         -- ^ Options.
+  -> (a -> m)              -- ^ Action in case option differs from standard.
+  -> m
+unlessDefault flag opts f = unless (o == flag defaultOptions) $ f o
+  where o = flag opts
+
+-- -- | Return something in case option is unchanged from default.
+-- whenDefault :: (Monoid m, Eq a)
+--   => (SharedOptions -> a)  -- ^ Option field name.
+--   -> SharedOptions         -- ^ Options.
+--   -> m                     -- ^ Action in case option is unchanged from standard.
+--   -> m
+-- whenDefault flag opts m = when (o == flag defaultOptions) m
+--   where o = flag opts
+
+-- | Print options as input to BNFC.
+--
+-- @unwords [ "bnfc", printOptions opts ]@ should call bnfc with the same options
+-- as the current instance.
+--
+printOptions :: SharedOptions -> String
+printOptions opts = unwords . concat $
+  [ [ printTargetOption tgt ]
+  -- General and shared options:
+  , unlessDefault outDir opts $ \ o -> [ "--outputdir=" ++ o ]
+  , [ "--makefile=" ++ m  | m <- maybeToList $ make opts        ]
+  , [ "-p " ++ p          | p <- maybeToList $ inPackage opts   ]
+  , unlessDefault linenumbers opts $ const [ "-l" ]
+  -- Haskell options:
+  , [ "-d"                | inDir opts                          ]
+  , [ "--ghc"             | ghcExtensions opts                  ]
+  , [ "--functor"         | functor opts                        ]
+  , unlessDefault alexMode opts $ \ o -> [ printAlexOption o ]
+  , [ "--sharestrings"    | shareStrings opts                   ]
+  , [ "--bytestrings"     | byteStrings opts                    ]
+  , [ "--glr"             | glr opts == GLR                     ]
+  , [ "--xml"             | xml opts == 1                       ]
+  , [ "--xmlt"            | xml opts == 2                       ]
+  , [ "--cnf"             | cnf opts                            ]
+  , [ "--agda"            | agda opts                           ]
+  -- C# options:
+  , [ "--vs"              | visualStudio opts                   ]
+  , [ "--wfc"             | wcf opts                            ]
+  -- Java options:
+  , unlessDefault javaLexerParser opts $ \ o -> [ printJavaLexerParserOption o ]
+  -- Grammar file:
+  , [ lbnfFile opts ]
+  ]
+  where
+  tgt = target opts
+  haskell = tgt `elem` haskellTargets
+
+-- | Print target as an option to BNFC.
+printTargetOption :: Target -> String
+printTargetOption = ("--" ++) . \case
+  TargetC           -> "c"
+  TargetCpp         -> "cpp"
+  TargetCppNoStl    -> "cpp-nostl"
+  TargetCSharp      -> "csharp"
+  TargetHaskell     -> "haskell"
+  TargetHaskellGadt -> "haskell-gadt"
+  TargetLatex       -> "latex"
+  TargetJava        -> "java"
+  TargetOCaml       -> "ocaml"
+  TargetProfile     -> "profile"
+  TargetPygments    -> "pygments"
+
+printAlexOption :: AlexVersion -> String
+printAlexOption = ("--" ++) . \case
+  Alex1 -> "alex1"
+  Alex2 -> "alex2"
+  Alex3 -> "alex3"
+
+printJavaLexerParserOption :: JavaLexerParser -> String
+printJavaLexerParserOption = ("--" ++) . \case
+  JLexCup  -> "jlex"
+  JFlexCup -> "jflex"
+  Antlr4   -> "antlr4"
+
 -- ~~~ Option definition ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 -- This defines bnfc's "global" options, like --help
 globalOptions :: [ OptDescr Mode ]
@@ -126,7 +231,7 @@
 -- | Options for the target languages
 -- targetOptions :: [ OptDescr Target ]
 targetOptions :: [ OptDescr (SharedOptions -> SharedOptions)]
-targetOptions = 
+targetOptions =
   [ Option "" ["java"]          (NoArg (\o -> o {target = TargetJava}))
     "Output Java code [default: for use with JLex and CUP]"
   , Option "" ["haskell"]       (NoArg (\o -> o {target = TargetHaskell}))
@@ -156,153 +261,199 @@
 specificOptions :: [(OptDescr (SharedOptions -> SharedOptions), [Target])]
 specificOptions =
   [ ( Option ['l'] [] (NoArg (\o -> o {linenumbers = RecordPositions}))
-        "Add and set line_number field for all syntax classes\nJava requires cup 0.11b-2014-06-11 or greater"
-    , [TargetCpp, TargetJava] )
+          "Add and set line_number field for all syntax classes\nJava requires cup 0.11b-2014-06-11 or greater"
+    , [TargetC, TargetCpp, TargetJava] )
   , ( Option ['p'] []
       (ReqArg (\n o -> o {inPackage = Just n}) "<namespace>")
-      "Prepend <namespace> to the package/module name"
-    , [TargetCpp, TargetCSharp, TargetHaskell, TargetHaskellGadt, TargetProfile, TargetJava] )
-  , ( Option [] ["jflex"] (NoArg (\o -> o {javaLexerParser = JFlexCup}))
+          "Prepend <namespace> to the package/module name"
+    , [TargetCpp, TargetCSharp, TargetJava] ++ haskellTargets)
+  -- Java backend:
+  , ( Option [] ["jlex"  ] (NoArg (\o -> o {javaLexerParser = JLexCup}))
+          "Lex with JLex, parse with CUP (default)"
+    , [TargetJava] )
+  , ( Option [] ["jflex" ] (NoArg (\o -> o {javaLexerParser = JFlexCup}))
           "Lex with JFlex, parse with CUP"
     , [TargetJava] )
-    , ( Option [] ["jlex"] (NoArg (\o -> o {javaLexerParser = Antlr4}))
-                  "Lex with Jlex, parse with CUP (default)"
-            , [TargetJava] )
-    , ( Option [] ["antlr4"] (NoArg (\o -> o {javaLexerParser = Antlr4}))
-              "Lex and parse with antlr4"
-        , [TargetJava] )
+  , ( Option [] ["antlr4"] (NoArg (\o -> o {javaLexerParser = Antlr4}))
+          "Lex and parse with antlr4"
+    , [TargetJava] )
+  -- C++ backend:
   , ( Option [] ["vs"] (NoArg (\o -> o {visualStudio = True}))
           "Generate Visual Studio solution/project files"
     , [TargetCSharp] )
   , ( Option [] ["wcf"] (NoArg (\o -> o {wcf = True}))
           "Add support for Windows Communication Foundation,\n by marking abstract syntax classes as DataContracts"
     , [TargetCSharp] )
+  -- Haskell backends:
   , ( Option ['d'] [] (NoArg (\o -> o {inDir = True}))
           "Put Haskell code in modules Lang.* instead of Lang*"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
   , ( Option []    ["alex1"] (NoArg (\o -> o {alexMode = Alex1}))
           "Use Alex 1.1 as Haskell lexer tool"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
   , ( Option []    ["alex2"] (NoArg (\o -> o {alexMode = Alex2}))
           "Use Alex 2 as Haskell lexer tool"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
   , ( Option []    ["alex3"] (NoArg (\o -> o {alexMode = Alex3}))
           "Use Alex 3 as Haskell lexer tool (default)"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
   , ( Option []    ["sharestrings"] (NoArg (\o -> o {shareStrings = True}))
           "Use string sharing in Alex 2 lexer"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
   , ( Option []    ["bytestrings"] (NoArg (\o -> o {byteStrings = True}))
           "Use byte string in Alex 2 lexer"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
   , ( Option []    ["glr"] (NoArg (\o -> o {glr = GLR}))
           "Output Happy GLR parser"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
+  , ( Option []    ["ghc"] (NoArg (\o -> o {ghcExtensions = True}))
+          "Use ghc-specific language extensions"
+    , haskellTargets )
+  , ( Option []    ["functor"] (NoArg (\o -> o {functor = True}))
+          "Make the AST a functor and use it to store the position of the nodes"
+    , haskellTargets )  -- TODO: ok with --profile?
   , ( Option []    ["xml"] (NoArg (\o -> o {xml = 1}))
           "Also generate a DTD and an XML printer"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
   , ( Option []    ["xmlt"] (NoArg (\o -> o {xml = 2}))
           "DTD and an XML printer, another encoding"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
+    , haskellTargets )
+  -- CNF and Agda do not support the GADT syntax
   , ( Option []    ["cnf"] (NoArg (\o -> o {cnf = True}))
           "Use the CNF parser instead of happy"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
-  , ( Option []    ["ghc"] (NoArg (\o -> o {ghcExtensions = True}))
-          "Use ghc-specific language extensions"
-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )
-  , ( Option []    ["functor"] (NoArg (\o -> o {functor = True}))
-          "Make the AST a functor and use it to store the position of the nodes"
     , [TargetHaskell] )
+  , ( Option []    ["agda"] (NoArg (\o -> o {agda = True}))
+          "Also generate Agda bindings for the abstract syntax"
+    , [TargetHaskell] )
   ]
 
+-- | The list of specific options for a target.
+specificOptions' :: Target -> [OptDescr (SharedOptions -> SharedOptions)]
+specificOptions' t = map fst $ filter (elem t . snd) specificOptions
 
-commonOption :: [OptDescr (SharedOptions -> SharedOptions)]
-commonOption =
+commonOptions :: [OptDescr (SharedOptions -> SharedOptions)]
+commonOptions =
   [ Option "m" ["makefile"] (OptArg (setMakefile . fromMaybe "Makefile") "MAKEFILE")
       "generate Makefile"
   , Option "o" ["outputdir"] (ReqArg (\n o -> o {outDir = n}) "DIR")
       "Redirects all generated files into DIR"
   ]
-  where setMakefile = \mf -> \o -> o { make = Just mf }
+  where setMakefile mf o = o { make = Just mf }
 
 allOptions :: [OptDescr (SharedOptions -> SharedOptions)]
-allOptions = targetOptions ++ commonOption ++ map fst specificOptions
+allOptions = targetOptions ++ commonOptions ++ map fst specificOptions
 
+-- | All target options and all specific options for a given target.
+allOptions' :: Target -> [OptDescr (SharedOptions -> SharedOptions)]
+allOptions' t = targetOptions ++ commonOptions ++ specificOptions' t
+
 -- ~~~ Help strings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-title :: String
-title = unlines [
-  "The BNF Converter, "++showVersion version,
-  "(c) Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Björn Bringert, Johan Broberg, Paul Callaghan, ",
-  "    Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Patrik Jansson, ",
-  "    Kristofer Johannisson, Antti-Juhani Kaijanaho, Ulf Norell, ",
-  "    Michael Pellauer and Aarne Ranta 2002 - 2013.",
-  "Free software under GNU General Public License (GPL).",
-  "Bug reports to bnfc-dev@googlegroups.com."
- ]
 
+title :: [String]
+title =
+  [ "The BNF Converter, " ++ showVersion version ++ " (c) 2002-today BNFC development team."
+  , "Free software under GNU General Public License (GPL)."
+  , "List of recent contributors at https://github.com/BNFC/bnfc/graphs/contributors."
+  , "Report bugs at https://github.com/BNFC/bnfc/issues."
+  , ""
+  ]
+
+oldContributors :: [String]
+oldContributors =
+  [ "(c) Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Björn Bringert, Johan Broberg, Paul Callaghan, "
+  , "    Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Patrik Jansson, "
+  , "    Kristofer Johannisson, Antti-Juhani Kaijanaho, Ulf Norell, "
+  , "    Michael Pellauer and Aarne Ranta 2002 - 2013."
+  ]
+
 usage :: String
 usage = "usage: bnfc [--version] [--help] <target language> [<args>] file.cf"
 
 help :: String
-help = unlines $
-    usage:""
-    :usageInfo "Global options"   globalOptions
-    :usageInfo "Common option"      commonOption
-    :usageInfo "Target languages" targetOptions
-    :map targetUsage helpTargets
-  where helpTargets = [TargetHaskell, TargetJava, TargetCpp, TargetCSharp ]
-        targetUsage t = usageInfo
-                        (printf "Special options for the %s backend" (show t))
-                        (map fst $ filter(elem t . snd)specificOptions)
+help = unlines $ title ++
+    [ usage
+    , ""
+    , usageInfo "Global options"   globalOptions
+    , usageInfo "Common options"   commonOptions
+    , usageInfo "Target languages" targetOptions
+    ] ++ map targetUsage helpTargets
+  where
+  helpTargets = [ TargetHaskell, TargetJava, TargetC, TargetCpp, TargetCSharp ]
+  targetUsage t = usageInfo
+    (printf "Special options for the %s backend" (show t))
+    (specificOptions' t)
 
 -- ~~~ Parsing machinery ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 -- | Main parsing function
 parseMode :: [String] -> Mode
+parseMode []   = Help
 parseMode args =
-  case args' of
-    [] -> Help
-    _ -> case getOpt' Permute globalOptions args' of
-      (mode:_,_,_,_) -> mode
-      _ -> case getOpt Permute allOptions args' of
-        (_,_,e:_) -> UsageError e
-        (_,[],_)   -> UsageError "Missing grammar file"
-        (optionsUpdates, [grammar], []) ->
-          let options = foldl (.) id optionsUpdates defaultOptions in
-          Target (options {lang = takeBaseName grammar}) grammar
-        (_,_,_)    -> UsageError "Too many arguments"
-  where args' = translateOldOptions args
+  -- First, check for global options like --help or --version
+  case getOpt' Permute globalOptions args' of
+   (mode:_,_,_,_) -> mode
 
-isUsageError :: Mode -> Bool
-isUsageError (UsageError _) = True
-isUsageError _ = False
+   -- Then, check for unrecognized options.
+   _ -> case getOpt' Permute allOptions args' of
+    (_,  _, [u],      _) -> UsageError $ unwords [ "Unrecognized option:" , u ]
+    (_,  _, us@(_:_), _) -> UsageError $ unwords $ "Unrecognized options:" : us
 
--- ~~~ Backward compatibility ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--- A translating function to maintain backward compatiblicy
--- with the old option syntay
-translateOldOptions :: [String] -> [String]
-translateOldOptions = map translateOne
-  where translateOne "-java"          = "--java"
-        translateOne "-java1.5"       = "--java"
-        translateOne "-c"             = "--c"
-        translateOne "-cpp"           = "--cpp"
-        translateOne "-cpp_stl"       = "--cpp"
-        translateOne "-cpp_no_stl"    = "--cpp-nostl"
-        translateOne "-csharp"        = "--csharp"
-        translateOne "-ocaml"         = "--ocaml"
-        translateOne "-fsharp"        = "fsharp"
-        translateOne "-haskell"       = "--haskell"
-        translateOne "-prof"          = "--profile"
-        translateOne "-gadt"          = "--haskell-gadt"
-        translateOne "-alex1"         = "--alex1"
-        translateOne "-alex2"         = "--alex2"
-        translateOne "-alex3"         = "--alex3"
-        translateOne "-sharestrings"  = "--sharestring"
-        translateOne "-bytestrings"   = "--bytestring"
-        translateOne "-glr"           = "--glr"
-        translateOne "-xml"           = "--xml"
-        translateOne "-xmlt"          = "--xmlt"
-        translateOne "-vs"            = "--vs"
-        translateOne "-wcf"           = "--wcf"
-        translateOne other            = other
+    -- Then, determine target language.
+    _ -> case getOpt' Permute targetOptions args' of
+      -- ([]     ,_,_,_) -> UsageError "No target selected"  -- --haskell is default target
+      (_:_:_,_,_,_) -> UsageError "At most one target is allowed"
 
+      -- Finally, parse options with known target.
+      (optionUpdates,_,_,_) -> let
+          -- Compute target and valid options for this target.
+          tgt  = target (options optionUpdates)
+          opts = allOptions' tgt
+        in
+        case getOpt' Permute opts args' of
+          (_,  _, _,      e:_) -> UsageError e
+          (_,  _, [u],      _) -> UsageError $ unwords $ [ "Backend", show tgt, "does not support option", u ]
+          (_,  _, us@(_:_), _) -> UsageError $ unwords $ [ "Backend", show tgt, "does not support options" ] ++ us
+          (_, [], _,        _) -> UsageError "Missing grammar file"
+          (optionsUpdates, [grammarFile], [], []) ->
+            let opts = (options optionsUpdates)
+                       { lbnfFile = grammarFile
+                       , lang = takeBaseName grammarFile
+                       }
+            in  Target opts grammarFile
+          (_,  _, _,        _) -> UsageError "Too many arguments"
+  where
+  args' = translateOldOptions args
+  options optionsUpdates = foldl (.) id optionsUpdates defaultOptions
+
+
+-- * Backward compatibility
+
+-- | A translation function to maintain backward compatibility
+--   with the old option syntax.
+
+translateOldOptions :: [String] -> [String]
+translateOldOptions = map $ \case
+  "-agda"          ->  "--agda"
+  "-java"          ->  "--java"
+  "-java1.5"       ->  "--java"
+  "-c"             ->  "--c"
+  "-cpp"           ->  "--cpp"
+  "-cpp_stl"       ->  "--cpp"
+  "-cpp_no_stl"    ->  "--cpp-nostl"
+  "-csharp"        ->  "--csharp"
+  "-ocaml"         ->  "--ocaml"
+  "-fsharp"        ->  "fsharp"
+  "-haskell"       ->  "--haskell"
+  "-prof"          ->  "--profile"
+  "-gadt"          ->  "--haskell-gadt"
+  "-alex1"         ->  "--alex1"
+  "-alex2"         ->  "--alex2"
+  "-alex3"         ->  "--alex3"
+  "-sharestrings"  ->  "--sharestring"
+  "-bytestrings"   ->  "--bytestring"
+  "-glr"           ->  "--glr"
+  "-xml"           ->  "--xml"
+  "-xmlt"          ->  "--xmlt"
+  "-vs"            ->  "--vs"
+  "-wcf"           ->  "--wcf"
+  other            ->  other
diff --git a/src/BNFC/PrettyPrint.hs b/src/BNFC/PrettyPrint.hs
--- a/src/BNFC/PrettyPrint.hs
+++ b/src/BNFC/PrettyPrint.hs
@@ -1,42 +1,122 @@
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
 
--- Extends Text.PrettyPrint
+-- | Extends ''Text.PrettyPrint''.
+
 module BNFC.PrettyPrint
   ( module Text.PrettyPrint
-  , (<.>)
-  , codeblock
-  , vsep
-  , (<=>)
+  , module BNFC.PrettyPrint
   ) where
 
-import Prelude'
-
 import Text.PrettyPrint
 
--- | Pretty print separator with a dot
+-- | Put 'parens' around document if given condition is true.
+--
+-- >>> parensIf True "foo"
+-- (foo)
+--
+-- >>> parensIf False "bar"
+-- bar
+--
+parensIf :: Bool -> Doc -> Doc
+parensIf = \case
+  True  -> parens
+  False -> id
+
+-- | Separate vertically by a blank line.
+--
+-- >>> "foo" $++$ "bar"
+-- foo
+-- <BLANKLINE>
+-- bar
+--
+-- >>> "foo" $++$ empty
+-- foo
+--
+($++$) :: Doc -> Doc -> Doc
+d $++$ d'
+  | isEmpty d  = d'
+  | isEmpty d' = d
+  | otherwise  = d $+$ "" $+$ d'
+
+-- | List version of '$++$'.
+--
+-- >>> vsep [ "foo", nest 4 "bar" ]
+-- foo
+-- <BLANKLINE>
+--     bar
+--
+-- >>> vsep []
+-- <BLANKLINE>
+--
+vsep :: [Doc] -> Doc
+vsep = foldl ($++$) empty
+
+-- | List version of 'PrettyPrint.$+$'.
+--
+-- >>> vcat' [text "abc", nest 4 (text "def")]
+-- abc
+--     def
+--
+vcat' :: [Doc] -> Doc
+vcat' = foldl ($+$) empty
+
+-- | Pretty print separator with a dot.
+--
 -- >>> "abc" <.> "py"
 -- abc.py
+--
 (<.>) :: Doc -> Doc -> Doc
-a <.> b = a <> "." <> b
+a <.> b = hcat [ a , text "." , b ]
+  -- Andreas A, 2019-02-07: avoiding <> due to clash with Semigroup
 
--- | Code block. A bloc of code, surrounded by {} and indented.
+-- | Pretty print separator with = (for assignments...).
+--
+-- >>> "a" <=> "123"
+-- a = 123
+--
+(<=>) :: Doc -> Doc -> Doc
+a <=> b = a <+> text "=" <+> b
+
+-- | Print a list of 0-1 elements on the same line as some preamble
+--   and from 2 elements on the following lines, indented.
+--
+-- >>> prettyList 2 ("foo" <+> equals) lbrack rbrack comma []
+-- foo = []
+-- >>> prettyList 2 ("foo" <+> equals) lbrack rbrack comma [ "a" ]
+-- foo = [a]
+-- >>> prettyList 2 ("foo" <+> equals) lbrack rbrack comma [ "a", "b" ]
+-- foo =
+--   [ a
+--   , b
+--   ]
+--
+-- Used in the Agda backend.
+prettyList
+  :: Int   -- ^ Indentation.
+  -> Doc   -- ^ Preamble.
+  -> Doc   -- ^ Left parenthesis.
+  -> Doc   -- ^ Right parenthesis.
+  -> Doc   -- ^ Separator (usually not including spaces).
+  -> [Doc] -- ^ List item.
+  -> Doc
+prettyList n pre lpar rpar sepa = \case
+  []     -> pre <+> hcat [ lpar, rpar ]
+  [d]    -> pre <+> hcat [ lpar, d, rpar ]
+  (d:ds) -> vcat . (pre :) . map (nest n) . concat $
+    [ [ lpar <+> d ]
+    , map (sepa <+>) ds
+    , [ rpar ]
+    ]
+
+-- | Code block. A block of C/Java code, surrounded by {} and indented.
+--
 -- >>> codeblock 4 ["abc", "def"]
 -- {
 --     abc
 --     def
 -- }
+--
+--   Used in the C backend.
 codeblock :: Int -> [Doc] -> Doc
 codeblock indent code = lbrace $+$ nest indent (vcat code) $+$ rbrace
-
--- | List version of prettyPrint $+$
--- >>> vsep [text "abc", nest 4 (text "def")]
--- abc
---     def
-vsep :: [Doc] -> Doc
-vsep = foldl ($+$) empty
-
--- | Pretty print separator with = (for assignments...)
--- >>> "a" <=> "123"
--- a = 123
-(<=>) :: Doc -> Doc -> Doc
-a <=> b = a <+> "=" <+> b
diff --git a/src/BNFC/ToCNFCore.hs b/src/BNFC/ToCNFCore.hs
--- a/src/BNFC/ToCNFCore.hs
+++ b/src/BNFC/ToCNFCore.hs
@@ -240,7 +240,7 @@
 lkCat (Right t) _ = [Right t]
 lkCat (Left c) s = Left c:lookupMulti (show c) s
 
--- neighbors A B = ∃ A' B'. P ::= A' B' ∧  A ∈ rightOf A'  ∧  B ∈ leftOf B
+-- neighbors A B = ∃ A' B'.  P ::= A' B'  &  A ∈ rightOf A'  &  B ∈ leftOf B
 neighborSet cf = map (second (nub . sort)) $ group' [(x',lkCat y leftSet) | Rule _ _ [x,y] <- cfgRules cf, x' <- lkCat x rightSet]
   where leftSet  = fixpointOnGrammar "left set"  (leftRight head) cf
         rightSet = fixpointOnGrammar "right set" (leftRight last) cf
diff --git a/src/BNFC/Utils.hs b/src/BNFC/Utils.hs
--- a/src/BNFC/Utils.hs
+++ b/src/BNFC/Utils.hs
@@ -17,31 +17,71 @@
     Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
 -}
 
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleInstances #-}
+
 module BNFC.Utils
-    ( (+++), (++++), (+-+), (+.+)
+    ( when, unless, unlessNull
+    , (+++), (++++), (+-+), (+.+)
     , mkName, mkNames, NameStyle(..)
     , lowerCase, upperCase, mixedCase, camelCase, snakeCase
     , replace, prParenth
     , writeFileRep
     , cstring, cchar
+    , getZonedTimeTruncatedToSeconds
     ) where
 
-import Control.Arrow ((&&&))
+import Control.Arrow   ((&&&))
 import Control.DeepSeq (rnf)
 
 import Data.Char
-import Data.List (intercalate)
+import Data.Functor    ((<$>))
+import Data.List       (intercalate)
+import Data.Monoid     (Monoid(..))
+import Data.Time
 
-import System.IO (IOMode(ReadMode),hClose,hGetContents,openFile)
+import Data.Semigroup  (Semigroup(..))
+
+import System.IO       (IOMode(ReadMode),hClose,hGetContents,openFile)
 import System.IO.Error (tryIOError)
--- import System.Directory (renameFile, removeFile)
 
-import BNFC.PrettyPrint
+import BNFC.PrettyPrint hiding ((<>))
 
-infixr 5 +++, ++++, +-+, +.+
+-- * Control flow.
 
--- printing operations
+-- The following Monoid instance conflicts with Monoid a => Monoid (IO a)
+-- for ghc >= 8.0
 
+#if __GLASGOW_HASKELL__ <= 710
+instance Monad m => Semigroup (m ()) where
+  (<>) = (>>)
+
+instance Monad m => Monoid (m ()) where
+  mempty  = return ()
+  mappend = (<>)
+  mconcat = sequence_
+#endif
+
+-- | Generalization of 'Control.Monad.when'.
+when :: Monoid m => Bool -> m -> m
+when True  m = m
+when False _ = mempty
+
+-- | Generalization of 'Control.Monad.unless'.
+unless :: Monoid m => Bool -> m -> m
+unless False m = m
+unless True  _ = mempty
+
+-- | Invoke continuation for non-empty list.
+unlessNull :: Monoid m => [a] -> (a -> [a] -> m) -> m
+unlessNull l k = case l of
+  []     -> mempty
+  (a:as) -> k a as
+
+-- * String operations for printing.
+
+infixr 5 +++, ++++, +-+, +.+
+
 -- | Concatenate strings by a space.
 (+++) :: String -> String -> String
 a +++ b   = a ++ " "    ++ b
@@ -70,6 +110,18 @@
         -> a -- ^ Value to replace it with
         -> [a] -> [a]
 replace x y xs = [ if z == x then y else z | z <- xs]
+
+-- * Time utilities
+
+-- | Cut away fractions of a second in time.
+
+truncateZonedTimeToSeconds :: ZonedTime -> ZonedTime
+truncateZonedTimeToSeconds (ZonedTime (LocalTime day (TimeOfDay h m s)) zone) =
+  ZonedTime (LocalTime day (TimeOfDay h m s')) zone
+  where s' = fromIntegral $ truncate s
+
+getZonedTimeTruncatedToSeconds :: IO ZonedTime
+getZonedTimeTruncatedToSeconds = truncateZonedTimeToSeconds <$> getZonedTime
 
 -- * File utilities
 
diff --git a/src/ErrM.hs b/src/ErrM.hs
--- a/src/ErrM.hs
+++ b/src/ErrM.hs
@@ -19,9 +19,15 @@
 
 instance Monad Err where
   return      = Ok
-  fail        = Bad
   Ok a  >>= f = f a
   Bad s >>= _ = Bad s
+#if __GLASGOW_HASKELL__ < 808
+  fail        = Bad
+#else
+
+instance MonadFail Err where
+  fail = Bad
+#endif
 
 instance Applicative Err where
   pure = Ok
diff --git a/src/LexBNF.hs b/src/LexBNF.hs
--- a/src/LexBNF.hs
+++ b/src/LexBNF.hs
@@ -19,392 +19,8429 @@
 #endif
 #if __GLASGOW_HASKELL__ >= 503
 import Data.Array
-import Data.Array.Base (unsafeAt)
-#else
-import Array
-#endif
-alex_tab_size :: Int
-alex_tab_size = 8
-alex_base :: Array Int Int
-alex_base = listArray (0,40) [-8,73,-55,-32,201,412,45,540,796,266,0,781,1037,973,1229,1425,1519,1165,0,1445,-37,71,90,1701,1702,1897,1833,0,2079,0,120,-36,-35,0,-33,2296,0,0,114,1511,124]
-
-alex_table :: Array Int Int
-alex_table = listArray (0,2551) [0,30,30,30,30,30,33,37,22,28,5,40,40,40,40,40,40,40,40,40,40,0,0,0,30,2,23,0,0,0,0,14,33,33,33,33,33,31,33,0,38,38,38,38,38,38,38,38,38,38,34,33,0,33,0,33,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,33,3,33,0,33,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,32,33,33,1,39,39,39,39,39,39,39,39,39,39,30,30,30,30,30,0,0,0,3,40,40,40,40,40,40,40,40,40,40,0,0,0,0,30,0,0,3,0,0,0,0,21,3,38,38,38,38,38,38,38,38,38,38,40,40,40,40,40,40,40,40,40,40,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,29,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,25,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,19,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,12,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,23,0,0,0,0,23,39,39,39,39,39,39,39,39,39,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,0,0,0,23,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,23,23,23,23,23,23,23,23,23,23,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,36,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,16,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,35,35,35,35,35,35,35,35,0,15,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,25,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,4,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,7,10,10,10,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,35,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
-
-alex_check :: Array Int Int
-alex_check = listArray (0,2551) [-1,9,10,11,12,13,61,39,45,45,45,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,32,58,34,-1,-1,-1,-1,39,40,41,42,43,44,45,46,-1,48,49,50,51,52,53,54,55,56,57,58,59,-1,61,-1,63,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,39,93,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,45,48,49,50,51,52,53,54,55,56,57,9,10,11,12,13,-1,-1,-1,92,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,32,-1,-1,110,-1,-1,-1,-1,46,116,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,195,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,125,-1,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,45,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,-1,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,-1,-1,194,195,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,34,-1,-1,-1,-1,39,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,92,101,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,110,-1,-1,-1,-1,-1,116,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,-1,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,-1,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,-1,184,185,186,187,188,189,190,191,-1,194,195,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,39,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,195,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
-
-alex_deflt :: Array Int Int
-alex_deflt = listArray (0,40) [-1,5,-1,-1,-1,5,-1,-1,5,5,18,18,3,3,-1,23,-1,23,27,27,-1,-1,-1,-1,-1,28,28,28,28,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
-
-alex_accept = listArray (0::Int,40) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_8)]
-{-# LINE 39 "LexBNF.x" #-}
-
-
-tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)
-tok f p s = f p s
-
-share :: String -> String
-share = id
-
-data Tok =
-   TS !String !Int    -- reserved words and symbols
- | TL !String         -- string literals
- | TI !String         -- integer literals
- | TV !String         -- identifiers
- | TD !String         -- double precision float literals
- | TC !String         -- character literals
-
- deriving (Eq,Show,Ord)
-
-data Token =
-   PT  Posn Tok
- | Err Posn
-  deriving (Eq,Show,Ord)
-
-printPosn :: Posn -> String
-printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c
-
-tokenPos :: [Token] -> String
-tokenPos (t:_) = printPosn (tokenPosn t)
-tokenPos [] = "end of file"
-
-tokenPosn :: Token -> Posn
-tokenPosn (PT p _) = p
-tokenPosn (Err p) = p
-
-tokenLineCol :: Token -> (Int, Int)
-tokenLineCol = posLineCol . tokenPosn
-
-posLineCol :: Posn -> (Int, Int)
-posLineCol (Pn _ l c) = (l,c)
-
-mkPosToken :: Token -> ((Int, Int), String)
-mkPosToken t@(PT p _) = (posLineCol p, prToken t)
-
-prToken :: Token -> String
-prToken t = case t of
-  PT _ (TS s _) -> s
-  PT _ (TL s)   -> show s
-  PT _ (TI s)   -> s
-  PT _ (TV s)   -> s
-  PT _ (TD s)   -> s
-  PT _ (TC s)   -> s
-  Err _         -> "#error"
-
-
-data BTree = N | B String Tok BTree BTree deriving (Show)
-
-eitherResIdent :: (String -> Tok) -> String -> Tok
-eitherResIdent tv s = treeFind resWords
-  where
-  treeFind N = tv s
-  treeFind (B a t left right) | s < a  = treeFind left
-                              | s > a  = treeFind right
-                              | s == a = t
-
-resWords :: BTree
-resWords = b "digit" 21 (b "=" 11 (b "-" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "," 5 (b "+" 4 N N) N)) (b "::=" 9 (b ":" 8 (b "." 7 N N) N) (b ";" 10 N N))) (b "char" 16 (b "]" 14 (b "[" 13 (b "?" 12 N N) N) (b "_" 15 N N)) (b "define" 19 (b "comment" 18 (b "coercions" 17 N N) N) (b "delimiters" 20 N N)))) (b "separator" 31 (b "letter" 26 (b "internal" 24 (b "eps" 23 (b "entrypoints" 22 N N) N) (b "layout" 25 N N)) (b "position" 29 (b "nonempty" 28 (b "lower" 27 N N) N) (b "rules" 30 N N))) (b "upper" 36 (b "token" 34 (b "terminator" 33 (b "stop" 32 N N) N) (b "toplevel" 35 N N)) (b "|" 39 (b "{" 38 (b "views" 37 N N) N) (b "}" 40 N N))))
-   where b s n = let bs = id s
-                  in B bs (TS bs n)
-
-unescapeInitTail :: String -> String
-unescapeInitTail = id . unesc . tail . id where
-  unesc s = case s of
-    '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs
-    '\\':'n':cs  -> '\n' : unesc cs
-    '\\':'t':cs  -> '\t' : unesc cs
-    '"':[]    -> []
-    c:cs      -> c : unesc cs
-    _         -> []
-
--------------------------------------------------------------------
--- Alex wrapper code.
--- A modified "posn" wrapper.
--------------------------------------------------------------------
-
-data Posn = Pn !Int !Int !Int
-      deriving (Eq, Show,Ord)
-
-alexStartPos :: Posn
-alexStartPos = Pn 0 1 1
-
-alexMove :: Posn -> Char -> Posn
-alexMove (Pn a l c) '\t' = Pn (a+1)  l     (((c+7) `div` 8)*8+1)
-alexMove (Pn a l c) '\n' = Pn (a+1) (l+1)   1
-alexMove (Pn a l c) _    = Pn (a+1)  l     (c+1)
-
-type Byte = Word8
-
-type AlexInput = (Posn,     -- current position,
-                  Char,     -- previous char
-                  [Byte],   -- pending bytes on the current char
-                  String)   -- current input string
-
-tokens :: String -> [Token]
-tokens str = go (alexStartPos, '\n', [], str)
-    where
-      go :: AlexInput -> [Token]
-      go inp@(pos, _, _, str) =
-               case alexScan inp 0 of
-                AlexEOF                   -> []
-                AlexError (pos, _, _, _)  -> [Err pos]
-                AlexSkip  inp' len        -> go inp'
-                AlexToken inp' len act    -> act pos (take len str) : (go inp')
-
-alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
-alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s))
-alexGetByte (p, _, [], s) =
-  case  s of
-    []  -> Nothing
-    (c:s) ->
-             let p'     = alexMove p c
-                 (b:bs) = utf8Encode c
-              in p' `seq` Just (b, (p', c, bs, s))
-
-alexInputPrevChar :: AlexInput -> Char
-alexInputPrevChar (p, c, bs, s) = c
-
--- | Encode a Haskell String to a list of Word8 values, in UTF8 format.
-utf8Encode :: Char -> [Word8]
-utf8Encode = map fromIntegral . go . ord
- where
-  go oc
-   | oc <= 0x7f       = [oc]
-
-   | oc <= 0x7ff      = [ 0xc0 + (oc `Data.Bits.shiftR` 6)
-                        , 0x80 + oc Data.Bits..&. 0x3f
-                        ]
-
-   | oc <= 0xffff     = [ 0xe0 + (oc `Data.Bits.shiftR` 12)
-                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
-                        , 0x80 + oc Data.Bits..&. 0x3f
-                        ]
-   | otherwise        = [ 0xf0 + (oc `Data.Bits.shiftR` 18)
-                        , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)
-                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
-                        , 0x80 + oc Data.Bits..&. 0x3f
-                        ]
-
-alex_action_3 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
-alex_action_4 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
-alex_action_5 =  tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) 
-alex_action_6 =  tok (\p s -> PT p (TC $ share s))  
-alex_action_7 =  tok (\p s -> PT p (TI $ share s))    
-alex_action_8 =  tok (\p s -> PT p (TD $ share s)) 
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
-{-# LINE 1 "<command-line>" #-}
-
-
-
-
-
-
-
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{-# LINE 7 "<command-line>" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
--- -----------------------------------------------------------------------------
--- ALEX TEMPLATE
---
--- This code is in the PUBLIC DOMAIN; you may copy it freely and use
--- it for any purpose whatsoever.
-
--- -----------------------------------------------------------------------------
--- INTERNALS and main scanner engine
-
-{-# LINE 21 "templates/GenericTemplate.hs" #-}
-
-{-# LINE 51 "templates/GenericTemplate.hs" #-}
-
-{-# LINE 72 "templates/GenericTemplate.hs" #-}
-alexIndexInt16OffAddr arr off = arr ! off
-
-
-{-# LINE 93 "templates/GenericTemplate.hs" #-}
-alexIndexInt32OffAddr arr off = arr ! off
-
-
-{-# LINE 105 "templates/GenericTemplate.hs" #-}
-quickIndex arr i = arr ! i
-
-
--- -----------------------------------------------------------------------------
--- Main lexing routines
-
-data AlexReturn a
-  = AlexEOF
-  | AlexError  !AlexInput
-  | AlexSkip   !AlexInput !Int
-  | AlexToken  !AlexInput !Int a
-
--- alexScan :: AlexInput -> StartCode -> AlexReturn a
-alexScan input (sc)
-  = alexScanUser undefined input (sc)
-
-alexScanUser user input (sc)
-  = case alex_scan_tkn user input (0) input sc AlexNone of
-        (AlexNone, input') ->
-                case alexGetByte input of
-                        Nothing -> 
-
-
-
-                                   AlexEOF
-                        Just _ ->
-
-
-
-                                   AlexError input'
-
-        (AlexLastSkip input'' len, _) ->
-
-
-
-                AlexSkip input'' len
-
-        (AlexLastAcc k input''' len, _) ->
-
-
-
-                AlexToken input''' len k
-
-
--- Push the input through the DFA, remembering the most recent accepting
--- state it encountered.
-
-alex_scan_tkn user orig_input len input s last_acc =
-  input `seq` -- strict in the input
-  let 
-        new_acc = (check_accs (alex_accept `quickIndex` (s)))
-  in
-  new_acc `seq`
-  case alexGetByte input of
-     Nothing -> (new_acc, input)
-     Just (c, new_input) -> 
-
-
-
-      case fromIntegral c of { (ord_c) ->
-        let
-                base   = alexIndexInt32OffAddr alex_base s
-                offset = (base + ord_c)
-                check  = alexIndexInt16OffAddr alex_check offset
-                
-                new_s = if (offset >= (0)) && (check == ord_c)
-                          then alexIndexInt16OffAddr alex_table offset
-                          else alexIndexInt16OffAddr alex_deflt s
-        in
-        case new_s of
-            (-1) -> (new_acc, input)
-                -- on an error, we want to keep the input *before* the
-                -- character that failed, not after.
-            _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len + (1)) else len)
-                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
-                        new_input new_s new_acc
-      }
-  where
-        check_accs (AlexAccNone) = last_acc
-        check_accs (AlexAcc a  ) = AlexLastAcc a input (len)
-        check_accs (AlexAccSkip) = AlexLastSkip  input (len)
-
-        check_accs (AlexAccPred a predx rest)
-           | predx user orig_input (len) input
-           = AlexLastAcc a input (len)
-           | otherwise
-           = check_accs rest
-        check_accs (AlexAccSkipPred predx rest)
-           | predx user orig_input (len) input
-           = AlexLastSkip input (len)
-           | otherwise
-           = check_accs rest
-
-
-data AlexLastAcc a
-  = AlexNone
-  | AlexLastAcc a !AlexInput !Int
-  | AlexLastSkip  !AlexInput !Int
-
-instance Functor AlexLastAcc where
-    fmap _ AlexNone = AlexNone
-    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z
-    fmap _ (AlexLastSkip x y) = AlexLastSkip x y
-
-data AlexAcc a user
-  = AlexAccNone
-  | AlexAcc a
-  | AlexAccSkip
-
-  | AlexAccPred a   (AlexAccPred user) (AlexAcc a user)
-  | AlexAccSkipPred (AlexAccPred user) (AlexAcc a user)
-
-type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool
-
--- -----------------------------------------------------------------------------
--- Predicates on a rule
-
-alexAndPred p1 p2 user in1 len in2
-  = p1 user in1 len in2 && p2 user in1 len in2
-
---alexPrevCharIsPred :: Char -> AlexAccPred _ 
-alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input
-
-alexPrevCharMatches f _ input _ _ = f (alexInputPrevChar input)
-
---alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ 
-alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input
-
---alexRightContext :: Int -> AlexAccPred _
-alexRightContext (sc) user _ _ input = 
-     case alex_scan_tkn user input (0) input sc AlexNone of
-          (AlexNone, _) -> False
-          _ -> True
-        -- TODO: there's no need to find the longest
-        -- match when checking the right context, just
-        -- the first match will do.
+#else
+import Array
+#endif
+alex_tab_size :: Int
+alex_tab_size = 8
+alex_base :: Array Int Int
+alex_base = listArray (0 :: Int, 61)
+  [ -8
+  , 73
+  , -55
+  , -32
+  , 201
+  , 412
+  , 45
+  , 540
+  , 668
+  , 796
+  , 924
+  , 1052
+  , 1180
+  , 1293
+  , 0
+  , 1421
+  , 0
+  , 1534
+  , 0
+  , 1647
+  , 0
+  , 267
+  , 0
+  , 1712
+  , 0
+  , 1777
+  , 2033
+  , 1969
+  , 0
+  , 0
+  , 2082
+  , 2338
+  , 2274
+  , 0
+  , 2491
+  , 2747
+  , 2497
+  , 2683
+  , 0
+  , 0
+  , 2748
+  , -37
+  , 71
+  , 114
+  , 2994
+  , 2877
+  , 3250
+  , 3186
+  , 0
+  , 3432
+  , 0
+  , 120
+  , -36
+  , -35
+  , 0
+  , -33
+  , 3649
+  , 0
+  , 0
+  , 126
+  , 2489
+  , 140
+  ]
+
+alex_table :: Array Int Int
+alex_table = listArray (0 :: Int, 3904)
+  [ 0
+  , 51
+  , 51
+  , 51
+  , 51
+  , 51
+  , 54
+  , 58
+  , 43
+  , 49
+  , 5
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 0
+  , 0
+  , 0
+  , 51
+  , 2
+  , 44
+  , 0
+  , 0
+  , 0
+  , 0
+  , 34
+  , 54
+  , 54
+  , 54
+  , 54
+  , 54
+  , 52
+  , 54
+  , 0
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 55
+  , 54
+  , 0
+  , 54
+  , 0
+  , 54
+  , 0
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 54
+  , 3
+  , 54
+  , 0
+  , 54
+  , 0
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 53
+  , 54
+  , 54
+  , 1
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 51
+  , 51
+  , 51
+  , 51
+  , 51
+  , 0
+  , 0
+  , 0
+  , 3
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 3
+  , 0
+  , 0
+  , 0
+  , 0
+  , 51
+  , 0
+  , 0
+  , 3
+  , 0
+  , 0
+  , 0
+  , 3
+  , 0
+  , 3
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 42
+  , 0
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 59
+  , 0
+  , 0
+  , 0
+  , 45
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 61
+  , 50
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 26
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 27
+  , 10
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 21
+  , 15
+  , 14
+  , 14
+  , 14
+  , 13
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 46
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 1
+  , 27
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 26
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 27
+  , 10
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 21
+  , 15
+  , 14
+  , 14
+  , 14
+  , 13
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 4
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 35
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 31
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 26
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 28
+  , 8
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 9
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 21
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 10
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 23
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 25
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 32
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 37
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 40
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 44
+  , 0
+  , 0
+  , 0
+  , 0
+  , 44
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 60
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 6
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 44
+  , 41
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 44
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 44
+  , 0
+  , 0
+  , 0
+  , 44
+  , 0
+  , 44
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 31
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 32
+  , 9
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 23
+  , 12
+  , 16
+  , 16
+  , 16
+  , 17
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 47
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 57
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 0
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 36
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 35
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 38
+  , 37
+  , 8
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 24
+  , 25
+  , 11
+  , 18
+  , 18
+  , 18
+  , 19
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 46
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 48
+  , 47
+  , 4
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 39
+  , 40
+  , 7
+  , 29
+  , 29
+  , 29
+  , 30
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 56
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 0
+  , 0
+  , 0
+  , 0
+  , 56
+  , 0
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 45
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  ]
+
+alex_check :: Array Int Int
+alex_check = listArray (0 :: Int, 3904)
+  [ -1
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 61
+  , 39
+  , 45
+  , 45
+  , 45
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , -1
+  , 32
+  , 58
+  , 34
+  , -1
+  , -1
+  , -1
+  , -1
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , -1
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , -1
+  , 61
+  , -1
+  , 63
+  , -1
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 39
+  , 93
+  , -1
+  , 95
+  , -1
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 45
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , -1
+  , -1
+  , -1
+  , 92
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 102
+  , -1
+  , -1
+  , -1
+  , -1
+  , 32
+  , -1
+  , -1
+  , 110
+  , -1
+  , -1
+  , -1
+  , 114
+  , -1
+  , 116
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 46
+  , -1
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , -1
+  , 195
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 125
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 45
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 39
+  , 34
+  , -1
+  , -1
+  , -1
+  , -1
+  , 39
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 92
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 92
+  , 101
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 102
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 110
+  , -1
+  , -1
+  , -1
+  , 114
+  , -1
+  , 116
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 10
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 34
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , -1
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 92
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 10
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 39
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , -1
+  , -1
+  , -1
+  , -1
+  , 95
+  , -1
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 195
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  ]
+
+alex_deflt :: Array Int Int
+alex_deflt = listArray (0 :: Int, 61)
+  [ -1
+  , 5
+  , -1
+  , -1
+  , -1
+  , 5
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 20
+  , 20
+  , -1
+  , 22
+  , 22
+  , 24
+  , 24
+  , 28
+  , 28
+  , 33
+  , 33
+  , 38
+  , 38
+  , 5
+  , 5
+  , 5
+  , 39
+  , 39
+  , 3
+  , 3
+  , 3
+  , 3
+  , 44
+  , -1
+  , 44
+  , 44
+  , 48
+  , 48
+  , -1
+  , -1
+  , -1
+  , 44
+  , -1
+  , 49
+  , 49
+  , 49
+  , 49
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  ]
+
+alex_accept = listArray (0 :: Int, 61)
+  [ AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAcc 9
+  , AlexAcc 8
+  , AlexAcc 7
+  , AlexAcc 6
+  , AlexAcc 5
+  , AlexAcc 4
+  , AlexAcc 3
+  , AlexAcc 2
+  , AlexAcc 1
+  , AlexAcc 0
+  ]
+
+alex_actions = array (0 :: Int, 10)
+  [ (9,alex_action_3)
+  , (8,alex_action_3)
+  , (7,alex_action_3)
+  , (6,alex_action_3)
+  , (5,alex_action_4)
+  , (4,alex_action_5)
+  , (3,alex_action_6)
+  , (2,alex_action_7)
+  , (1,alex_action_8)
+  , (0,alex_action_8)
+  ]
+
+{-# LINE 45 "LexBNF.x" #-}
+
+
+tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)
+tok f p s = f p s
+
+share :: String -> String
+share = id
+
+data Tok =
+   TS !String !Int    -- reserved words and symbols
+ | TL !String         -- string literals
+ | TI !String         -- integer literals
+ | TV !String         -- identifiers
+ | TD !String         -- double precision float literals
+ | TC !String         -- character literals
+
+ deriving (Eq,Show,Ord)
+
+data Token =
+   PT  Posn Tok
+ | Err Posn
+  deriving (Eq,Show,Ord)
+
+printPosn :: Posn -> String
+printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c
+
+tokenPos :: [Token] -> String
+tokenPos (t:_) = printPosn (tokenPosn t)
+tokenPos [] = "end of file"
+
+tokenPosn :: Token -> Posn
+tokenPosn (PT p _) = p
+tokenPosn (Err p) = p
+
+tokenLineCol :: Token -> (Int, Int)
+tokenLineCol = posLineCol . tokenPosn
+
+posLineCol :: Posn -> (Int, Int)
+posLineCol (Pn _ l c) = (l,c)
+
+mkPosToken :: Token -> ((Int, Int), String)
+mkPosToken t@(PT p _) = (posLineCol p, prToken t)
+
+prToken :: Token -> String
+prToken t = case t of
+  PT _ (TS s _) -> s
+  PT _ (TL s)   -> show s
+  PT _ (TI s)   -> s
+  PT _ (TV s)   -> s
+  PT _ (TD s)   -> s
+  PT _ (TC s)   -> s
+  Err _         -> "#error"
+
+
+data BTree = N | B String Tok BTree BTree deriving (Show)
+
+eitherResIdent :: (String -> Tok) -> String -> Tok
+eitherResIdent tv s = treeFind resWords
+  where
+  treeFind N = tv s
+  treeFind (B a t left right) | s < a  = treeFind left
+                              | s > a  = treeFind right
+                              | s == a = t
+
+resWords :: BTree
+resWords = b "digit" 21 (b "=" 11 (b "-" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "," 5 (b "+" 4 N N) N)) (b "::=" 9 (b ":" 8 (b "." 7 N N) N) (b ";" 10 N N))) (b "char" 16 (b "]" 14 (b "[" 13 (b "?" 12 N N) N) (b "_" 15 N N)) (b "define" 19 (b "comment" 18 (b "coercions" 17 N N) N) (b "delimiters" 20 N N)))) (b "separator" 31 (b "letter" 26 (b "internal" 24 (b "eps" 23 (b "entrypoints" 22 N N) N) (b "layout" 25 N N)) (b "position" 29 (b "nonempty" 28 (b "lower" 27 N N) N) (b "rules" 30 N N))) (b "upper" 36 (b "token" 34 (b "terminator" 33 (b "stop" 32 N N) N) (b "toplevel" 35 N N)) (b "|" 39 (b "{" 38 (b "views" 37 N N) N) (b "}" 40 N N))))
+   where b s n = let bs = id s
+                  in B bs (TS bs n)
+
+unescapeInitTail :: String -> String
+unescapeInitTail = id . unesc . tail . id where
+  unesc s = case s of
+    '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs
+    '\\':'n':cs  -> '\n' : unesc cs
+    '\\':'t':cs  -> '\t' : unesc cs
+    '\\':'r':cs  -> '\r' : unesc cs
+    '\\':'f':cs  -> '\f' : unesc cs
+    '"':[]    -> []
+    c:cs      -> c : unesc cs
+    _         -> []
+
+-------------------------------------------------------------------
+-- Alex wrapper code.
+-- A modified "posn" wrapper.
+-------------------------------------------------------------------
+
+data Posn = Pn !Int !Int !Int
+      deriving (Eq, Show,Ord)
+
+alexStartPos :: Posn
+alexStartPos = Pn 0 1 1
+
+alexMove :: Posn -> Char -> Posn
+alexMove (Pn a l c) '\t' = Pn (a+1)  l     (((c+7) `div` 8)*8+1)
+alexMove (Pn a l c) '\n' = Pn (a+1) (l+1)   1
+alexMove (Pn a l c) _    = Pn (a+1)  l     (c+1)
+
+type Byte = Word8
+
+type AlexInput = (Posn,     -- current position,
+                  Char,     -- previous char
+                  [Byte],   -- pending bytes on the current char
+                  String)   -- current input string
+
+tokens :: String -> [Token]
+tokens str = go (alexStartPos, '\n', [], str)
+    where
+      go :: AlexInput -> [Token]
+      go inp@(pos, _, _, str) =
+               case alexScan inp 0 of
+                AlexEOF                   -> []
+                AlexError (pos, _, _, _)  -> [Err pos]
+                AlexSkip  inp' len        -> go inp'
+                AlexToken inp' len act    -> act pos (take len str) : (go inp')
+
+alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
+alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s))
+alexGetByte (p, _, [], s) =
+  case  s of
+    []  -> Nothing
+    (c:s) ->
+             let p'     = alexMove p c
+                 (b:bs) = utf8Encode c
+              in p' `seq` Just (b, (p', c, bs, s))
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar (p, c, bs, s) = c
+
+-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.
+utf8Encode :: Char -> [Word8]
+utf8Encode = map fromIntegral . go . ord
+ where
+  go oc
+   | oc <= 0x7f       = [oc]
+
+   | oc <= 0x7ff      = [ 0xc0 + (oc `Data.Bits.shiftR` 6)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+
+   | oc <= 0xffff     = [ 0xe0 + (oc `Data.Bits.shiftR` 12)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+   | otherwise        = [ 0xf0 + (oc `Data.Bits.shiftR` 18)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)
+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
+                        , 0x80 + oc Data.Bits..&. 0x3f
+                        ]
+
+alex_action_3 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
+alex_action_4 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) 
+alex_action_5 =  tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) 
+alex_action_6 =  tok (\p s -> PT p (TC $ share s))  
+alex_action_7 =  tok (\p s -> PT p (TI $ share s))    
+alex_action_8 =  tok (\p s -> PT p (TD $ share s)) 
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- -----------------------------------------------------------------------------
+-- ALEX TEMPLATE
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
+
+-- -----------------------------------------------------------------------------
+-- INTERNALS and main scanner engine
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+alexIndexInt16OffAddr arr off = arr ! off
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+alexIndexInt32OffAddr arr off = arr ! off
+
+
+
+
+
+
+
+
+
+
+
+quickIndex arr i = arr ! i
+
+
+-- -----------------------------------------------------------------------------
+-- Main lexing routines
+
+data AlexReturn a
+  = AlexEOF
+  | AlexError  !AlexInput
+  | AlexSkip   !AlexInput !Int
+  | AlexToken  !AlexInput !Int a
+
+-- alexScan :: AlexInput -> StartCode -> AlexReturn a
+alexScan input__ (sc)
+  = alexScanUser undefined input__ (sc)
+
+alexScanUser user__ input__ (sc)
+  = case alex_scan_tkn user__ input__ (0) input__ sc AlexNone of
+  (AlexNone, input__') ->
+    case alexGetByte input__ of
+      Nothing ->
+
+
+
+                                   AlexEOF
+      Just _ ->
+
+
+
+                                   AlexError input__'
+
+  (AlexLastSkip input__'' len, _) ->
+
+
+
+    AlexSkip input__'' len
+
+  (AlexLastAcc k input__''' len, _) ->
+
+
+
+    AlexToken input__''' len (alex_actions ! k)
+
+
+-- Push the input through the DFA, remembering the most recent accepting
+-- state it encountered.
+
+alex_scan_tkn user__ orig_input len input__ s last_acc =
+  input__ `seq` -- strict in the input
+  let
+  new_acc = (check_accs (alex_accept `quickIndex` (s)))
+  in
+  new_acc `seq`
+  case alexGetByte input__ of
+     Nothing -> (new_acc, input__)
+     Just (c, new_input) ->
+
+
+
+      case fromIntegral c of { (ord_c) ->
+        let
+                base   = alexIndexInt32OffAddr alex_base s
+                offset = (base + ord_c)
+                check  = alexIndexInt16OffAddr alex_check offset
+
+                new_s = if (offset >= (0)) && (check == ord_c)
+                          then alexIndexInt16OffAddr alex_table offset
+                          else alexIndexInt16OffAddr alex_deflt s
+        in
+        case new_s of
+            (-1) -> (new_acc, input__)
+                -- on an error, we want to keep the input *before* the
+                -- character that failed, not after.
+            _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len + (1)) else len)
+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
+                        new_input new_s new_acc
+      }
+  where
+        check_accs (AlexAccNone) = last_acc
+        check_accs (AlexAcc a  ) = AlexLastAcc a input__ (len)
+        check_accs (AlexAccSkip) = AlexLastSkip  input__ (len)
+
+        check_accs (AlexAccPred a predx rest)
+           | predx user__ orig_input (len) input__
+           = AlexLastAcc a input__ (len)
+           | otherwise
+           = check_accs rest
+        check_accs (AlexAccSkipPred predx rest)
+           | predx user__ orig_input (len) input__
+           = AlexLastSkip input__ (len)
+           | otherwise
+           = check_accs rest
+
+
+data AlexLastAcc
+  = AlexNone
+  | AlexLastAcc !Int !AlexInput !Int
+  | AlexLastSkip     !AlexInput !Int
+
+data AlexAcc user
+  = AlexAccNone
+  | AlexAcc Int
+  | AlexAccSkip
+
+  | AlexAccPred Int (AlexAccPred user) (AlexAcc user)
+  | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)
+
+type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool
+
+-- -----------------------------------------------------------------------------
+-- Predicates on a rule
+
+alexAndPred p1 p2 user__ in1 len in2
+  = p1 user__ in1 len in2 && p2 user__ in1 len in2
+
+--alexPrevCharIsPred :: Char -> AlexAccPred _
+alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__
+
+alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)
+
+--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _
+alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__
+
+--alexRightContext :: Int -> AlexAccPred _
+alexRightContext (sc) user__ _ _ input__ =
+     case alex_scan_tkn user__ input__ (0) input__ sc AlexNone of
+          (AlexNone, _) -> False
+          _ -> True
+        -- TODO: there's no need to find the longest
+        -- match when checking the right context, just
+        -- the first match will do.
+
diff --git a/src/LexBNF.x b/src/LexBNF.x
--- a/src/LexBNF.x
+++ b/src/LexBNF.x
@@ -13,12 +13,12 @@
 }
 
 
-$l = [a-zA-Z\192 - \255] # [\215 \247]    -- isolatin1 letter FIXME
-$c = [A-Z\192-\221] # [\215]    -- capital isolatin1 letter FIXME
-$s = [a-z\222-\255] # [\247]    -- small isolatin1 letter FIXME
-$d = [0-9]                -- digit
-$i = [$l $d _ ']          -- identifier character
-$u = [\0-\255]          -- universal: any character
+$c = [A-Z\192-\221] # [\215]  -- capital isolatin1 letter (215 = \times) FIXME
+$s = [a-z\222-\255] # [\247]  -- small   isolatin1 letter (247 = \div  ) FIXME
+$l = [$c $s]         -- letter
+$d = [0-9]           -- digit
+$i = [$l $d _ ']     -- identifier character
+$u = [. \n]          -- universal: any character
 
 @rsyms =    -- symbols and non-identifier-like reserved words
    \: | \; | \, | \. | \: \: \= | \[ | \] | \_ | \( | \) | \= | \| | \- | \* | \+ | \? | \{ | \}
@@ -28,13 +28,19 @@
 "{-" ([$u # \-] | \-+ [$u # [\- \}]])* ("-")+ "}" ;
 
 $white+ ;
-@rsyms { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }
+@rsyms
+    { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }
 
-$l $i*   { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }
-\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t)))* \"{ tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) }
-\' ($u # [\' \\] | \\ [\\ \' n t]) \'  { tok (\p s -> PT p (TC $ share s))  }
-$d+      { tok (\p s -> PT p (TI $ share s))    }
-$d+ \. $d+ (e (\-)? $d+)? { tok (\p s -> PT p (TD $ share s)) }
+$l $i*
+    { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }
+\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t | r | f)))* \"
+    { tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) }
+\' ($u # [\' \\] | \\ [\\ \' n t r f]) \'
+    { tok (\p s -> PT p (TC $ share s))  }
+$d+
+    { tok (\p s -> PT p (TI $ share s))    }
+$d+ \. $d+ (e (\-)? $d+)?
+    { tok (\p s -> PT p (TD $ share s)) }
 
 {
 
@@ -111,6 +117,8 @@
     '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs
     '\\':'n':cs  -> '\n' : unesc cs
     '\\':'t':cs  -> '\t' : unesc cs
+    '\\':'r':cs  -> '\r' : unesc cs
+    '\\':'f':cs  -> '\f' : unesc cs
     '"':[]    -> []
     c:cs      -> c : unesc cs
     _         -> []
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -28,7 +28,7 @@
 
 module Main where
 
-import BNFC.Backend.Base hiding (Backend)
+import BNFC.Backend.Base
 import BNFC.Backend.C
 import BNFC.Backend.CPP.NoSTL
 import BNFC.Backend.CPP.STL
@@ -40,8 +40,9 @@
 import BNFC.Backend.Latex
 import BNFC.Backend.OCaml
 import BNFC.Backend.Pygments
+import BNFC.CF (CF)
 import BNFC.GetCF
-import BNFC.Options hiding (make)
+import BNFC.Options hiding (make, Backend)
 
 import Paths_BNFC ( version )
 
@@ -61,18 +62,23 @@
 main = do
   args <- getArgs
   case parseMode args of
+
     UsageError e -> printUsageErrors [e]
-    Help    -> putStrLn help >> exitSuccess
-    Version ->  putStrLn (showVersion version) >> exitSuccess
-    Target options file | target options == TargetProfile ->
-      readFile file >>= parseCFP options TargetProfile
-                    >>= writeFiles (outDir options) . makeHaskellProfile options
-    Target options file ->
-      readFile file >>= parseCF options (target options) >>= make (target options) options
-  where
-    make t opts cf = writeFiles (outDir opts) $ (maketarget t) opts cf
+    Help         -> putStrLn help >> exitSuccess
+    Version      -> putStrLn (showVersion version) >> exitSuccess
 
-maketarget t = case t of
+    Target options file
+      | target options == TargetProfile ->
+          readFile file
+            >>= parseCFP options TargetProfile
+            >>= writeFiles (outDir options) . makeHaskellProfile options
+      | otherwise ->
+          readFile file
+            >>= parseCF options (target options)
+            >>= writeFiles (outDir options) . maketarget (target options) options
+
+maketarget :: Target -> SharedOptions -> CF -> Backend
+maketarget = \case
     TargetC            -> makeC
     TargetCpp          -> makeCppStl
     TargetCppNoStl     -> makeCppNoStl
@@ -82,5 +88,5 @@
     TargetLatex        -> makeLatex
     TargetJava         -> makeJava
     TargetOCaml        -> makeOCaml
-    TargetProfile      -> error "Not implemented"
+    TargetProfile      -> error "impossible"
     TargetPygments     -> makePygments
diff --git a/src/ParBNF.hs b/src/ParBNF.hs
--- a/src/ParBNF.hs
+++ b/src/ParBNF.hs
@@ -4,3148 +4,3830 @@
 import AbsBNF
 import LexBNF
 import ErrM
-import Control.Applicative(Applicative(..))
-import Control.Monad (ap)
-
--- parser produced by Happy Version 1.19.5
-
-data HappyAbsSyn 
-	= HappyTerminal (Token)
-	| HappyErrorToken Int
-	| HappyAbsSyn36 (Ident)
-	| HappyAbsSyn37 (String)
-	| HappyAbsSyn38 (Integer)
-	| HappyAbsSyn39 (Char)
-	| HappyAbsSyn40 (Double)
-	| HappyAbsSyn41 (LGrammar)
-	| HappyAbsSyn42 (LDef)
-	| HappyAbsSyn43 ([LDef])
-	| HappyAbsSyn44 ([Ident])
-	| HappyAbsSyn45 (Grammar)
-	| HappyAbsSyn46 ([Def])
-	| HappyAbsSyn47 (Def)
-	| HappyAbsSyn48 (Item)
-	| HappyAbsSyn49 ([Item])
-	| HappyAbsSyn50 (Cat)
-	| HappyAbsSyn51 (Label)
-	| HappyAbsSyn52 (LabelId)
-	| HappyAbsSyn53 (ProfItem)
-	| HappyAbsSyn54 (IntList)
-	| HappyAbsSyn55 ([Integer])
-	| HappyAbsSyn56 ([IntList])
-	| HappyAbsSyn57 ([ProfItem])
-	| HappyAbsSyn58 (Arg)
-	| HappyAbsSyn59 ([Arg])
-	| HappyAbsSyn60 (Separation)
-	| HappyAbsSyn61 ([String])
-	| HappyAbsSyn62 (Exp)
-	| HappyAbsSyn65 ([Exp])
-	| HappyAbsSyn67 (RHS)
-	| HappyAbsSyn68 ([RHS])
-	| HappyAbsSyn69 (MinimumSize)
-	| HappyAbsSyn70 (Reg)
-
-{- to allow type-synonyms as our monads (likely
- - with explicitly-specified bind and return)
- - in Haskell98, it seems that with
- - /type M a = .../, then /(HappyReduction M)/
- - is not allowed.  But Happy is a
- - code-generator that can just substitute it.
-type HappyReduction m = 
-	   Int 
-	-> (Token)
-	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)
-	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)] 
-	-> HappyStk HappyAbsSyn 
-	-> [(Token)] -> m HappyAbsSyn
--}
-
-action_0,
- action_1,
- action_2,
- action_3,
- action_4,
- action_5,
- action_6,
- action_7,
- action_8,
- action_9,
- action_10,
- action_11,
- action_12,
- action_13,
- action_14,
- action_15,
- action_16,
- action_17,
- action_18,
- action_19,
- action_20,
- action_21,
- action_22,
- action_23,
- action_24,
- action_25,
- action_26,
- action_27,
- action_28,
- action_29,
- action_30,
- action_31,
- action_32,
- action_33,
- action_34,
- action_35,
- action_36,
- action_37,
- action_38,
- action_39,
- action_40,
- action_41,
- action_42,
- action_43,
- action_44,
- action_45,
- action_46,
- action_47,
- action_48,
- action_49,
- action_50,
- action_51,
- action_52,
- action_53,
- action_54,
- action_55,
- action_56,
- action_57,
- action_58,
- action_59,
- action_60,
- action_61,
- action_62,
- action_63,
- action_64,
- action_65,
- action_66,
- action_67,
- action_68,
- action_69,
- action_70,
- action_71,
- action_72,
- action_73,
- action_74,
- action_75,
- action_76,
- action_77,
- action_78,
- action_79,
- action_80,
- action_81,
- action_82,
- action_83,
- action_84,
- action_85,
- action_86,
- action_87,
- action_88,
- action_89,
- action_90,
- action_91,
- action_92,
- action_93,
- action_94,
- action_95,
- action_96,
- action_97,
- action_98,
- action_99,
- action_100,
- action_101,
- action_102,
- action_103,
- action_104,
- action_105,
- action_106,
- action_107,
- action_108,
- action_109,
- action_110,
- action_111,
- action_112,
- action_113,
- action_114,
- action_115,
- action_116,
- action_117,
- action_118,
- action_119,
- action_120,
- action_121,
- action_122,
- action_123,
- action_124,
- action_125,
- action_126,
- action_127,
- action_128,
- action_129,
- action_130,
- action_131,
- action_132,
- action_133,
- action_134,
- action_135,
- action_136,
- action_137,
- action_138,
- action_139,
- action_140,
- action_141,
- action_142,
- action_143,
- action_144,
- action_145,
- action_146,
- action_147,
- action_148,
- action_149,
- action_150,
- action_151,
- action_152,
- action_153,
- action_154,
- action_155,
- action_156,
- action_157,
- action_158,
- action_159,
- action_160,
- action_161,
- action_162,
- action_163,
- action_164,
- action_165,
- action_166,
- action_167,
- action_168,
- action_169,
- action_170,
- action_171,
- action_172,
- action_173,
- action_174,
- action_175,
- action_176,
- action_177,
- action_178,
- action_179,
- action_180,
- action_181,
- action_182,
- action_183,
- action_184,
- action_185,
- action_186,
- action_187,
- action_188,
- action_189,
- action_190,
- action_191,
- action_192,
- action_193,
- action_194,
- action_195,
- action_196,
- action_197,
- action_198,
- action_199,
- action_200,
- action_201,
- action_202,
- action_203,
- action_204,
- action_205,
- action_206,
- action_207,
- action_208,
- action_209,
- action_210,
- action_211,
- action_212,
- action_213,
- action_214,
- action_215,
- action_216,
- action_217,
- action_218,
- action_219,
- action_220,
- action_221,
- action_222,
- action_223,
- action_224,
- action_225,
- action_226,
- action_227,
- action_228,
- action_229,
- action_230,
- action_231,
- action_232,
- action_233,
- action_234,
- action_235,
- action_236,
- action_237,
- action_238,
- action_239,
- action_240,
- action_241,
- action_242,
- action_243,
- action_244,
- action_245,
- action_246,
- action_247,
- action_248,
- action_249,
- action_250,
- action_251,
- action_252 :: () => Int -> ({-HappyReduction (Err) = -}
-	   Int 
-	-> (Token)
-	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)
-	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] 
-	-> HappyStk HappyAbsSyn 
-	-> [(Token)] -> (Err) HappyAbsSyn)
-
-happyReduce_33,
- happyReduce_34,
- happyReduce_35,
- happyReduce_36,
- happyReduce_37,
- happyReduce_38,
- happyReduce_39,
- happyReduce_40,
- happyReduce_41,
- happyReduce_42,
- happyReduce_43,
- happyReduce_44,
- happyReduce_45,
- happyReduce_46,
- happyReduce_47,
- happyReduce_48,
- happyReduce_49,
- happyReduce_50,
- happyReduce_51,
- happyReduce_52,
- happyReduce_53,
- happyReduce_54,
- happyReduce_55,
- happyReduce_56,
- happyReduce_57,
- happyReduce_58,
- happyReduce_59,
- happyReduce_60,
- happyReduce_61,
- happyReduce_62,
- happyReduce_63,
- happyReduce_64,
- happyReduce_65,
- happyReduce_66,
- happyReduce_67,
- happyReduce_68,
- happyReduce_69,
- happyReduce_70,
- happyReduce_71,
- happyReduce_72,
- happyReduce_73,
- happyReduce_74,
- happyReduce_75,
- happyReduce_76,
- happyReduce_77,
- happyReduce_78,
- happyReduce_79,
- happyReduce_80,
- happyReduce_81,
- happyReduce_82,
- happyReduce_83,
- happyReduce_84,
- happyReduce_85,
- happyReduce_86,
- happyReduce_87,
- happyReduce_88,
- happyReduce_89,
- happyReduce_90,
- happyReduce_91,
- happyReduce_92,
- happyReduce_93,
- happyReduce_94,
- happyReduce_95,
- happyReduce_96,
- happyReduce_97,
- happyReduce_98,
- happyReduce_99,
- happyReduce_100,
- happyReduce_101,
- happyReduce_102,
- happyReduce_103,
- happyReduce_104,
- happyReduce_105,
- happyReduce_106,
- happyReduce_107,
- happyReduce_108,
- happyReduce_109,
- happyReduce_110,
- happyReduce_111,
- happyReduce_112,
- happyReduce_113,
- happyReduce_114,
- happyReduce_115,
- happyReduce_116,
- happyReduce_117,
- happyReduce_118,
- happyReduce_119,
- happyReduce_120,
- happyReduce_121,
- happyReduce_122,
- happyReduce_123,
- happyReduce_124,
- happyReduce_125,
- happyReduce_126,
- happyReduce_127,
- happyReduce_128,
- happyReduce_129,
- happyReduce_130,
- happyReduce_131,
- happyReduce_132,
- happyReduce_133,
- happyReduce_134,
- happyReduce_135,
- happyReduce_136,
- happyReduce_137,
- happyReduce_138,
- happyReduce_139,
- happyReduce_140,
- happyReduce_141 :: () => ({-HappyReduction (Err) = -}
-	   Int 
-	-> (Token)
-	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)
-	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] 
-	-> HappyStk HappyAbsSyn 
-	-> [(Token)] -> (Err) HappyAbsSyn)
-
-action_0 (74) = happyShift action_99
-action_0 (83) = happyShift action_137
-action_0 (86) = happyShift action_100
-action_0 (88) = happyShift action_101
-action_0 (90) = happyShift action_113
-action_0 (91) = happyShift action_114
-action_0 (92) = happyShift action_115
-action_0 (93) = happyShift action_116
-action_0 (95) = happyShift action_117
-action_0 (97) = happyShift action_118
-action_0 (98) = happyShift action_119
-action_0 (102) = happyShift action_120
-action_0 (103) = happyShift action_121
-action_0 (104) = happyShift action_122
-action_0 (106) = happyShift action_123
-action_0 (107) = happyShift action_124
-action_0 (110) = happyShift action_138
-action_0 (114) = happyShift action_34
-action_0 (36) = happyGoto action_132
-action_0 (41) = happyGoto action_140
-action_0 (42) = happyGoto action_133
-action_0 (43) = happyGoto action_141
-action_0 (44) = happyGoto action_135
-action_0 (47) = happyGoto action_136
-action_0 (51) = happyGoto action_112
-action_0 (52) = happyGoto action_103
-action_0 _ = happyReduce_42
-
-action_1 (74) = happyShift action_99
-action_1 (86) = happyShift action_100
-action_1 (88) = happyShift action_101
-action_1 (90) = happyShift action_113
-action_1 (91) = happyShift action_114
-action_1 (92) = happyShift action_115
-action_1 (93) = happyShift action_116
-action_1 (95) = happyShift action_117
-action_1 (97) = happyShift action_118
-action_1 (98) = happyShift action_119
-action_1 (102) = happyShift action_120
-action_1 (103) = happyShift action_121
-action_1 (104) = happyShift action_122
-action_1 (106) = happyShift action_123
-action_1 (107) = happyShift action_124
-action_1 (110) = happyShift action_138
-action_1 (114) = happyShift action_34
-action_1 (36) = happyGoto action_132
-action_1 (42) = happyGoto action_139
-action_1 (44) = happyGoto action_135
-action_1 (47) = happyGoto action_136
-action_1 (51) = happyGoto action_112
-action_1 (52) = happyGoto action_103
-action_1 _ = happyFail
-
-action_2 (74) = happyShift action_99
-action_2 (83) = happyShift action_137
-action_2 (86) = happyShift action_100
-action_2 (88) = happyShift action_101
-action_2 (90) = happyShift action_113
-action_2 (91) = happyShift action_114
-action_2 (92) = happyShift action_115
-action_2 (93) = happyShift action_116
-action_2 (95) = happyShift action_117
-action_2 (97) = happyShift action_118
-action_2 (98) = happyShift action_119
-action_2 (102) = happyShift action_120
-action_2 (103) = happyShift action_121
-action_2 (104) = happyShift action_122
-action_2 (106) = happyShift action_123
-action_2 (107) = happyShift action_124
-action_2 (110) = happyShift action_138
-action_2 (114) = happyShift action_34
-action_2 (36) = happyGoto action_132
-action_2 (42) = happyGoto action_133
-action_2 (43) = happyGoto action_134
-action_2 (44) = happyGoto action_135
-action_2 (47) = happyGoto action_136
-action_2 (51) = happyGoto action_112
-action_2 (52) = happyGoto action_103
-action_2 _ = happyReduce_42
-
-action_3 (114) = happyShift action_34
-action_3 (36) = happyGoto action_130
-action_3 (44) = happyGoto action_131
-action_3 _ = happyFail
-
-action_4 (74) = happyShift action_99
-action_4 (83) = happyShift action_127
-action_4 (86) = happyShift action_100
-action_4 (88) = happyShift action_101
-action_4 (90) = happyShift action_113
-action_4 (91) = happyShift action_114
-action_4 (92) = happyShift action_115
-action_4 (93) = happyShift action_116
-action_4 (95) = happyShift action_117
-action_4 (97) = happyShift action_118
-action_4 (98) = happyShift action_119
-action_4 (102) = happyShift action_120
-action_4 (103) = happyShift action_121
-action_4 (104) = happyShift action_122
-action_4 (106) = happyShift action_123
-action_4 (107) = happyShift action_124
-action_4 (114) = happyShift action_34
-action_4 (36) = happyGoto action_97
-action_4 (45) = happyGoto action_128
-action_4 (46) = happyGoto action_129
-action_4 (47) = happyGoto action_126
-action_4 (51) = happyGoto action_112
-action_4 (52) = happyGoto action_103
-action_4 _ = happyReduce_49
-
-action_5 (74) = happyShift action_99
-action_5 (83) = happyShift action_127
-action_5 (86) = happyShift action_100
-action_5 (88) = happyShift action_101
-action_5 (90) = happyShift action_113
-action_5 (91) = happyShift action_114
-action_5 (92) = happyShift action_115
-action_5 (93) = happyShift action_116
-action_5 (95) = happyShift action_117
-action_5 (97) = happyShift action_118
-action_5 (98) = happyShift action_119
-action_5 (102) = happyShift action_120
-action_5 (103) = happyShift action_121
-action_5 (104) = happyShift action_122
-action_5 (106) = happyShift action_123
-action_5 (107) = happyShift action_124
-action_5 (114) = happyShift action_34
-action_5 (36) = happyGoto action_97
-action_5 (46) = happyGoto action_125
-action_5 (47) = happyGoto action_126
-action_5 (51) = happyGoto action_112
-action_5 (52) = happyGoto action_103
-action_5 _ = happyReduce_49
-
-action_6 (74) = happyShift action_99
-action_6 (86) = happyShift action_100
-action_6 (88) = happyShift action_101
-action_6 (90) = happyShift action_113
-action_6 (91) = happyShift action_114
-action_6 (92) = happyShift action_115
-action_6 (93) = happyShift action_116
-action_6 (95) = happyShift action_117
-action_6 (97) = happyShift action_118
-action_6 (98) = happyShift action_119
-action_6 (102) = happyShift action_120
-action_6 (103) = happyShift action_121
-action_6 (104) = happyShift action_122
-action_6 (106) = happyShift action_123
-action_6 (107) = happyShift action_124
-action_6 (114) = happyShift action_34
-action_6 (36) = happyGoto action_97
-action_6 (47) = happyGoto action_111
-action_6 (51) = happyGoto action_112
-action_6 (52) = happyGoto action_103
-action_6 _ = happyFail
-
-action_7 (86) = happyShift action_106
-action_7 (114) = happyShift action_34
-action_7 (115) = happyShift action_68
-action_7 (36) = happyGoto action_104
-action_7 (37) = happyGoto action_108
-action_7 (48) = happyGoto action_109
-action_7 (50) = happyGoto action_110
-action_7 _ = happyFail
-
-action_8 (49) = happyGoto action_107
-action_8 _ = happyReduce_71
-
-action_9 (86) = happyShift action_106
-action_9 (114) = happyShift action_34
-action_9 (36) = happyGoto action_104
-action_9 (50) = happyGoto action_105
-action_9 _ = happyFail
-
-action_10 (74) = happyShift action_99
-action_10 (86) = happyShift action_100
-action_10 (88) = happyShift action_101
-action_10 (114) = happyShift action_34
-action_10 (36) = happyGoto action_97
-action_10 (51) = happyGoto action_102
-action_10 (52) = happyGoto action_103
-action_10 _ = happyFail
-
-action_11 (74) = happyShift action_99
-action_11 (86) = happyShift action_100
-action_11 (88) = happyShift action_101
-action_11 (114) = happyShift action_34
-action_11 (36) = happyGoto action_97
-action_11 (52) = happyGoto action_98
-action_11 _ = happyFail
-
-action_12 (74) = happyShift action_89
-action_12 (53) = happyGoto action_96
-action_12 _ = happyFail
-
-action_13 (86) = happyShift action_92
-action_13 (54) = happyGoto action_95
-action_13 _ = happyFail
-
-action_14 (116) = happyShift action_69
-action_14 (38) = happyGoto action_93
-action_14 (55) = happyGoto action_94
-action_14 _ = happyReduce_86
-
-action_15 (86) = happyShift action_92
-action_15 (54) = happyGoto action_90
-action_15 (56) = happyGoto action_91
-action_15 _ = happyReduce_89
-
-action_16 (74) = happyShift action_89
-action_16 (53) = happyGoto action_87
-action_16 (57) = happyGoto action_88
-action_16 _ = happyFail
-
-action_17 (114) = happyShift action_34
-action_17 (36) = happyGoto action_85
-action_17 (58) = happyGoto action_86
-action_17 _ = happyFail
-
-action_18 (59) = happyGoto action_84
-action_18 _ = happyReduce_95
-
-action_19 (104) = happyShift action_82
-action_19 (106) = happyShift action_83
-action_19 (60) = happyGoto action_81
-action_19 _ = happyReduce_97
-
-action_20 (115) = happyShift action_68
-action_20 (37) = happyGoto action_79
-action_20 (61) = happyGoto action_80
-action_20 _ = happyFail
-
-action_21 (74) = happyShift action_66
-action_21 (86) = happyShift action_67
-action_21 (114) = happyShift action_34
-action_21 (115) = happyShift action_68
-action_21 (116) = happyShift action_69
-action_21 (117) = happyShift action_49
-action_21 (118) = happyShift action_70
-action_21 (36) = happyGoto action_71
-action_21 (37) = happyGoto action_60
-action_21 (38) = happyGoto action_61
-action_21 (39) = happyGoto action_62
-action_21 (40) = happyGoto action_63
-action_21 (62) = happyGoto action_78
-action_21 (63) = happyGoto action_73
-action_21 (64) = happyGoto action_74
-action_21 _ = happyFail
-
-action_22 (74) = happyShift action_66
-action_22 (86) = happyShift action_67
-action_22 (114) = happyShift action_34
-action_22 (115) = happyShift action_68
-action_22 (116) = happyShift action_69
-action_22 (117) = happyShift action_49
-action_22 (118) = happyShift action_70
-action_22 (36) = happyGoto action_71
-action_22 (37) = happyGoto action_60
-action_22 (38) = happyGoto action_61
-action_22 (39) = happyGoto action_62
-action_22 (40) = happyGoto action_63
-action_22 (63) = happyGoto action_77
-action_22 (64) = happyGoto action_74
-action_22 _ = happyFail
-
-action_23 (74) = happyShift action_66
-action_23 (86) = happyShift action_67
-action_23 (114) = happyShift action_34
-action_23 (115) = happyShift action_68
-action_23 (116) = happyShift action_69
-action_23 (117) = happyShift action_49
-action_23 (118) = happyShift action_70
-action_23 (36) = happyGoto action_59
-action_23 (37) = happyGoto action_60
-action_23 (38) = happyGoto action_61
-action_23 (39) = happyGoto action_62
-action_23 (40) = happyGoto action_63
-action_23 (64) = happyGoto action_76
-action_23 _ = happyFail
-
-action_24 (74) = happyShift action_66
-action_24 (86) = happyShift action_67
-action_24 (114) = happyShift action_34
-action_24 (115) = happyShift action_68
-action_24 (116) = happyShift action_69
-action_24 (117) = happyShift action_49
-action_24 (118) = happyShift action_70
-action_24 (36) = happyGoto action_71
-action_24 (37) = happyGoto action_60
-action_24 (38) = happyGoto action_61
-action_24 (39) = happyGoto action_62
-action_24 (40) = happyGoto action_63
-action_24 (62) = happyGoto action_72
-action_24 (63) = happyGoto action_73
-action_24 (64) = happyGoto action_74
-action_24 (65) = happyGoto action_75
-action_24 _ = happyReduce_113
-
-action_25 (74) = happyShift action_66
-action_25 (86) = happyShift action_67
-action_25 (114) = happyShift action_34
-action_25 (115) = happyShift action_68
-action_25 (116) = happyShift action_69
-action_25 (117) = happyShift action_49
-action_25 (118) = happyShift action_70
-action_25 (36) = happyGoto action_59
-action_25 (37) = happyGoto action_60
-action_25 (38) = happyGoto action_61
-action_25 (39) = happyGoto action_62
-action_25 (40) = happyGoto action_63
-action_25 (64) = happyGoto action_64
-action_25 (66) = happyGoto action_65
-action_25 _ = happyFail
-
-action_26 (49) = happyGoto action_55
-action_26 (67) = happyGoto action_58
-action_26 _ = happyReduce_71
-
-action_27 (49) = happyGoto action_55
-action_27 (67) = happyGoto action_56
-action_27 (68) = happyGoto action_57
-action_27 _ = happyReduce_71
-
-action_28 (101) = happyShift action_54
-action_28 (69) = happyGoto action_53
-action_28 _ = happyReduce_122
-
-action_29 (74) = happyShift action_40
-action_29 (86) = happyShift action_41
-action_29 (89) = happyShift action_42
-action_29 (94) = happyShift action_43
-action_29 (96) = happyShift action_44
-action_29 (99) = happyShift action_45
-action_29 (100) = happyShift action_46
-action_29 (109) = happyShift action_47
-action_29 (111) = happyShift action_48
-action_29 (117) = happyShift action_49
-action_29 (39) = happyGoto action_35
-action_29 (70) = happyGoto action_52
-action_29 (72) = happyGoto action_38
-action_29 _ = happyFail
-
-action_30 (74) = happyShift action_40
-action_30 (86) = happyShift action_41
-action_30 (89) = happyShift action_42
-action_30 (94) = happyShift action_43
-action_30 (96) = happyShift action_44
-action_30 (99) = happyShift action_45
-action_30 (100) = happyShift action_46
-action_30 (109) = happyShift action_47
-action_30 (111) = happyShift action_48
-action_30 (117) = happyShift action_49
-action_30 (39) = happyGoto action_35
-action_30 (70) = happyGoto action_36
-action_30 (71) = happyGoto action_51
-action_30 (72) = happyGoto action_38
-action_30 _ = happyFail
-
-action_31 (74) = happyShift action_40
-action_31 (86) = happyShift action_41
-action_31 (89) = happyShift action_42
-action_31 (94) = happyShift action_43
-action_31 (96) = happyShift action_44
-action_31 (99) = happyShift action_45
-action_31 (100) = happyShift action_46
-action_31 (109) = happyShift action_47
-action_31 (111) = happyShift action_48
-action_31 (117) = happyShift action_49
-action_31 (39) = happyGoto action_35
-action_31 (72) = happyGoto action_50
-action_31 _ = happyFail
-
-action_32 (74) = happyShift action_40
-action_32 (86) = happyShift action_41
-action_32 (89) = happyShift action_42
-action_32 (94) = happyShift action_43
-action_32 (96) = happyShift action_44
-action_32 (99) = happyShift action_45
-action_32 (100) = happyShift action_46
-action_32 (109) = happyShift action_47
-action_32 (111) = happyShift action_48
-action_32 (117) = happyShift action_49
-action_32 (39) = happyGoto action_35
-action_32 (70) = happyGoto action_36
-action_32 (71) = happyGoto action_37
-action_32 (72) = happyGoto action_38
-action_32 (73) = happyGoto action_39
-action_32 _ = happyFail
-
-action_33 (114) = happyShift action_34
-action_33 _ = happyFail
-
-action_34 _ = happyReduce_33
-
-action_35 _ = happyReduce_132
-
-action_36 (74) = happyShift action_40
-action_36 (79) = happyShift action_195
-action_36 (86) = happyShift action_41
-action_36 (89) = happyShift action_42
-action_36 (94) = happyShift action_43
-action_36 (96) = happyShift action_44
-action_36 (99) = happyShift action_45
-action_36 (100) = happyShift action_46
-action_36 (109) = happyShift action_47
-action_36 (111) = happyShift action_48
-action_36 (117) = happyShift action_49
-action_36 (39) = happyGoto action_35
-action_36 (72) = happyGoto action_187
-action_36 _ = happyReduce_127
-
-action_37 (112) = happyShift action_188
-action_37 _ = happyReduce_141
-
-action_38 (76) = happyShift action_189
-action_38 (77) = happyShift action_190
-action_38 (85) = happyShift action_191
-action_38 _ = happyReduce_124
-
-action_39 (119) = happyAccept
-action_39 _ = happyFail
-
-action_40 (74) = happyShift action_40
-action_40 (86) = happyShift action_41
-action_40 (89) = happyShift action_42
-action_40 (94) = happyShift action_43
-action_40 (96) = happyShift action_44
-action_40 (99) = happyShift action_45
-action_40 (100) = happyShift action_46
-action_40 (109) = happyShift action_47
-action_40 (111) = happyShift action_48
-action_40 (117) = happyShift action_49
-action_40 (39) = happyGoto action_35
-action_40 (70) = happyGoto action_36
-action_40 (71) = happyGoto action_37
-action_40 (72) = happyGoto action_38
-action_40 (73) = happyGoto action_194
-action_40 _ = happyFail
-
-action_41 (115) = happyShift action_68
-action_41 (37) = happyGoto action_193
-action_41 _ = happyFail
-
-action_42 _ = happyReduce_139
-
-action_43 _ = happyReduce_135
-
-action_44 _ = happyReduce_131
-
-action_45 _ = happyReduce_136
-
-action_46 _ = happyReduce_138
-
-action_47 _ = happyReduce_137
-
-action_48 (115) = happyShift action_68
-action_48 (37) = happyGoto action_192
-action_48 _ = happyFail
-
-action_49 _ = happyReduce_36
-
-action_50 (76) = happyShift action_189
-action_50 (77) = happyShift action_190
-action_50 (85) = happyShift action_191
-action_50 (119) = happyAccept
-action_50 _ = happyFail
-
-action_51 (112) = happyShift action_188
-action_51 (119) = happyAccept
-action_51 _ = happyFail
-
-action_52 (74) = happyShift action_40
-action_52 (86) = happyShift action_41
-action_52 (89) = happyShift action_42
-action_52 (94) = happyShift action_43
-action_52 (96) = happyShift action_44
-action_52 (99) = happyShift action_45
-action_52 (100) = happyShift action_46
-action_52 (109) = happyShift action_47
-action_52 (111) = happyShift action_48
-action_52 (117) = happyShift action_49
-action_52 (119) = happyAccept
-action_52 (39) = happyGoto action_35
-action_52 (72) = happyGoto action_187
-action_52 _ = happyFail
-
-action_53 (119) = happyAccept
-action_53 _ = happyFail
-
-action_54 _ = happyReduce_121
-
-action_55 (86) = happyShift action_106
-action_55 (114) = happyShift action_34
-action_55 (115) = happyShift action_68
-action_55 (36) = happyGoto action_104
-action_55 (37) = happyGoto action_108
-action_55 (48) = happyGoto action_164
-action_55 (50) = happyGoto action_110
-action_55 _ = happyReduce_118
-
-action_56 (112) = happyShift action_186
-action_56 _ = happyReduce_119
-
-action_57 (119) = happyAccept
-action_57 _ = happyFail
-
-action_58 (119) = happyAccept
-action_58 _ = happyFail
-
-action_59 _ = happyReduce_106
-
-action_60 _ = happyReduce_109
-
-action_61 _ = happyReduce_107
-
-action_62 _ = happyReduce_108
-
-action_63 _ = happyReduce_110
-
-action_64 (74) = happyShift action_66
-action_64 (86) = happyShift action_67
-action_64 (114) = happyShift action_34
-action_64 (115) = happyShift action_68
-action_64 (116) = happyShift action_69
-action_64 (117) = happyShift action_49
-action_64 (118) = happyShift action_70
-action_64 (36) = happyGoto action_59
-action_64 (37) = happyGoto action_60
-action_64 (38) = happyGoto action_61
-action_64 (39) = happyGoto action_62
-action_64 (40) = happyGoto action_63
-action_64 (64) = happyGoto action_64
-action_64 (66) = happyGoto action_185
-action_64 _ = happyReduce_116
-
-action_65 (119) = happyAccept
-action_65 _ = happyFail
-
-action_66 (74) = happyShift action_66
-action_66 (86) = happyShift action_67
-action_66 (114) = happyShift action_34
-action_66 (115) = happyShift action_68
-action_66 (116) = happyShift action_69
-action_66 (117) = happyShift action_49
-action_66 (118) = happyShift action_70
-action_66 (36) = happyGoto action_71
-action_66 (37) = happyGoto action_60
-action_66 (38) = happyGoto action_61
-action_66 (39) = happyGoto action_62
-action_66 (40) = happyGoto action_63
-action_66 (62) = happyGoto action_184
-action_66 (63) = happyGoto action_73
-action_66 (64) = happyGoto action_74
-action_66 _ = happyFail
-
-action_67 (74) = happyShift action_66
-action_67 (86) = happyShift action_67
-action_67 (114) = happyShift action_34
-action_67 (115) = happyShift action_68
-action_67 (116) = happyShift action_69
-action_67 (117) = happyShift action_49
-action_67 (118) = happyShift action_70
-action_67 (36) = happyGoto action_71
-action_67 (37) = happyGoto action_60
-action_67 (38) = happyGoto action_61
-action_67 (39) = happyGoto action_62
-action_67 (40) = happyGoto action_63
-action_67 (62) = happyGoto action_72
-action_67 (63) = happyGoto action_73
-action_67 (64) = happyGoto action_74
-action_67 (65) = happyGoto action_183
-action_67 _ = happyReduce_113
-
-action_68 _ = happyReduce_34
-
-action_69 _ = happyReduce_35
-
-action_70 _ = happyReduce_37
-
-action_71 (74) = happyShift action_66
-action_71 (86) = happyShift action_67
-action_71 (114) = happyShift action_34
-action_71 (115) = happyShift action_68
-action_71 (116) = happyShift action_69
-action_71 (117) = happyShift action_49
-action_71 (118) = happyShift action_70
-action_71 (36) = happyGoto action_59
-action_71 (37) = happyGoto action_60
-action_71 (38) = happyGoto action_61
-action_71 (39) = happyGoto action_62
-action_71 (40) = happyGoto action_63
-action_71 (64) = happyGoto action_64
-action_71 (66) = happyGoto action_182
-action_71 _ = happyReduce_106
-
-action_72 (78) = happyShift action_181
-action_72 _ = happyReduce_114
-
-action_73 (81) = happyShift action_180
-action_73 _ = happyReduce_103
-
-action_74 _ = happyReduce_105
-
-action_75 (119) = happyAccept
-action_75 _ = happyFail
-
-action_76 (119) = happyAccept
-action_76 _ = happyFail
-
-action_77 (119) = happyAccept
-action_77 _ = happyFail
-
-action_78 (119) = happyAccept
-action_78 _ = happyFail
-
-action_79 (78) = happyShift action_179
-action_79 _ = happyReduce_100
-
-action_80 (119) = happyAccept
-action_80 _ = happyFail
-
-action_81 (119) = happyAccept
-action_81 _ = happyFail
-
-action_82 (115) = happyShift action_68
-action_82 (37) = happyGoto action_178
-action_82 _ = happyFail
-
-action_83 (115) = happyShift action_68
-action_83 (37) = happyGoto action_177
-action_83 _ = happyFail
-
-action_84 (114) = happyShift action_34
-action_84 (119) = happyAccept
-action_84 (36) = happyGoto action_85
-action_84 (58) = happyGoto action_176
-action_84 _ = happyFail
-
-action_85 _ = happyReduce_94
-
-action_86 (119) = happyAccept
-action_86 _ = happyFail
-
-action_87 (74) = happyShift action_89
-action_87 (53) = happyGoto action_87
-action_87 (57) = happyGoto action_175
-action_87 _ = happyReduce_92
-
-action_88 (119) = happyAccept
-action_88 _ = happyFail
-
-action_89 (86) = happyShift action_174
-action_89 _ = happyFail
-
-action_90 (78) = happyShift action_173
-action_90 _ = happyReduce_90
-
-action_91 (119) = happyAccept
-action_91 _ = happyFail
-
-action_92 (116) = happyShift action_69
-action_92 (38) = happyGoto action_93
-action_92 (55) = happyGoto action_172
-action_92 _ = happyReduce_86
-
-action_93 (78) = happyShift action_171
-action_93 _ = happyReduce_87
-
-action_94 (119) = happyAccept
-action_94 _ = happyFail
-
-action_95 (119) = happyAccept
-action_95 _ = happyFail
-
-action_96 (119) = happyAccept
-action_96 _ = happyFail
-
-action_97 _ = happyReduce_79
-
-action_98 (119) = happyAccept
-action_98 _ = happyFail
-
-action_99 (81) = happyShift action_170
-action_99 _ = happyFail
-
-action_100 (87) = happyShift action_169
-action_100 _ = happyFail
-
-action_101 _ = happyReduce_80
-
-action_102 (119) = happyAccept
-action_102 _ = happyFail
-
-action_103 (74) = happyShift action_168
-action_103 (86) = happyShift action_100
-action_103 (88) = happyShift action_101
-action_103 (114) = happyShift action_34
-action_103 (36) = happyGoto action_97
-action_103 (52) = happyGoto action_166
-action_103 (53) = happyGoto action_87
-action_103 (57) = happyGoto action_167
-action_103 _ = happyReduce_75
-
-action_104 _ = happyReduce_74
-
-action_105 (119) = happyAccept
-action_105 _ = happyFail
-
-action_106 (86) = happyShift action_106
-action_106 (114) = happyShift action_34
-action_106 (36) = happyGoto action_104
-action_106 (50) = happyGoto action_165
-action_106 _ = happyFail
-
-action_107 (86) = happyShift action_106
-action_107 (114) = happyShift action_34
-action_107 (115) = happyShift action_68
-action_107 (119) = happyAccept
-action_107 (36) = happyGoto action_104
-action_107 (37) = happyGoto action_108
-action_107 (48) = happyGoto action_164
-action_107 (50) = happyGoto action_110
-action_107 _ = happyFail
-
-action_108 _ = happyReduce_69
-
-action_109 (119) = happyAccept
-action_109 _ = happyFail
-
-action_110 _ = happyReduce_70
-
-action_111 (119) = happyAccept
-action_111 _ = happyFail
-
-action_112 (80) = happyShift action_163
-action_112 _ = happyFail
-
-action_113 (114) = happyShift action_34
-action_113 (36) = happyGoto action_162
-action_113 _ = happyFail
-
-action_114 (115) = happyShift action_68
-action_114 (37) = happyGoto action_161
-action_114 _ = happyFail
-
-action_115 (114) = happyShift action_34
-action_115 (36) = happyGoto action_160
-action_115 _ = happyFail
-
-action_116 (86) = happyShift action_106
-action_116 (114) = happyShift action_34
-action_116 (36) = happyGoto action_104
-action_116 (50) = happyGoto action_159
-action_116 _ = happyFail
-
-action_117 (114) = happyShift action_34
-action_117 (36) = happyGoto action_130
-action_117 (44) = happyGoto action_158
-action_117 _ = happyFail
-
-action_118 (74) = happyShift action_99
-action_118 (86) = happyShift action_100
-action_118 (88) = happyShift action_101
-action_118 (114) = happyShift action_34
-action_118 (36) = happyGoto action_97
-action_118 (51) = happyGoto action_157
-action_118 (52) = happyGoto action_103
-action_118 _ = happyFail
-
-action_119 (105) = happyShift action_155
-action_119 (108) = happyShift action_156
-action_119 (115) = happyShift action_68
-action_119 (37) = happyGoto action_79
-action_119 (61) = happyGoto action_154
-action_119 _ = happyFail
-
-action_120 (107) = happyShift action_153
-action_120 _ = happyFail
-
-action_121 (114) = happyShift action_34
-action_121 (36) = happyGoto action_152
-action_121 _ = happyFail
-
-action_122 (101) = happyShift action_54
-action_122 (69) = happyGoto action_151
-action_122 _ = happyReduce_122
-
-action_123 (101) = happyShift action_54
-action_123 (69) = happyGoto action_150
-action_123 _ = happyReduce_122
-
-action_124 (114) = happyShift action_34
-action_124 (36) = happyGoto action_149
-action_124 _ = happyFail
-
-action_125 (119) = happyAccept
-action_125 _ = happyFail
-
-action_126 (83) = happyShift action_148
-action_126 _ = happyReduce_50
-
-action_127 (74) = happyShift action_99
-action_127 (83) = happyShift action_127
-action_127 (86) = happyShift action_100
-action_127 (88) = happyShift action_101
-action_127 (90) = happyShift action_113
-action_127 (91) = happyShift action_114
-action_127 (92) = happyShift action_115
-action_127 (93) = happyShift action_116
-action_127 (95) = happyShift action_117
-action_127 (97) = happyShift action_118
-action_127 (98) = happyShift action_119
-action_127 (102) = happyShift action_120
-action_127 (103) = happyShift action_121
-action_127 (104) = happyShift action_122
-action_127 (106) = happyShift action_123
-action_127 (107) = happyShift action_124
-action_127 (114) = happyShift action_34
-action_127 (36) = happyGoto action_97
-action_127 (46) = happyGoto action_147
-action_127 (47) = happyGoto action_126
-action_127 (51) = happyGoto action_112
-action_127 (52) = happyGoto action_103
-action_127 _ = happyReduce_49
-
-action_128 (119) = happyAccept
-action_128 _ = happyFail
-
-action_129 _ = happyReduce_48
-
-action_130 (78) = happyShift action_146
-action_130 _ = happyReduce_46
-
-action_131 (119) = happyAccept
-action_131 _ = happyFail
-
-action_132 (78) = happyShift action_146
-action_132 (81) = happyReduce_46
-action_132 _ = happyReduce_79
-
-action_133 (83) = happyShift action_145
-action_133 _ = happyReduce_43
-
-action_134 (119) = happyAccept
-action_134 _ = happyFail
-
-action_135 (81) = happyShift action_144
-action_135 _ = happyFail
-
-action_136 _ = happyReduce_39
-
-action_137 (74) = happyShift action_99
-action_137 (83) = happyShift action_137
-action_137 (86) = happyShift action_100
-action_137 (88) = happyShift action_101
-action_137 (90) = happyShift action_113
-action_137 (91) = happyShift action_114
-action_137 (92) = happyShift action_115
-action_137 (93) = happyShift action_116
-action_137 (95) = happyShift action_117
-action_137 (97) = happyShift action_118
-action_137 (98) = happyShift action_119
-action_137 (102) = happyShift action_120
-action_137 (103) = happyShift action_121
-action_137 (104) = happyShift action_122
-action_137 (106) = happyShift action_123
-action_137 (107) = happyShift action_124
-action_137 (110) = happyShift action_138
-action_137 (114) = happyShift action_34
-action_137 (36) = happyGoto action_132
-action_137 (42) = happyGoto action_133
-action_137 (43) = happyGoto action_143
-action_137 (44) = happyGoto action_135
-action_137 (47) = happyGoto action_136
-action_137 (51) = happyGoto action_112
-action_137 (52) = happyGoto action_103
-action_137 _ = happyReduce_42
-
-action_138 (114) = happyShift action_34
-action_138 (36) = happyGoto action_130
-action_138 (44) = happyGoto action_142
-action_138 _ = happyFail
-
-action_139 (119) = happyAccept
-action_139 _ = happyFail
-
-action_140 (119) = happyAccept
-action_140 _ = happyFail
-
-action_141 _ = happyReduce_38
-
-action_142 _ = happyReduce_41
-
-action_143 _ = happyReduce_45
-
-action_144 (74) = happyShift action_99
-action_144 (86) = happyShift action_100
-action_144 (88) = happyShift action_101
-action_144 (90) = happyShift action_113
-action_144 (91) = happyShift action_114
-action_144 (92) = happyShift action_115
-action_144 (93) = happyShift action_116
-action_144 (95) = happyShift action_117
-action_144 (97) = happyShift action_118
-action_144 (98) = happyShift action_119
-action_144 (102) = happyShift action_120
-action_144 (103) = happyShift action_121
-action_144 (104) = happyShift action_122
-action_144 (106) = happyShift action_123
-action_144 (107) = happyShift action_124
-action_144 (114) = happyShift action_34
-action_144 (36) = happyGoto action_97
-action_144 (47) = happyGoto action_230
-action_144 (51) = happyGoto action_112
-action_144 (52) = happyGoto action_103
-action_144 _ = happyFail
-
-action_145 (74) = happyShift action_99
-action_145 (83) = happyShift action_137
-action_145 (86) = happyShift action_100
-action_145 (88) = happyShift action_101
-action_145 (90) = happyShift action_113
-action_145 (91) = happyShift action_114
-action_145 (92) = happyShift action_115
-action_145 (93) = happyShift action_116
-action_145 (95) = happyShift action_117
-action_145 (97) = happyShift action_118
-action_145 (98) = happyShift action_119
-action_145 (102) = happyShift action_120
-action_145 (103) = happyShift action_121
-action_145 (104) = happyShift action_122
-action_145 (106) = happyShift action_123
-action_145 (107) = happyShift action_124
-action_145 (110) = happyShift action_138
-action_145 (114) = happyShift action_34
-action_145 (36) = happyGoto action_132
-action_145 (42) = happyGoto action_133
-action_145 (43) = happyGoto action_229
-action_145 (44) = happyGoto action_135
-action_145 (47) = happyGoto action_136
-action_145 (51) = happyGoto action_112
-action_145 (52) = happyGoto action_103
-action_145 _ = happyReduce_42
-
-action_146 (114) = happyShift action_34
-action_146 (36) = happyGoto action_130
-action_146 (44) = happyGoto action_228
-action_146 _ = happyFail
-
-action_147 _ = happyReduce_52
-
-action_148 (74) = happyShift action_99
-action_148 (83) = happyShift action_127
-action_148 (86) = happyShift action_100
-action_148 (88) = happyShift action_101
-action_148 (90) = happyShift action_113
-action_148 (91) = happyShift action_114
-action_148 (92) = happyShift action_115
-action_148 (93) = happyShift action_116
-action_148 (95) = happyShift action_117
-action_148 (97) = happyShift action_118
-action_148 (98) = happyShift action_119
-action_148 (102) = happyShift action_120
-action_148 (103) = happyShift action_121
-action_148 (104) = happyShift action_122
-action_148 (106) = happyShift action_123
-action_148 (107) = happyShift action_124
-action_148 (114) = happyShift action_34
-action_148 (36) = happyGoto action_97
-action_148 (46) = happyGoto action_227
-action_148 (47) = happyGoto action_126
-action_148 (51) = happyGoto action_112
-action_148 (52) = happyGoto action_103
-action_148 _ = happyReduce_49
-
-action_149 (74) = happyShift action_40
-action_149 (86) = happyShift action_41
-action_149 (89) = happyShift action_42
-action_149 (94) = happyShift action_43
-action_149 (96) = happyShift action_44
-action_149 (99) = happyShift action_45
-action_149 (100) = happyShift action_46
-action_149 (109) = happyShift action_47
-action_149 (111) = happyShift action_48
-action_149 (117) = happyShift action_49
-action_149 (39) = happyGoto action_35
-action_149 (70) = happyGoto action_36
-action_149 (71) = happyGoto action_37
-action_149 (72) = happyGoto action_38
-action_149 (73) = happyGoto action_226
-action_149 _ = happyFail
-
-action_150 (86) = happyShift action_106
-action_150 (114) = happyShift action_34
-action_150 (36) = happyGoto action_104
-action_150 (50) = happyGoto action_225
-action_150 _ = happyFail
-
-action_151 (86) = happyShift action_106
-action_151 (114) = happyShift action_34
-action_151 (36) = happyGoto action_104
-action_151 (50) = happyGoto action_224
-action_151 _ = happyFail
-
-action_152 (82) = happyShift action_223
-action_152 _ = happyFail
-
-action_153 (114) = happyShift action_34
-action_153 (36) = happyGoto action_222
-action_153 _ = happyFail
-
-action_154 _ = happyReduce_66
-
-action_155 (115) = happyShift action_68
-action_155 (37) = happyGoto action_79
-action_155 (61) = happyGoto action_221
-action_155 _ = happyFail
-
-action_156 _ = happyReduce_68
-
-action_157 (80) = happyShift action_220
-action_157 _ = happyFail
-
-action_158 _ = happyReduce_59
-
-action_159 (115) = happyShift action_68
-action_159 (37) = happyGoto action_219
-action_159 _ = happyFail
-
-action_160 (59) = happyGoto action_218
-action_160 _ = happyReduce_95
-
-action_161 (115) = happyShift action_68
-action_161 (37) = happyGoto action_217
-action_161 _ = happyReduce_54
-
-action_162 (116) = happyShift action_69
-action_162 (38) = happyGoto action_216
-action_162 _ = happyFail
-
-action_163 (86) = happyShift action_106
-action_163 (114) = happyShift action_34
-action_163 (36) = happyGoto action_104
-action_163 (50) = happyGoto action_215
-action_163 _ = happyFail
-
-action_164 _ = happyReduce_72
-
-action_165 (87) = happyShift action_214
-action_165 _ = happyFail
-
-action_166 (74) = happyShift action_89
-action_166 (53) = happyGoto action_87
-action_166 (57) = happyGoto action_213
-action_166 _ = happyReduce_78
-
-action_167 _ = happyReduce_76
-
-action_168 (81) = happyShift action_170
-action_168 (86) = happyShift action_174
-action_168 _ = happyFail
-
-action_169 _ = happyReduce_81
-
-action_170 (75) = happyShift action_211
-action_170 (86) = happyShift action_212
-action_170 _ = happyFail
-
-action_171 (116) = happyShift action_69
-action_171 (38) = happyGoto action_93
-action_171 (55) = happyGoto action_210
-action_171 _ = happyReduce_86
-
-action_172 (87) = happyShift action_209
-action_172 _ = happyFail
-
-action_173 (86) = happyShift action_92
-action_173 (54) = happyGoto action_90
-action_173 (56) = happyGoto action_208
-action_173 _ = happyReduce_89
-
-action_174 (86) = happyShift action_92
-action_174 (54) = happyGoto action_90
-action_174 (56) = happyGoto action_207
-action_174 _ = happyReduce_89
-
-action_175 _ = happyReduce_93
-
-action_176 _ = happyReduce_96
-
-action_177 _ = happyReduce_98
-
-action_178 _ = happyReduce_99
-
-action_179 (115) = happyShift action_68
-action_179 (37) = happyGoto action_79
-action_179 (61) = happyGoto action_206
-action_179 _ = happyFail
-
-action_180 (74) = happyShift action_66
-action_180 (86) = happyShift action_67
-action_180 (114) = happyShift action_34
-action_180 (115) = happyShift action_68
-action_180 (116) = happyShift action_69
-action_180 (117) = happyShift action_49
-action_180 (118) = happyShift action_70
-action_180 (36) = happyGoto action_71
-action_180 (37) = happyGoto action_60
-action_180 (38) = happyGoto action_61
-action_180 (39) = happyGoto action_62
-action_180 (40) = happyGoto action_63
-action_180 (62) = happyGoto action_205
-action_180 (63) = happyGoto action_73
-action_180 (64) = happyGoto action_74
-action_180 _ = happyFail
-
-action_181 (74) = happyShift action_66
-action_181 (86) = happyShift action_67
-action_181 (114) = happyShift action_34
-action_181 (115) = happyShift action_68
-action_181 (116) = happyShift action_69
-action_181 (117) = happyShift action_49
-action_181 (118) = happyShift action_70
-action_181 (36) = happyGoto action_71
-action_181 (37) = happyGoto action_60
-action_181 (38) = happyGoto action_61
-action_181 (39) = happyGoto action_62
-action_181 (40) = happyGoto action_63
-action_181 (62) = happyGoto action_72
-action_181 (63) = happyGoto action_73
-action_181 (64) = happyGoto action_74
-action_181 (65) = happyGoto action_204
-action_181 _ = happyReduce_113
-
-action_182 _ = happyReduce_104
-
-action_183 (87) = happyShift action_203
-action_183 _ = happyFail
-
-action_184 (75) = happyShift action_202
-action_184 _ = happyFail
-
-action_185 _ = happyReduce_117
-
-action_186 (49) = happyGoto action_55
-action_186 (67) = happyGoto action_56
-action_186 (68) = happyGoto action_201
-action_186 _ = happyReduce_71
-
-action_187 (76) = happyShift action_189
-action_187 (77) = happyShift action_190
-action_187 (85) = happyShift action_191
-action_187 _ = happyReduce_123
-
-action_188 (74) = happyShift action_40
-action_188 (86) = happyShift action_41
-action_188 (89) = happyShift action_42
-action_188 (94) = happyShift action_43
-action_188 (96) = happyShift action_44
-action_188 (99) = happyShift action_45
-action_188 (100) = happyShift action_46
-action_188 (109) = happyShift action_47
-action_188 (111) = happyShift action_48
-action_188 (117) = happyShift action_49
-action_188 (39) = happyGoto action_35
-action_188 (70) = happyGoto action_200
-action_188 (72) = happyGoto action_38
-action_188 _ = happyFail
-
-action_189 _ = happyReduce_128
-
-action_190 _ = happyReduce_129
-
-action_191 _ = happyReduce_130
-
-action_192 (113) = happyShift action_199
-action_192 _ = happyFail
-
-action_193 (87) = happyShift action_198
-action_193 _ = happyFail
-
-action_194 (75) = happyShift action_197
-action_194 _ = happyFail
-
-action_195 (74) = happyShift action_40
-action_195 (86) = happyShift action_41
-action_195 (89) = happyShift action_42
-action_195 (94) = happyShift action_43
-action_195 (96) = happyShift action_44
-action_195 (99) = happyShift action_45
-action_195 (100) = happyShift action_46
-action_195 (109) = happyShift action_47
-action_195 (111) = happyShift action_48
-action_195 (117) = happyShift action_49
-action_195 (39) = happyGoto action_35
-action_195 (70) = happyGoto action_196
-action_195 (72) = happyGoto action_38
-action_195 _ = happyFail
-
-action_196 (74) = happyShift action_40
-action_196 (86) = happyShift action_41
-action_196 (89) = happyShift action_42
-action_196 (94) = happyShift action_43
-action_196 (96) = happyShift action_44
-action_196 (99) = happyShift action_45
-action_196 (100) = happyShift action_46
-action_196 (109) = happyShift action_47
-action_196 (111) = happyShift action_48
-action_196 (117) = happyShift action_49
-action_196 (39) = happyGoto action_35
-action_196 (72) = happyGoto action_187
-action_196 _ = happyReduce_126
-
-action_197 _ = happyReduce_140
-
-action_198 _ = happyReduce_133
-
-action_199 _ = happyReduce_134
-
-action_200 (74) = happyShift action_40
-action_200 (86) = happyShift action_41
-action_200 (89) = happyShift action_42
-action_200 (94) = happyShift action_43
-action_200 (96) = happyShift action_44
-action_200 (99) = happyShift action_45
-action_200 (100) = happyShift action_46
-action_200 (109) = happyShift action_47
-action_200 (111) = happyShift action_48
-action_200 (117) = happyShift action_49
-action_200 (39) = happyGoto action_35
-action_200 (72) = happyGoto action_187
-action_200 _ = happyReduce_125
-
-action_201 _ = happyReduce_120
-
-action_202 _ = happyReduce_112
-
-action_203 _ = happyReduce_111
-
-action_204 _ = happyReduce_115
-
-action_205 _ = happyReduce_102
-
-action_206 _ = happyReduce_101
-
-action_207 (87) = happyShift action_240
-action_207 _ = happyFail
-
-action_208 _ = happyReduce_91
-
-action_209 _ = happyReduce_85
-
-action_210 _ = happyReduce_88
-
-action_211 _ = happyReduce_82
-
-action_212 (87) = happyShift action_239
-action_212 _ = happyFail
-
-action_213 _ = happyReduce_77
-
-action_214 _ = happyReduce_73
-
-action_215 (82) = happyShift action_238
-action_215 _ = happyFail
-
-action_216 _ = happyReduce_63
-
-action_217 _ = happyReduce_55
-
-action_218 (84) = happyShift action_237
-action_218 (114) = happyShift action_34
-action_218 (36) = happyGoto action_85
-action_218 (58) = happyGoto action_176
-action_218 _ = happyFail
-
-action_219 (115) = happyShift action_68
-action_219 (37) = happyGoto action_236
-action_219 _ = happyFail
-
-action_220 (86) = happyShift action_106
-action_220 (114) = happyShift action_34
-action_220 (36) = happyGoto action_104
-action_220 (50) = happyGoto action_235
-action_220 _ = happyFail
-
-action_221 _ = happyReduce_67
-
-action_222 (74) = happyShift action_40
-action_222 (86) = happyShift action_41
-action_222 (89) = happyShift action_42
-action_222 (94) = happyShift action_43
-action_222 (96) = happyShift action_44
-action_222 (99) = happyShift action_45
-action_222 (100) = happyShift action_46
-action_222 (109) = happyShift action_47
-action_222 (111) = happyShift action_48
-action_222 (117) = happyShift action_49
-action_222 (39) = happyGoto action_35
-action_222 (70) = happyGoto action_36
-action_222 (71) = happyGoto action_37
-action_222 (72) = happyGoto action_38
-action_222 (73) = happyGoto action_234
-action_222 _ = happyFail
-
-action_223 (49) = happyGoto action_55
-action_223 (67) = happyGoto action_56
-action_223 (68) = happyGoto action_233
-action_223 _ = happyReduce_71
-
-action_224 (115) = happyShift action_68
-action_224 (37) = happyGoto action_232
-action_224 _ = happyFail
-
-action_225 (115) = happyShift action_68
-action_225 (37) = happyGoto action_231
-action_225 _ = happyFail
-
-action_226 _ = happyReduce_57
-
-action_227 _ = happyReduce_51
-
-action_228 _ = happyReduce_47
-
-action_229 _ = happyReduce_44
-
-action_230 _ = happyReduce_40
-
-action_231 _ = happyReduce_61
-
-action_232 _ = happyReduce_60
-
-action_233 _ = happyReduce_64
-
-action_234 _ = happyReduce_58
-
-action_235 (82) = happyShift action_246
-action_235 _ = happyFail
-
-action_236 (104) = happyShift action_82
-action_236 (106) = happyShift action_83
-action_236 (60) = happyGoto action_245
-action_236 _ = happyReduce_97
-
-action_237 (74) = happyShift action_66
-action_237 (86) = happyShift action_67
-action_237 (114) = happyShift action_34
-action_237 (115) = happyShift action_68
-action_237 (116) = happyShift action_69
-action_237 (117) = happyShift action_49
-action_237 (118) = happyShift action_70
-action_237 (36) = happyGoto action_71
-action_237 (37) = happyGoto action_60
-action_237 (38) = happyGoto action_61
-action_237 (39) = happyGoto action_62
-action_237 (40) = happyGoto action_63
-action_237 (62) = happyGoto action_244
-action_237 (63) = happyGoto action_73
-action_237 (64) = happyGoto action_74
-action_237 _ = happyFail
-
-action_238 (49) = happyGoto action_243
-action_238 _ = happyReduce_71
-
-action_239 (75) = happyShift action_242
-action_239 _ = happyFail
-
-action_240 (78) = happyShift action_241
-action_240 _ = happyFail
-
-action_241 (86) = happyShift action_249
-action_241 _ = happyFail
-
-action_242 _ = happyReduce_83
-
-action_243 (86) = happyShift action_106
-action_243 (114) = happyShift action_34
-action_243 (115) = happyShift action_68
-action_243 (36) = happyGoto action_104
-action_243 (37) = happyGoto action_108
-action_243 (48) = happyGoto action_164
-action_243 (50) = happyGoto action_110
-action_243 _ = happyReduce_53
-
-action_244 _ = happyReduce_65
-
-action_245 (101) = happyShift action_54
-action_245 (69) = happyGoto action_248
-action_245 _ = happyReduce_122
-
-action_246 (49) = happyGoto action_247
-action_246 _ = happyReduce_71
-
-action_247 (86) = happyShift action_106
-action_247 (114) = happyShift action_34
-action_247 (115) = happyShift action_68
-action_247 (36) = happyGoto action_104
-action_247 (37) = happyGoto action_108
-action_247 (48) = happyGoto action_164
-action_247 (50) = happyGoto action_110
-action_247 _ = happyReduce_56
-
-action_248 _ = happyReduce_62
-
-action_249 (116) = happyShift action_69
-action_249 (38) = happyGoto action_93
-action_249 (55) = happyGoto action_250
-action_249 _ = happyReduce_86
-
-action_250 (87) = happyShift action_251
-action_250 _ = happyFail
-
-action_251 (75) = happyShift action_252
-action_251 _ = happyFail
-
-action_252 _ = happyReduce_84
-
-happyReduce_33 = happySpecReduce_1  36 happyReduction_33
-happyReduction_33 (HappyTerminal (PT _ (TV happy_var_1)))
-	 =  HappyAbsSyn36
-		 (Ident happy_var_1
-	)
-happyReduction_33 _  = notHappyAtAll 
-
-happyReduce_34 = happySpecReduce_1  37 happyReduction_34
-happyReduction_34 (HappyTerminal (PT _ (TL happy_var_1)))
-	 =  HappyAbsSyn37
-		 (happy_var_1
-	)
-happyReduction_34 _  = notHappyAtAll 
-
-happyReduce_35 = happySpecReduce_1  38 happyReduction_35
-happyReduction_35 (HappyTerminal (PT _ (TI happy_var_1)))
-	 =  HappyAbsSyn38
-		 ((read ( happy_var_1)) :: Integer
-	)
-happyReduction_35 _  = notHappyAtAll 
-
-happyReduce_36 = happySpecReduce_1  39 happyReduction_36
-happyReduction_36 (HappyTerminal (PT _ (TC happy_var_1)))
-	 =  HappyAbsSyn39
-		 ((read ( happy_var_1)) :: Char
-	)
-happyReduction_36 _  = notHappyAtAll 
-
-happyReduce_37 = happySpecReduce_1  40 happyReduction_37
-happyReduction_37 (HappyTerminal (PT _ (TD happy_var_1)))
-	 =  HappyAbsSyn40
-		 ((read ( happy_var_1)) :: Double
-	)
-happyReduction_37 _  = notHappyAtAll 
-
-happyReduce_38 = happySpecReduce_1  41 happyReduction_38
-happyReduction_38 (HappyAbsSyn43  happy_var_1)
-	 =  HappyAbsSyn41
-		 (AbsBNF.LGr happy_var_1
-	)
-happyReduction_38 _  = notHappyAtAll 
-
-happyReduce_39 = happySpecReduce_1  42 happyReduction_39
-happyReduction_39 (HappyAbsSyn47  happy_var_1)
-	 =  HappyAbsSyn42
-		 (AbsBNF.DefAll happy_var_1
-	)
-happyReduction_39 _  = notHappyAtAll 
-
-happyReduce_40 = happySpecReduce_3  42 happyReduction_40
-happyReduction_40 (HappyAbsSyn47  happy_var_3)
-	_
-	(HappyAbsSyn44  happy_var_1)
-	 =  HappyAbsSyn42
-		 (AbsBNF.DefSome happy_var_1 happy_var_3
-	)
-happyReduction_40 _ _ _  = notHappyAtAll 
-
-happyReduce_41 = happySpecReduce_2  42 happyReduction_41
-happyReduction_41 (HappyAbsSyn44  happy_var_2)
-	_
-	 =  HappyAbsSyn42
-		 (AbsBNF.LDefView happy_var_2
-	)
-happyReduction_41 _ _  = notHappyAtAll 
-
-happyReduce_42 = happySpecReduce_0  43 happyReduction_42
-happyReduction_42  =  HappyAbsSyn43
-		 ([]
-	)
-
-happyReduce_43 = happySpecReduce_1  43 happyReduction_43
-happyReduction_43 (HappyAbsSyn42  happy_var_1)
-	 =  HappyAbsSyn43
-		 ((:[]) happy_var_1
-	)
-happyReduction_43 _  = notHappyAtAll 
-
-happyReduce_44 = happySpecReduce_3  43 happyReduction_44
-happyReduction_44 (HappyAbsSyn43  happy_var_3)
-	_
-	(HappyAbsSyn42  happy_var_1)
-	 =  HappyAbsSyn43
-		 ((:) happy_var_1 happy_var_3
-	)
-happyReduction_44 _ _ _  = notHappyAtAll 
-
-happyReduce_45 = happySpecReduce_2  43 happyReduction_45
-happyReduction_45 (HappyAbsSyn43  happy_var_2)
-	_
-	 =  HappyAbsSyn43
-		 (happy_var_2
-	)
-happyReduction_45 _ _  = notHappyAtAll 
-
-happyReduce_46 = happySpecReduce_1  44 happyReduction_46
-happyReduction_46 (HappyAbsSyn36  happy_var_1)
-	 =  HappyAbsSyn44
-		 ((:[]) happy_var_1
-	)
-happyReduction_46 _  = notHappyAtAll 
-
-happyReduce_47 = happySpecReduce_3  44 happyReduction_47
-happyReduction_47 (HappyAbsSyn44  happy_var_3)
-	_
-	(HappyAbsSyn36  happy_var_1)
-	 =  HappyAbsSyn44
-		 ((:) happy_var_1 happy_var_3
-	)
-happyReduction_47 _ _ _  = notHappyAtAll 
-
-happyReduce_48 = happySpecReduce_1  45 happyReduction_48
-happyReduction_48 (HappyAbsSyn46  happy_var_1)
-	 =  HappyAbsSyn45
-		 (AbsBNF.Grammar happy_var_1
-	)
-happyReduction_48 _  = notHappyAtAll 
-
-happyReduce_49 = happySpecReduce_0  46 happyReduction_49
-happyReduction_49  =  HappyAbsSyn46
-		 ([]
-	)
-
-happyReduce_50 = happySpecReduce_1  46 happyReduction_50
-happyReduction_50 (HappyAbsSyn47  happy_var_1)
-	 =  HappyAbsSyn46
-		 ((:[]) happy_var_1
-	)
-happyReduction_50 _  = notHappyAtAll 
-
-happyReduce_51 = happySpecReduce_3  46 happyReduction_51
-happyReduction_51 (HappyAbsSyn46  happy_var_3)
-	_
-	(HappyAbsSyn47  happy_var_1)
-	 =  HappyAbsSyn46
-		 ((:) happy_var_1 happy_var_3
-	)
-happyReduction_51 _ _ _  = notHappyAtAll 
-
-happyReduce_52 = happySpecReduce_2  46 happyReduction_52
-happyReduction_52 (HappyAbsSyn46  happy_var_2)
-	_
-	 =  HappyAbsSyn46
-		 (happy_var_2
-	)
-happyReduction_52 _ _  = notHappyAtAll 
-
-happyReduce_53 = happyReduce 5 47 happyReduction_53
-happyReduction_53 ((HappyAbsSyn49  happy_var_5) `HappyStk`
-	_ `HappyStk`
-	(HappyAbsSyn50  happy_var_3) `HappyStk`
-	_ `HappyStk`
-	(HappyAbsSyn51  happy_var_1) `HappyStk`
-	happyRest)
-	 = HappyAbsSyn47
-		 (AbsBNF.Rule happy_var_1 happy_var_3 (reverse happy_var_5)
-	) `HappyStk` happyRest
-
-happyReduce_54 = happySpecReduce_2  47 happyReduction_54
-happyReduction_54 (HappyAbsSyn37  happy_var_2)
-	_
-	 =  HappyAbsSyn47
-		 (AbsBNF.Comment happy_var_2
-	)
-happyReduction_54 _ _  = notHappyAtAll 
-
-happyReduce_55 = happySpecReduce_3  47 happyReduction_55
-happyReduction_55 (HappyAbsSyn37  happy_var_3)
-	(HappyAbsSyn37  happy_var_2)
-	_
-	 =  HappyAbsSyn47
-		 (AbsBNF.Comments happy_var_2 happy_var_3
-	)
-happyReduction_55 _ _ _  = notHappyAtAll 
-
-happyReduce_56 = happyReduce 6 47 happyReduction_56
-happyReduction_56 ((HappyAbsSyn49  happy_var_6) `HappyStk`
-	_ `HappyStk`
-	(HappyAbsSyn50  happy_var_4) `HappyStk`
-	_ `HappyStk`
-	(HappyAbsSyn51  happy_var_2) `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn47
-		 (AbsBNF.Internal happy_var_2 happy_var_4 (reverse happy_var_6)
-	) `HappyStk` happyRest
-
-happyReduce_57 = happySpecReduce_3  47 happyReduction_57
-happyReduction_57 (HappyAbsSyn70  happy_var_3)
-	(HappyAbsSyn36  happy_var_2)
-	_
-	 =  HappyAbsSyn47
-		 (AbsBNF.Token happy_var_2 happy_var_3
-	)
-happyReduction_57 _ _ _  = notHappyAtAll 
-
-happyReduce_58 = happyReduce 4 47 happyReduction_58
-happyReduction_58 ((HappyAbsSyn70  happy_var_4) `HappyStk`
-	(HappyAbsSyn36  happy_var_3) `HappyStk`
-	_ `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn47
-		 (AbsBNF.PosToken happy_var_3 happy_var_4
-	) `HappyStk` happyRest
-
-happyReduce_59 = happySpecReduce_2  47 happyReduction_59
-happyReduction_59 (HappyAbsSyn44  happy_var_2)
-	_
-	 =  HappyAbsSyn47
-		 (AbsBNF.Entryp happy_var_2
-	)
-happyReduction_59 _ _  = notHappyAtAll 
-
-happyReduce_60 = happyReduce 4 47 happyReduction_60
-happyReduction_60 ((HappyAbsSyn37  happy_var_4) `HappyStk`
-	(HappyAbsSyn50  happy_var_3) `HappyStk`
-	(HappyAbsSyn69  happy_var_2) `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn47
-		 (AbsBNF.Separator happy_var_2 happy_var_3 happy_var_4
-	) `HappyStk` happyRest
-
-happyReduce_61 = happyReduce 4 47 happyReduction_61
-happyReduction_61 ((HappyAbsSyn37  happy_var_4) `HappyStk`
-	(HappyAbsSyn50  happy_var_3) `HappyStk`
-	(HappyAbsSyn69  happy_var_2) `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn47
-		 (AbsBNF.Terminator happy_var_2 happy_var_3 happy_var_4
-	) `HappyStk` happyRest
-
-happyReduce_62 = happyReduce 6 47 happyReduction_62
-happyReduction_62 ((HappyAbsSyn69  happy_var_6) `HappyStk`
-	(HappyAbsSyn60  happy_var_5) `HappyStk`
-	(HappyAbsSyn37  happy_var_4) `HappyStk`
-	(HappyAbsSyn37  happy_var_3) `HappyStk`
-	(HappyAbsSyn50  happy_var_2) `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn47
-		 (AbsBNF.Delimiters happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6
-	) `HappyStk` happyRest
-
-happyReduce_63 = happySpecReduce_3  47 happyReduction_63
-happyReduction_63 (HappyAbsSyn38  happy_var_3)
-	(HappyAbsSyn36  happy_var_2)
-	_
-	 =  HappyAbsSyn47
-		 (AbsBNF.Coercions happy_var_2 happy_var_3
-	)
-happyReduction_63 _ _ _  = notHappyAtAll 
-
-happyReduce_64 = happyReduce 4 47 happyReduction_64
-happyReduction_64 ((HappyAbsSyn68  happy_var_4) `HappyStk`
-	_ `HappyStk`
-	(HappyAbsSyn36  happy_var_2) `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn47
-		 (AbsBNF.Rules happy_var_2 happy_var_4
-	) `HappyStk` happyRest
-
-happyReduce_65 = happyReduce 5 47 happyReduction_65
-happyReduction_65 ((HappyAbsSyn62  happy_var_5) `HappyStk`
-	_ `HappyStk`
-	(HappyAbsSyn59  happy_var_3) `HappyStk`
-	(HappyAbsSyn36  happy_var_2) `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn47
-		 (AbsBNF.Function happy_var_2 (reverse happy_var_3) happy_var_5
-	) `HappyStk` happyRest
-
-happyReduce_66 = happySpecReduce_2  47 happyReduction_66
-happyReduction_66 (HappyAbsSyn61  happy_var_2)
-	_
-	 =  HappyAbsSyn47
-		 (AbsBNF.Layout happy_var_2
-	)
-happyReduction_66 _ _  = notHappyAtAll 
-
-happyReduce_67 = happySpecReduce_3  47 happyReduction_67
-happyReduction_67 (HappyAbsSyn61  happy_var_3)
-	_
-	_
-	 =  HappyAbsSyn47
-		 (AbsBNF.LayoutStop happy_var_3
-	)
-happyReduction_67 _ _ _  = notHappyAtAll 
-
-happyReduce_68 = happySpecReduce_2  47 happyReduction_68
-happyReduction_68 _
-	_
-	 =  HappyAbsSyn47
-		 (AbsBNF.LayoutTop
-	)
-
-happyReduce_69 = happySpecReduce_1  48 happyReduction_69
-happyReduction_69 (HappyAbsSyn37  happy_var_1)
-	 =  HappyAbsSyn48
-		 (AbsBNF.Terminal happy_var_1
-	)
-happyReduction_69 _  = notHappyAtAll 
-
-happyReduce_70 = happySpecReduce_1  48 happyReduction_70
-happyReduction_70 (HappyAbsSyn50  happy_var_1)
-	 =  HappyAbsSyn48
-		 (AbsBNF.NTerminal happy_var_1
-	)
-happyReduction_70 _  = notHappyAtAll 
-
-happyReduce_71 = happySpecReduce_0  49 happyReduction_71
-happyReduction_71  =  HappyAbsSyn49
-		 ([]
-	)
-
-happyReduce_72 = happySpecReduce_2  49 happyReduction_72
-happyReduction_72 (HappyAbsSyn48  happy_var_2)
-	(HappyAbsSyn49  happy_var_1)
-	 =  HappyAbsSyn49
-		 (flip (:) happy_var_1 happy_var_2
-	)
-happyReduction_72 _ _  = notHappyAtAll 
-
-happyReduce_73 = happySpecReduce_3  50 happyReduction_73
-happyReduction_73 _
-	(HappyAbsSyn50  happy_var_2)
-	_
-	 =  HappyAbsSyn50
-		 (AbsBNF.ListCat happy_var_2
-	)
-happyReduction_73 _ _ _  = notHappyAtAll 
-
-happyReduce_74 = happySpecReduce_1  50 happyReduction_74
-happyReduction_74 (HappyAbsSyn36  happy_var_1)
-	 =  HappyAbsSyn50
-		 (AbsBNF.IdCat happy_var_1
-	)
-happyReduction_74 _  = notHappyAtAll 
-
-happyReduce_75 = happySpecReduce_1  51 happyReduction_75
-happyReduction_75 (HappyAbsSyn52  happy_var_1)
-	 =  HappyAbsSyn51
-		 (AbsBNF.LabNoP happy_var_1
-	)
-happyReduction_75 _  = notHappyAtAll 
-
-happyReduce_76 = happySpecReduce_2  51 happyReduction_76
-happyReduction_76 (HappyAbsSyn57  happy_var_2)
-	(HappyAbsSyn52  happy_var_1)
-	 =  HappyAbsSyn51
-		 (AbsBNF.LabP happy_var_1 happy_var_2
-	)
-happyReduction_76 _ _  = notHappyAtAll 
-
-happyReduce_77 = happySpecReduce_3  51 happyReduction_77
-happyReduction_77 (HappyAbsSyn57  happy_var_3)
-	(HappyAbsSyn52  happy_var_2)
-	(HappyAbsSyn52  happy_var_1)
-	 =  HappyAbsSyn51
-		 (AbsBNF.LabPF happy_var_1 happy_var_2 happy_var_3
-	)
-happyReduction_77 _ _ _  = notHappyAtAll 
-
-happyReduce_78 = happySpecReduce_2  51 happyReduction_78
-happyReduction_78 (HappyAbsSyn52  happy_var_2)
-	(HappyAbsSyn52  happy_var_1)
-	 =  HappyAbsSyn51
-		 (AbsBNF.LabF happy_var_1 happy_var_2
-	)
-happyReduction_78 _ _  = notHappyAtAll 
-
-happyReduce_79 = happySpecReduce_1  52 happyReduction_79
-happyReduction_79 (HappyAbsSyn36  happy_var_1)
-	 =  HappyAbsSyn52
-		 (AbsBNF.Id happy_var_1
-	)
-happyReduction_79 _  = notHappyAtAll 
-
-happyReduce_80 = happySpecReduce_1  52 happyReduction_80
-happyReduction_80 _
-	 =  HappyAbsSyn52
-		 (AbsBNF.Wild
-	)
-
-happyReduce_81 = happySpecReduce_2  52 happyReduction_81
-happyReduction_81 _
-	_
-	 =  HappyAbsSyn52
-		 (AbsBNF.ListE
-	)
-
-happyReduce_82 = happySpecReduce_3  52 happyReduction_82
-happyReduction_82 _
-	_
-	_
-	 =  HappyAbsSyn52
-		 (AbsBNF.ListCons
-	)
-
-happyReduce_83 = happyReduce 5 52 happyReduction_83
-happyReduction_83 (_ `HappyStk`
-	_ `HappyStk`
-	_ `HappyStk`
-	_ `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn52
-		 (AbsBNF.ListOne
-	) `HappyStk` happyRest
-
-happyReduce_84 = happyReduce 9 53 happyReduction_84
-happyReduction_84 (_ `HappyStk`
-	_ `HappyStk`
-	(HappyAbsSyn55  happy_var_7) `HappyStk`
-	_ `HappyStk`
-	_ `HappyStk`
-	_ `HappyStk`
-	(HappyAbsSyn56  happy_var_3) `HappyStk`
-	_ `HappyStk`
-	_ `HappyStk`
-	happyRest)
-	 = HappyAbsSyn53
-		 (AbsBNF.ProfIt happy_var_3 happy_var_7
-	) `HappyStk` happyRest
-
-happyReduce_85 = happySpecReduce_3  54 happyReduction_85
-happyReduction_85 _
-	(HappyAbsSyn55  happy_var_2)
-	_
-	 =  HappyAbsSyn54
-		 (AbsBNF.Ints happy_var_2
-	)
-happyReduction_85 _ _ _  = notHappyAtAll 
-
-happyReduce_86 = happySpecReduce_0  55 happyReduction_86
-happyReduction_86  =  HappyAbsSyn55
-		 ([]
-	)
-
-happyReduce_87 = happySpecReduce_1  55 happyReduction_87
-happyReduction_87 (HappyAbsSyn38  happy_var_1)
-	 =  HappyAbsSyn55
-		 ((:[]) happy_var_1
-	)
-happyReduction_87 _  = notHappyAtAll 
-
-happyReduce_88 = happySpecReduce_3  55 happyReduction_88
-happyReduction_88 (HappyAbsSyn55  happy_var_3)
-	_
-	(HappyAbsSyn38  happy_var_1)
-	 =  HappyAbsSyn55
-		 ((:) happy_var_1 happy_var_3
-	)
-happyReduction_88 _ _ _  = notHappyAtAll 
-
-happyReduce_89 = happySpecReduce_0  56 happyReduction_89
-happyReduction_89  =  HappyAbsSyn56
-		 ([]
-	)
-
-happyReduce_90 = happySpecReduce_1  56 happyReduction_90
-happyReduction_90 (HappyAbsSyn54  happy_var_1)
-	 =  HappyAbsSyn56
-		 ((:[]) happy_var_1
-	)
-happyReduction_90 _  = notHappyAtAll 
-
-happyReduce_91 = happySpecReduce_3  56 happyReduction_91
-happyReduction_91 (HappyAbsSyn56  happy_var_3)
-	_
-	(HappyAbsSyn54  happy_var_1)
-	 =  HappyAbsSyn56
-		 ((:) happy_var_1 happy_var_3
-	)
-happyReduction_91 _ _ _  = notHappyAtAll 
-
-happyReduce_92 = happySpecReduce_1  57 happyReduction_92
-happyReduction_92 (HappyAbsSyn53  happy_var_1)
-	 =  HappyAbsSyn57
-		 ((:[]) happy_var_1
-	)
-happyReduction_92 _  = notHappyAtAll 
-
-happyReduce_93 = happySpecReduce_2  57 happyReduction_93
-happyReduction_93 (HappyAbsSyn57  happy_var_2)
-	(HappyAbsSyn53  happy_var_1)
-	 =  HappyAbsSyn57
-		 ((:) happy_var_1 happy_var_2
-	)
-happyReduction_93 _ _  = notHappyAtAll 
-
-happyReduce_94 = happySpecReduce_1  58 happyReduction_94
-happyReduction_94 (HappyAbsSyn36  happy_var_1)
-	 =  HappyAbsSyn58
-		 (AbsBNF.Arg happy_var_1
-	)
-happyReduction_94 _  = notHappyAtAll 
-
-happyReduce_95 = happySpecReduce_0  59 happyReduction_95
-happyReduction_95  =  HappyAbsSyn59
-		 ([]
-	)
-
-happyReduce_96 = happySpecReduce_2  59 happyReduction_96
-happyReduction_96 (HappyAbsSyn58  happy_var_2)
-	(HappyAbsSyn59  happy_var_1)
-	 =  HappyAbsSyn59
-		 (flip (:) happy_var_1 happy_var_2
-	)
-happyReduction_96 _ _  = notHappyAtAll 
-
-happyReduce_97 = happySpecReduce_0  60 happyReduction_97
-happyReduction_97  =  HappyAbsSyn60
-		 (AbsBNF.SepNone
-	)
-
-happyReduce_98 = happySpecReduce_2  60 happyReduction_98
-happyReduction_98 (HappyAbsSyn37  happy_var_2)
-	_
-	 =  HappyAbsSyn60
-		 (AbsBNF.SepTerm happy_var_2
-	)
-happyReduction_98 _ _  = notHappyAtAll 
-
-happyReduce_99 = happySpecReduce_2  60 happyReduction_99
-happyReduction_99 (HappyAbsSyn37  happy_var_2)
-	_
-	 =  HappyAbsSyn60
-		 (AbsBNF.SepSepar happy_var_2
-	)
-happyReduction_99 _ _  = notHappyAtAll 
-
-happyReduce_100 = happySpecReduce_1  61 happyReduction_100
-happyReduction_100 (HappyAbsSyn37  happy_var_1)
-	 =  HappyAbsSyn61
-		 ((:[]) happy_var_1
-	)
-happyReduction_100 _  = notHappyAtAll 
-
-happyReduce_101 = happySpecReduce_3  61 happyReduction_101
-happyReduction_101 (HappyAbsSyn61  happy_var_3)
-	_
-	(HappyAbsSyn37  happy_var_1)
-	 =  HappyAbsSyn61
-		 ((:) happy_var_1 happy_var_3
-	)
-happyReduction_101 _ _ _  = notHappyAtAll 
-
-happyReduce_102 = happySpecReduce_3  62 happyReduction_102
-happyReduction_102 (HappyAbsSyn62  happy_var_3)
-	_
-	(HappyAbsSyn62  happy_var_1)
-	 =  HappyAbsSyn62
-		 (AbsBNF.Cons happy_var_1 happy_var_3
-	)
-happyReduction_102 _ _ _  = notHappyAtAll 
-
-happyReduce_103 = happySpecReduce_1  62 happyReduction_103
-happyReduction_103 (HappyAbsSyn62  happy_var_1)
-	 =  HappyAbsSyn62
-		 (happy_var_1
-	)
-happyReduction_103 _  = notHappyAtAll 
-
-happyReduce_104 = happySpecReduce_2  63 happyReduction_104
-happyReduction_104 (HappyAbsSyn65  happy_var_2)
-	(HappyAbsSyn36  happy_var_1)
-	 =  HappyAbsSyn62
-		 (AbsBNF.App happy_var_1 happy_var_2
-	)
-happyReduction_104 _ _  = notHappyAtAll 
-
-happyReduce_105 = happySpecReduce_1  63 happyReduction_105
-happyReduction_105 (HappyAbsSyn62  happy_var_1)
-	 =  HappyAbsSyn62
-		 (happy_var_1
-	)
-happyReduction_105 _  = notHappyAtAll 
-
-happyReduce_106 = happySpecReduce_1  64 happyReduction_106
-happyReduction_106 (HappyAbsSyn36  happy_var_1)
-	 =  HappyAbsSyn62
-		 (AbsBNF.Var happy_var_1
-	)
-happyReduction_106 _  = notHappyAtAll 
-
-happyReduce_107 = happySpecReduce_1  64 happyReduction_107
-happyReduction_107 (HappyAbsSyn38  happy_var_1)
-	 =  HappyAbsSyn62
-		 (AbsBNF.LitInt happy_var_1
-	)
-happyReduction_107 _  = notHappyAtAll 
-
-happyReduce_108 = happySpecReduce_1  64 happyReduction_108
-happyReduction_108 (HappyAbsSyn39  happy_var_1)
-	 =  HappyAbsSyn62
-		 (AbsBNF.LitChar happy_var_1
-	)
-happyReduction_108 _  = notHappyAtAll 
-
-happyReduce_109 = happySpecReduce_1  64 happyReduction_109
-happyReduction_109 (HappyAbsSyn37  happy_var_1)
-	 =  HappyAbsSyn62
-		 (AbsBNF.LitString happy_var_1
-	)
-happyReduction_109 _  = notHappyAtAll 
-
-happyReduce_110 = happySpecReduce_1  64 happyReduction_110
-happyReduction_110 (HappyAbsSyn40  happy_var_1)
-	 =  HappyAbsSyn62
-		 (AbsBNF.LitDouble happy_var_1
-	)
-happyReduction_110 _  = notHappyAtAll 
-
-happyReduce_111 = happySpecReduce_3  64 happyReduction_111
-happyReduction_111 _
-	(HappyAbsSyn65  happy_var_2)
-	_
-	 =  HappyAbsSyn62
-		 (AbsBNF.List happy_var_2
-	)
-happyReduction_111 _ _ _  = notHappyAtAll 
-
-happyReduce_112 = happySpecReduce_3  64 happyReduction_112
-happyReduction_112 _
-	(HappyAbsSyn62  happy_var_2)
-	_
-	 =  HappyAbsSyn62
-		 (happy_var_2
-	)
-happyReduction_112 _ _ _  = notHappyAtAll 
-
-happyReduce_113 = happySpecReduce_0  65 happyReduction_113
-happyReduction_113  =  HappyAbsSyn65
-		 ([]
-	)
-
-happyReduce_114 = happySpecReduce_1  65 happyReduction_114
-happyReduction_114 (HappyAbsSyn62  happy_var_1)
-	 =  HappyAbsSyn65
-		 ((:[]) happy_var_1
-	)
-happyReduction_114 _  = notHappyAtAll 
-
-happyReduce_115 = happySpecReduce_3  65 happyReduction_115
-happyReduction_115 (HappyAbsSyn65  happy_var_3)
-	_
-	(HappyAbsSyn62  happy_var_1)
-	 =  HappyAbsSyn65
-		 ((:) happy_var_1 happy_var_3
-	)
-happyReduction_115 _ _ _  = notHappyAtAll 
-
-happyReduce_116 = happySpecReduce_1  66 happyReduction_116
-happyReduction_116 (HappyAbsSyn62  happy_var_1)
-	 =  HappyAbsSyn65
-		 ((:[]) happy_var_1
-	)
-happyReduction_116 _  = notHappyAtAll 
-
-happyReduce_117 = happySpecReduce_2  66 happyReduction_117
-happyReduction_117 (HappyAbsSyn65  happy_var_2)
-	(HappyAbsSyn62  happy_var_1)
-	 =  HappyAbsSyn65
-		 ((:) happy_var_1 happy_var_2
-	)
-happyReduction_117 _ _  = notHappyAtAll 
-
-happyReduce_118 = happySpecReduce_1  67 happyReduction_118
-happyReduction_118 (HappyAbsSyn49  happy_var_1)
-	 =  HappyAbsSyn67
-		 (AbsBNF.RHS (reverse happy_var_1)
-	)
-happyReduction_118 _  = notHappyAtAll 
-
-happyReduce_119 = happySpecReduce_1  68 happyReduction_119
-happyReduction_119 (HappyAbsSyn67  happy_var_1)
-	 =  HappyAbsSyn68
-		 ((:[]) happy_var_1
-	)
-happyReduction_119 _  = notHappyAtAll 
-
-happyReduce_120 = happySpecReduce_3  68 happyReduction_120
-happyReduction_120 (HappyAbsSyn68  happy_var_3)
-	_
-	(HappyAbsSyn67  happy_var_1)
-	 =  HappyAbsSyn68
-		 ((:) happy_var_1 happy_var_3
-	)
-happyReduction_120 _ _ _  = notHappyAtAll 
-
-happyReduce_121 = happySpecReduce_1  69 happyReduction_121
-happyReduction_121 _
-	 =  HappyAbsSyn69
-		 (AbsBNF.MNonempty
-	)
-
-happyReduce_122 = happySpecReduce_0  69 happyReduction_122
-happyReduction_122  =  HappyAbsSyn69
-		 (AbsBNF.MEmpty
-	)
-
-happyReduce_123 = happySpecReduce_2  70 happyReduction_123
-happyReduction_123 (HappyAbsSyn70  happy_var_2)
-	(HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (AbsBNF.RSeq happy_var_1 happy_var_2
-	)
-happyReduction_123 _ _  = notHappyAtAll 
-
-happyReduce_124 = happySpecReduce_1  70 happyReduction_124
-happyReduction_124 (HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (happy_var_1
-	)
-happyReduction_124 _  = notHappyAtAll 
-
-happyReduce_125 = happySpecReduce_3  71 happyReduction_125
-happyReduction_125 (HappyAbsSyn70  happy_var_3)
-	_
-	(HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (AbsBNF.RAlt happy_var_1 happy_var_3
-	)
-happyReduction_125 _ _ _  = notHappyAtAll 
-
-happyReduce_126 = happySpecReduce_3  71 happyReduction_126
-happyReduction_126 (HappyAbsSyn70  happy_var_3)
-	_
-	(HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (AbsBNF.RMinus happy_var_1 happy_var_3
-	)
-happyReduction_126 _ _ _  = notHappyAtAll 
-
-happyReduce_127 = happySpecReduce_1  71 happyReduction_127
-happyReduction_127 (HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (happy_var_1
-	)
-happyReduction_127 _  = notHappyAtAll 
-
-happyReduce_128 = happySpecReduce_2  72 happyReduction_128
-happyReduction_128 _
-	(HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (AbsBNF.RStar happy_var_1
-	)
-happyReduction_128 _ _  = notHappyAtAll 
-
-happyReduce_129 = happySpecReduce_2  72 happyReduction_129
-happyReduction_129 _
-	(HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (AbsBNF.RPlus happy_var_1
-	)
-happyReduction_129 _ _  = notHappyAtAll 
-
-happyReduce_130 = happySpecReduce_2  72 happyReduction_130
-happyReduction_130 _
-	(HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (AbsBNF.ROpt happy_var_1
-	)
-happyReduction_130 _ _  = notHappyAtAll 
-
-happyReduce_131 = happySpecReduce_1  72 happyReduction_131
-happyReduction_131 _
-	 =  HappyAbsSyn70
-		 (AbsBNF.REps
-	)
-
-happyReduce_132 = happySpecReduce_1  72 happyReduction_132
-happyReduction_132 (HappyAbsSyn39  happy_var_1)
-	 =  HappyAbsSyn70
-		 (AbsBNF.RChar happy_var_1
-	)
-happyReduction_132 _  = notHappyAtAll 
-
-happyReduce_133 = happySpecReduce_3  72 happyReduction_133
-happyReduction_133 _
-	(HappyAbsSyn37  happy_var_2)
-	_
-	 =  HappyAbsSyn70
-		 (AbsBNF.RAlts happy_var_2
-	)
-happyReduction_133 _ _ _  = notHappyAtAll 
-
-happyReduce_134 = happySpecReduce_3  72 happyReduction_134
-happyReduction_134 _
-	(HappyAbsSyn37  happy_var_2)
-	_
-	 =  HappyAbsSyn70
-		 (AbsBNF.RSeqs happy_var_2
-	)
-happyReduction_134 _ _ _  = notHappyAtAll 
-
-happyReduce_135 = happySpecReduce_1  72 happyReduction_135
-happyReduction_135 _
-	 =  HappyAbsSyn70
-		 (AbsBNF.RDigit
-	)
-
-happyReduce_136 = happySpecReduce_1  72 happyReduction_136
-happyReduction_136 _
-	 =  HappyAbsSyn70
-		 (AbsBNF.RLetter
-	)
-
-happyReduce_137 = happySpecReduce_1  72 happyReduction_137
-happyReduction_137 _
-	 =  HappyAbsSyn70
-		 (AbsBNF.RUpper
-	)
-
-happyReduce_138 = happySpecReduce_1  72 happyReduction_138
-happyReduction_138 _
-	 =  HappyAbsSyn70
-		 (AbsBNF.RLower
-	)
-
-happyReduce_139 = happySpecReduce_1  72 happyReduction_139
-happyReduction_139 _
-	 =  HappyAbsSyn70
-		 (AbsBNF.RAny
-	)
-
-happyReduce_140 = happySpecReduce_3  72 happyReduction_140
-happyReduction_140 _
-	(HappyAbsSyn70  happy_var_2)
-	_
-	 =  HappyAbsSyn70
-		 (happy_var_2
-	)
-happyReduction_140 _ _ _  = notHappyAtAll 
-
-happyReduce_141 = happySpecReduce_1  73 happyReduction_141
-happyReduction_141 (HappyAbsSyn70  happy_var_1)
-	 =  HappyAbsSyn70
-		 (happy_var_1
-	)
-happyReduction_141 _  = notHappyAtAll 
-
-happyNewToken action sts stk [] =
-	action 119 119 notHappyAtAll (HappyState action) sts stk []
-
-happyNewToken action sts stk (tk:tks) =
-	let cont i = action i i tk (HappyState action) sts stk tks in
-	case tk of {
-	PT _ (TS _ 1) -> cont 74;
-	PT _ (TS _ 2) -> cont 75;
-	PT _ (TS _ 3) -> cont 76;
-	PT _ (TS _ 4) -> cont 77;
-	PT _ (TS _ 5) -> cont 78;
-	PT _ (TS _ 6) -> cont 79;
-	PT _ (TS _ 7) -> cont 80;
-	PT _ (TS _ 8) -> cont 81;
-	PT _ (TS _ 9) -> cont 82;
-	PT _ (TS _ 10) -> cont 83;
-	PT _ (TS _ 11) -> cont 84;
-	PT _ (TS _ 12) -> cont 85;
-	PT _ (TS _ 13) -> cont 86;
-	PT _ (TS _ 14) -> cont 87;
-	PT _ (TS _ 15) -> cont 88;
-	PT _ (TS _ 16) -> cont 89;
-	PT _ (TS _ 17) -> cont 90;
-	PT _ (TS _ 18) -> cont 91;
-	PT _ (TS _ 19) -> cont 92;
-	PT _ (TS _ 20) -> cont 93;
-	PT _ (TS _ 21) -> cont 94;
-	PT _ (TS _ 22) -> cont 95;
-	PT _ (TS _ 23) -> cont 96;
-	PT _ (TS _ 24) -> cont 97;
-	PT _ (TS _ 25) -> cont 98;
-	PT _ (TS _ 26) -> cont 99;
-	PT _ (TS _ 27) -> cont 100;
-	PT _ (TS _ 28) -> cont 101;
-	PT _ (TS _ 29) -> cont 102;
-	PT _ (TS _ 30) -> cont 103;
-	PT _ (TS _ 31) -> cont 104;
-	PT _ (TS _ 32) -> cont 105;
-	PT _ (TS _ 33) -> cont 106;
-	PT _ (TS _ 34) -> cont 107;
-	PT _ (TS _ 35) -> cont 108;
-	PT _ (TS _ 36) -> cont 109;
-	PT _ (TS _ 37) -> cont 110;
-	PT _ (TS _ 38) -> cont 111;
-	PT _ (TS _ 39) -> cont 112;
-	PT _ (TS _ 40) -> cont 113;
-	PT _ (TV happy_dollar_dollar) -> cont 114;
-	PT _ (TL happy_dollar_dollar) -> cont 115;
-	PT _ (TI happy_dollar_dollar) -> cont 116;
-	PT _ (TC happy_dollar_dollar) -> cont 117;
-	PT _ (TD happy_dollar_dollar) -> cont 118;
-	_ -> happyError' (tk:tks)
-	}
-
-happyError_ 119 tk tks = happyError' tks
-happyError_ _ tk tks = happyError' (tk:tks)
-
-happyThen :: () => Err a -> (a -> Err b) -> Err b
-happyThen = (thenM)
-happyReturn :: () => a -> Err a
-happyReturn = (returnM)
-happyThen1 m k tks = (thenM) m (\a -> k a tks)
-happyReturn1 :: () => a -> b -> Err a
-happyReturn1 = \a tks -> (returnM) a
-happyError' :: () => [(Token)] -> Err a
-happyError' = happyError
-
-pLGrammar tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_0 tks) (\x -> case x of {HappyAbsSyn41 z -> happyReturn z; _other -> notHappyAtAll })
-
-pLDef tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_1 tks) (\x -> case x of {HappyAbsSyn42 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListLDef tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_2 tks) (\x -> case x of {HappyAbsSyn43 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListIdent tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_3 tks) (\x -> case x of {HappyAbsSyn44 z -> happyReturn z; _other -> notHappyAtAll })
-
-pGrammar tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_4 tks) (\x -> case x of {HappyAbsSyn45 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListDef tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_5 tks) (\x -> case x of {HappyAbsSyn46 z -> happyReturn z; _other -> notHappyAtAll })
-
-pDef tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_6 tks) (\x -> case x of {HappyAbsSyn47 z -> happyReturn z; _other -> notHappyAtAll })
-
-pItem tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_7 tks) (\x -> case x of {HappyAbsSyn48 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListItem tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_8 tks) (\x -> case x of {HappyAbsSyn49 z -> happyReturn z; _other -> notHappyAtAll })
-
-pCat tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_9 tks) (\x -> case x of {HappyAbsSyn50 z -> happyReturn z; _other -> notHappyAtAll })
-
-pLabel tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_10 tks) (\x -> case x of {HappyAbsSyn51 z -> happyReturn z; _other -> notHappyAtAll })
-
-pLabelId tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_11 tks) (\x -> case x of {HappyAbsSyn52 z -> happyReturn z; _other -> notHappyAtAll })
-
-pProfItem tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_12 tks) (\x -> case x of {HappyAbsSyn53 z -> happyReturn z; _other -> notHappyAtAll })
-
-pIntList tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_13 tks) (\x -> case x of {HappyAbsSyn54 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListInteger tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_14 tks) (\x -> case x of {HappyAbsSyn55 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListIntList tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_15 tks) (\x -> case x of {HappyAbsSyn56 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListProfItem tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_16 tks) (\x -> case x of {HappyAbsSyn57 z -> happyReturn z; _other -> notHappyAtAll })
-
-pArg tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_17 tks) (\x -> case x of {HappyAbsSyn58 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListArg tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_18 tks) (\x -> case x of {HappyAbsSyn59 z -> happyReturn z; _other -> notHappyAtAll })
-
-pSeparation tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_19 tks) (\x -> case x of {HappyAbsSyn60 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListString tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_20 tks) (\x -> case x of {HappyAbsSyn61 z -> happyReturn z; _other -> notHappyAtAll })
-
-pExp tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_21 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })
-
-pExp1 tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_22 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })
-
-pExp2 tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_23 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListExp tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_24 tks) (\x -> case x of {HappyAbsSyn65 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListExp2 tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_25 tks) (\x -> case x of {HappyAbsSyn65 z -> happyReturn z; _other -> notHappyAtAll })
-
-pRHS tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_26 tks) (\x -> case x of {HappyAbsSyn67 z -> happyReturn z; _other -> notHappyAtAll })
-
-pListRHS tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_27 tks) (\x -> case x of {HappyAbsSyn68 z -> happyReturn z; _other -> notHappyAtAll })
-
-pMinimumSize tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_28 tks) (\x -> case x of {HappyAbsSyn69 z -> happyReturn z; _other -> notHappyAtAll })
-
-pReg2 tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_29 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })
-
-pReg1 tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_30 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })
-
-pReg3 tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_31 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })
-
-pReg tks = happySomeParser where
-  happySomeParser = happyThen (happyParse action_32 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })
-
-happySeq = happyDontSeq
-
-
-returnM :: a -> Err a
-returnM = return
-
-thenM :: Err a -> (a -> Err b) -> Err b
-thenM = (>>=)
-
-happyError :: [Token] -> Err a
-happyError ts =
-  Bad $ "syntax error at " ++ tokenPos ts ++ 
-  case ts of
-    [] -> []
-    [Err _] -> " due to lexer error"
-    t:_ -> " before `" ++ id(prToken t) ++ "'"
-
-myLexer = tokens
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
-{-# LINE 1 "<command-line>" #-}
-
-
-
-
-
-
-
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{-# LINE 7 "<command-line>" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
-
-{-# LINE 13 "templates/GenericTemplate.hs" #-}
-
-{-# LINE 46 "templates/GenericTemplate.hs" #-}
-
-
-
-
-
-
-
-
-{-# LINE 67 "templates/GenericTemplate.hs" #-}
-
-{-# LINE 77 "templates/GenericTemplate.hs" #-}
-
-{-# LINE 86 "templates/GenericTemplate.hs" #-}
-
-infixr 9 `HappyStk`
-data HappyStk a = HappyStk a (HappyStk a)
-
------------------------------------------------------------------------------
--- starting the parse
-
-happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
-
------------------------------------------------------------------------------
--- Accepting the parse
-
--- If the current token is (1), it means we've just accepted a partial
--- parse (a %partial parser).  We must ignore the saved token on the top of
--- the stack in this case.
-happyAccept (1) tk st sts (_ `HappyStk` ans `HappyStk` _) =
-        happyReturn1 ans
-happyAccept j tk st sts (HappyStk ans _) = 
-         (happyReturn1 ans)
-
------------------------------------------------------------------------------
--- Arrays only: do the next action
-
-{-# LINE 155 "templates/GenericTemplate.hs" #-}
-
------------------------------------------------------------------------------
--- HappyState data type (not arrays)
-
-
-
-newtype HappyState b c = HappyState
-        (Int ->                    -- token number
-         Int ->                    -- token number (yes, again)
-         b ->                           -- token semantic value
-         HappyState b c ->              -- current state
-         [HappyState b c] ->            -- state stack
-         c)
-
-
-
------------------------------------------------------------------------------
--- Shifting a token
-
-happyShift new_state (1) tk st sts stk@(x `HappyStk` _) =
-     let i = (case x of { HappyErrorToken (i) -> i }) in
---     trace "shifting the error token" $
-     new_state i i tk (HappyState (new_state)) ((st):(sts)) (stk)
-
-happyShift new_state i tk st sts stk =
-     happyNewToken new_state ((st):(sts)) ((HappyTerminal (tk))`HappyStk`stk)
-
--- happyReduce is specialised for the common cases.
-
-happySpecReduce_0 i fn (1) tk st sts stk
-     = happyFail (1) tk st sts stk
-happySpecReduce_0 nt fn j tk st@((HappyState (action))) sts stk
-     = action nt j tk st ((st):(sts)) (fn `HappyStk` stk)
-
-happySpecReduce_1 i fn (1) tk st sts stk
-     = happyFail (1) tk st sts stk
-happySpecReduce_1 nt fn j tk _ sts@(((st@(HappyState (action))):(_))) (v1`HappyStk`stk')
-     = let r = fn v1 in
-       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
-
-happySpecReduce_2 i fn (1) tk st sts stk
-     = happyFail (1) tk st sts stk
-happySpecReduce_2 nt fn j tk _ ((_):(sts@(((st@(HappyState (action))):(_))))) (v1`HappyStk`v2`HappyStk`stk')
-     = let r = fn v1 v2 in
-       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
-
-happySpecReduce_3 i fn (1) tk st sts stk
-     = happyFail (1) tk st sts stk
-happySpecReduce_3 nt fn j tk _ ((_):(((_):(sts@(((st@(HappyState (action))):(_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
-     = let r = fn v1 v2 v3 in
-       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
-
-happyReduce k i fn (1) tk st sts stk
-     = happyFail (1) tk st sts stk
-happyReduce k nt fn j tk st sts stk
-     = case happyDrop (k - ((1) :: Int)) sts of
-         sts1@(((st1@(HappyState (action))):(_))) ->
-                let r = fn stk in  -- it doesn't hurt to always seq here...
-                happyDoSeq r (action nt j tk st1 sts1 r)
-
-happyMonadReduce k nt fn (1) tk st sts stk
-     = happyFail (1) tk st sts stk
-happyMonadReduce k nt fn j tk st sts stk =
-      case happyDrop k ((st):(sts)) of
-        sts1@(((st1@(HappyState (action))):(_))) ->
-          let drop_stk = happyDropStk k stk in
-          happyThen1 (fn stk tk) (\r -> action nt j tk st1 sts1 (r `HappyStk` drop_stk))
-
-happyMonad2Reduce k nt fn (1) tk st sts stk
-     = happyFail (1) tk st sts stk
-happyMonad2Reduce k nt fn j tk st sts stk =
-      case happyDrop k ((st):(sts)) of
-        sts1@(((st1@(HappyState (action))):(_))) ->
-         let drop_stk = happyDropStk k stk
-
-
-
-
-
-             new_state = action
-
-          in
-          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
-
-happyDrop (0) l = l
-happyDrop n ((_):(t)) = happyDrop (n - ((1) :: Int)) t
-
-happyDropStk (0) l = l
-happyDropStk n (x `HappyStk` xs) = happyDropStk (n - ((1)::Int)) xs
-
------------------------------------------------------------------------------
--- Moving to a new state after a reduction
-
-{-# LINE 256 "templates/GenericTemplate.hs" #-}
-happyGoto action j tk st = action j j tk (HappyState action)
-
-
------------------------------------------------------------------------------
--- Error recovery ((1) is the error token)
-
--- parse error if we are in recovery and we fail again
-happyFail (1) tk old_st _ stk@(x `HappyStk` _) =
-     let i = (case x of { HappyErrorToken (i) -> i }) in
---      trace "failing" $ 
-        happyError_ i tk
-
-{-  We don't need state discarding for our restricted implementation of
-    "error".  In fact, it can cause some bogus parses, so I've disabled it
-    for now --SDM
-
--- discard a state
-happyFail  (1) tk old_st (((HappyState (action))):(sts)) 
-                                                (saved_tok `HappyStk` _ `HappyStk` stk) =
---      trace ("discarding state, depth " ++ show (length stk))  $
-        action (1) (1) tk (HappyState (action)) sts ((saved_tok`HappyStk`stk))
--}
-
--- Enter error recovery: generate an error token,
---                       save the old token and carry on.
-happyFail  i tk (HappyState (action)) sts stk =
---      trace "entering error recovery" $
-        action (1) (1) tk (HappyState (action)) sts ( (HappyErrorToken (i)) `HappyStk` stk)
-
--- Internal happy errors:
-
-notHappyAtAll :: a
-notHappyAtAll = error "Internal Happy error\n"
-
------------------------------------------------------------------------------
--- Hack to get the typechecker to accept our action functions
-
-
-
-
-
-
-
------------------------------------------------------------------------------
--- Seq-ing.  If the --strict flag is given, then Happy emits 
---      happySeq = happyDoSeq
--- otherwise it emits
---      happySeq = happyDontSeq
-
-happyDoSeq, happyDontSeq :: a -> b -> b
-happyDoSeq   a b = a `seq` b
-happyDontSeq a b = b
-
------------------------------------------------------------------------------
--- Don't inline any functions from the template.  GHC has a nasty habit
--- of deciding to inline happyGoto everywhere, which increases the size of
--- the generated parser quite a bit.
-
-{-# LINE 322 "templates/GenericTemplate.hs" #-}
-{-# NOINLINE happyShift #-}
-{-# NOINLINE happySpecReduce_0 #-}
-{-# NOINLINE happySpecReduce_1 #-}
-{-# NOINLINE happySpecReduce_2 #-}
-{-# NOINLINE happySpecReduce_3 #-}
-{-# NOINLINE happyReduce #-}
-{-# NOINLINE happyMonadReduce #-}
-{-# NOINLINE happyGoto #-}
-{-# NOINLINE happyFail #-}
-
--- end of Happy Template.
+import qualified Data.Array as Happy_Data_Array
+import qualified Data.Bits as Bits
+import Control.Applicative(Applicative(..))
+import Control.Monad (ap)
+
+-- parser produced by Happy Version 1.19.8
+
+data HappyAbsSyn 
+	= HappyTerminal (Token)
+	| HappyErrorToken Int
+	| HappyAbsSyn36 (Ident)
+	| HappyAbsSyn37 (String)
+	| HappyAbsSyn38 (Integer)
+	| HappyAbsSyn39 (Char)
+	| HappyAbsSyn40 (Double)
+	| HappyAbsSyn41 (LGrammar)
+	| HappyAbsSyn42 (LDef)
+	| HappyAbsSyn43 ([LDef])
+	| HappyAbsSyn44 ([Ident])
+	| HappyAbsSyn45 (Grammar)
+	| HappyAbsSyn46 ([Def])
+	| HappyAbsSyn47 (Def)
+	| HappyAbsSyn48 (Item)
+	| HappyAbsSyn49 ([Item])
+	| HappyAbsSyn50 (Cat)
+	| HappyAbsSyn51 (Label)
+	| HappyAbsSyn52 (LabelId)
+	| HappyAbsSyn53 (ProfItem)
+	| HappyAbsSyn54 (IntList)
+	| HappyAbsSyn55 ([Integer])
+	| HappyAbsSyn56 ([IntList])
+	| HappyAbsSyn57 ([ProfItem])
+	| HappyAbsSyn58 (Arg)
+	| HappyAbsSyn59 ([Arg])
+	| HappyAbsSyn60 (Separation)
+	| HappyAbsSyn61 ([String])
+	| HappyAbsSyn62 (Exp)
+	| HappyAbsSyn65 ([Exp])
+	| HappyAbsSyn67 (RHS)
+	| HappyAbsSyn68 ([RHS])
+	| HappyAbsSyn69 (MinimumSize)
+	| HappyAbsSyn70 (Reg)
+
+{- to allow type-synonyms as our monads (likely
+ - with explicitly-specified bind and return)
+ - in Haskell98, it seems that with
+ - /type M a = .../, then /(HappyReduction M)/
+ - is not allowed.  But Happy is a
+ - code-generator that can just substitute it.
+type HappyReduction m = 
+	   Int 
+	-> (Token)
+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)
+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)] 
+	-> HappyStk HappyAbsSyn 
+	-> [(Token)] -> m HappyAbsSyn
+-}
+
+action_0,
+ action_1,
+ action_2,
+ action_3,
+ action_4,
+ action_5,
+ action_6,
+ action_7,
+ action_8,
+ action_9,
+ action_10,
+ action_11,
+ action_12,
+ action_13,
+ action_14,
+ action_15,
+ action_16,
+ action_17,
+ action_18,
+ action_19,
+ action_20,
+ action_21,
+ action_22,
+ action_23,
+ action_24,
+ action_25,
+ action_26,
+ action_27,
+ action_28,
+ action_29,
+ action_30,
+ action_31,
+ action_32,
+ action_33,
+ action_34,
+ action_35,
+ action_36,
+ action_37,
+ action_38,
+ action_39,
+ action_40,
+ action_41,
+ action_42,
+ action_43,
+ action_44,
+ action_45,
+ action_46,
+ action_47,
+ action_48,
+ action_49,
+ action_50,
+ action_51,
+ action_52,
+ action_53,
+ action_54,
+ action_55,
+ action_56,
+ action_57,
+ action_58,
+ action_59,
+ action_60,
+ action_61,
+ action_62,
+ action_63,
+ action_64,
+ action_65,
+ action_66,
+ action_67,
+ action_68,
+ action_69,
+ action_70,
+ action_71,
+ action_72,
+ action_73,
+ action_74,
+ action_75,
+ action_76,
+ action_77,
+ action_78,
+ action_79,
+ action_80,
+ action_81,
+ action_82,
+ action_83,
+ action_84,
+ action_85,
+ action_86,
+ action_87,
+ action_88,
+ action_89,
+ action_90,
+ action_91,
+ action_92,
+ action_93,
+ action_94,
+ action_95,
+ action_96,
+ action_97,
+ action_98,
+ action_99,
+ action_100,
+ action_101,
+ action_102,
+ action_103,
+ action_104,
+ action_105,
+ action_106,
+ action_107,
+ action_108,
+ action_109,
+ action_110,
+ action_111,
+ action_112,
+ action_113,
+ action_114,
+ action_115,
+ action_116,
+ action_117,
+ action_118,
+ action_119,
+ action_120,
+ action_121,
+ action_122,
+ action_123,
+ action_124,
+ action_125,
+ action_126,
+ action_127,
+ action_128,
+ action_129,
+ action_130,
+ action_131,
+ action_132,
+ action_133,
+ action_134,
+ action_135,
+ action_136,
+ action_137,
+ action_138,
+ action_139,
+ action_140,
+ action_141,
+ action_142,
+ action_143,
+ action_144,
+ action_145,
+ action_146,
+ action_147,
+ action_148,
+ action_149,
+ action_150,
+ action_151,
+ action_152,
+ action_153,
+ action_154,
+ action_155,
+ action_156,
+ action_157,
+ action_158,
+ action_159,
+ action_160,
+ action_161,
+ action_162,
+ action_163,
+ action_164,
+ action_165,
+ action_166,
+ action_167,
+ action_168,
+ action_169,
+ action_170,
+ action_171,
+ action_172,
+ action_173,
+ action_174,
+ action_175,
+ action_176,
+ action_177,
+ action_178,
+ action_179,
+ action_180,
+ action_181,
+ action_182,
+ action_183,
+ action_184,
+ action_185,
+ action_186,
+ action_187,
+ action_188,
+ action_189,
+ action_190,
+ action_191,
+ action_192,
+ action_193,
+ action_194,
+ action_195,
+ action_196,
+ action_197,
+ action_198,
+ action_199,
+ action_200,
+ action_201,
+ action_202,
+ action_203,
+ action_204,
+ action_205,
+ action_206,
+ action_207,
+ action_208,
+ action_209,
+ action_210,
+ action_211,
+ action_212,
+ action_213,
+ action_214,
+ action_215,
+ action_216,
+ action_217,
+ action_218,
+ action_219,
+ action_220,
+ action_221,
+ action_222,
+ action_223,
+ action_224,
+ action_225,
+ action_226,
+ action_227,
+ action_228,
+ action_229,
+ action_230,
+ action_231,
+ action_232,
+ action_233,
+ action_234,
+ action_235,
+ action_236,
+ action_237,
+ action_238,
+ action_239,
+ action_240,
+ action_241,
+ action_242,
+ action_243,
+ action_244,
+ action_245,
+ action_246,
+ action_247,
+ action_248,
+ action_249,
+ action_250,
+ action_251,
+ action_252 :: () => Int -> ({-HappyReduction (Err) = -}
+	   Int 
+	-> (Token)
+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)
+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] 
+	-> HappyStk HappyAbsSyn 
+	-> [(Token)] -> (Err) HappyAbsSyn)
+
+happyReduce_33,
+ happyReduce_34,
+ happyReduce_35,
+ happyReduce_36,
+ happyReduce_37,
+ happyReduce_38,
+ happyReduce_39,
+ happyReduce_40,
+ happyReduce_41,
+ happyReduce_42,
+ happyReduce_43,
+ happyReduce_44,
+ happyReduce_45,
+ happyReduce_46,
+ happyReduce_47,
+ happyReduce_48,
+ happyReduce_49,
+ happyReduce_50,
+ happyReduce_51,
+ happyReduce_52,
+ happyReduce_53,
+ happyReduce_54,
+ happyReduce_55,
+ happyReduce_56,
+ happyReduce_57,
+ happyReduce_58,
+ happyReduce_59,
+ happyReduce_60,
+ happyReduce_61,
+ happyReduce_62,
+ happyReduce_63,
+ happyReduce_64,
+ happyReduce_65,
+ happyReduce_66,
+ happyReduce_67,
+ happyReduce_68,
+ happyReduce_69,
+ happyReduce_70,
+ happyReduce_71,
+ happyReduce_72,
+ happyReduce_73,
+ happyReduce_74,
+ happyReduce_75,
+ happyReduce_76,
+ happyReduce_77,
+ happyReduce_78,
+ happyReduce_79,
+ happyReduce_80,
+ happyReduce_81,
+ happyReduce_82,
+ happyReduce_83,
+ happyReduce_84,
+ happyReduce_85,
+ happyReduce_86,
+ happyReduce_87,
+ happyReduce_88,
+ happyReduce_89,
+ happyReduce_90,
+ happyReduce_91,
+ happyReduce_92,
+ happyReduce_93,
+ happyReduce_94,
+ happyReduce_95,
+ happyReduce_96,
+ happyReduce_97,
+ happyReduce_98,
+ happyReduce_99,
+ happyReduce_100,
+ happyReduce_101,
+ happyReduce_102,
+ happyReduce_103,
+ happyReduce_104,
+ happyReduce_105,
+ happyReduce_106,
+ happyReduce_107,
+ happyReduce_108,
+ happyReduce_109,
+ happyReduce_110,
+ happyReduce_111,
+ happyReduce_112,
+ happyReduce_113,
+ happyReduce_114,
+ happyReduce_115,
+ happyReduce_116,
+ happyReduce_117,
+ happyReduce_118,
+ happyReduce_119,
+ happyReduce_120,
+ happyReduce_121,
+ happyReduce_122,
+ happyReduce_123,
+ happyReduce_124,
+ happyReduce_125,
+ happyReduce_126,
+ happyReduce_127,
+ happyReduce_128,
+ happyReduce_129,
+ happyReduce_130,
+ happyReduce_131,
+ happyReduce_132,
+ happyReduce_133,
+ happyReduce_134,
+ happyReduce_135,
+ happyReduce_136,
+ happyReduce_137,
+ happyReduce_138,
+ happyReduce_139,
+ happyReduce_140,
+ happyReduce_141 :: () => ({-HappyReduction (Err) = -}
+	   Int 
+	-> (Token)
+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)
+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] 
+	-> HappyStk HappyAbsSyn 
+	-> [(Token)] -> (Err) HappyAbsSyn)
+
+happyExpList :: Happy_Data_Array.Array Int Int
+happyExpList = Happy_Data_Array.listArray (0,607) ([0,0,0,0,512,24228,9955,2,0,0,0,0,20481,29103,275,0,0,0,0,128,55209,35256,0,0,0,0,0,0,0,64,0,0,0,0,16416,13802,8302,0,0,0,0,4096,62752,14106,16,0,0,0,0,32776,36218,2075,0,0,0,0,0,64,0,12,0,0,0,0,0,0,0,0,0,0,0,0,16,0,1,0,0,0,32768,10240,0,128,0,0,0,0,64,20,16384,0,0,0,0,8192,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,32,0,0,0,0,16384,0,0,0,0,0,0,512,0,0,0,0,0,0,0,0,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,20480,0,0,0,0,0,0,0,16384,0,0,0,0,4096,256,0,496,0,0,0,0,32776,0,63488,0,0,0,0,1024,64,0,124,0,0,0,0,8194,0,15872,0,0,0,0,256,16,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,256,0,0,0,0,0,16,25865,33408,0,0,0,0,2048,33920,16434,65,0,0,0,0,16388,6466,8352,0,0,0,0,512,41248,20492,16,0,0,0,0,0,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1056,51730,1280,1,0,0,0,0,0,0,4,0,0,0,0,16480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8194,3233,4176,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,1536,4,0,0,0,0,0,0,0,0,16,0,0,0,0,32,51730,1280,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,12,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,32,0,62,0,0,0,0,0,0,0,0,0,0,0,128,8,32768,15,0,0,0,16384,1024,0,1984,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1024,64,0,124,0,0,0,0,32,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,128,0,0,0,0,0,0,8192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1024,320,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,128,0,0,0,0,0,4,49152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,256,0,0,0,0,0,0,0,1,0,0,0,0,0,0,64,0,0,0,0,0,2,8192,0,0,0,0,0,0,0,16,0,0,0,0,32776,2,2048,0,0,0,0,0,0,4608,8,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,1024,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,18436,50877,1037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,256,44882,4977,1,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,24224,1763,2,0,0,0,0,20993,29103,275,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,0,0,0,16416,13802,8302,0,0,0,0,4096,2304,32869,130,0,0,0,0,32768,0,2048,0,0,0,0,0,64,0,4,0,0,0,0,512,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,0,0,0,1024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,0,2,0,0,0,0,1024,0,64,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8448,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2049,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1024,0,0,0,0,0,0,0,1,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,32,2,57344,3,0,0,0,4096,256,0,496,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,768,2,0,0,0,0,0,8192,4608,202,261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,8192,0,0,0,0,0,0,256,0,0,0,0,0,0,16384,9216,404,522,0,0,0,0,32,51730,1280,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8194,3233,4176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,128,0,0,0,0,0,0,32768,0,0,0,0,0,512,0,32,0,0,0,0,0,0,0,0,0,0,0,2048,33920,16434,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16384,0,0,0,0,0,0,0,0,10240,0,0,0,0,0,16,1,61440,1,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,8192,0,0,0,0,0,0,0,4096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1024,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4096,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0
+	])
+
+{-# NOINLINE happyExpListPerState #-}
+happyExpListPerState st =
+    token_strs_expected
+  where token_strs = ["error","%dummy","%start_pLGrammar","%start_pLDef","%start_pListLDef","%start_pListIdent","%start_pGrammar","%start_pListDef","%start_pDef","%start_pItem","%start_pListItem","%start_pCat","%start_pLabel","%start_pLabelId","%start_pProfItem","%start_pIntList","%start_pListInteger","%start_pListIntList","%start_pListProfItem","%start_pArg","%start_pListArg","%start_pSeparation","%start_pListString","%start_pExp","%start_pExp1","%start_pExp2","%start_pListExp","%start_pListExp2","%start_pRHS","%start_pListRHS","%start_pMinimumSize","%start_pReg2","%start_pReg1","%start_pReg3","%start_pReg","Ident","String","Integer","Char","Double","LGrammar","LDef","ListLDef","ListIdent","Grammar","ListDef","Def","Item","ListItem","Cat","Label","LabelId","ProfItem","IntList","ListInteger","ListIntList","ListProfItem","Arg","ListArg","Separation","ListString","Exp","Exp1","Exp2","ListExp","ListExp2","RHS","ListRHS","MinimumSize","Reg2","Reg1","Reg3","Reg","'('","')'","'*'","'+'","','","'-'","'.'","':'","'::='","';'","'='","'?'","'['","']'","'_'","'char'","'coercions'","'comment'","'define'","'delimiters'","'digit'","'entrypoints'","'eps'","'internal'","'layout'","'letter'","'lower'","'nonempty'","'position'","'rules'","'separator'","'stop'","'terminator'","'token'","'toplevel'","'upper'","'views'","'{'","'|'","'}'","L_ident","L_quoted","L_integ","L_charac","L_doubl","%eof"]
+        bit_start = st * 119
+        bit_end = (st + 1) * 119
+        read_bit = readArrayBit happyExpList
+        bits = map read_bit [bit_start..bit_end - 1]
+        bits_indexed = zip bits [0..118]
+        token_strs_expected = concatMap f bits_indexed
+        f (False, _) = []
+        f (True, nr) = [token_strs !! nr]
+
+action_0 (74) = happyShift action_99
+action_0 (83) = happyShift action_137
+action_0 (86) = happyShift action_100
+action_0 (88) = happyShift action_101
+action_0 (90) = happyShift action_113
+action_0 (91) = happyShift action_114
+action_0 (92) = happyShift action_115
+action_0 (93) = happyShift action_116
+action_0 (95) = happyShift action_117
+action_0 (97) = happyShift action_118
+action_0 (98) = happyShift action_119
+action_0 (102) = happyShift action_120
+action_0 (103) = happyShift action_121
+action_0 (104) = happyShift action_122
+action_0 (106) = happyShift action_123
+action_0 (107) = happyShift action_124
+action_0 (110) = happyShift action_138
+action_0 (114) = happyShift action_34
+action_0 (36) = happyGoto action_132
+action_0 (41) = happyGoto action_140
+action_0 (42) = happyGoto action_133
+action_0 (43) = happyGoto action_141
+action_0 (44) = happyGoto action_135
+action_0 (47) = happyGoto action_136
+action_0 (51) = happyGoto action_112
+action_0 (52) = happyGoto action_103
+action_0 _ = happyReduce_42
+
+action_1 (74) = happyShift action_99
+action_1 (86) = happyShift action_100
+action_1 (88) = happyShift action_101
+action_1 (90) = happyShift action_113
+action_1 (91) = happyShift action_114
+action_1 (92) = happyShift action_115
+action_1 (93) = happyShift action_116
+action_1 (95) = happyShift action_117
+action_1 (97) = happyShift action_118
+action_1 (98) = happyShift action_119
+action_1 (102) = happyShift action_120
+action_1 (103) = happyShift action_121
+action_1 (104) = happyShift action_122
+action_1 (106) = happyShift action_123
+action_1 (107) = happyShift action_124
+action_1 (110) = happyShift action_138
+action_1 (114) = happyShift action_34
+action_1 (36) = happyGoto action_132
+action_1 (42) = happyGoto action_139
+action_1 (44) = happyGoto action_135
+action_1 (47) = happyGoto action_136
+action_1 (51) = happyGoto action_112
+action_1 (52) = happyGoto action_103
+action_1 _ = happyFail (happyExpListPerState 1)
+
+action_2 (74) = happyShift action_99
+action_2 (83) = happyShift action_137
+action_2 (86) = happyShift action_100
+action_2 (88) = happyShift action_101
+action_2 (90) = happyShift action_113
+action_2 (91) = happyShift action_114
+action_2 (92) = happyShift action_115
+action_2 (93) = happyShift action_116
+action_2 (95) = happyShift action_117
+action_2 (97) = happyShift action_118
+action_2 (98) = happyShift action_119
+action_2 (102) = happyShift action_120
+action_2 (103) = happyShift action_121
+action_2 (104) = happyShift action_122
+action_2 (106) = happyShift action_123
+action_2 (107) = happyShift action_124
+action_2 (110) = happyShift action_138
+action_2 (114) = happyShift action_34
+action_2 (36) = happyGoto action_132
+action_2 (42) = happyGoto action_133
+action_2 (43) = happyGoto action_134
+action_2 (44) = happyGoto action_135
+action_2 (47) = happyGoto action_136
+action_2 (51) = happyGoto action_112
+action_2 (52) = happyGoto action_103
+action_2 _ = happyReduce_42
+
+action_3 (114) = happyShift action_34
+action_3 (36) = happyGoto action_130
+action_3 (44) = happyGoto action_131
+action_3 _ = happyFail (happyExpListPerState 3)
+
+action_4 (74) = happyShift action_99
+action_4 (83) = happyShift action_127
+action_4 (86) = happyShift action_100
+action_4 (88) = happyShift action_101
+action_4 (90) = happyShift action_113
+action_4 (91) = happyShift action_114
+action_4 (92) = happyShift action_115
+action_4 (93) = happyShift action_116
+action_4 (95) = happyShift action_117
+action_4 (97) = happyShift action_118
+action_4 (98) = happyShift action_119
+action_4 (102) = happyShift action_120
+action_4 (103) = happyShift action_121
+action_4 (104) = happyShift action_122
+action_4 (106) = happyShift action_123
+action_4 (107) = happyShift action_124
+action_4 (114) = happyShift action_34
+action_4 (36) = happyGoto action_97
+action_4 (45) = happyGoto action_128
+action_4 (46) = happyGoto action_129
+action_4 (47) = happyGoto action_126
+action_4 (51) = happyGoto action_112
+action_4 (52) = happyGoto action_103
+action_4 _ = happyReduce_49
+
+action_5 (74) = happyShift action_99
+action_5 (83) = happyShift action_127
+action_5 (86) = happyShift action_100
+action_5 (88) = happyShift action_101
+action_5 (90) = happyShift action_113
+action_5 (91) = happyShift action_114
+action_5 (92) = happyShift action_115
+action_5 (93) = happyShift action_116
+action_5 (95) = happyShift action_117
+action_5 (97) = happyShift action_118
+action_5 (98) = happyShift action_119
+action_5 (102) = happyShift action_120
+action_5 (103) = happyShift action_121
+action_5 (104) = happyShift action_122
+action_5 (106) = happyShift action_123
+action_5 (107) = happyShift action_124
+action_5 (114) = happyShift action_34
+action_5 (36) = happyGoto action_97
+action_5 (46) = happyGoto action_125
+action_5 (47) = happyGoto action_126
+action_5 (51) = happyGoto action_112
+action_5 (52) = happyGoto action_103
+action_5 _ = happyReduce_49
+
+action_6 (74) = happyShift action_99
+action_6 (86) = happyShift action_100
+action_6 (88) = happyShift action_101
+action_6 (90) = happyShift action_113
+action_6 (91) = happyShift action_114
+action_6 (92) = happyShift action_115
+action_6 (93) = happyShift action_116
+action_6 (95) = happyShift action_117
+action_6 (97) = happyShift action_118
+action_6 (98) = happyShift action_119
+action_6 (102) = happyShift action_120
+action_6 (103) = happyShift action_121
+action_6 (104) = happyShift action_122
+action_6 (106) = happyShift action_123
+action_6 (107) = happyShift action_124
+action_6 (114) = happyShift action_34
+action_6 (36) = happyGoto action_97
+action_6 (47) = happyGoto action_111
+action_6 (51) = happyGoto action_112
+action_6 (52) = happyGoto action_103
+action_6 _ = happyFail (happyExpListPerState 6)
+
+action_7 (86) = happyShift action_106
+action_7 (114) = happyShift action_34
+action_7 (115) = happyShift action_68
+action_7 (36) = happyGoto action_104
+action_7 (37) = happyGoto action_108
+action_7 (48) = happyGoto action_109
+action_7 (50) = happyGoto action_110
+action_7 _ = happyFail (happyExpListPerState 7)
+
+action_8 (49) = happyGoto action_107
+action_8 _ = happyReduce_71
+
+action_9 (86) = happyShift action_106
+action_9 (114) = happyShift action_34
+action_9 (36) = happyGoto action_104
+action_9 (50) = happyGoto action_105
+action_9 _ = happyFail (happyExpListPerState 9)
+
+action_10 (74) = happyShift action_99
+action_10 (86) = happyShift action_100
+action_10 (88) = happyShift action_101
+action_10 (114) = happyShift action_34
+action_10 (36) = happyGoto action_97
+action_10 (51) = happyGoto action_102
+action_10 (52) = happyGoto action_103
+action_10 _ = happyFail (happyExpListPerState 10)
+
+action_11 (74) = happyShift action_99
+action_11 (86) = happyShift action_100
+action_11 (88) = happyShift action_101
+action_11 (114) = happyShift action_34
+action_11 (36) = happyGoto action_97
+action_11 (52) = happyGoto action_98
+action_11 _ = happyFail (happyExpListPerState 11)
+
+action_12 (74) = happyShift action_89
+action_12 (53) = happyGoto action_96
+action_12 _ = happyFail (happyExpListPerState 12)
+
+action_13 (86) = happyShift action_92
+action_13 (54) = happyGoto action_95
+action_13 _ = happyFail (happyExpListPerState 13)
+
+action_14 (116) = happyShift action_69
+action_14 (38) = happyGoto action_93
+action_14 (55) = happyGoto action_94
+action_14 _ = happyReduce_86
+
+action_15 (86) = happyShift action_92
+action_15 (54) = happyGoto action_90
+action_15 (56) = happyGoto action_91
+action_15 _ = happyReduce_89
+
+action_16 (74) = happyShift action_89
+action_16 (53) = happyGoto action_87
+action_16 (57) = happyGoto action_88
+action_16 _ = happyFail (happyExpListPerState 16)
+
+action_17 (114) = happyShift action_34
+action_17 (36) = happyGoto action_85
+action_17 (58) = happyGoto action_86
+action_17 _ = happyFail (happyExpListPerState 17)
+
+action_18 (59) = happyGoto action_84
+action_18 _ = happyReduce_95
+
+action_19 (104) = happyShift action_82
+action_19 (106) = happyShift action_83
+action_19 (60) = happyGoto action_81
+action_19 _ = happyReduce_97
+
+action_20 (115) = happyShift action_68
+action_20 (37) = happyGoto action_79
+action_20 (61) = happyGoto action_80
+action_20 _ = happyFail (happyExpListPerState 20)
+
+action_21 (74) = happyShift action_66
+action_21 (86) = happyShift action_67
+action_21 (114) = happyShift action_34
+action_21 (115) = happyShift action_68
+action_21 (116) = happyShift action_69
+action_21 (117) = happyShift action_49
+action_21 (118) = happyShift action_70
+action_21 (36) = happyGoto action_71
+action_21 (37) = happyGoto action_60
+action_21 (38) = happyGoto action_61
+action_21 (39) = happyGoto action_62
+action_21 (40) = happyGoto action_63
+action_21 (62) = happyGoto action_78
+action_21 (63) = happyGoto action_73
+action_21 (64) = happyGoto action_74
+action_21 _ = happyFail (happyExpListPerState 21)
+
+action_22 (74) = happyShift action_66
+action_22 (86) = happyShift action_67
+action_22 (114) = happyShift action_34
+action_22 (115) = happyShift action_68
+action_22 (116) = happyShift action_69
+action_22 (117) = happyShift action_49
+action_22 (118) = happyShift action_70
+action_22 (36) = happyGoto action_71
+action_22 (37) = happyGoto action_60
+action_22 (38) = happyGoto action_61
+action_22 (39) = happyGoto action_62
+action_22 (40) = happyGoto action_63
+action_22 (63) = happyGoto action_77
+action_22 (64) = happyGoto action_74
+action_22 _ = happyFail (happyExpListPerState 22)
+
+action_23 (74) = happyShift action_66
+action_23 (86) = happyShift action_67
+action_23 (114) = happyShift action_34
+action_23 (115) = happyShift action_68
+action_23 (116) = happyShift action_69
+action_23 (117) = happyShift action_49
+action_23 (118) = happyShift action_70
+action_23 (36) = happyGoto action_59
+action_23 (37) = happyGoto action_60
+action_23 (38) = happyGoto action_61
+action_23 (39) = happyGoto action_62
+action_23 (40) = happyGoto action_63
+action_23 (64) = happyGoto action_76
+action_23 _ = happyFail (happyExpListPerState 23)
+
+action_24 (74) = happyShift action_66
+action_24 (86) = happyShift action_67
+action_24 (114) = happyShift action_34
+action_24 (115) = happyShift action_68
+action_24 (116) = happyShift action_69
+action_24 (117) = happyShift action_49
+action_24 (118) = happyShift action_70
+action_24 (36) = happyGoto action_71
+action_24 (37) = happyGoto action_60
+action_24 (38) = happyGoto action_61
+action_24 (39) = happyGoto action_62
+action_24 (40) = happyGoto action_63
+action_24 (62) = happyGoto action_72
+action_24 (63) = happyGoto action_73
+action_24 (64) = happyGoto action_74
+action_24 (65) = happyGoto action_75
+action_24 _ = happyReduce_113
+
+action_25 (74) = happyShift action_66
+action_25 (86) = happyShift action_67
+action_25 (114) = happyShift action_34
+action_25 (115) = happyShift action_68
+action_25 (116) = happyShift action_69
+action_25 (117) = happyShift action_49
+action_25 (118) = happyShift action_70
+action_25 (36) = happyGoto action_59
+action_25 (37) = happyGoto action_60
+action_25 (38) = happyGoto action_61
+action_25 (39) = happyGoto action_62
+action_25 (40) = happyGoto action_63
+action_25 (64) = happyGoto action_64
+action_25 (66) = happyGoto action_65
+action_25 _ = happyFail (happyExpListPerState 25)
+
+action_26 (49) = happyGoto action_55
+action_26 (67) = happyGoto action_58
+action_26 _ = happyReduce_71
+
+action_27 (49) = happyGoto action_55
+action_27 (67) = happyGoto action_56
+action_27 (68) = happyGoto action_57
+action_27 _ = happyReduce_71
+
+action_28 (101) = happyShift action_54
+action_28 (69) = happyGoto action_53
+action_28 _ = happyReduce_122
+
+action_29 (74) = happyShift action_40
+action_29 (86) = happyShift action_41
+action_29 (89) = happyShift action_42
+action_29 (94) = happyShift action_43
+action_29 (96) = happyShift action_44
+action_29 (99) = happyShift action_45
+action_29 (100) = happyShift action_46
+action_29 (109) = happyShift action_47
+action_29 (111) = happyShift action_48
+action_29 (117) = happyShift action_49
+action_29 (39) = happyGoto action_35
+action_29 (70) = happyGoto action_52
+action_29 (72) = happyGoto action_38
+action_29 _ = happyFail (happyExpListPerState 29)
+
+action_30 (74) = happyShift action_40
+action_30 (86) = happyShift action_41
+action_30 (89) = happyShift action_42
+action_30 (94) = happyShift action_43
+action_30 (96) = happyShift action_44
+action_30 (99) = happyShift action_45
+action_30 (100) = happyShift action_46
+action_30 (109) = happyShift action_47
+action_30 (111) = happyShift action_48
+action_30 (117) = happyShift action_49
+action_30 (39) = happyGoto action_35
+action_30 (70) = happyGoto action_36
+action_30 (71) = happyGoto action_51
+action_30 (72) = happyGoto action_38
+action_30 _ = happyFail (happyExpListPerState 30)
+
+action_31 (74) = happyShift action_40
+action_31 (86) = happyShift action_41
+action_31 (89) = happyShift action_42
+action_31 (94) = happyShift action_43
+action_31 (96) = happyShift action_44
+action_31 (99) = happyShift action_45
+action_31 (100) = happyShift action_46
+action_31 (109) = happyShift action_47
+action_31 (111) = happyShift action_48
+action_31 (117) = happyShift action_49
+action_31 (39) = happyGoto action_35
+action_31 (72) = happyGoto action_50
+action_31 _ = happyFail (happyExpListPerState 31)
+
+action_32 (74) = happyShift action_40
+action_32 (86) = happyShift action_41
+action_32 (89) = happyShift action_42
+action_32 (94) = happyShift action_43
+action_32 (96) = happyShift action_44
+action_32 (99) = happyShift action_45
+action_32 (100) = happyShift action_46
+action_32 (109) = happyShift action_47
+action_32 (111) = happyShift action_48
+action_32 (117) = happyShift action_49
+action_32 (39) = happyGoto action_35
+action_32 (70) = happyGoto action_36
+action_32 (71) = happyGoto action_37
+action_32 (72) = happyGoto action_38
+action_32 (73) = happyGoto action_39
+action_32 _ = happyFail (happyExpListPerState 32)
+
+action_33 (114) = happyShift action_34
+action_33 _ = happyFail (happyExpListPerState 33)
+
+action_34 _ = happyReduce_33
+
+action_35 _ = happyReduce_132
+
+action_36 (74) = happyShift action_40
+action_36 (79) = happyShift action_195
+action_36 (86) = happyShift action_41
+action_36 (89) = happyShift action_42
+action_36 (94) = happyShift action_43
+action_36 (96) = happyShift action_44
+action_36 (99) = happyShift action_45
+action_36 (100) = happyShift action_46
+action_36 (109) = happyShift action_47
+action_36 (111) = happyShift action_48
+action_36 (117) = happyShift action_49
+action_36 (39) = happyGoto action_35
+action_36 (72) = happyGoto action_187
+action_36 _ = happyReduce_127
+
+action_37 (112) = happyShift action_188
+action_37 _ = happyReduce_141
+
+action_38 (76) = happyShift action_189
+action_38 (77) = happyShift action_190
+action_38 (85) = happyShift action_191
+action_38 _ = happyReduce_124
+
+action_39 (119) = happyAccept
+action_39 _ = happyFail (happyExpListPerState 39)
+
+action_40 (74) = happyShift action_40
+action_40 (86) = happyShift action_41
+action_40 (89) = happyShift action_42
+action_40 (94) = happyShift action_43
+action_40 (96) = happyShift action_44
+action_40 (99) = happyShift action_45
+action_40 (100) = happyShift action_46
+action_40 (109) = happyShift action_47
+action_40 (111) = happyShift action_48
+action_40 (117) = happyShift action_49
+action_40 (39) = happyGoto action_35
+action_40 (70) = happyGoto action_36
+action_40 (71) = happyGoto action_37
+action_40 (72) = happyGoto action_38
+action_40 (73) = happyGoto action_194
+action_40 _ = happyFail (happyExpListPerState 40)
+
+action_41 (115) = happyShift action_68
+action_41 (37) = happyGoto action_193
+action_41 _ = happyFail (happyExpListPerState 41)
+
+action_42 _ = happyReduce_139
+
+action_43 _ = happyReduce_135
+
+action_44 _ = happyReduce_131
+
+action_45 _ = happyReduce_136
+
+action_46 _ = happyReduce_138
+
+action_47 _ = happyReduce_137
+
+action_48 (115) = happyShift action_68
+action_48 (37) = happyGoto action_192
+action_48 _ = happyFail (happyExpListPerState 48)
+
+action_49 _ = happyReduce_36
+
+action_50 (76) = happyShift action_189
+action_50 (77) = happyShift action_190
+action_50 (85) = happyShift action_191
+action_50 (119) = happyAccept
+action_50 _ = happyFail (happyExpListPerState 50)
+
+action_51 (112) = happyShift action_188
+action_51 (119) = happyAccept
+action_51 _ = happyFail (happyExpListPerState 51)
+
+action_52 (74) = happyShift action_40
+action_52 (86) = happyShift action_41
+action_52 (89) = happyShift action_42
+action_52 (94) = happyShift action_43
+action_52 (96) = happyShift action_44
+action_52 (99) = happyShift action_45
+action_52 (100) = happyShift action_46
+action_52 (109) = happyShift action_47
+action_52 (111) = happyShift action_48
+action_52 (117) = happyShift action_49
+action_52 (119) = happyAccept
+action_52 (39) = happyGoto action_35
+action_52 (72) = happyGoto action_187
+action_52 _ = happyFail (happyExpListPerState 52)
+
+action_53 (119) = happyAccept
+action_53 _ = happyFail (happyExpListPerState 53)
+
+action_54 _ = happyReduce_121
+
+action_55 (86) = happyShift action_106
+action_55 (114) = happyShift action_34
+action_55 (115) = happyShift action_68
+action_55 (36) = happyGoto action_104
+action_55 (37) = happyGoto action_108
+action_55 (48) = happyGoto action_164
+action_55 (50) = happyGoto action_110
+action_55 _ = happyReduce_118
+
+action_56 (112) = happyShift action_186
+action_56 _ = happyReduce_119
+
+action_57 (119) = happyAccept
+action_57 _ = happyFail (happyExpListPerState 57)
+
+action_58 (119) = happyAccept
+action_58 _ = happyFail (happyExpListPerState 58)
+
+action_59 _ = happyReduce_106
+
+action_60 _ = happyReduce_109
+
+action_61 _ = happyReduce_107
+
+action_62 _ = happyReduce_108
+
+action_63 _ = happyReduce_110
+
+action_64 (74) = happyShift action_66
+action_64 (86) = happyShift action_67
+action_64 (114) = happyShift action_34
+action_64 (115) = happyShift action_68
+action_64 (116) = happyShift action_69
+action_64 (117) = happyShift action_49
+action_64 (118) = happyShift action_70
+action_64 (36) = happyGoto action_59
+action_64 (37) = happyGoto action_60
+action_64 (38) = happyGoto action_61
+action_64 (39) = happyGoto action_62
+action_64 (40) = happyGoto action_63
+action_64 (64) = happyGoto action_64
+action_64 (66) = happyGoto action_185
+action_64 _ = happyReduce_116
+
+action_65 (119) = happyAccept
+action_65 _ = happyFail (happyExpListPerState 65)
+
+action_66 (74) = happyShift action_66
+action_66 (86) = happyShift action_67
+action_66 (114) = happyShift action_34
+action_66 (115) = happyShift action_68
+action_66 (116) = happyShift action_69
+action_66 (117) = happyShift action_49
+action_66 (118) = happyShift action_70
+action_66 (36) = happyGoto action_71
+action_66 (37) = happyGoto action_60
+action_66 (38) = happyGoto action_61
+action_66 (39) = happyGoto action_62
+action_66 (40) = happyGoto action_63
+action_66 (62) = happyGoto action_184
+action_66 (63) = happyGoto action_73
+action_66 (64) = happyGoto action_74
+action_66 _ = happyFail (happyExpListPerState 66)
+
+action_67 (74) = happyShift action_66
+action_67 (86) = happyShift action_67
+action_67 (114) = happyShift action_34
+action_67 (115) = happyShift action_68
+action_67 (116) = happyShift action_69
+action_67 (117) = happyShift action_49
+action_67 (118) = happyShift action_70
+action_67 (36) = happyGoto action_71
+action_67 (37) = happyGoto action_60
+action_67 (38) = happyGoto action_61
+action_67 (39) = happyGoto action_62
+action_67 (40) = happyGoto action_63
+action_67 (62) = happyGoto action_72
+action_67 (63) = happyGoto action_73
+action_67 (64) = happyGoto action_74
+action_67 (65) = happyGoto action_183
+action_67 _ = happyReduce_113
+
+action_68 _ = happyReduce_34
+
+action_69 _ = happyReduce_35
+
+action_70 _ = happyReduce_37
+
+action_71 (74) = happyShift action_66
+action_71 (86) = happyShift action_67
+action_71 (114) = happyShift action_34
+action_71 (115) = happyShift action_68
+action_71 (116) = happyShift action_69
+action_71 (117) = happyShift action_49
+action_71 (118) = happyShift action_70
+action_71 (36) = happyGoto action_59
+action_71 (37) = happyGoto action_60
+action_71 (38) = happyGoto action_61
+action_71 (39) = happyGoto action_62
+action_71 (40) = happyGoto action_63
+action_71 (64) = happyGoto action_64
+action_71 (66) = happyGoto action_182
+action_71 _ = happyReduce_106
+
+action_72 (78) = happyShift action_181
+action_72 _ = happyReduce_114
+
+action_73 (81) = happyShift action_180
+action_73 _ = happyReduce_103
+
+action_74 _ = happyReduce_105
+
+action_75 (119) = happyAccept
+action_75 _ = happyFail (happyExpListPerState 75)
+
+action_76 (119) = happyAccept
+action_76 _ = happyFail (happyExpListPerState 76)
+
+action_77 (119) = happyAccept
+action_77 _ = happyFail (happyExpListPerState 77)
+
+action_78 (119) = happyAccept
+action_78 _ = happyFail (happyExpListPerState 78)
+
+action_79 (78) = happyShift action_179
+action_79 _ = happyReduce_100
+
+action_80 (119) = happyAccept
+action_80 _ = happyFail (happyExpListPerState 80)
+
+action_81 (119) = happyAccept
+action_81 _ = happyFail (happyExpListPerState 81)
+
+action_82 (115) = happyShift action_68
+action_82 (37) = happyGoto action_178
+action_82 _ = happyFail (happyExpListPerState 82)
+
+action_83 (115) = happyShift action_68
+action_83 (37) = happyGoto action_177
+action_83 _ = happyFail (happyExpListPerState 83)
+
+action_84 (114) = happyShift action_34
+action_84 (119) = happyAccept
+action_84 (36) = happyGoto action_85
+action_84 (58) = happyGoto action_176
+action_84 _ = happyFail (happyExpListPerState 84)
+
+action_85 _ = happyReduce_94
+
+action_86 (119) = happyAccept
+action_86 _ = happyFail (happyExpListPerState 86)
+
+action_87 (74) = happyShift action_89
+action_87 (53) = happyGoto action_87
+action_87 (57) = happyGoto action_175
+action_87 _ = happyReduce_92
+
+action_88 (119) = happyAccept
+action_88 _ = happyFail (happyExpListPerState 88)
+
+action_89 (86) = happyShift action_174
+action_89 _ = happyFail (happyExpListPerState 89)
+
+action_90 (78) = happyShift action_173
+action_90 _ = happyReduce_90
+
+action_91 (119) = happyAccept
+action_91 _ = happyFail (happyExpListPerState 91)
+
+action_92 (116) = happyShift action_69
+action_92 (38) = happyGoto action_93
+action_92 (55) = happyGoto action_172
+action_92 _ = happyReduce_86
+
+action_93 (78) = happyShift action_171
+action_93 _ = happyReduce_87
+
+action_94 (119) = happyAccept
+action_94 _ = happyFail (happyExpListPerState 94)
+
+action_95 (119) = happyAccept
+action_95 _ = happyFail (happyExpListPerState 95)
+
+action_96 (119) = happyAccept
+action_96 _ = happyFail (happyExpListPerState 96)
+
+action_97 _ = happyReduce_79
+
+action_98 (119) = happyAccept
+action_98 _ = happyFail (happyExpListPerState 98)
+
+action_99 (81) = happyShift action_170
+action_99 _ = happyFail (happyExpListPerState 99)
+
+action_100 (87) = happyShift action_169
+action_100 _ = happyFail (happyExpListPerState 100)
+
+action_101 _ = happyReduce_80
+
+action_102 (119) = happyAccept
+action_102 _ = happyFail (happyExpListPerState 102)
+
+action_103 (74) = happyShift action_168
+action_103 (86) = happyShift action_100
+action_103 (88) = happyShift action_101
+action_103 (114) = happyShift action_34
+action_103 (36) = happyGoto action_97
+action_103 (52) = happyGoto action_166
+action_103 (53) = happyGoto action_87
+action_103 (57) = happyGoto action_167
+action_103 _ = happyReduce_75
+
+action_104 _ = happyReduce_74
+
+action_105 (119) = happyAccept
+action_105 _ = happyFail (happyExpListPerState 105)
+
+action_106 (86) = happyShift action_106
+action_106 (114) = happyShift action_34
+action_106 (36) = happyGoto action_104
+action_106 (50) = happyGoto action_165
+action_106 _ = happyFail (happyExpListPerState 106)
+
+action_107 (86) = happyShift action_106
+action_107 (114) = happyShift action_34
+action_107 (115) = happyShift action_68
+action_107 (119) = happyAccept
+action_107 (36) = happyGoto action_104
+action_107 (37) = happyGoto action_108
+action_107 (48) = happyGoto action_164
+action_107 (50) = happyGoto action_110
+action_107 _ = happyFail (happyExpListPerState 107)
+
+action_108 _ = happyReduce_69
+
+action_109 (119) = happyAccept
+action_109 _ = happyFail (happyExpListPerState 109)
+
+action_110 _ = happyReduce_70
+
+action_111 (119) = happyAccept
+action_111 _ = happyFail (happyExpListPerState 111)
+
+action_112 (80) = happyShift action_163
+action_112 _ = happyFail (happyExpListPerState 112)
+
+action_113 (114) = happyShift action_34
+action_113 (36) = happyGoto action_162
+action_113 _ = happyFail (happyExpListPerState 113)
+
+action_114 (115) = happyShift action_68
+action_114 (37) = happyGoto action_161
+action_114 _ = happyFail (happyExpListPerState 114)
+
+action_115 (114) = happyShift action_34
+action_115 (36) = happyGoto action_160
+action_115 _ = happyFail (happyExpListPerState 115)
+
+action_116 (86) = happyShift action_106
+action_116 (114) = happyShift action_34
+action_116 (36) = happyGoto action_104
+action_116 (50) = happyGoto action_159
+action_116 _ = happyFail (happyExpListPerState 116)
+
+action_117 (114) = happyShift action_34
+action_117 (36) = happyGoto action_130
+action_117 (44) = happyGoto action_158
+action_117 _ = happyFail (happyExpListPerState 117)
+
+action_118 (74) = happyShift action_99
+action_118 (86) = happyShift action_100
+action_118 (88) = happyShift action_101
+action_118 (114) = happyShift action_34
+action_118 (36) = happyGoto action_97
+action_118 (51) = happyGoto action_157
+action_118 (52) = happyGoto action_103
+action_118 _ = happyFail (happyExpListPerState 118)
+
+action_119 (105) = happyShift action_155
+action_119 (108) = happyShift action_156
+action_119 (115) = happyShift action_68
+action_119 (37) = happyGoto action_79
+action_119 (61) = happyGoto action_154
+action_119 _ = happyFail (happyExpListPerState 119)
+
+action_120 (107) = happyShift action_153
+action_120 _ = happyFail (happyExpListPerState 120)
+
+action_121 (114) = happyShift action_34
+action_121 (36) = happyGoto action_152
+action_121 _ = happyFail (happyExpListPerState 121)
+
+action_122 (101) = happyShift action_54
+action_122 (69) = happyGoto action_151
+action_122 _ = happyReduce_122
+
+action_123 (101) = happyShift action_54
+action_123 (69) = happyGoto action_150
+action_123 _ = happyReduce_122
+
+action_124 (114) = happyShift action_34
+action_124 (36) = happyGoto action_149
+action_124 _ = happyFail (happyExpListPerState 124)
+
+action_125 (119) = happyAccept
+action_125 _ = happyFail (happyExpListPerState 125)
+
+action_126 (83) = happyShift action_148
+action_126 _ = happyReduce_50
+
+action_127 (74) = happyShift action_99
+action_127 (83) = happyShift action_127
+action_127 (86) = happyShift action_100
+action_127 (88) = happyShift action_101
+action_127 (90) = happyShift action_113
+action_127 (91) = happyShift action_114
+action_127 (92) = happyShift action_115
+action_127 (93) = happyShift action_116
+action_127 (95) = happyShift action_117
+action_127 (97) = happyShift action_118
+action_127 (98) = happyShift action_119
+action_127 (102) = happyShift action_120
+action_127 (103) = happyShift action_121
+action_127 (104) = happyShift action_122
+action_127 (106) = happyShift action_123
+action_127 (107) = happyShift action_124
+action_127 (114) = happyShift action_34
+action_127 (36) = happyGoto action_97
+action_127 (46) = happyGoto action_147
+action_127 (47) = happyGoto action_126
+action_127 (51) = happyGoto action_112
+action_127 (52) = happyGoto action_103
+action_127 _ = happyReduce_49
+
+action_128 (119) = happyAccept
+action_128 _ = happyFail (happyExpListPerState 128)
+
+action_129 _ = happyReduce_48
+
+action_130 (78) = happyShift action_146
+action_130 _ = happyReduce_46
+
+action_131 (119) = happyAccept
+action_131 _ = happyFail (happyExpListPerState 131)
+
+action_132 (78) = happyShift action_146
+action_132 (81) = happyReduce_46
+action_132 _ = happyReduce_79
+
+action_133 (83) = happyShift action_145
+action_133 _ = happyReduce_43
+
+action_134 (119) = happyAccept
+action_134 _ = happyFail (happyExpListPerState 134)
+
+action_135 (81) = happyShift action_144
+action_135 _ = happyFail (happyExpListPerState 135)
+
+action_136 _ = happyReduce_39
+
+action_137 (74) = happyShift action_99
+action_137 (83) = happyShift action_137
+action_137 (86) = happyShift action_100
+action_137 (88) = happyShift action_101
+action_137 (90) = happyShift action_113
+action_137 (91) = happyShift action_114
+action_137 (92) = happyShift action_115
+action_137 (93) = happyShift action_116
+action_137 (95) = happyShift action_117
+action_137 (97) = happyShift action_118
+action_137 (98) = happyShift action_119
+action_137 (102) = happyShift action_120
+action_137 (103) = happyShift action_121
+action_137 (104) = happyShift action_122
+action_137 (106) = happyShift action_123
+action_137 (107) = happyShift action_124
+action_137 (110) = happyShift action_138
+action_137 (114) = happyShift action_34
+action_137 (36) = happyGoto action_132
+action_137 (42) = happyGoto action_133
+action_137 (43) = happyGoto action_143
+action_137 (44) = happyGoto action_135
+action_137 (47) = happyGoto action_136
+action_137 (51) = happyGoto action_112
+action_137 (52) = happyGoto action_103
+action_137 _ = happyReduce_42
+
+action_138 (114) = happyShift action_34
+action_138 (36) = happyGoto action_130
+action_138 (44) = happyGoto action_142
+action_138 _ = happyFail (happyExpListPerState 138)
+
+action_139 (119) = happyAccept
+action_139 _ = happyFail (happyExpListPerState 139)
+
+action_140 (119) = happyAccept
+action_140 _ = happyFail (happyExpListPerState 140)
+
+action_141 _ = happyReduce_38
+
+action_142 _ = happyReduce_41
+
+action_143 _ = happyReduce_45
+
+action_144 (74) = happyShift action_99
+action_144 (86) = happyShift action_100
+action_144 (88) = happyShift action_101
+action_144 (90) = happyShift action_113
+action_144 (91) = happyShift action_114
+action_144 (92) = happyShift action_115
+action_144 (93) = happyShift action_116
+action_144 (95) = happyShift action_117
+action_144 (97) = happyShift action_118
+action_144 (98) = happyShift action_119
+action_144 (102) = happyShift action_120
+action_144 (103) = happyShift action_121
+action_144 (104) = happyShift action_122
+action_144 (106) = happyShift action_123
+action_144 (107) = happyShift action_124
+action_144 (114) = happyShift action_34
+action_144 (36) = happyGoto action_97
+action_144 (47) = happyGoto action_230
+action_144 (51) = happyGoto action_112
+action_144 (52) = happyGoto action_103
+action_144 _ = happyFail (happyExpListPerState 144)
+
+action_145 (74) = happyShift action_99
+action_145 (83) = happyShift action_137
+action_145 (86) = happyShift action_100
+action_145 (88) = happyShift action_101
+action_145 (90) = happyShift action_113
+action_145 (91) = happyShift action_114
+action_145 (92) = happyShift action_115
+action_145 (93) = happyShift action_116
+action_145 (95) = happyShift action_117
+action_145 (97) = happyShift action_118
+action_145 (98) = happyShift action_119
+action_145 (102) = happyShift action_120
+action_145 (103) = happyShift action_121
+action_145 (104) = happyShift action_122
+action_145 (106) = happyShift action_123
+action_145 (107) = happyShift action_124
+action_145 (110) = happyShift action_138
+action_145 (114) = happyShift action_34
+action_145 (36) = happyGoto action_132
+action_145 (42) = happyGoto action_133
+action_145 (43) = happyGoto action_229
+action_145 (44) = happyGoto action_135
+action_145 (47) = happyGoto action_136
+action_145 (51) = happyGoto action_112
+action_145 (52) = happyGoto action_103
+action_145 _ = happyReduce_42
+
+action_146 (114) = happyShift action_34
+action_146 (36) = happyGoto action_130
+action_146 (44) = happyGoto action_228
+action_146 _ = happyFail (happyExpListPerState 146)
+
+action_147 _ = happyReduce_52
+
+action_148 (74) = happyShift action_99
+action_148 (83) = happyShift action_127
+action_148 (86) = happyShift action_100
+action_148 (88) = happyShift action_101
+action_148 (90) = happyShift action_113
+action_148 (91) = happyShift action_114
+action_148 (92) = happyShift action_115
+action_148 (93) = happyShift action_116
+action_148 (95) = happyShift action_117
+action_148 (97) = happyShift action_118
+action_148 (98) = happyShift action_119
+action_148 (102) = happyShift action_120
+action_148 (103) = happyShift action_121
+action_148 (104) = happyShift action_122
+action_148 (106) = happyShift action_123
+action_148 (107) = happyShift action_124
+action_148 (114) = happyShift action_34
+action_148 (36) = happyGoto action_97
+action_148 (46) = happyGoto action_227
+action_148 (47) = happyGoto action_126
+action_148 (51) = happyGoto action_112
+action_148 (52) = happyGoto action_103
+action_148 _ = happyReduce_49
+
+action_149 (74) = happyShift action_40
+action_149 (86) = happyShift action_41
+action_149 (89) = happyShift action_42
+action_149 (94) = happyShift action_43
+action_149 (96) = happyShift action_44
+action_149 (99) = happyShift action_45
+action_149 (100) = happyShift action_46
+action_149 (109) = happyShift action_47
+action_149 (111) = happyShift action_48
+action_149 (117) = happyShift action_49
+action_149 (39) = happyGoto action_35
+action_149 (70) = happyGoto action_36
+action_149 (71) = happyGoto action_37
+action_149 (72) = happyGoto action_38
+action_149 (73) = happyGoto action_226
+action_149 _ = happyFail (happyExpListPerState 149)
+
+action_150 (86) = happyShift action_106
+action_150 (114) = happyShift action_34
+action_150 (36) = happyGoto action_104
+action_150 (50) = happyGoto action_225
+action_150 _ = happyFail (happyExpListPerState 150)
+
+action_151 (86) = happyShift action_106
+action_151 (114) = happyShift action_34
+action_151 (36) = happyGoto action_104
+action_151 (50) = happyGoto action_224
+action_151 _ = happyFail (happyExpListPerState 151)
+
+action_152 (82) = happyShift action_223
+action_152 _ = happyFail (happyExpListPerState 152)
+
+action_153 (114) = happyShift action_34
+action_153 (36) = happyGoto action_222
+action_153 _ = happyFail (happyExpListPerState 153)
+
+action_154 _ = happyReduce_66
+
+action_155 (115) = happyShift action_68
+action_155 (37) = happyGoto action_79
+action_155 (61) = happyGoto action_221
+action_155 _ = happyFail (happyExpListPerState 155)
+
+action_156 _ = happyReduce_68
+
+action_157 (80) = happyShift action_220
+action_157 _ = happyFail (happyExpListPerState 157)
+
+action_158 _ = happyReduce_59
+
+action_159 (115) = happyShift action_68
+action_159 (37) = happyGoto action_219
+action_159 _ = happyFail (happyExpListPerState 159)
+
+action_160 (59) = happyGoto action_218
+action_160 _ = happyReduce_95
+
+action_161 (115) = happyShift action_68
+action_161 (37) = happyGoto action_217
+action_161 _ = happyReduce_54
+
+action_162 (116) = happyShift action_69
+action_162 (38) = happyGoto action_216
+action_162 _ = happyFail (happyExpListPerState 162)
+
+action_163 (86) = happyShift action_106
+action_163 (114) = happyShift action_34
+action_163 (36) = happyGoto action_104
+action_163 (50) = happyGoto action_215
+action_163 _ = happyFail (happyExpListPerState 163)
+
+action_164 _ = happyReduce_72
+
+action_165 (87) = happyShift action_214
+action_165 _ = happyFail (happyExpListPerState 165)
+
+action_166 (74) = happyShift action_89
+action_166 (53) = happyGoto action_87
+action_166 (57) = happyGoto action_213
+action_166 _ = happyReduce_78
+
+action_167 _ = happyReduce_76
+
+action_168 (81) = happyShift action_170
+action_168 (86) = happyShift action_174
+action_168 _ = happyFail (happyExpListPerState 168)
+
+action_169 _ = happyReduce_81
+
+action_170 (75) = happyShift action_211
+action_170 (86) = happyShift action_212
+action_170 _ = happyFail (happyExpListPerState 170)
+
+action_171 (116) = happyShift action_69
+action_171 (38) = happyGoto action_93
+action_171 (55) = happyGoto action_210
+action_171 _ = happyReduce_86
+
+action_172 (87) = happyShift action_209
+action_172 _ = happyFail (happyExpListPerState 172)
+
+action_173 (86) = happyShift action_92
+action_173 (54) = happyGoto action_90
+action_173 (56) = happyGoto action_208
+action_173 _ = happyReduce_89
+
+action_174 (86) = happyShift action_92
+action_174 (54) = happyGoto action_90
+action_174 (56) = happyGoto action_207
+action_174 _ = happyReduce_89
+
+action_175 _ = happyReduce_93
+
+action_176 _ = happyReduce_96
+
+action_177 _ = happyReduce_98
+
+action_178 _ = happyReduce_99
+
+action_179 (115) = happyShift action_68
+action_179 (37) = happyGoto action_79
+action_179 (61) = happyGoto action_206
+action_179 _ = happyFail (happyExpListPerState 179)
+
+action_180 (74) = happyShift action_66
+action_180 (86) = happyShift action_67
+action_180 (114) = happyShift action_34
+action_180 (115) = happyShift action_68
+action_180 (116) = happyShift action_69
+action_180 (117) = happyShift action_49
+action_180 (118) = happyShift action_70
+action_180 (36) = happyGoto action_71
+action_180 (37) = happyGoto action_60
+action_180 (38) = happyGoto action_61
+action_180 (39) = happyGoto action_62
+action_180 (40) = happyGoto action_63
+action_180 (62) = happyGoto action_205
+action_180 (63) = happyGoto action_73
+action_180 (64) = happyGoto action_74
+action_180 _ = happyFail (happyExpListPerState 180)
+
+action_181 (74) = happyShift action_66
+action_181 (86) = happyShift action_67
+action_181 (114) = happyShift action_34
+action_181 (115) = happyShift action_68
+action_181 (116) = happyShift action_69
+action_181 (117) = happyShift action_49
+action_181 (118) = happyShift action_70
+action_181 (36) = happyGoto action_71
+action_181 (37) = happyGoto action_60
+action_181 (38) = happyGoto action_61
+action_181 (39) = happyGoto action_62
+action_181 (40) = happyGoto action_63
+action_181 (62) = happyGoto action_72
+action_181 (63) = happyGoto action_73
+action_181 (64) = happyGoto action_74
+action_181 (65) = happyGoto action_204
+action_181 _ = happyReduce_113
+
+action_182 _ = happyReduce_104
+
+action_183 (87) = happyShift action_203
+action_183 _ = happyFail (happyExpListPerState 183)
+
+action_184 (75) = happyShift action_202
+action_184 _ = happyFail (happyExpListPerState 184)
+
+action_185 _ = happyReduce_117
+
+action_186 (49) = happyGoto action_55
+action_186 (67) = happyGoto action_56
+action_186 (68) = happyGoto action_201
+action_186 _ = happyReduce_71
+
+action_187 (76) = happyShift action_189
+action_187 (77) = happyShift action_190
+action_187 (85) = happyShift action_191
+action_187 _ = happyReduce_123
+
+action_188 (74) = happyShift action_40
+action_188 (86) = happyShift action_41
+action_188 (89) = happyShift action_42
+action_188 (94) = happyShift action_43
+action_188 (96) = happyShift action_44
+action_188 (99) = happyShift action_45
+action_188 (100) = happyShift action_46
+action_188 (109) = happyShift action_47
+action_188 (111) = happyShift action_48
+action_188 (117) = happyShift action_49
+action_188 (39) = happyGoto action_35
+action_188 (70) = happyGoto action_200
+action_188 (72) = happyGoto action_38
+action_188 _ = happyFail (happyExpListPerState 188)
+
+action_189 _ = happyReduce_128
+
+action_190 _ = happyReduce_129
+
+action_191 _ = happyReduce_130
+
+action_192 (113) = happyShift action_199
+action_192 _ = happyFail (happyExpListPerState 192)
+
+action_193 (87) = happyShift action_198
+action_193 _ = happyFail (happyExpListPerState 193)
+
+action_194 (75) = happyShift action_197
+action_194 _ = happyFail (happyExpListPerState 194)
+
+action_195 (74) = happyShift action_40
+action_195 (86) = happyShift action_41
+action_195 (89) = happyShift action_42
+action_195 (94) = happyShift action_43
+action_195 (96) = happyShift action_44
+action_195 (99) = happyShift action_45
+action_195 (100) = happyShift action_46
+action_195 (109) = happyShift action_47
+action_195 (111) = happyShift action_48
+action_195 (117) = happyShift action_49
+action_195 (39) = happyGoto action_35
+action_195 (70) = happyGoto action_196
+action_195 (72) = happyGoto action_38
+action_195 _ = happyFail (happyExpListPerState 195)
+
+action_196 (74) = happyShift action_40
+action_196 (86) = happyShift action_41
+action_196 (89) = happyShift action_42
+action_196 (94) = happyShift action_43
+action_196 (96) = happyShift action_44
+action_196 (99) = happyShift action_45
+action_196 (100) = happyShift action_46
+action_196 (109) = happyShift action_47
+action_196 (111) = happyShift action_48
+action_196 (117) = happyShift action_49
+action_196 (39) = happyGoto action_35
+action_196 (72) = happyGoto action_187
+action_196 _ = happyReduce_126
+
+action_197 _ = happyReduce_140
+
+action_198 _ = happyReduce_133
+
+action_199 _ = happyReduce_134
+
+action_200 (74) = happyShift action_40
+action_200 (86) = happyShift action_41
+action_200 (89) = happyShift action_42
+action_200 (94) = happyShift action_43
+action_200 (96) = happyShift action_44
+action_200 (99) = happyShift action_45
+action_200 (100) = happyShift action_46
+action_200 (109) = happyShift action_47
+action_200 (111) = happyShift action_48
+action_200 (117) = happyShift action_49
+action_200 (39) = happyGoto action_35
+action_200 (72) = happyGoto action_187
+action_200 _ = happyReduce_125
+
+action_201 _ = happyReduce_120
+
+action_202 _ = happyReduce_112
+
+action_203 _ = happyReduce_111
+
+action_204 _ = happyReduce_115
+
+action_205 _ = happyReduce_102
+
+action_206 _ = happyReduce_101
+
+action_207 (87) = happyShift action_240
+action_207 _ = happyFail (happyExpListPerState 207)
+
+action_208 _ = happyReduce_91
+
+action_209 _ = happyReduce_85
+
+action_210 _ = happyReduce_88
+
+action_211 _ = happyReduce_82
+
+action_212 (87) = happyShift action_239
+action_212 _ = happyFail (happyExpListPerState 212)
+
+action_213 _ = happyReduce_77
+
+action_214 _ = happyReduce_73
+
+action_215 (82) = happyShift action_238
+action_215 _ = happyFail (happyExpListPerState 215)
+
+action_216 _ = happyReduce_63
+
+action_217 _ = happyReduce_55
+
+action_218 (84) = happyShift action_237
+action_218 (114) = happyShift action_34
+action_218 (36) = happyGoto action_85
+action_218 (58) = happyGoto action_176
+action_218 _ = happyFail (happyExpListPerState 218)
+
+action_219 (115) = happyShift action_68
+action_219 (37) = happyGoto action_236
+action_219 _ = happyFail (happyExpListPerState 219)
+
+action_220 (86) = happyShift action_106
+action_220 (114) = happyShift action_34
+action_220 (36) = happyGoto action_104
+action_220 (50) = happyGoto action_235
+action_220 _ = happyFail (happyExpListPerState 220)
+
+action_221 _ = happyReduce_67
+
+action_222 (74) = happyShift action_40
+action_222 (86) = happyShift action_41
+action_222 (89) = happyShift action_42
+action_222 (94) = happyShift action_43
+action_222 (96) = happyShift action_44
+action_222 (99) = happyShift action_45
+action_222 (100) = happyShift action_46
+action_222 (109) = happyShift action_47
+action_222 (111) = happyShift action_48
+action_222 (117) = happyShift action_49
+action_222 (39) = happyGoto action_35
+action_222 (70) = happyGoto action_36
+action_222 (71) = happyGoto action_37
+action_222 (72) = happyGoto action_38
+action_222 (73) = happyGoto action_234
+action_222 _ = happyFail (happyExpListPerState 222)
+
+action_223 (49) = happyGoto action_55
+action_223 (67) = happyGoto action_56
+action_223 (68) = happyGoto action_233
+action_223 _ = happyReduce_71
+
+action_224 (115) = happyShift action_68
+action_224 (37) = happyGoto action_232
+action_224 _ = happyFail (happyExpListPerState 224)
+
+action_225 (115) = happyShift action_68
+action_225 (37) = happyGoto action_231
+action_225 _ = happyFail (happyExpListPerState 225)
+
+action_226 _ = happyReduce_57
+
+action_227 _ = happyReduce_51
+
+action_228 _ = happyReduce_47
+
+action_229 _ = happyReduce_44
+
+action_230 _ = happyReduce_40
+
+action_231 _ = happyReduce_61
+
+action_232 _ = happyReduce_60
+
+action_233 _ = happyReduce_64
+
+action_234 _ = happyReduce_58
+
+action_235 (82) = happyShift action_246
+action_235 _ = happyFail (happyExpListPerState 235)
+
+action_236 (104) = happyShift action_82
+action_236 (106) = happyShift action_83
+action_236 (60) = happyGoto action_245
+action_236 _ = happyReduce_97
+
+action_237 (74) = happyShift action_66
+action_237 (86) = happyShift action_67
+action_237 (114) = happyShift action_34
+action_237 (115) = happyShift action_68
+action_237 (116) = happyShift action_69
+action_237 (117) = happyShift action_49
+action_237 (118) = happyShift action_70
+action_237 (36) = happyGoto action_71
+action_237 (37) = happyGoto action_60
+action_237 (38) = happyGoto action_61
+action_237 (39) = happyGoto action_62
+action_237 (40) = happyGoto action_63
+action_237 (62) = happyGoto action_244
+action_237 (63) = happyGoto action_73
+action_237 (64) = happyGoto action_74
+action_237 _ = happyFail (happyExpListPerState 237)
+
+action_238 (49) = happyGoto action_243
+action_238 _ = happyReduce_71
+
+action_239 (75) = happyShift action_242
+action_239 _ = happyFail (happyExpListPerState 239)
+
+action_240 (78) = happyShift action_241
+action_240 _ = happyFail (happyExpListPerState 240)
+
+action_241 (86) = happyShift action_249
+action_241 _ = happyFail (happyExpListPerState 241)
+
+action_242 _ = happyReduce_83
+
+action_243 (86) = happyShift action_106
+action_243 (114) = happyShift action_34
+action_243 (115) = happyShift action_68
+action_243 (36) = happyGoto action_104
+action_243 (37) = happyGoto action_108
+action_243 (48) = happyGoto action_164
+action_243 (50) = happyGoto action_110
+action_243 _ = happyReduce_53
+
+action_244 _ = happyReduce_65
+
+action_245 (101) = happyShift action_54
+action_245 (69) = happyGoto action_248
+action_245 _ = happyReduce_122
+
+action_246 (49) = happyGoto action_247
+action_246 _ = happyReduce_71
+
+action_247 (86) = happyShift action_106
+action_247 (114) = happyShift action_34
+action_247 (115) = happyShift action_68
+action_247 (36) = happyGoto action_104
+action_247 (37) = happyGoto action_108
+action_247 (48) = happyGoto action_164
+action_247 (50) = happyGoto action_110
+action_247 _ = happyReduce_56
+
+action_248 _ = happyReduce_62
+
+action_249 (116) = happyShift action_69
+action_249 (38) = happyGoto action_93
+action_249 (55) = happyGoto action_250
+action_249 _ = happyReduce_86
+
+action_250 (87) = happyShift action_251
+action_250 _ = happyFail (happyExpListPerState 250)
+
+action_251 (75) = happyShift action_252
+action_251 _ = happyFail (happyExpListPerState 251)
+
+action_252 _ = happyReduce_84
+
+happyReduce_33 = happySpecReduce_1  36 happyReduction_33
+happyReduction_33 (HappyTerminal (PT _ (TV happy_var_1)))
+	 =  HappyAbsSyn36
+		 (Ident happy_var_1
+	)
+happyReduction_33 _  = notHappyAtAll 
+
+happyReduce_34 = happySpecReduce_1  37 happyReduction_34
+happyReduction_34 (HappyTerminal (PT _ (TL happy_var_1)))
+	 =  HappyAbsSyn37
+		 (happy_var_1
+	)
+happyReduction_34 _  = notHappyAtAll 
+
+happyReduce_35 = happySpecReduce_1  38 happyReduction_35
+happyReduction_35 (HappyTerminal (PT _ (TI happy_var_1)))
+	 =  HappyAbsSyn38
+		 ((read ( happy_var_1)) :: Integer
+	)
+happyReduction_35 _  = notHappyAtAll 
+
+happyReduce_36 = happySpecReduce_1  39 happyReduction_36
+happyReduction_36 (HappyTerminal (PT _ (TC happy_var_1)))
+	 =  HappyAbsSyn39
+		 ((read ( happy_var_1)) :: Char
+	)
+happyReduction_36 _  = notHappyAtAll 
+
+happyReduce_37 = happySpecReduce_1  40 happyReduction_37
+happyReduction_37 (HappyTerminal (PT _ (TD happy_var_1)))
+	 =  HappyAbsSyn40
+		 ((read ( happy_var_1)) :: Double
+	)
+happyReduction_37 _  = notHappyAtAll 
+
+happyReduce_38 = happySpecReduce_1  41 happyReduction_38
+happyReduction_38 (HappyAbsSyn43  happy_var_1)
+	 =  HappyAbsSyn41
+		 (AbsBNF.LGr happy_var_1
+	)
+happyReduction_38 _  = notHappyAtAll 
+
+happyReduce_39 = happySpecReduce_1  42 happyReduction_39
+happyReduction_39 (HappyAbsSyn47  happy_var_1)
+	 =  HappyAbsSyn42
+		 (AbsBNF.DefAll happy_var_1
+	)
+happyReduction_39 _  = notHappyAtAll 
+
+happyReduce_40 = happySpecReduce_3  42 happyReduction_40
+happyReduction_40 (HappyAbsSyn47  happy_var_3)
+	_
+	(HappyAbsSyn44  happy_var_1)
+	 =  HappyAbsSyn42
+		 (AbsBNF.DefSome happy_var_1 happy_var_3
+	)
+happyReduction_40 _ _ _  = notHappyAtAll 
+
+happyReduce_41 = happySpecReduce_2  42 happyReduction_41
+happyReduction_41 (HappyAbsSyn44  happy_var_2)
+	_
+	 =  HappyAbsSyn42
+		 (AbsBNF.LDefView happy_var_2
+	)
+happyReduction_41 _ _  = notHappyAtAll 
+
+happyReduce_42 = happySpecReduce_0  43 happyReduction_42
+happyReduction_42  =  HappyAbsSyn43
+		 ([]
+	)
+
+happyReduce_43 = happySpecReduce_1  43 happyReduction_43
+happyReduction_43 (HappyAbsSyn42  happy_var_1)
+	 =  HappyAbsSyn43
+		 ((:[]) happy_var_1
+	)
+happyReduction_43 _  = notHappyAtAll 
+
+happyReduce_44 = happySpecReduce_3  43 happyReduction_44
+happyReduction_44 (HappyAbsSyn43  happy_var_3)
+	_
+	(HappyAbsSyn42  happy_var_1)
+	 =  HappyAbsSyn43
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_44 _ _ _  = notHappyAtAll 
+
+happyReduce_45 = happySpecReduce_2  43 happyReduction_45
+happyReduction_45 (HappyAbsSyn43  happy_var_2)
+	_
+	 =  HappyAbsSyn43
+		 (happy_var_2
+	)
+happyReduction_45 _ _  = notHappyAtAll 
+
+happyReduce_46 = happySpecReduce_1  44 happyReduction_46
+happyReduction_46 (HappyAbsSyn36  happy_var_1)
+	 =  HappyAbsSyn44
+		 ((:[]) happy_var_1
+	)
+happyReduction_46 _  = notHappyAtAll 
+
+happyReduce_47 = happySpecReduce_3  44 happyReduction_47
+happyReduction_47 (HappyAbsSyn44  happy_var_3)
+	_
+	(HappyAbsSyn36  happy_var_1)
+	 =  HappyAbsSyn44
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_47 _ _ _  = notHappyAtAll 
+
+happyReduce_48 = happySpecReduce_1  45 happyReduction_48
+happyReduction_48 (HappyAbsSyn46  happy_var_1)
+	 =  HappyAbsSyn45
+		 (AbsBNF.Grammar happy_var_1
+	)
+happyReduction_48 _  = notHappyAtAll 
+
+happyReduce_49 = happySpecReduce_0  46 happyReduction_49
+happyReduction_49  =  HappyAbsSyn46
+		 ([]
+	)
+
+happyReduce_50 = happySpecReduce_1  46 happyReduction_50
+happyReduction_50 (HappyAbsSyn47  happy_var_1)
+	 =  HappyAbsSyn46
+		 ((:[]) happy_var_1
+	)
+happyReduction_50 _  = notHappyAtAll 
+
+happyReduce_51 = happySpecReduce_3  46 happyReduction_51
+happyReduction_51 (HappyAbsSyn46  happy_var_3)
+	_
+	(HappyAbsSyn47  happy_var_1)
+	 =  HappyAbsSyn46
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_51 _ _ _  = notHappyAtAll 
+
+happyReduce_52 = happySpecReduce_2  46 happyReduction_52
+happyReduction_52 (HappyAbsSyn46  happy_var_2)
+	_
+	 =  HappyAbsSyn46
+		 (happy_var_2
+	)
+happyReduction_52 _ _  = notHappyAtAll 
+
+happyReduce_53 = happyReduce 5 47 happyReduction_53
+happyReduction_53 ((HappyAbsSyn49  happy_var_5) `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn50  happy_var_3) `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn51  happy_var_1) `HappyStk`
+	happyRest)
+	 = HappyAbsSyn47
+		 (AbsBNF.Rule happy_var_1 happy_var_3 (reverse happy_var_5)
+	) `HappyStk` happyRest
+
+happyReduce_54 = happySpecReduce_2  47 happyReduction_54
+happyReduction_54 (HappyAbsSyn37  happy_var_2)
+	_
+	 =  HappyAbsSyn47
+		 (AbsBNF.Comment happy_var_2
+	)
+happyReduction_54 _ _  = notHappyAtAll 
+
+happyReduce_55 = happySpecReduce_3  47 happyReduction_55
+happyReduction_55 (HappyAbsSyn37  happy_var_3)
+	(HappyAbsSyn37  happy_var_2)
+	_
+	 =  HappyAbsSyn47
+		 (AbsBNF.Comments happy_var_2 happy_var_3
+	)
+happyReduction_55 _ _ _  = notHappyAtAll 
+
+happyReduce_56 = happyReduce 6 47 happyReduction_56
+happyReduction_56 ((HappyAbsSyn49  happy_var_6) `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn50  happy_var_4) `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn51  happy_var_2) `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn47
+		 (AbsBNF.Internal happy_var_2 happy_var_4 (reverse happy_var_6)
+	) `HappyStk` happyRest
+
+happyReduce_57 = happySpecReduce_3  47 happyReduction_57
+happyReduction_57 (HappyAbsSyn70  happy_var_3)
+	(HappyAbsSyn36  happy_var_2)
+	_
+	 =  HappyAbsSyn47
+		 (AbsBNF.Token happy_var_2 happy_var_3
+	)
+happyReduction_57 _ _ _  = notHappyAtAll 
+
+happyReduce_58 = happyReduce 4 47 happyReduction_58
+happyReduction_58 ((HappyAbsSyn70  happy_var_4) `HappyStk`
+	(HappyAbsSyn36  happy_var_3) `HappyStk`
+	_ `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn47
+		 (AbsBNF.PosToken happy_var_3 happy_var_4
+	) `HappyStk` happyRest
+
+happyReduce_59 = happySpecReduce_2  47 happyReduction_59
+happyReduction_59 (HappyAbsSyn44  happy_var_2)
+	_
+	 =  HappyAbsSyn47
+		 (AbsBNF.Entryp happy_var_2
+	)
+happyReduction_59 _ _  = notHappyAtAll 
+
+happyReduce_60 = happyReduce 4 47 happyReduction_60
+happyReduction_60 ((HappyAbsSyn37  happy_var_4) `HappyStk`
+	(HappyAbsSyn50  happy_var_3) `HappyStk`
+	(HappyAbsSyn69  happy_var_2) `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn47
+		 (AbsBNF.Separator happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest
+
+happyReduce_61 = happyReduce 4 47 happyReduction_61
+happyReduction_61 ((HappyAbsSyn37  happy_var_4) `HappyStk`
+	(HappyAbsSyn50  happy_var_3) `HappyStk`
+	(HappyAbsSyn69  happy_var_2) `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn47
+		 (AbsBNF.Terminator happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest
+
+happyReduce_62 = happyReduce 6 47 happyReduction_62
+happyReduction_62 ((HappyAbsSyn69  happy_var_6) `HappyStk`
+	(HappyAbsSyn60  happy_var_5) `HappyStk`
+	(HappyAbsSyn37  happy_var_4) `HappyStk`
+	(HappyAbsSyn37  happy_var_3) `HappyStk`
+	(HappyAbsSyn50  happy_var_2) `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn47
+		 (AbsBNF.Delimiters happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6
+	) `HappyStk` happyRest
+
+happyReduce_63 = happySpecReduce_3  47 happyReduction_63
+happyReduction_63 (HappyAbsSyn38  happy_var_3)
+	(HappyAbsSyn36  happy_var_2)
+	_
+	 =  HappyAbsSyn47
+		 (AbsBNF.Coercions happy_var_2 happy_var_3
+	)
+happyReduction_63 _ _ _  = notHappyAtAll 
+
+happyReduce_64 = happyReduce 4 47 happyReduction_64
+happyReduction_64 ((HappyAbsSyn68  happy_var_4) `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn36  happy_var_2) `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn47
+		 (AbsBNF.Rules happy_var_2 happy_var_4
+	) `HappyStk` happyRest
+
+happyReduce_65 = happyReduce 5 47 happyReduction_65
+happyReduction_65 ((HappyAbsSyn62  happy_var_5) `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn59  happy_var_3) `HappyStk`
+	(HappyAbsSyn36  happy_var_2) `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn47
+		 (AbsBNF.Function happy_var_2 (reverse happy_var_3) happy_var_5
+	) `HappyStk` happyRest
+
+happyReduce_66 = happySpecReduce_2  47 happyReduction_66
+happyReduction_66 (HappyAbsSyn61  happy_var_2)
+	_
+	 =  HappyAbsSyn47
+		 (AbsBNF.Layout happy_var_2
+	)
+happyReduction_66 _ _  = notHappyAtAll 
+
+happyReduce_67 = happySpecReduce_3  47 happyReduction_67
+happyReduction_67 (HappyAbsSyn61  happy_var_3)
+	_
+	_
+	 =  HappyAbsSyn47
+		 (AbsBNF.LayoutStop happy_var_3
+	)
+happyReduction_67 _ _ _  = notHappyAtAll 
+
+happyReduce_68 = happySpecReduce_2  47 happyReduction_68
+happyReduction_68 _
+	_
+	 =  HappyAbsSyn47
+		 (AbsBNF.LayoutTop
+	)
+
+happyReduce_69 = happySpecReduce_1  48 happyReduction_69
+happyReduction_69 (HappyAbsSyn37  happy_var_1)
+	 =  HappyAbsSyn48
+		 (AbsBNF.Terminal happy_var_1
+	)
+happyReduction_69 _  = notHappyAtAll 
+
+happyReduce_70 = happySpecReduce_1  48 happyReduction_70
+happyReduction_70 (HappyAbsSyn50  happy_var_1)
+	 =  HappyAbsSyn48
+		 (AbsBNF.NTerminal happy_var_1
+	)
+happyReduction_70 _  = notHappyAtAll 
+
+happyReduce_71 = happySpecReduce_0  49 happyReduction_71
+happyReduction_71  =  HappyAbsSyn49
+		 ([]
+	)
+
+happyReduce_72 = happySpecReduce_2  49 happyReduction_72
+happyReduction_72 (HappyAbsSyn48  happy_var_2)
+	(HappyAbsSyn49  happy_var_1)
+	 =  HappyAbsSyn49
+		 (flip (:) happy_var_1 happy_var_2
+	)
+happyReduction_72 _ _  = notHappyAtAll 
+
+happyReduce_73 = happySpecReduce_3  50 happyReduction_73
+happyReduction_73 _
+	(HappyAbsSyn50  happy_var_2)
+	_
+	 =  HappyAbsSyn50
+		 (AbsBNF.ListCat happy_var_2
+	)
+happyReduction_73 _ _ _  = notHappyAtAll 
+
+happyReduce_74 = happySpecReduce_1  50 happyReduction_74
+happyReduction_74 (HappyAbsSyn36  happy_var_1)
+	 =  HappyAbsSyn50
+		 (AbsBNF.IdCat happy_var_1
+	)
+happyReduction_74 _  = notHappyAtAll 
+
+happyReduce_75 = happySpecReduce_1  51 happyReduction_75
+happyReduction_75 (HappyAbsSyn52  happy_var_1)
+	 =  HappyAbsSyn51
+		 (AbsBNF.LabNoP happy_var_1
+	)
+happyReduction_75 _  = notHappyAtAll 
+
+happyReduce_76 = happySpecReduce_2  51 happyReduction_76
+happyReduction_76 (HappyAbsSyn57  happy_var_2)
+	(HappyAbsSyn52  happy_var_1)
+	 =  HappyAbsSyn51
+		 (AbsBNF.LabP happy_var_1 happy_var_2
+	)
+happyReduction_76 _ _  = notHappyAtAll 
+
+happyReduce_77 = happySpecReduce_3  51 happyReduction_77
+happyReduction_77 (HappyAbsSyn57  happy_var_3)
+	(HappyAbsSyn52  happy_var_2)
+	(HappyAbsSyn52  happy_var_1)
+	 =  HappyAbsSyn51
+		 (AbsBNF.LabPF happy_var_1 happy_var_2 happy_var_3
+	)
+happyReduction_77 _ _ _  = notHappyAtAll 
+
+happyReduce_78 = happySpecReduce_2  51 happyReduction_78
+happyReduction_78 (HappyAbsSyn52  happy_var_2)
+	(HappyAbsSyn52  happy_var_1)
+	 =  HappyAbsSyn51
+		 (AbsBNF.LabF happy_var_1 happy_var_2
+	)
+happyReduction_78 _ _  = notHappyAtAll 
+
+happyReduce_79 = happySpecReduce_1  52 happyReduction_79
+happyReduction_79 (HappyAbsSyn36  happy_var_1)
+	 =  HappyAbsSyn52
+		 (AbsBNF.Id happy_var_1
+	)
+happyReduction_79 _  = notHappyAtAll 
+
+happyReduce_80 = happySpecReduce_1  52 happyReduction_80
+happyReduction_80 _
+	 =  HappyAbsSyn52
+		 (AbsBNF.Wild
+	)
+
+happyReduce_81 = happySpecReduce_2  52 happyReduction_81
+happyReduction_81 _
+	_
+	 =  HappyAbsSyn52
+		 (AbsBNF.ListE
+	)
+
+happyReduce_82 = happySpecReduce_3  52 happyReduction_82
+happyReduction_82 _
+	_
+	_
+	 =  HappyAbsSyn52
+		 (AbsBNF.ListCons
+	)
+
+happyReduce_83 = happyReduce 5 52 happyReduction_83
+happyReduction_83 (_ `HappyStk`
+	_ `HappyStk`
+	_ `HappyStk`
+	_ `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn52
+		 (AbsBNF.ListOne
+	) `HappyStk` happyRest
+
+happyReduce_84 = happyReduce 9 53 happyReduction_84
+happyReduction_84 (_ `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn55  happy_var_7) `HappyStk`
+	_ `HappyStk`
+	_ `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn56  happy_var_3) `HappyStk`
+	_ `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn53
+		 (AbsBNF.ProfIt happy_var_3 happy_var_7
+	) `HappyStk` happyRest
+
+happyReduce_85 = happySpecReduce_3  54 happyReduction_85
+happyReduction_85 _
+	(HappyAbsSyn55  happy_var_2)
+	_
+	 =  HappyAbsSyn54
+		 (AbsBNF.Ints happy_var_2
+	)
+happyReduction_85 _ _ _  = notHappyAtAll 
+
+happyReduce_86 = happySpecReduce_0  55 happyReduction_86
+happyReduction_86  =  HappyAbsSyn55
+		 ([]
+	)
+
+happyReduce_87 = happySpecReduce_1  55 happyReduction_87
+happyReduction_87 (HappyAbsSyn38  happy_var_1)
+	 =  HappyAbsSyn55
+		 ((:[]) happy_var_1
+	)
+happyReduction_87 _  = notHappyAtAll 
+
+happyReduce_88 = happySpecReduce_3  55 happyReduction_88
+happyReduction_88 (HappyAbsSyn55  happy_var_3)
+	_
+	(HappyAbsSyn38  happy_var_1)
+	 =  HappyAbsSyn55
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_88 _ _ _  = notHappyAtAll 
+
+happyReduce_89 = happySpecReduce_0  56 happyReduction_89
+happyReduction_89  =  HappyAbsSyn56
+		 ([]
+	)
+
+happyReduce_90 = happySpecReduce_1  56 happyReduction_90
+happyReduction_90 (HappyAbsSyn54  happy_var_1)
+	 =  HappyAbsSyn56
+		 ((:[]) happy_var_1
+	)
+happyReduction_90 _  = notHappyAtAll 
+
+happyReduce_91 = happySpecReduce_3  56 happyReduction_91
+happyReduction_91 (HappyAbsSyn56  happy_var_3)
+	_
+	(HappyAbsSyn54  happy_var_1)
+	 =  HappyAbsSyn56
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_91 _ _ _  = notHappyAtAll 
+
+happyReduce_92 = happySpecReduce_1  57 happyReduction_92
+happyReduction_92 (HappyAbsSyn53  happy_var_1)
+	 =  HappyAbsSyn57
+		 ((:[]) happy_var_1
+	)
+happyReduction_92 _  = notHappyAtAll 
+
+happyReduce_93 = happySpecReduce_2  57 happyReduction_93
+happyReduction_93 (HappyAbsSyn57  happy_var_2)
+	(HappyAbsSyn53  happy_var_1)
+	 =  HappyAbsSyn57
+		 ((:) happy_var_1 happy_var_2
+	)
+happyReduction_93 _ _  = notHappyAtAll 
+
+happyReduce_94 = happySpecReduce_1  58 happyReduction_94
+happyReduction_94 (HappyAbsSyn36  happy_var_1)
+	 =  HappyAbsSyn58
+		 (AbsBNF.Arg happy_var_1
+	)
+happyReduction_94 _  = notHappyAtAll 
+
+happyReduce_95 = happySpecReduce_0  59 happyReduction_95
+happyReduction_95  =  HappyAbsSyn59
+		 ([]
+	)
+
+happyReduce_96 = happySpecReduce_2  59 happyReduction_96
+happyReduction_96 (HappyAbsSyn58  happy_var_2)
+	(HappyAbsSyn59  happy_var_1)
+	 =  HappyAbsSyn59
+		 (flip (:) happy_var_1 happy_var_2
+	)
+happyReduction_96 _ _  = notHappyAtAll 
+
+happyReduce_97 = happySpecReduce_0  60 happyReduction_97
+happyReduction_97  =  HappyAbsSyn60
+		 (AbsBNF.SepNone
+	)
+
+happyReduce_98 = happySpecReduce_2  60 happyReduction_98
+happyReduction_98 (HappyAbsSyn37  happy_var_2)
+	_
+	 =  HappyAbsSyn60
+		 (AbsBNF.SepTerm happy_var_2
+	)
+happyReduction_98 _ _  = notHappyAtAll 
+
+happyReduce_99 = happySpecReduce_2  60 happyReduction_99
+happyReduction_99 (HappyAbsSyn37  happy_var_2)
+	_
+	 =  HappyAbsSyn60
+		 (AbsBNF.SepSepar happy_var_2
+	)
+happyReduction_99 _ _  = notHappyAtAll 
+
+happyReduce_100 = happySpecReduce_1  61 happyReduction_100
+happyReduction_100 (HappyAbsSyn37  happy_var_1)
+	 =  HappyAbsSyn61
+		 ((:[]) happy_var_1
+	)
+happyReduction_100 _  = notHappyAtAll 
+
+happyReduce_101 = happySpecReduce_3  61 happyReduction_101
+happyReduction_101 (HappyAbsSyn61  happy_var_3)
+	_
+	(HappyAbsSyn37  happy_var_1)
+	 =  HappyAbsSyn61
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_101 _ _ _  = notHappyAtAll 
+
+happyReduce_102 = happySpecReduce_3  62 happyReduction_102
+happyReduction_102 (HappyAbsSyn62  happy_var_3)
+	_
+	(HappyAbsSyn62  happy_var_1)
+	 =  HappyAbsSyn62
+		 (AbsBNF.Cons happy_var_1 happy_var_3
+	)
+happyReduction_102 _ _ _  = notHappyAtAll 
+
+happyReduce_103 = happySpecReduce_1  62 happyReduction_103
+happyReduction_103 (HappyAbsSyn62  happy_var_1)
+	 =  HappyAbsSyn62
+		 (happy_var_1
+	)
+happyReduction_103 _  = notHappyAtAll 
+
+happyReduce_104 = happySpecReduce_2  63 happyReduction_104
+happyReduction_104 (HappyAbsSyn65  happy_var_2)
+	(HappyAbsSyn36  happy_var_1)
+	 =  HappyAbsSyn62
+		 (AbsBNF.App happy_var_1 happy_var_2
+	)
+happyReduction_104 _ _  = notHappyAtAll 
+
+happyReduce_105 = happySpecReduce_1  63 happyReduction_105
+happyReduction_105 (HappyAbsSyn62  happy_var_1)
+	 =  HappyAbsSyn62
+		 (happy_var_1
+	)
+happyReduction_105 _  = notHappyAtAll 
+
+happyReduce_106 = happySpecReduce_1  64 happyReduction_106
+happyReduction_106 (HappyAbsSyn36  happy_var_1)
+	 =  HappyAbsSyn62
+		 (AbsBNF.Var happy_var_1
+	)
+happyReduction_106 _  = notHappyAtAll 
+
+happyReduce_107 = happySpecReduce_1  64 happyReduction_107
+happyReduction_107 (HappyAbsSyn38  happy_var_1)
+	 =  HappyAbsSyn62
+		 (AbsBNF.LitInt happy_var_1
+	)
+happyReduction_107 _  = notHappyAtAll 
+
+happyReduce_108 = happySpecReduce_1  64 happyReduction_108
+happyReduction_108 (HappyAbsSyn39  happy_var_1)
+	 =  HappyAbsSyn62
+		 (AbsBNF.LitChar happy_var_1
+	)
+happyReduction_108 _  = notHappyAtAll 
+
+happyReduce_109 = happySpecReduce_1  64 happyReduction_109
+happyReduction_109 (HappyAbsSyn37  happy_var_1)
+	 =  HappyAbsSyn62
+		 (AbsBNF.LitString happy_var_1
+	)
+happyReduction_109 _  = notHappyAtAll 
+
+happyReduce_110 = happySpecReduce_1  64 happyReduction_110
+happyReduction_110 (HappyAbsSyn40  happy_var_1)
+	 =  HappyAbsSyn62
+		 (AbsBNF.LitDouble happy_var_1
+	)
+happyReduction_110 _  = notHappyAtAll 
+
+happyReduce_111 = happySpecReduce_3  64 happyReduction_111
+happyReduction_111 _
+	(HappyAbsSyn65  happy_var_2)
+	_
+	 =  HappyAbsSyn62
+		 (AbsBNF.List happy_var_2
+	)
+happyReduction_111 _ _ _  = notHappyAtAll 
+
+happyReduce_112 = happySpecReduce_3  64 happyReduction_112
+happyReduction_112 _
+	(HappyAbsSyn62  happy_var_2)
+	_
+	 =  HappyAbsSyn62
+		 (happy_var_2
+	)
+happyReduction_112 _ _ _  = notHappyAtAll 
+
+happyReduce_113 = happySpecReduce_0  65 happyReduction_113
+happyReduction_113  =  HappyAbsSyn65
+		 ([]
+	)
+
+happyReduce_114 = happySpecReduce_1  65 happyReduction_114
+happyReduction_114 (HappyAbsSyn62  happy_var_1)
+	 =  HappyAbsSyn65
+		 ((:[]) happy_var_1
+	)
+happyReduction_114 _  = notHappyAtAll 
+
+happyReduce_115 = happySpecReduce_3  65 happyReduction_115
+happyReduction_115 (HappyAbsSyn65  happy_var_3)
+	_
+	(HappyAbsSyn62  happy_var_1)
+	 =  HappyAbsSyn65
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_115 _ _ _  = notHappyAtAll 
+
+happyReduce_116 = happySpecReduce_1  66 happyReduction_116
+happyReduction_116 (HappyAbsSyn62  happy_var_1)
+	 =  HappyAbsSyn65
+		 ((:[]) happy_var_1
+	)
+happyReduction_116 _  = notHappyAtAll 
+
+happyReduce_117 = happySpecReduce_2  66 happyReduction_117
+happyReduction_117 (HappyAbsSyn65  happy_var_2)
+	(HappyAbsSyn62  happy_var_1)
+	 =  HappyAbsSyn65
+		 ((:) happy_var_1 happy_var_2
+	)
+happyReduction_117 _ _  = notHappyAtAll 
+
+happyReduce_118 = happySpecReduce_1  67 happyReduction_118
+happyReduction_118 (HappyAbsSyn49  happy_var_1)
+	 =  HappyAbsSyn67
+		 (AbsBNF.RHS (reverse happy_var_1)
+	)
+happyReduction_118 _  = notHappyAtAll 
+
+happyReduce_119 = happySpecReduce_1  68 happyReduction_119
+happyReduction_119 (HappyAbsSyn67  happy_var_1)
+	 =  HappyAbsSyn68
+		 ((:[]) happy_var_1
+	)
+happyReduction_119 _  = notHappyAtAll 
+
+happyReduce_120 = happySpecReduce_3  68 happyReduction_120
+happyReduction_120 (HappyAbsSyn68  happy_var_3)
+	_
+	(HappyAbsSyn67  happy_var_1)
+	 =  HappyAbsSyn68
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_120 _ _ _  = notHappyAtAll 
+
+happyReduce_121 = happySpecReduce_1  69 happyReduction_121
+happyReduction_121 _
+	 =  HappyAbsSyn69
+		 (AbsBNF.MNonempty
+	)
+
+happyReduce_122 = happySpecReduce_0  69 happyReduction_122
+happyReduction_122  =  HappyAbsSyn69
+		 (AbsBNF.MEmpty
+	)
+
+happyReduce_123 = happySpecReduce_2  70 happyReduction_123
+happyReduction_123 (HappyAbsSyn70  happy_var_2)
+	(HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (AbsBNF.RSeq happy_var_1 happy_var_2
+	)
+happyReduction_123 _ _  = notHappyAtAll 
+
+happyReduce_124 = happySpecReduce_1  70 happyReduction_124
+happyReduction_124 (HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (happy_var_1
+	)
+happyReduction_124 _  = notHappyAtAll 
+
+happyReduce_125 = happySpecReduce_3  71 happyReduction_125
+happyReduction_125 (HappyAbsSyn70  happy_var_3)
+	_
+	(HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (AbsBNF.RAlt happy_var_1 happy_var_3
+	)
+happyReduction_125 _ _ _  = notHappyAtAll 
+
+happyReduce_126 = happySpecReduce_3  71 happyReduction_126
+happyReduction_126 (HappyAbsSyn70  happy_var_3)
+	_
+	(HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (AbsBNF.RMinus happy_var_1 happy_var_3
+	)
+happyReduction_126 _ _ _  = notHappyAtAll 
+
+happyReduce_127 = happySpecReduce_1  71 happyReduction_127
+happyReduction_127 (HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (happy_var_1
+	)
+happyReduction_127 _  = notHappyAtAll 
+
+happyReduce_128 = happySpecReduce_2  72 happyReduction_128
+happyReduction_128 _
+	(HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (AbsBNF.RStar happy_var_1
+	)
+happyReduction_128 _ _  = notHappyAtAll 
+
+happyReduce_129 = happySpecReduce_2  72 happyReduction_129
+happyReduction_129 _
+	(HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (AbsBNF.RPlus happy_var_1
+	)
+happyReduction_129 _ _  = notHappyAtAll 
+
+happyReduce_130 = happySpecReduce_2  72 happyReduction_130
+happyReduction_130 _
+	(HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (AbsBNF.ROpt happy_var_1
+	)
+happyReduction_130 _ _  = notHappyAtAll 
+
+happyReduce_131 = happySpecReduce_1  72 happyReduction_131
+happyReduction_131 _
+	 =  HappyAbsSyn70
+		 (AbsBNF.REps
+	)
+
+happyReduce_132 = happySpecReduce_1  72 happyReduction_132
+happyReduction_132 (HappyAbsSyn39  happy_var_1)
+	 =  HappyAbsSyn70
+		 (AbsBNF.RChar happy_var_1
+	)
+happyReduction_132 _  = notHappyAtAll 
+
+happyReduce_133 = happySpecReduce_3  72 happyReduction_133
+happyReduction_133 _
+	(HappyAbsSyn37  happy_var_2)
+	_
+	 =  HappyAbsSyn70
+		 (AbsBNF.RAlts happy_var_2
+	)
+happyReduction_133 _ _ _  = notHappyAtAll 
+
+happyReduce_134 = happySpecReduce_3  72 happyReduction_134
+happyReduction_134 _
+	(HappyAbsSyn37  happy_var_2)
+	_
+	 =  HappyAbsSyn70
+		 (AbsBNF.RSeqs happy_var_2
+	)
+happyReduction_134 _ _ _  = notHappyAtAll 
+
+happyReduce_135 = happySpecReduce_1  72 happyReduction_135
+happyReduction_135 _
+	 =  HappyAbsSyn70
+		 (AbsBNF.RDigit
+	)
+
+happyReduce_136 = happySpecReduce_1  72 happyReduction_136
+happyReduction_136 _
+	 =  HappyAbsSyn70
+		 (AbsBNF.RLetter
+	)
+
+happyReduce_137 = happySpecReduce_1  72 happyReduction_137
+happyReduction_137 _
+	 =  HappyAbsSyn70
+		 (AbsBNF.RUpper
+	)
+
+happyReduce_138 = happySpecReduce_1  72 happyReduction_138
+happyReduction_138 _
+	 =  HappyAbsSyn70
+		 (AbsBNF.RLower
+	)
+
+happyReduce_139 = happySpecReduce_1  72 happyReduction_139
+happyReduction_139 _
+	 =  HappyAbsSyn70
+		 (AbsBNF.RAny
+	)
+
+happyReduce_140 = happySpecReduce_3  72 happyReduction_140
+happyReduction_140 _
+	(HappyAbsSyn70  happy_var_2)
+	_
+	 =  HappyAbsSyn70
+		 (happy_var_2
+	)
+happyReduction_140 _ _ _  = notHappyAtAll 
+
+happyReduce_141 = happySpecReduce_1  73 happyReduction_141
+happyReduction_141 (HappyAbsSyn70  happy_var_1)
+	 =  HappyAbsSyn70
+		 (happy_var_1
+	)
+happyReduction_141 _  = notHappyAtAll 
+
+happyNewToken action sts stk [] =
+	action 119 119 notHappyAtAll (HappyState action) sts stk []
+
+happyNewToken action sts stk (tk:tks) =
+	let cont i = action i i tk (HappyState action) sts stk tks in
+	case tk of {
+	PT _ (TS _ 1) -> cont 74;
+	PT _ (TS _ 2) -> cont 75;
+	PT _ (TS _ 3) -> cont 76;
+	PT _ (TS _ 4) -> cont 77;
+	PT _ (TS _ 5) -> cont 78;
+	PT _ (TS _ 6) -> cont 79;
+	PT _ (TS _ 7) -> cont 80;
+	PT _ (TS _ 8) -> cont 81;
+	PT _ (TS _ 9) -> cont 82;
+	PT _ (TS _ 10) -> cont 83;
+	PT _ (TS _ 11) -> cont 84;
+	PT _ (TS _ 12) -> cont 85;
+	PT _ (TS _ 13) -> cont 86;
+	PT _ (TS _ 14) -> cont 87;
+	PT _ (TS _ 15) -> cont 88;
+	PT _ (TS _ 16) -> cont 89;
+	PT _ (TS _ 17) -> cont 90;
+	PT _ (TS _ 18) -> cont 91;
+	PT _ (TS _ 19) -> cont 92;
+	PT _ (TS _ 20) -> cont 93;
+	PT _ (TS _ 21) -> cont 94;
+	PT _ (TS _ 22) -> cont 95;
+	PT _ (TS _ 23) -> cont 96;
+	PT _ (TS _ 24) -> cont 97;
+	PT _ (TS _ 25) -> cont 98;
+	PT _ (TS _ 26) -> cont 99;
+	PT _ (TS _ 27) -> cont 100;
+	PT _ (TS _ 28) -> cont 101;
+	PT _ (TS _ 29) -> cont 102;
+	PT _ (TS _ 30) -> cont 103;
+	PT _ (TS _ 31) -> cont 104;
+	PT _ (TS _ 32) -> cont 105;
+	PT _ (TS _ 33) -> cont 106;
+	PT _ (TS _ 34) -> cont 107;
+	PT _ (TS _ 35) -> cont 108;
+	PT _ (TS _ 36) -> cont 109;
+	PT _ (TS _ 37) -> cont 110;
+	PT _ (TS _ 38) -> cont 111;
+	PT _ (TS _ 39) -> cont 112;
+	PT _ (TS _ 40) -> cont 113;
+	PT _ (TV happy_dollar_dollar) -> cont 114;
+	PT _ (TL happy_dollar_dollar) -> cont 115;
+	PT _ (TI happy_dollar_dollar) -> cont 116;
+	PT _ (TC happy_dollar_dollar) -> cont 117;
+	PT _ (TD happy_dollar_dollar) -> cont 118;
+	_ -> happyError' ((tk:tks), [])
+	}
+
+happyError_ explist 119 tk tks = happyError' (tks, explist)
+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)
+
+happyThen :: () => Err a -> (a -> Err b) -> Err b
+happyThen = (thenM)
+happyReturn :: () => a -> Err a
+happyReturn = (returnM)
+happyThen1 m k tks = (thenM) m (\a -> k a tks)
+happyReturn1 :: () => a -> b -> Err a
+happyReturn1 = \a tks -> (returnM) a
+happyError' :: () => ([(Token)], [String]) -> Err a
+happyError' = (\(tokens, _) -> happyError tokens)
+pLGrammar tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_0 tks) (\x -> case x of {HappyAbsSyn41 z -> happyReturn z; _other -> notHappyAtAll })
+
+pLDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_1 tks) (\x -> case x of {HappyAbsSyn42 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListLDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_2 tks) (\x -> case x of {HappyAbsSyn43 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListIdent tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_3 tks) (\x -> case x of {HappyAbsSyn44 z -> happyReturn z; _other -> notHappyAtAll })
+
+pGrammar tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_4 tks) (\x -> case x of {HappyAbsSyn45 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_5 tks) (\x -> case x of {HappyAbsSyn46 z -> happyReturn z; _other -> notHappyAtAll })
+
+pDef tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_6 tks) (\x -> case x of {HappyAbsSyn47 z -> happyReturn z; _other -> notHappyAtAll })
+
+pItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_7 tks) (\x -> case x of {HappyAbsSyn48 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_8 tks) (\x -> case x of {HappyAbsSyn49 z -> happyReturn z; _other -> notHappyAtAll })
+
+pCat tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_9 tks) (\x -> case x of {HappyAbsSyn50 z -> happyReturn z; _other -> notHappyAtAll })
+
+pLabel tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_10 tks) (\x -> case x of {HappyAbsSyn51 z -> happyReturn z; _other -> notHappyAtAll })
+
+pLabelId tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_11 tks) (\x -> case x of {HappyAbsSyn52 z -> happyReturn z; _other -> notHappyAtAll })
+
+pProfItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_12 tks) (\x -> case x of {HappyAbsSyn53 z -> happyReturn z; _other -> notHappyAtAll })
+
+pIntList tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_13 tks) (\x -> case x of {HappyAbsSyn54 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListInteger tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_14 tks) (\x -> case x of {HappyAbsSyn55 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListIntList tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_15 tks) (\x -> case x of {HappyAbsSyn56 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListProfItem tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_16 tks) (\x -> case x of {HappyAbsSyn57 z -> happyReturn z; _other -> notHappyAtAll })
+
+pArg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_17 tks) (\x -> case x of {HappyAbsSyn58 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListArg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_18 tks) (\x -> case x of {HappyAbsSyn59 z -> happyReturn z; _other -> notHappyAtAll })
+
+pSeparation tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_19 tks) (\x -> case x of {HappyAbsSyn60 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListString tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_20 tks) (\x -> case x of {HappyAbsSyn61 z -> happyReturn z; _other -> notHappyAtAll })
+
+pExp tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_21 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })
+
+pExp1 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_22 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })
+
+pExp2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_23 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListExp tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_24 tks) (\x -> case x of {HappyAbsSyn65 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListExp2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_25 tks) (\x -> case x of {HappyAbsSyn65 z -> happyReturn z; _other -> notHappyAtAll })
+
+pRHS tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_26 tks) (\x -> case x of {HappyAbsSyn67 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListRHS tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_27 tks) (\x -> case x of {HappyAbsSyn68 z -> happyReturn z; _other -> notHappyAtAll })
+
+pMinimumSize tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_28 tks) (\x -> case x of {HappyAbsSyn69 z -> happyReturn z; _other -> notHappyAtAll })
+
+pReg2 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_29 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })
+
+pReg1 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_30 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })
+
+pReg3 tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_31 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })
+
+pReg tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_32 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })
+
+happySeq = happyDontSeq
+
+
+returnM :: a -> Err a
+returnM = return
+
+thenM :: Err a -> (a -> Err b) -> Err b
+thenM = (>>=)
+
+happyError :: [Token] -> Err a
+happyError ts =
+  Bad $ "syntax error at " ++ tokenPos ts ++
+  case ts of
+    []      -> []
+    [Err _] -> " due to lexer error"
+    t:_     -> " before `" ++ id(prToken t) ++ "'"
+
+myLexer = tokens
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 15 "<built-in>" #-}
+{-# LINE 1 "/usr/local/lib/ghc-8.2.1/include/ghcversion.h" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 16 "<built-in>" #-}
+{-# LINE 1 "/var/folders/lg/qcd3v89j59l3m6520kr42bdm0000gn/T/ghc7877_0/ghc_2.h" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 17 "<built-in>" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
+
+
+
+
+
+
+
+
+
+
+{-# LINE 43 "templates/GenericTemplate.hs" #-}
+
+data Happy_IntList = HappyCons Int Happy_IntList
+
+
+
+
+
+
+
+
+{-# LINE 65 "templates/GenericTemplate.hs" #-}
+
+
+{-# LINE 75 "templates/GenericTemplate.hs" #-}
+
+
+
+
+
+
+
+
+
+
+infixr 9 `HappyStk`
+data HappyStk a = HappyStk a (HappyStk a)
+
+-----------------------------------------------------------------------------
+-- starting the parse
+
+happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
+
+-----------------------------------------------------------------------------
+-- Accepting the parse
+
+-- If the current token is (1), it means we've just accepted a partial
+-- parse (a %partial parser).  We must ignore the saved token on the top of
+-- the stack in this case.
+happyAccept (1) tk st sts (_ `HappyStk` ans `HappyStk` _) =
+        happyReturn1 ans
+happyAccept j tk st sts (HappyStk ans _) = 
+         (happyReturn1 ans)
+
+-----------------------------------------------------------------------------
+-- Arrays only: do the next action
+
+
+{-# LINE 137 "templates/GenericTemplate.hs" #-}
+
+
+{-# LINE 147 "templates/GenericTemplate.hs" #-}
+indexShortOffAddr arr off = arr Happy_Data_Array.! off
+
+
+{-# INLINE happyLt #-}
+happyLt x y = (x < y)
+
+
+
+
+
+
+readArrayBit arr bit =
+    Bits.testBit (indexShortOffAddr arr (bit `div` 16)) (bit `mod` 16)
+
+
+
+
+
+
+-----------------------------------------------------------------------------
+-- HappyState data type (not arrays)
+
+
+
+newtype HappyState b c = HappyState
+        (Int ->                    -- token number
+         Int ->                    -- token number (yes, again)
+         b ->                           -- token semantic value
+         HappyState b c ->              -- current state
+         [HappyState b c] ->            -- state stack
+         c)
+
+
+
+-----------------------------------------------------------------------------
+-- Shifting a token
+
+happyShift new_state (1) tk st sts stk@(x `HappyStk` _) =
+     let i = (case x of { HappyErrorToken (i) -> i }) in
+--     trace "shifting the error token" $
+     new_state i i tk (HappyState (new_state)) ((st):(sts)) (stk)
+
+happyShift new_state i tk st sts stk =
+     happyNewToken new_state ((st):(sts)) ((HappyTerminal (tk))`HappyStk`stk)
+
+-- happyReduce is specialised for the common cases.
+
+happySpecReduce_0 i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happySpecReduce_0 nt fn j tk st@((HappyState (action))) sts stk
+     = action nt j tk st ((st):(sts)) (fn `HappyStk` stk)
+
+happySpecReduce_1 i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happySpecReduce_1 nt fn j tk _ sts@(((st@(HappyState (action))):(_))) (v1`HappyStk`stk')
+     = let r = fn v1 in
+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_2 i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happySpecReduce_2 nt fn j tk _ ((_):(sts@(((st@(HappyState (action))):(_))))) (v1`HappyStk`v2`HappyStk`stk')
+     = let r = fn v1 v2 in
+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_3 i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happySpecReduce_3 nt fn j tk _ ((_):(((_):(sts@(((st@(HappyState (action))):(_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
+     = let r = fn v1 v2 v3 in
+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
+
+happyReduce k i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happyReduce k nt fn j tk st sts stk
+     = case happyDrop (k - ((1) :: Int)) sts of
+         sts1@(((st1@(HappyState (action))):(_))) ->
+                let r = fn stk in  -- it doesn't hurt to always seq here...
+                happyDoSeq r (action nt j tk st1 sts1 r)
+
+happyMonadReduce k nt fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happyMonadReduce k nt fn j tk st sts stk =
+      case happyDrop k ((st):(sts)) of
+        sts1@(((st1@(HappyState (action))):(_))) ->
+          let drop_stk = happyDropStk k stk in
+          happyThen1 (fn stk tk) (\r -> action nt j tk st1 sts1 (r `HappyStk` drop_stk))
+
+happyMonad2Reduce k nt fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happyMonad2Reduce k nt fn j tk st sts stk =
+      case happyDrop k ((st):(sts)) of
+        sts1@(((st1@(HappyState (action))):(_))) ->
+         let drop_stk = happyDropStk k stk
+
+
+
+
+
+             _ = nt :: Int
+             new_state = action
+
+          in
+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
+
+happyDrop (0) l = l
+happyDrop n ((_):(t)) = happyDrop (n - ((1) :: Int)) t
+
+happyDropStk (0) l = l
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n - ((1)::Int)) xs
+
+-----------------------------------------------------------------------------
+-- Moving to a new state after a reduction
+
+
+
+
+
+
+
+
+
+happyGoto action j tk st = action j j tk (HappyState action)
+
+
+-----------------------------------------------------------------------------
+-- Error recovery ((1) is the error token)
+
+-- parse error if we are in recovery and we fail again
+happyFail explist (1) tk old_st _ stk@(x `HappyStk` _) =
+     let i = (case x of { HappyErrorToken (i) -> i }) in
+--      trace "failing" $ 
+        happyError_ explist i tk
+
+{-  We don't need state discarding for our restricted implementation of
+    "error".  In fact, it can cause some bogus parses, so I've disabled it
+    for now --SDM
+
+-- discard a state
+happyFail  (1) tk old_st (((HappyState (action))):(sts)) 
+                                                (saved_tok `HappyStk` _ `HappyStk` stk) =
+--      trace ("discarding state, depth " ++ show (length stk))  $
+        action (1) (1) tk (HappyState (action)) sts ((saved_tok`HappyStk`stk))
+-}
+
+-- Enter error recovery: generate an error token,
+--                       save the old token and carry on.
+happyFail explist i tk (HappyState (action)) sts stk =
+--      trace "entering error recovery" $
+        action (1) (1) tk (HappyState (action)) sts ( (HappyErrorToken (i)) `HappyStk` stk)
+
+-- Internal happy errors:
+
+notHappyAtAll :: a
+notHappyAtAll = error "Internal Happy error\n"
+
+-----------------------------------------------------------------------------
+-- Hack to get the typechecker to accept our action functions
+
+
+
+
+
+
+
+-----------------------------------------------------------------------------
+-- Seq-ing.  If the --strict flag is given, then Happy emits 
+--      happySeq = happyDoSeq
+-- otherwise it emits
+--      happySeq = happyDontSeq
+
+happyDoSeq, happyDontSeq :: a -> b -> b
+happyDoSeq   a b = a `seq` b
+happyDontSeq a b = b
+
+-----------------------------------------------------------------------------
+-- Don't inline any functions from the template.  GHC has a nasty habit
+-- of deciding to inline happyGoto everywhere, which increases the size of
+-- the generated parser quite a bit.
+
+
+
+
+
+
+
+
+
+{-# NOINLINE happyShift #-}
+{-# NOINLINE happySpecReduce_0 #-}
+{-# NOINLINE happySpecReduce_1 #-}
+{-# NOINLINE happySpecReduce_2 #-}
+{-# NOINLINE happySpecReduce_3 #-}
+{-# NOINLINE happyReduce #-}
+{-# NOINLINE happyMonadReduce #-}
+{-# NOINLINE happyGoto #-}
+{-# NOINLINE happyFail #-}
+
+-- end of Happy Template.
+
diff --git a/src/ParBNF.y b/src/ParBNF.y
--- a/src/ParBNF.y
+++ b/src/ParBNF.y
@@ -85,22 +85,29 @@
   '{' { PT _ (TS _ 38) }
   '|' { PT _ (TS _ 39) }
   '}' { PT _ (TS _ 40) }
+  L_ident  { PT _ (TV $$) }
+  L_quoted { PT _ (TL $$) }
+  L_integ  { PT _ (TI $$) }
+  L_charac { PT _ (TC $$) }
+  L_doubl  { PT _ (TD $$) }
 
-L_ident  { PT _ (TV $$) }
-L_quoted { PT _ (TL $$) }
-L_integ  { PT _ (TI $$) }
-L_charac { PT _ (TC $$) }
-L_doubl  { PT _ (TD $$) }
+%%
 
+Ident   :: { Ident }
+Ident    : L_ident  { Ident $1 }
 
-%%
+String  :: { String }
+String   : L_quoted {  $1 }
 
-Ident   :: { Ident }   : L_ident  { Ident $1 }
-String  :: { String }  : L_quoted {  $1 }
-Integer :: { Integer } : L_integ  { (read ( $1)) :: Integer }
-Char    :: { Char }    : L_charac { (read ( $1)) :: Char }
-Double  :: { Double }  : L_doubl  { (read ( $1)) :: Double }
+Integer :: { Integer }
+Integer  : L_integ  { (read ( $1)) :: Integer }
 
+Char    :: { Char }
+Char     : L_charac { (read ( $1)) :: Char }
+
+Double  :: { Double }
+Double   : L_doubl  { (read ( $1)) :: Double }
+
 LGrammar :: { LGrammar }
 LGrammar : ListLDef { AbsBNF.LGr $1 }
 LDef :: { LDef }
@@ -238,11 +245,11 @@
 
 happyError :: [Token] -> Err a
 happyError ts =
-  Bad $ "syntax error at " ++ tokenPos ts ++ 
+  Bad $ "syntax error at " ++ tokenPos ts ++
   case ts of
-    [] -> []
+    []      -> []
     [Err _] -> " due to lexer error"
-    t:_ -> " before `" ++ id(prToken t) ++ "'"
+    t:_     -> " before `" ++ id(prToken t) ++ "'"
 
 myLexer = tokens
 }
diff --git a/src/PrintBNF.hs b/src/PrintBNF.hs
--- a/src/PrintBNF.hs
+++ b/src/PrintBNF.hs
@@ -1,13 +1,20 @@
+{-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ <= 708
+{-# LANGUAGE OverlappingInstances #-}
+#endif
+{-# LANGUAGE FlexibleInstances #-}
 {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
-module PrintBNF where
 
--- pretty-printer generated by the BNF converter
+-- | Pretty-printer for PrintBNF.
+--   Generated by the BNF converter.
 
-import AbsBNF
+module PrintBNF where
+
+import qualified AbsBNF
 import Data.Char
 
+-- | The top-level printing method.
 
--- the top-level printing method
 printTree :: Print a => a -> String
 printTree = render . prt 0
 
@@ -50,13 +57,14 @@
 replicateS :: Int -> ShowS -> ShowS
 replicateS n f = concatS (replicate n f)
 
--- the printer class does the job
+-- | The printer class does the job.
+
 class Print a where
   prt :: Int -> a -> Doc
   prtList :: Int -> [a] -> Doc
   prtList i = concatD . map (prt i)
 
-instance Print a => Print [a] where
+instance {-# OVERLAPPABLE #-} Print a => Print [a] where
   prt = prtList
 
 instance Print Char where
@@ -72,147 +80,190 @@
   _ -> showChar s
 
 prPrec :: Int -> Int -> Doc -> Doc
-prPrec i j = if j<i then parenth else id
-
+prPrec i j = if j < i then parenth else id
 
 instance Print Integer where
   prt _ x = doc (shows x)
-
+  prtList _ [] = concatD []
+  prtList _ [x] = concatD [prt 0 x]
+  prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs]
 
 instance Print Double where
   prt _ x = doc (shows x)
 
-
-instance Print Ident where
-  prt _ (Ident i) = doc (showString i)
+instance Print AbsBNF.Ident where
+  prt _ (AbsBNF.Ident i) = doc (showString i)
   prtList _ [x] = concatD [prt 0 x]
   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs]
 
-instance Print LGrammar where
+instance Print AbsBNF.LGrammar where
   prt i e = case e of
-    LGr ldefs -> prPrec i 0 (concatD [prt 0 ldefs])
+    AbsBNF.LGr ldefs -> prPrec i 0 (concatD [prt 0 ldefs])
 
-instance Print LDef where
+instance Print AbsBNF.LDef where
   prt i e = case e of
-    DefAll def -> prPrec i 0 (concatD [prt 0 def])
-    DefSome ids def -> prPrec i 0 (concatD [prt 0 ids, doc (showString ":"), prt 0 def])
-    LDefView ids -> prPrec i 0 (concatD [doc (showString "views"), prt 0 ids])
+    AbsBNF.DefAll def -> prPrec i 0 (concatD [prt 0 def])
+    AbsBNF.DefSome ids def -> prPrec i 0 (concatD [prt 0 ids, doc (showString ":"), prt 0 def])
+    AbsBNF.LDefView ids -> prPrec i 0 (concatD [doc (showString "views"), prt 0 ids])
   prtList _ [] = concatD []
   prtList _ [x] = concatD [prt 0 x]
+
   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs]
-instance Print Grammar where
+
+instance Print [AbsBNF.LDef] where
+  prt = prtList
+
+instance Print [AbsBNF.Ident] where
+  prt = prtList
+
+instance Print AbsBNF.Grammar where
   prt i e = case e of
-    Grammar defs -> prPrec i 0 (concatD [prt 0 defs])
+    AbsBNF.Grammar defs -> prPrec i 0 (concatD [prt 0 defs])
 
-instance Print Def where
+instance Print [AbsBNF.Def] where
+  prt = prtList
+
+instance Print AbsBNF.Def where
   prt i e = case e of
-    Rule label cat items -> prPrec i 0 (concatD [prt 0 label, doc (showString "."), prt 0 cat, doc (showString "::="), prt 0 items])
-    Comment str -> prPrec i 0 (concatD [doc (showString "comment"), prt 0 str])
-    Comments str1 str2 -> prPrec i 0 (concatD [doc (showString "comment"), prt 0 str1, prt 0 str2])
-    Internal label cat items -> prPrec i 0 (concatD [doc (showString "internal"), prt 0 label, doc (showString "."), prt 0 cat, doc (showString "::="), prt 0 items])
-    Token id reg -> prPrec i 0 (concatD [doc (showString "token"), prt 0 id, prt 0 reg])
-    PosToken id reg -> prPrec i 0 (concatD [doc (showString "position"), doc (showString "token"), prt 0 id, prt 0 reg])
-    Entryp ids -> prPrec i 0 (concatD [doc (showString "entrypoints"), prt 0 ids])
-    Separator minimumsize cat str -> prPrec i 0 (concatD [doc (showString "separator"), prt 0 minimumsize, prt 0 cat, prt 0 str])
-    Terminator minimumsize cat str -> prPrec i 0 (concatD [doc (showString "terminator"), prt 0 minimumsize, prt 0 cat, prt 0 str])
-    Delimiters cat str1 str2 separation minimumsize -> prPrec i 0 (concatD [doc (showString "delimiters"), prt 0 cat, prt 0 str1, prt 0 str2, prt 0 separation, prt 0 minimumsize])
-    Coercions id n -> prPrec i 0 (concatD [doc (showString "coercions"), prt 0 id, prt 0 n])
-    Rules id rhss -> prPrec i 0 (concatD [doc (showString "rules"), prt 0 id, doc (showString "::="), prt 0 rhss])
-    Function id args exp -> prPrec i 0 (concatD [doc (showString "define"), prt 0 id, prt 0 args, doc (showString "="), prt 0 exp])
-    Layout strs -> prPrec i 0 (concatD [doc (showString "layout"), prt 0 strs])
-    LayoutStop strs -> prPrec i 0 (concatD [doc (showString "layout"), doc (showString "stop"), prt 0 strs])
-    LayoutTop -> prPrec i 0 (concatD [doc (showString "layout"), doc (showString "toplevel")])
+    AbsBNF.Rule label cat items -> prPrec i 0 (concatD [prt 0 label, doc (showString "."), prt 0 cat, doc (showString "::="), prt 0 items])
+    AbsBNF.Comment str -> prPrec i 0 (concatD [doc (showString "comment"), prt 0 str])
+    AbsBNF.Comments str1 str2 -> prPrec i 0 (concatD [doc (showString "comment"), prt 0 str1, prt 0 str2])
+    AbsBNF.Internal label cat items -> prPrec i 0 (concatD [doc (showString "internal"), prt 0 label, doc (showString "."), prt 0 cat, doc (showString "::="), prt 0 items])
+    AbsBNF.Token id reg -> prPrec i 0 (concatD [doc (showString "token"), prt 0 id, prt 0 reg])
+    AbsBNF.PosToken id reg -> prPrec i 0 (concatD [doc (showString "position"), doc (showString "token"), prt 0 id, prt 0 reg])
+    AbsBNF.Entryp ids -> prPrec i 0 (concatD [doc (showString "entrypoints"), prt 0 ids])
+    AbsBNF.Separator minimumsize cat str -> prPrec i 0 (concatD [doc (showString "separator"), prt 0 minimumsize, prt 0 cat, prt 0 str])
+    AbsBNF.Terminator minimumsize cat str -> prPrec i 0 (concatD [doc (showString "terminator"), prt 0 minimumsize, prt 0 cat, prt 0 str])
+    AbsBNF.Delimiters cat str1 str2 separation minimumsize -> prPrec i 0 (concatD [doc (showString "delimiters"), prt 0 cat, prt 0 str1, prt 0 str2, prt 0 separation, prt 0 minimumsize])
+    AbsBNF.Coercions id n -> prPrec i 0 (concatD [doc (showString "coercions"), prt 0 id, prt 0 n])
+    AbsBNF.Rules id rhss -> prPrec i 0 (concatD [doc (showString "rules"), prt 0 id, doc (showString "::="), prt 0 rhss])
+    AbsBNF.Function id args exp -> prPrec i 0 (concatD [doc (showString "define"), prt 0 id, prt 0 args, doc (showString "="), prt 0 exp])
+    AbsBNF.Layout strs -> prPrec i 0 (concatD [doc (showString "layout"), prt 0 strs])
+    AbsBNF.LayoutStop strs -> prPrec i 0 (concatD [doc (showString "layout"), doc (showString "stop"), prt 0 strs])
+    AbsBNF.LayoutTop -> prPrec i 0 (concatD [doc (showString "layout"), doc (showString "toplevel")])
   prtList _ [] = concatD []
   prtList _ [x] = concatD [prt 0 x]
+
   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs]
-instance Print Item where
+
+instance Print AbsBNF.Item where
   prt i e = case e of
-    Terminal str -> prPrec i 0 (concatD [prt 0 str])
-    NTerminal cat -> prPrec i 0 (concatD [prt 0 cat])
+    AbsBNF.Terminal str -> prPrec i 0 (concatD [prt 0 str])
+    AbsBNF.NTerminal cat -> prPrec i 0 (concatD [prt 0 cat])
   prtList _ [] = concatD []
   prtList _ (x:xs) = concatD [prt 0 x, prt 0 xs]
-instance Print Cat where
+
+instance Print [AbsBNF.Item] where
+  prt = prtList
+
+instance Print AbsBNF.Cat where
   prt i e = case e of
-    ListCat cat -> prPrec i 0 (concatD [doc (showString "["), prt 0 cat, doc (showString "]")])
-    IdCat id -> prPrec i 0 (concatD [prt 0 id])
+    AbsBNF.ListCat cat -> prPrec i 0 (concatD [doc (showString "["), prt 0 cat, doc (showString "]")])
+    AbsBNF.IdCat id -> prPrec i 0 (concatD [prt 0 id])
 
-instance Print Label where
+instance Print AbsBNF.Label where
   prt i e = case e of
-    LabNoP labelid -> prPrec i 0 (concatD [prt 0 labelid])
-    LabP labelid profitems -> prPrec i 0 (concatD [prt 0 labelid, prt 0 profitems])
-    LabPF labelid1 labelid2 profitems -> prPrec i 0 (concatD [prt 0 labelid1, prt 0 labelid2, prt 0 profitems])
-    LabF labelid1 labelid2 -> prPrec i 0 (concatD [prt 0 labelid1, prt 0 labelid2])
+    AbsBNF.LabNoP labelid -> prPrec i 0 (concatD [prt 0 labelid])
+    AbsBNF.LabP labelid profitems -> prPrec i 0 (concatD [prt 0 labelid, prt 0 profitems])
+    AbsBNF.LabPF labelid1 labelid2 profitems -> prPrec i 0 (concatD [prt 0 labelid1, prt 0 labelid2, prt 0 profitems])
+    AbsBNF.LabF labelid1 labelid2 -> prPrec i 0 (concatD [prt 0 labelid1, prt 0 labelid2])
 
-instance Print LabelId where
+instance Print AbsBNF.LabelId where
   prt i e = case e of
-    Id id -> prPrec i 0 (concatD [prt 0 id])
-    Wild -> prPrec i 0 (concatD [doc (showString "_")])
-    ListE -> prPrec i 0 (concatD [doc (showString "["), doc (showString "]")])
-    ListCons -> prPrec i 0 (concatD [doc (showString "("), doc (showString ":"), doc (showString ")")])
-    ListOne -> prPrec i 0 (concatD [doc (showString "("), doc (showString ":"), doc (showString "["), doc (showString "]"), doc (showString ")")])
+    AbsBNF.Id id -> prPrec i 0 (concatD [prt 0 id])
+    AbsBNF.Wild -> prPrec i 0 (concatD [doc (showString "_")])
+    AbsBNF.ListE -> prPrec i 0 (concatD [doc (showString "["), doc (showString "]")])
+    AbsBNF.ListCons -> prPrec i 0 (concatD [doc (showString "("), doc (showString ":"), doc (showString ")")])
+    AbsBNF.ListOne -> prPrec i 0 (concatD [doc (showString "("), doc (showString ":"), doc (showString "["), doc (showString "]"), doc (showString ")")])
 
-instance Print ProfItem where
+instance Print AbsBNF.ProfItem where
   prt i e = case e of
-    ProfIt intlists ns -> prPrec i 0 (concatD [doc (showString "("), doc (showString "["), prt 0 intlists, doc (showString "]"), doc (showString ","), doc (showString "["), prt 0 ns, doc (showString "]"), doc (showString ")")])
+    AbsBNF.ProfIt intlists ns -> prPrec i 0 (concatD [doc (showString "("), doc (showString "["), prt 0 intlists, doc (showString "]"), doc (showString ","), doc (showString "["), prt 0 ns, doc (showString "]"), doc (showString ")")])
   prtList _ [x] = concatD [prt 0 x]
   prtList _ (x:xs) = concatD [prt 0 x, prt 0 xs]
-instance Print IntList where
+
+instance Print AbsBNF.IntList where
   prt i e = case e of
-    Ints ns -> prPrec i 0 (concatD [doc (showString "["), prt 0 ns, doc (showString "]")])
+    AbsBNF.Ints ns -> prPrec i 0 (concatD [doc (showString "["), prt 0 ns, doc (showString "]")])
   prtList _ [] = concatD []
   prtList _ [x] = concatD [prt 0 x]
   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs]
-instance Print Arg where
+
+instance Print [Integer] where
+  prt = prtList
+
+instance Print [AbsBNF.IntList] where
+  prt = prtList
+
+instance Print [AbsBNF.ProfItem] where
+  prt = prtList
+
+instance Print AbsBNF.Arg where
   prt i e = case e of
-    Arg id -> prPrec i 0 (concatD [prt 0 id])
+    AbsBNF.Arg id -> prPrec i 0 (concatD [prt 0 id])
   prtList _ [] = concatD []
   prtList _ (x:xs) = concatD [prt 0 x, prt 0 xs]
-instance Print Separation where
+
+instance Print [AbsBNF.Arg] where
+  prt = prtList
+
+instance Print AbsBNF.Separation where
   prt i e = case e of
-    SepNone -> prPrec i 0 (concatD [])
-    SepTerm str -> prPrec i 0 (concatD [doc (showString "terminator"), prt 0 str])
-    SepSepar str -> prPrec i 0 (concatD [doc (showString "separator"), prt 0 str])
+    AbsBNF.SepNone -> prPrec i 0 (concatD [])
+    AbsBNF.SepTerm str -> prPrec i 0 (concatD [doc (showString "terminator"), prt 0 str])
+    AbsBNF.SepSepar str -> prPrec i 0 (concatD [doc (showString "separator"), prt 0 str])
 
-instance Print Exp where
+instance Print [String] where
+  prt = prtList
+
+instance Print AbsBNF.Exp where
   prt i e = case e of
-    Cons exp1 exp2 -> prPrec i 0 (concatD [prt 1 exp1, doc (showString ":"), prt 0 exp2])
-    App id exps -> prPrec i 1 (concatD [prt 0 id, prt 2 exps])
-    Var id -> prPrec i 2 (concatD [prt 0 id])
-    LitInt n -> prPrec i 2 (concatD [prt 0 n])
-    LitChar c -> prPrec i 2 (concatD [prt 0 c])
-    LitString str -> prPrec i 2 (concatD [prt 0 str])
-    LitDouble d -> prPrec i 2 (concatD [prt 0 d])
-    List exps -> prPrec i 2 (concatD [doc (showString "["), prt 0 exps, doc (showString "]")])
+    AbsBNF.Cons exp1 exp2 -> prPrec i 0 (concatD [prt 1 exp1, doc (showString ":"), prt 0 exp2])
+    AbsBNF.App id exps -> prPrec i 1 (concatD [prt 0 id, prt 2 exps])
+    AbsBNF.Var id -> prPrec i 2 (concatD [prt 0 id])
+    AbsBNF.LitInt n -> prPrec i 2 (concatD [prt 0 n])
+    AbsBNF.LitChar c -> prPrec i 2 (concatD [prt 0 c])
+    AbsBNF.LitString str -> prPrec i 2 (concatD [prt 0 str])
+    AbsBNF.LitDouble d -> prPrec i 2 (concatD [prt 0 d])
+    AbsBNF.List exps -> prPrec i 2 (concatD [doc (showString "["), prt 0 exps, doc (showString "]")])
   prtList 2 [x] = concatD [prt 2 x]
   prtList 2 (x:xs) = concatD [prt 2 x, prt 2 xs]
   prtList _ [] = concatD []
   prtList _ [x] = concatD [prt 0 x]
   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs]
-instance Print RHS where
+
+instance Print [AbsBNF.Exp] where
+  prt = prtList
+
+instance Print AbsBNF.RHS where
   prt i e = case e of
-    RHS items -> prPrec i 0 (concatD [prt 0 items])
+    AbsBNF.RHS items -> prPrec i 0 (concatD [prt 0 items])
   prtList _ [x] = concatD [prt 0 x]
   prtList _ (x:xs) = concatD [prt 0 x, doc (showString "|"), prt 0 xs]
-instance Print MinimumSize where
+
+instance Print [AbsBNF.RHS] where
+  prt = prtList
+
+instance Print AbsBNF.MinimumSize where
   prt i e = case e of
-    MNonempty -> prPrec i 0 (concatD [doc (showString "nonempty")])
-    MEmpty -> prPrec i 0 (concatD [])
+    AbsBNF.MNonempty -> prPrec i 0 (concatD [doc (showString "nonempty")])
+    AbsBNF.MEmpty -> prPrec i 0 (concatD [])
 
-instance Print Reg where
+instance Print AbsBNF.Reg where
   prt i e = case e of
-    RSeq reg1 reg2 -> prPrec i 2 (concatD [prt 2 reg1, prt 3 reg2])
-    RAlt reg1 reg2 -> prPrec i 1 (concatD [prt 1 reg1, doc (showString "|"), prt 2 reg2])
-    RMinus reg1 reg2 -> prPrec i 1 (concatD [prt 2 reg1, doc (showString "-"), prt 2 reg2])
-    RStar reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "*")])
-    RPlus reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "+")])
-    ROpt reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "?")])
-    REps -> prPrec i 3 (concatD [doc (showString "eps")])
-    RChar c -> prPrec i 3 (concatD [prt 0 c])
-    RAlts str -> prPrec i 3 (concatD [doc (showString "["), prt 0 str, doc (showString "]")])
-    RSeqs str -> prPrec i 3 (concatD [doc (showString "{"), prt 0 str, doc (showString "}")])
-    RDigit -> prPrec i 3 (concatD [doc (showString "digit")])
-    RLetter -> prPrec i 3 (concatD [doc (showString "letter")])
-    RUpper -> prPrec i 3 (concatD [doc (showString "upper")])
-    RLower -> prPrec i 3 (concatD [doc (showString "lower")])
-    RAny -> prPrec i 3 (concatD [doc (showString "char")])
+    AbsBNF.RSeq reg1 reg2 -> prPrec i 2 (concatD [prt 2 reg1, prt 3 reg2])
+    AbsBNF.RAlt reg1 reg2 -> prPrec i 1 (concatD [prt 1 reg1, doc (showString "|"), prt 2 reg2])
+    AbsBNF.RMinus reg1 reg2 -> prPrec i 1 (concatD [prt 2 reg1, doc (showString "-"), prt 2 reg2])
+    AbsBNF.RStar reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "*")])
+    AbsBNF.RPlus reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "+")])
+    AbsBNF.ROpt reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "?")])
+    AbsBNF.REps -> prPrec i 3 (concatD [doc (showString "eps")])
+    AbsBNF.RChar c -> prPrec i 3 (concatD [prt 0 c])
+    AbsBNF.RAlts str -> prPrec i 3 (concatD [doc (showString "["), prt 0 str, doc (showString "]")])
+    AbsBNF.RSeqs str -> prPrec i 3 (concatD [doc (showString "{"), prt 0 str, doc (showString "}")])
+    AbsBNF.RDigit -> prPrec i 3 (concatD [doc (showString "digit")])
+    AbsBNF.RLetter -> prPrec i 3 (concatD [doc (showString "letter")])
+    AbsBNF.RUpper -> prPrec i 3 (concatD [doc (showString "upper")])
+    AbsBNF.RLower -> prPrec i 3 (concatD [doc (showString "lower")])
+    AbsBNF.RAny -> prPrec i 3 (concatD [doc (showString "char")])
 
diff --git a/test/BNFC/Backend/BaseSpec.hs b/test/BNFC/Backend/BaseSpec.hs
--- a/test/BNFC/Backend/BaseSpec.hs
+++ b/test/BNFC/Backend/BaseSpec.hs
@@ -18,11 +18,11 @@
 spec :: Spec
 spec = do
   describe "Backend monad" $ do
-    it "empty computation generates empty list op files" $
+    it "empty computation generates empty list of files" $
       execBackend (return ()) `shouldReturn` []
     it "returns the file created using mkfile" $
       execBackend (mkfile "test.txt" "abcd")
-        `shouldReturn` [("test.txt", "abcd")]
+        `shouldReturn` [("test.txt", "abcd\n")]
   describe "writeFiles" $ do
     it "creates the root directory if it doesn't exists" $
       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do
@@ -40,7 +40,7 @@
         setCurrentDirectory tmpdir
         writeFiles "." (mkfile "file.txt" "abcd")
         readFile "file.txt"
-      `shouldReturn` "abcd"
+      `shouldReturn` "abcd\n"
     it "creates subdirectories" $
       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do
         setCurrentDirectory tmpdir
diff --git a/test/BNFC/Backend/Common/MakefileSpec.hs b/test/BNFC/Backend/Common/MakefileSpec.hs
--- a/test/BNFC/Backend/Common/MakefileSpec.hs
+++ b/test/BNFC/Backend/Common/MakefileSpec.hs
@@ -11,4 +11,4 @@
   describe "mkMakefile" $ do
     it "uses the names in the options dictionary" $
       let opts = defaultOptions { make = Just "MyMakefile" } in
-      execBackend (mkMakefile opts "") `shouldReturn` [("MyMakefile","")]
+      execBackend (mkMakefile opts (const "")) `shouldReturn` [("MyMakefile","")]
diff --git a/test/BNFC/OptionsSpec.hs b/test/BNFC/OptionsSpec.hs
--- a/test/BNFC/OptionsSpec.hs
+++ b/test/BNFC/OptionsSpec.hs
@@ -75,6 +75,11 @@
           parseMode["--c", "-mMyMakefile", "foo.cf"]
             `shouldSet` (make, Just "MyMakefile")
 
+isUsageError :: Mode -> Bool
+isUsageError = \case
+  UsageError{} -> True
+  _ -> False
+
 -- ~~~ Arbitrary instances ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 randomOption :: Gen String
