diff --git a/Agda.cabal b/Agda.cabal
--- a/Agda.cabal
+++ b/Agda.cabal
@@ -1,10 +1,10 @@
 name:            Agda
-version:         2.3.0.1
+version:         2.3.2
 cabal-version:   >= 1.8
 build-type:      Simple
 license:         OtherLicense
 license-file:    LICENSE
-author:          Ulf Norell, Nils Anders Danielsson, Catarina Coquand, Makoto Takeyama, Andreas Abel, Darin Morrison...
+author:          Ulf Norell, Nils Anders Danielsson, Andreas Abel, Makoto Takeyama, Catarina Coquand, with contributions by Stevan Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, James Chapman, Dominique Devriese, Peter Divanski, Fredrik Nordvall Forsberg, Olle Frediksson, Daniel Gustafsson, Alan Jeffrey, Fredrik Lindblad, Guilhem Moulin, Nicolas Pouillard, Andrés Sicard-Ramírez and many more.
 maintainer:      Ulf Norell <ulfn@chalmers.se>
 homepage:        http://wiki.portal.chalmers.se/agda/
 bug-reports:     http://code.google.com/p/agda/issues/list
@@ -25,16 +25,14 @@
   similarities with other proof assistants based on dependent types,
   such as Coq, Epigram and NuPRL.
   .
-  Note that if you want to use the command-line program (agda), then
-  you should also install the Agda-executable package. The Agda
-  package includes an Emacs mode for Agda, but you need to set up the
-  Emacs mode yourself (for instance by running @agda-mode setup@; see
-  the README).
+  This package includes both a command-line program (agda) and an
+  Emacs mode. If you want to use the Emacs mode you can set it up by
+  running @agda-mode setup@ (see the README).
   .
-  Note also that this library does not follow the package versioning
-  policy, because the library is only intended to be used by the Emacs
-  mode and the Agda-executable package.
-tested-with:        GHC == 7.4.1
+  Note that the Agda library does not follow the package versioning
+  policy, because it is not intended to be used by third-party
+  packages.
+tested-with:        GHC == 7.6.1
 extra-source-files: src/full/Agda/undefined.h
                     README
                     doc/release-notes/*.txt
@@ -44,6 +42,7 @@
                     EpicInclude/AgdaPrelude.e
                     EpicInclude/stdagda.c
                     EpicInclude/stdagda.h
+                    agda.sty
 
 source-repository head
   type:     darcs
@@ -52,13 +51,7 @@
 source-repository this
   type:     darcs
   location: http://code.haskell.org/Agda/
-  tag:      2.3.0
-
-flag use-locale
-  description:
-    Try to use the character encoding specified by the locale for most
-    of the IO going to/from stdin and stdout. (Note that source files
-    must always be encoded using UTF8.)
+  tag:      2.3.2
 
 flag epic
   default: False
@@ -68,38 +61,50 @@
 
 library
   hs-source-dirs:   src/full
-  if flag(use-locale)
-    build-depends:  base >= 4.2 && < 4.6
-  else
-    build-depends:  base == 4.1.*,
-                    utf8-string == 0.3.*
   if flag(epic)
     build-depends:  epic >= 0.1.13 && < 0.10
-  build-depends:    mtl == 2.0.*,
-                    QuickCheck >= 2.3 && < 2.5,
-                    haskell-src-exts >= 1.9.6 && < 1.12,
-                    containers >= 0.1 && < 0.5,
+
+  if os(windows)
+    build-depends:  Win32 == 2.2.*
+
+  build-depends:    base >= 4.2 && < 4.7,
+                    mtl >= 2.0 && < 2.2,
+                    QuickCheck >= 2.3 && < 2.6,
+                    haskell-src-exts >= 1.9.6 && < 1.14,
+                    containers >= 0.1 && < 0.6,
+                    unordered-containers == 0.2.*,
                     pretty >= 1.0 && < 1.2,
-                    directory >= 1.0 && < 1.2,
-                    old-time >= 1.0 && < 1.2,
-                    bytestring >= 0.9.0.1 && < 0.10,
+                    bytestring >= 0.9.0.1 && < 0.11,
                     array >= 0.1 && < 0.5,
                     binary >= 0.4.4 && < 0.6,
                     zlib >= 0.4.0.1 && < 0.6,
                     filepath >= 1.1 && < 1.4,
                     process >= 1.0.1.0 && < 1.2,
-                    haskeline >= 0.6.3.2 && < 0.7,
+                    haskeline >= 0.6.3.2 && < 0.8,
                     xhtml == 3000.2.*,
-                    hashable == 1.1.*,
+                    hashable >= 1.1.2.3 && < 1.2,
                     hashtables == 1.0.*,
-                    syb >= 0.1 && < 0.4
+                    geniplate >= 0.6.0.3 && < 0.7,
+                    parallel < 3.3,
+                    deepseq == 1.3.*,
+                    text == 0.11.*
+
+  if impl(ghc < 7.6)
+    build-depends:  old-time >= 1.0 && < 1.2,
+                    directory >= 1.0 && < 1.2
+  else
+      build-depends:  time == 1.4.*,
+                      directory == 1.2.*
+
   build-tools:      happy >= 1.15 && < 2,
                     alex >= 2.3.1 && < 3.1
   extensions:       CPP
   exposed-modules:  Agda.Main
                     Agda.ImpossibleTest
                     Agda.Interaction.BasicOps
-                    Agda.Interaction.GhciTop
+                    Agda.Interaction.GhcTop
+                    Agda.Interaction.InteractionTop
+                    Agda.Compiler.CallCompiler
                     Agda.Compiler.HaskellTypes
                     Agda.Compiler.Epic.AuxAST
                     Agda.Compiler.Epic.CaseOpts
@@ -142,10 +147,13 @@
                     Agda.Interaction.Highlighting.Precise
                     Agda.Interaction.Highlighting.Range
                     Agda.Interaction.Highlighting.Vim
+                    Agda.Interaction.Highlighting.LaTeX
                     Agda.Interaction.Imports
+                    Agda.Interaction.Response
                     Agda.Interaction.MakeCase
                     Agda.Interaction.Monad
                     Agda.Interaction.Options
+                    Agda.Syntax.Abstract.Copatterns
                     Agda.Syntax.Abstract.Name
                     Agda.Syntax.Abstract.Pretty
                     Agda.Syntax.Abstract.Views
@@ -178,7 +186,6 @@
                     Agda.Syntax.Position
                     Agda.Syntax.Scope.Base
                     Agda.Syntax.Scope.Monad
-                    Agda.Syntax.Strict
                     Agda.Syntax.Translation.AbstractToConcrete
                     Agda.Syntax.Translation.ConcreteToAbstract
                     Agda.Syntax.Translation.InternalToAbstract
@@ -199,8 +206,10 @@
                     Agda.TypeChecking.Conversion
                     Agda.TypeChecking.Coverage
                     Agda.TypeChecking.Coverage.Match
+                    Agda.TypeChecking.Coverage.SplitTree
                     Agda.TypeChecking.Datatypes
                     Agda.TypeChecking.DisplayForm
+                    Agda.TypeChecking.DropArgs
                     Agda.TypeChecking.Eliminators
                     Agda.TypeChecking.Empty
                     Agda.TypeChecking.EtaContract
@@ -209,6 +218,7 @@
                     Agda.TypeChecking.Forcing
                     Agda.TypeChecking.Implicit
                     Agda.TypeChecking.Injectivity
+                    Agda.TypeChecking.InstanceArguments
                     Agda.TypeChecking.Irrelevance
                     Agda.TypeChecking.Level
                     Agda.TypeChecking.LevelConstraints
@@ -228,6 +238,7 @@
                     Agda.TypeChecking.Monad.Mutual
                     Agda.TypeChecking.Monad.Open
                     Agda.TypeChecking.Monad.Options
+                    Agda.TypeChecking.Monad.Sharing
                     Agda.TypeChecking.Monad.Signature
                     Agda.TypeChecking.Monad.SizedTypes
                     Agda.TypeChecking.Monad.State
@@ -239,6 +250,7 @@
                     Agda.TypeChecking.Positivity
                     Agda.TypeChecking.Pretty
                     Agda.TypeChecking.Primitive
+                    Agda.TypeChecking.ProjectionLike
                     Agda.TypeChecking.Quote
                     Agda.TypeChecking.Rebind
                     Agda.TypeChecking.RecordPatterns
@@ -253,6 +265,7 @@
                     Agda.TypeChecking.Rules.LHS.Implicit
                     Agda.TypeChecking.Rules.LHS.Instantiate
                     Agda.TypeChecking.Rules.LHS.Problem
+                    Agda.TypeChecking.Rules.LHS.ProblemRest
                     Agda.TypeChecking.Rules.LHS.Split
                     Agda.TypeChecking.Rules.LHS.Unify
                     Agda.TypeChecking.Rules.Record
@@ -271,12 +284,12 @@
                     Agda.Utils.FileName
                     Agda.Utils.Fresh
                     Agda.Utils.Function
-                    Agda.Utils.Generics
+                    Agda.Utils.Geniplate
                     Agda.Utils.Graph
                     Agda.Utils.Hash
+                    Agda.Utils.HashMap
                     Agda.Utils.Impossible
                     Agda.Utils.IO.Binary
-                    Agda.Utils.IO.Locale
                     Agda.Utils.IO.UTF8
                     Agda.Utils.List
                     Agda.Utils.Map
@@ -284,6 +297,7 @@
                     Agda.Utils.Monad
                     Agda.Utils.Permutation
                     Agda.Utils.Pointer
+                    Agda.Utils.Pointed
                     Agda.Utils.Pretty
                     Agda.Utils.QuickCheck
                     Agda.Utils.ReadP
@@ -292,6 +306,7 @@
                     Agda.Utils.String
                     Agda.Utils.Suffix
                     Agda.Utils.TestHelpers
+                    Agda.Utils.Time
                     Agda.Utils.Trie
                     Agda.Utils.Tuple
                     Agda.Utils.Unicode
@@ -320,6 +335,8 @@
   -- The Cabal-generated module Paths_Agda triggers a warning under
   -- GHC 7.2.1/7.2.2 (at least when certain versions of Cabal are
   -- used).
+  -- if impl(ghc < 7.2.1) || impl(ghc > 7.2.2)
+  --   ghc-options:    -Werror
   if impl(ghc >= 6.12)
     ghc-options:    -fwarn-dodgy-exports
                     -fwarn-wrong-do-bind
@@ -327,15 +344,26 @@
     ghc-options:    -fwarn-identities
   ghc-prof-options: -auto-all
 
+executable agda
+  hs-source-dirs: src/main
+  main-is:        Main.hs
+  build-depends:  Agda == 2.3.2,
+                  -- Nothing is used from the following package, except
+                  -- for the prelude.
+                  base >= 3 && < 6
+  if impl(ghc >= 7)
+    -- If someone installs Agda with the setuid bit set, then the
+    -- presence of +RTS may be a security problem (see GHC bug #3910).
+    -- However, we sometimes recommend people to use +RTS to control
+    -- Agda's memory usage, so we want this functionality enabled by
+    -- default.
+    ghc-options:  -rtsopts
+
 executable agda-mode
   hs-source-dirs:   src/agda-mode
   main-is:          Main.hs
   other-modules:    Paths_Agda
-  if flag(use-locale)
-    build-depends:  base >= 4.2 && < 4.6
-  else
-    build-depends:  base == 4.1.*,
-                    utf8-string == 0.3.*
-  build-depends:    filepath >= 1.1 && < 1.4,
+  build-depends:    base >= 4.2 && < 4.7,
+                    filepath >= 1.1 && < 1.4,
                     process >= 1.0.1.0 && < 1.2,
-                    directory >= 1.0 && < 1.2
+                    directory >= 1.0 && < 1.3
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2005-2011 Ulf Norell, Nils Anders Danielsson, Catarina
+Copyright (c) 2005-2012 Ulf Norell, Nils Anders Danielsson, Catarina
 Coquand, Makoto Takeyama, Andreas Abel, Karl Mehltretter, Marcin
 Benke, Darin Morrison.
 
diff --git a/README b/README
--- a/README
+++ b/README
@@ -33,7 +33,7 @@
   commands:
 
     cabal update
-    cabal install Agda-executable
+    cabal install Agda
     agda-mode setup
 
   The last command tries to set up Emacs for use with Agda. As an
@@ -42,6 +42,16 @@
     (load-file (let ((coding-system-for-read 'utf-8))
                     (shell-command-to-string "agda-mode locate")))
 
+  It is also possible (but not necessary) to compile the Emacs mode's
+  files:
+
+    agda-mode compile
+
+  This can, in some cases, give a noticeable speedup.
+
+  WARNING: If you reinstall the Agda mode without recompiling the Emacs
+  Lisp files, then Emacs may continue using the old, compiled files.
+
 * Using the source tar balls available from the Agda Wiki, or the
   development version of the code available from our darcs repository.
 
@@ -53,10 +63,8 @@
         cabal update
         cabal install
         agda-mode setup
-        cd src/main
-        cabal install
 
-      The third command tries to set up Emacs for use with Agda. As an
+      The last command tries to set up Emacs for use with Agda. As an
       alternative you can copy the following text to your .emacs file:
 
         (load-file (let ((coding-system-for-read 'utf-8))
@@ -66,10 +74,20 @@
       then you can give various flags to cabal install, see
       cabal install --help.
 
-  2b) Instead of following 2a you can try to install Agda (including
-      batch-mode tool and Emacs mode) by running the following
-      command:
+      It is also possible (but not necessary) to compile the Emacs
+      mode's files:
 
+        agda-mode compile
+
+      This can, in some cases, give a noticeable speedup.
+
+      WARNING: If you reinstall the Agda mode without recompiling the
+      Emacs Lisp files, then Emacs may continue using the old,
+      compiled files.
+
+  2b) Instead of following 2a you can try to install Agda (including a
+      compiled Emacs mode) by running the following command:
+
         make install
 
 ------------------------------------------------------------------------
@@ -115,7 +133,6 @@
    Alex:          http://www.haskell.org/alex/
    Happy:         http://www.haskell.org/happy/
    GNU Emacs:     http://www.gnu.org/software/emacs/
-   haskell-mode:  http://projects.haskell.org/haskellmode-emacs/
 
 You should also make sure that programs installed by cabal-install are
 on your shell's search path.
@@ -145,7 +162,6 @@
 
     cabal update
     cabal install Agda -fepic
-    cabal install Agda-executable
     agda-mode setup
 
 * When installing using a source tar ball, following the instructions
@@ -154,8 +170,6 @@
     cabal update
     cabal install -fepic
     agda-mode setup
-    cd src/main
-    cabal install
 
 * When installing using a source tar ball, following the instructions
   in 2b) above:
diff --git a/dist/build/Agda/Syntax/Parser/Lexer.hs b/dist/build/Agda/Syntax/Parser/Lexer.hs
--- a/dist/build/Agda/Syntax/Parser/Lexer.hs
+++ b/dist/build/Agda/Syntax/Parser/Lexer.hs
@@ -50,19 +50,19 @@
 import GlaExts
 #endif
 alex_base :: AlexAddr
-alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x41\x02\x00\x00\x88\xff\xff\xff\xd9\xff\xff\xff\xda\xff\xff\xff\x99\xff\xff\xff\x20\x03\x00\x00\x5e\x00\x00\x00\x7c\x03\x00\x00\x7b\x03\x00\x00\xfb\x03\x00\x00\xa4\xff\xff\xff\x7b\x04\x00\x00\xfb\x04\x00\x00\x7b\x05\x00\x00\xfb\x05\x00\x00\x7b\x06\x00\x00\xfb\x06\x00\x00\x9b\xff\xff\xff\xa8\xff\xff\xff\x91\xff\xff\xff\xa9\xff\xff\xff\x9f\xff\xff\xff\xab\xff\xff\xff\x00\x00\x00\x00\x6c\x07\x00\x00\x00\x00\x00\x00\xdd\x07\x00\x00\xac\xff\xff\xff\x00\x00\x00\x00\x4e\x08\x00\x00\x00\x00\x00\x00\xbf\x08\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x41\x09\x00\x00\x00\x00\x00\x00\x82\x09\x00\x00\x00\x00\x00\x00\xc3\x09\x00\x00\xa2\x0a\x00\x00\x21\x0b\x00\x00\xe1\x0a\x00\x00\x00\x00\x00\x00\xe1\x0b\x00\x00\xa1\x0b\x00\x00\x00\x00\x00\x00\xa1\x0c\x00\x00\x61\x0c\x00\x00\x00\x00\x00\x00\x61\x0d\x00\x00\x07\x00\x00\x00\xd7\x0d\x00\x00\x39\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x0e\x00\x00\xc3\x0f\x00\x00\xb9\x10\x00\x00\xaf\x11\x00\x00\xa5\x12\x00\x00\x9b\x13\x00\x00\x91\x14\x00\x00\x87\x15\x00\x00\x7d\x16\x00\x00\x73\x17\x00\x00\x69\x18\x00\x00\x5f\x19\x00\x00\x55\x1a\x00\x00\x4b\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x1c\x00\x00\x39\x1d\x00\x00\x30\x1e\x00\x00\x27\x1f\x00\x00\x1e\x20\x00\x00\x15\x21\x00\x00\x0c\x22\x00\x00\x03\x23\x00\x00\xfa\x23\x00\x00\xf1\x24\x00\x00\xe8\x25\x00\x00\xdf\x26\x00\x00\xd6\x27\x00\x00\xcd\x28\x00\x00\xc4\x29\x00\x00\xbb\x2a\x00\x00\xb2\x2b\x00\x00\xa9\x2c\x00\x00\xa0\x2d\x00\x00\x97\x2e\x00\x00\x8e\x2f\x00\x00\x85\x30\x00\x00\x7c\x31\x00\x00\x73\x32\x00\x00\x6a\x33\x00\x00\x61\x34\x00\x00\x58\x35\x00\x00\x4f\x36\x00\x00\x46\x37\x00\x00\x3d\x38\x00\x00\x34\x39\x00\x00\x2b\x3a\x00\x00\x22\x3b\x00\x00\x19\x3c\x00\x00\x10\x3d\x00\x00\x07\x3e\x00\x00\xfe\x3e\x00\x00\xf5\x3f\x00\x00\xec\x40\x00\x00\xe3\x41\x00\x00\xda\x42\x00\x00\xd1\x43\x00\x00\xc8\x44\x00\x00\xbf\x45\x00\x00\xb6\x46\x00\x00\xad\x47\x00\x00\xa4\x48\x00\x00\x9b\x49\x00\x00\x92\x4a\x00\x00\x89\x4b\x00\x00\x80\x4c\x00\x00\x77\x4d\x00\x00\x6e\x4e\x00\x00\x65\x4f\x00\x00\x5c\x50\x00\x00\x53\x51\x00\x00\x4a\x52\x00\x00\x41\x53\x00\x00\x38\x54\x00\x00\x2f\x55\x00\x00\x26\x56\x00\x00\x1d\x57\x00\x00\x14\x58\x00\x00\x0b\x59\x00\x00\x02\x5a\x00\x00\xf9\x5a\x00\x00\xf0\x5b\x00\x00\xe7\x5c\x00\x00\xde\x5d\x00\x00\xef\xff\xff\xff\x00\x00\x00\x00\xd4\x5e\x00\x00\xd4\x5f\x00\x00\xca\x60\x00\x00\xca\x61\x00\x00\xca\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x0e\x00\x00\xad\x0f\x00\x00\xa3\x10\x00\x00\x99\x11\x00\x00\x85\x13\x00\x00\x7b\x14\x00\x00\x71\x15\x00\x00\x67\x16\x00\x00\x5d\x17\x00\x00\x3f\x1a\x00\x00\x39\x1c\x00\x00\x30\x1d\x00\x00\x27\x1e\x00\x00\x1e\x1f\x00\x00\x15\x20\x00\x00\x0c\x21\x00\x00\xfa\x22\x00\x00\xf1\x23\x00\x00\xe8\x24\x00\x00\xdf\x25\x00\x00\xd6\x26\x00\x00\xcd\x27\x00\x00\xc4\x28\x00\x00\xc5\x29\x00\x00\xb2\x2a\x00\x00\xaa\x2c\x00\x00\x74\x32\x00\x00\x23\x3b\x00\x00\xed\x40\x00\x00\x9b\x48\x00\x00\xbe\x5e\x00\x00\xa9\x63\x00\x00\x05\x64\x00\x00\x61\x64\x00\x00\xbd\x64\x00\x00\x00\x00\x00\x00\x19\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xff\xff\xe6\xff\xff\xff\x00\x00\x00\x00\x75\x65\x00\x00\xd1\x65\x00\x00\x53\x34\x00\x00\x2d\x66\x00\x00\x89\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x66\x00\x00\x33\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x67\x00\x00\x9d\x67\x00\x00\xf9\x67\x00\x00\x55\x68\x00\x00\xb1\x68\x00\x00\x0d\x69\x00\x00\x69\x69\x00\x00\xc5\x69\x00\x00\x21\x6a\x00\x00\x7d\x6a\x00\x00\xd9\x6a\x00\x00\x35\x6b\x00\x00\x91\x6b\x00\x00\xed\x6b\x00\x00\x49\x6c\x00\x00\xa5\x6c\x00\x00\x01\x6d\x00\x00\x5d\x6d\x00\x00\xb9\x6d\x00\x00\x15\x6e\x00\x00\x71\x6e\x00\x00\xcd\x6e\x00\x00\x29\x6f\x00\x00\x85\x6f\x00\x00\xe1\x6f\x00\x00\x3d\x70\x00\x00\x99\x70\x00\x00\xf5\x70\x00\x00\x51\x71\x00\x00\xad\x71\x00\x00\x09\x72\x00\x00\x65\x72\x00\x00\xc1\x72\x00\x00\x1d\x73\x00\x00\x79\x73\x00\x00\xd5\x73\x00\x00\x31\x74\x00\x00\x8d\x74\x00\x00\xe9\x74\x00\x00\x45\x75\x00\x00\xa1\x75\x00\x00\xfd\x75\x00\x00\x59\x76\x00\x00\xb5\x76\x00\x00\x11\x77\x00\x00\x6d\x77\x00\x00\xc9\x77\x00\x00\x25\x78\x00\x00\x81\x78\x00\x00\xdd\x78\x00\x00\x39\x79\x00\x00\x95\x79\x00\x00\xf1\x79\x00\x00\x4d\x7a\x00\x00\xa9\x7a\x00\x00\x05\x7b\x00\x00\x61\x7b\x00\x00\xbd\x7b\x00\x00\x19\x7c\x00\x00\x75\x7c\x00\x00\xd1\x7c\x00\x00\x2d\x7d\x00\x00\x89\x7d\x00\x00\xe5\x7d\x00\x00\x41\x7e\x00\x00\x9d\x7e\x00\x00\xf9\x7e\x00\x00\x55\x7f\x00\x00\xb1\x7f\x00\x00\x0d\x80\x00\x00\x69\x80\x00\x00\xc5\x80\x00\x00\x21\x81\x00\x00\x7d\x81\x00\x00\xd9\x81\x00\x00\x35\x82\x00\x00\x91\x82\x00\x00\xed\x82\x00\x00\x49\x83\x00\x00\xa5\x83\x00\x00\x01\x84\x00\x00\x5d\x84\x00\x00\xb9\x84\x00\x00\x15\x85\x00\x00\x71\x85\x00\x00\xcd\x85\x00\x00\x29\x86\x00\x00\x85\x86\x00\x00\xe1\x86\x00\x00\x3d\x87\x00\x00\x99\x87\x00\x00\xf5\x87\x00\x00\x51\x88\x00\x00\xad\x88\x00\x00\x09\x89\x00\x00\x65\x89\x00\x00\xc1\x89\x00\x00\x1d\x8a\x00\x00\x79\x8a\x00\x00\xd5\x8a\x00\x00\x31\x8b\x00\x00\x8d\x8b\x00\x00\xe9\x8b\x00\x00\x45\x8c\x00\x00\xa1\x8c\x00\x00\xfd\x8c\x00\x00\x59\x8d\x00\x00\xb5\x8d\x00\x00\x11\x8e\x00\x00\x6d\x8e\x00\x00\xc9\x8e\x00\x00\x25\x8f\x00\x00\x81\x8f\x00\x00\xdd\x8f\x00\x00\x39\x90\x00\x00\x95\x90\x00\x00\xf1\x90\x00\x00\x4d\x91\x00\x00\xa9\x91\x00\x00\x05\x92\x00\x00\x61\x92\x00\x00\xbd\x92\x00\x00\x19\x93\x00\x00\x75\x93\x00\x00\xd1\x93\x00\x00\x2d\x94\x00\x00\x89\x94\x00\x00\xe5\x94\x00\x00\x41\x95\x00\x00\x9d\x95\x00\x00\xf9\x95\x00\x00\x55\x96\x00\x00\xb1\x96\x00\x00\x0d\x97\x00\x00\x69\x97\x00\x00\xc5\x97\x00\x00\x21\x98\x00\x00\x7d\x98\x00\x00\xd9\x98\x00\x00\x35\x99\x00\x00\x91\x99\x00\x00\xed\x99\x00\x00\x49\x9a\x00\x00\xa5\x9a\x00\x00\x01\x9b\x00\x00\x5d\x9b\x00\x00\xb9\x9b\x00\x00\x15\x9c\x00\x00\x71\x9c\x00\x00"#
+alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x41\x02\x00\x00\x88\xff\xff\xff\xd9\xff\xff\xff\xda\xff\xff\xff\x99\xff\xff\xff\x20\x03\x00\x00\x5e\x00\x00\x00\x7c\x03\x00\x00\x7b\x03\x00\x00\xfb\x03\x00\x00\xa4\xff\xff\xff\x7b\x04\x00\x00\xfb\x04\x00\x00\x7b\x05\x00\x00\xfb\x05\x00\x00\x7b\x06\x00\x00\xfb\x06\x00\x00\x9b\xff\xff\xff\xa8\xff\xff\xff\x91\xff\xff\xff\xa9\xff\xff\xff\x9f\xff\xff\xff\xab\xff\xff\xff\x00\x00\x00\x00\x6c\x07\x00\x00\x00\x00\x00\x00\xdd\x07\x00\x00\xac\xff\xff\xff\x00\x00\x00\x00\x4e\x08\x00\x00\x00\x00\x00\x00\xbf\x08\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x41\x09\x00\x00\x00\x00\x00\x00\x82\x09\x00\x00\x00\x00\x00\x00\xc3\x09\x00\x00\xa2\x0a\x00\x00\x21\x0b\x00\x00\xe1\x0a\x00\x00\x00\x00\x00\x00\xe1\x0b\x00\x00\xa1\x0b\x00\x00\x00\x00\x00\x00\xa1\x0c\x00\x00\x61\x0c\x00\x00\x00\x00\x00\x00\x61\x0d\x00\x00\x07\x00\x00\x00\xd7\x0d\x00\x00\x39\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x0e\x00\x00\xc3\x0f\x00\x00\xb9\x10\x00\x00\xaf\x11\x00\x00\xa5\x12\x00\x00\x9b\x13\x00\x00\x91\x14\x00\x00\x87\x15\x00\x00\x7d\x16\x00\x00\x73\x17\x00\x00\x69\x18\x00\x00\x5f\x19\x00\x00\x55\x1a\x00\x00\x4b\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x1c\x00\x00\x39\x1d\x00\x00\x30\x1e\x00\x00\x27\x1f\x00\x00\x1e\x20\x00\x00\x15\x21\x00\x00\x0c\x22\x00\x00\x03\x23\x00\x00\xfa\x23\x00\x00\xf1\x24\x00\x00\xe8\x25\x00\x00\xdf\x26\x00\x00\xd6\x27\x00\x00\xcd\x28\x00\x00\xc4\x29\x00\x00\xbb\x2a\x00\x00\xb2\x2b\x00\x00\xa9\x2c\x00\x00\xa0\x2d\x00\x00\x97\x2e\x00\x00\x8e\x2f\x00\x00\x85\x30\x00\x00\x7c\x31\x00\x00\x73\x32\x00\x00\x6a\x33\x00\x00\x61\x34\x00\x00\x58\x35\x00\x00\x4f\x36\x00\x00\x46\x37\x00\x00\x3d\x38\x00\x00\x34\x39\x00\x00\x2b\x3a\x00\x00\x22\x3b\x00\x00\x19\x3c\x00\x00\x10\x3d\x00\x00\x07\x3e\x00\x00\xfe\x3e\x00\x00\xf5\x3f\x00\x00\xec\x40\x00\x00\xe3\x41\x00\x00\xda\x42\x00\x00\xd1\x43\x00\x00\xc8\x44\x00\x00\xbf\x45\x00\x00\xb6\x46\x00\x00\xad\x47\x00\x00\xa4\x48\x00\x00\x9b\x49\x00\x00\x92\x4a\x00\x00\x89\x4b\x00\x00\x80\x4c\x00\x00\x77\x4d\x00\x00\x6e\x4e\x00\x00\x65\x4f\x00\x00\x5c\x50\x00\x00\x53\x51\x00\x00\x4a\x52\x00\x00\x41\x53\x00\x00\x38\x54\x00\x00\x2f\x55\x00\x00\x26\x56\x00\x00\x1d\x57\x00\x00\x14\x58\x00\x00\x0b\x59\x00\x00\x02\x5a\x00\x00\xf9\x5a\x00\x00\xf0\x5b\x00\x00\xe7\x5c\x00\x00\xde\x5d\x00\x00\xd5\x5e\x00\x00\xcc\x5f\x00\x00\xc3\x60\x00\x00\xba\x61\x00\x00\xb1\x62\x00\x00\xa8\x63\x00\x00\x9f\x64\x00\x00\x96\x65\x00\x00\x8d\x66\x00\x00\x84\x67\x00\x00\x7b\x68\x00\x00\x72\x69\x00\x00\x69\x6a\x00\x00\x60\x6b\x00\x00\x57\x6c\x00\x00\x4e\x6d\x00\x00\x45\x6e\x00\x00\x3c\x6f\x00\x00\x33\x70\x00\x00\x2a\x71\x00\x00\xef\xff\xff\xff\x00\x00\x00\x00\x20\x72\x00\x00\x20\x73\x00\x00\x16\x74\x00\x00\x16\x75\x00\x00\x16\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x0e\x00\x00\xad\x0f\x00\x00\xa3\x10\x00\x00\x99\x11\x00\x00\x85\x13\x00\x00\x7b\x14\x00\x00\x71\x15\x00\x00\x67\x16\x00\x00\x5d\x17\x00\x00\x3f\x1a\x00\x00\x39\x1c\x00\x00\x30\x1d\x00\x00\x27\x1e\x00\x00\x1e\x1f\x00\x00\x15\x20\x00\x00\x0c\x21\x00\x00\xfa\x22\x00\x00\xf1\x23\x00\x00\xe8\x24\x00\x00\xdf\x25\x00\x00\xd6\x26\x00\x00\xcd\x27\x00\x00\xc4\x28\x00\x00\xbb\x29\x00\x00\xbc\x2a\x00\x00\xa9\x2b\x00\x00\xa1\x2d\x00\x00\x6b\x33\x00\x00\x08\x3e\x00\x00\xc9\x44\x00\x00\x5d\x50\x00\x00\x1d\x56\x00\x00\x0a\x72\x00\x00\xf5\x76\x00\x00\x51\x77\x00\x00\xad\x77\x00\x00\x09\x78\x00\x00\x65\x78\x00\x00\x00\x00\x00\x00\xc1\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xff\xff\xe6\xff\xff\xff\x00\x00\x00\x00\x1d\x79\x00\x00\x79\x79\x00\x00\x41\x36\x00\x00\xd5\x79\x00\x00\x31\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x7a\x00\x00\x33\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x7a\x00\x00\x45\x7b\x00\x00\xa1\x7b\x00\x00\xfd\x7b\x00\x00\x59\x7c\x00\x00\xb5\x7c\x00\x00\x11\x7d\x00\x00\x6d\x7d\x00\x00\xc9\x7d\x00\x00\x25\x7e\x00\x00\x81\x7e\x00\x00\xdd\x7e\x00\x00\x39\x7f\x00\x00\x95\x7f\x00\x00\xf1\x7f\x00\x00\x4d\x80\x00\x00\xa9\x80\x00\x00\x05\x81\x00\x00\x61\x81\x00\x00\xbd\x81\x00\x00\x19\x82\x00\x00\x75\x82\x00\x00\xd1\x82\x00\x00\x2d\x83\x00\x00\x89\x83\x00\x00\xe5\x83\x00\x00\x41\x84\x00\x00\x9d\x84\x00\x00\xf9\x84\x00\x00\x55\x85\x00\x00\xb1\x85\x00\x00\x0d\x86\x00\x00\x69\x86\x00\x00\xc5\x86\x00\x00\x21\x87\x00\x00\x7d\x87\x00\x00\xd9\x87\x00\x00\x35\x88\x00\x00\x91\x88\x00\x00\xed\x88\x00\x00\x49\x89\x00\x00\xa5\x89\x00\x00\x01\x8a\x00\x00\x5d\x8a\x00\x00\xb9\x8a\x00\x00\x15\x8b\x00\x00\x71\x8b\x00\x00\xcd\x8b\x00\x00\x29\x8c\x00\x00\x85\x8c\x00\x00\xe1\x8c\x00\x00\x3d\x8d\x00\x00\x99\x8d\x00\x00\xf5\x8d\x00\x00\x51\x8e\x00\x00\xad\x8e\x00\x00\x09\x8f\x00\x00\x65\x8f\x00\x00\xc1\x8f\x00\x00\x1d\x90\x00\x00\x79\x90\x00\x00\xd5\x90\x00\x00\x31\x91\x00\x00\x8d\x91\x00\x00\xe9\x91\x00\x00\x45\x92\x00\x00\xa1\x92\x00\x00\xfd\x92\x00\x00\x59\x93\x00\x00\xb5\x93\x00\x00\x11\x94\x00\x00\x6d\x94\x00\x00\xc9\x94\x00\x00\x25\x95\x00\x00\x81\x95\x00\x00\xdd\x95\x00\x00\x39\x96\x00\x00\x95\x96\x00\x00\xf1\x96\x00\x00\x4d\x97\x00\x00\xa9\x97\x00\x00\x05\x98\x00\x00\x61\x98\x00\x00\xbd\x98\x00\x00\x19\x99\x00\x00\x75\x99\x00\x00\xd1\x99\x00\x00\x2d\x9a\x00\x00\x89\x9a\x00\x00\xe5\x9a\x00\x00\x41\x9b\x00\x00\x9d\x9b\x00\x00\xf9\x9b\x00\x00\x55\x9c\x00\x00\xb1\x9c\x00\x00\x0d\x9d\x00\x00\x69\x9d\x00\x00\xc5\x9d\x00\x00\x21\x9e\x00\x00\x7d\x9e\x00\x00\xd9\x9e\x00\x00\x35\x9f\x00\x00\x91\x9f\x00\x00\xed\x9f\x00\x00\x49\xa0\x00\x00\xa5\xa0\x00\x00\x01\xa1\x00\x00\x5d\xa1\x00\x00\xb9\xa1\x00\x00\x15\xa2\x00\x00\x71\xa2\x00\x00\xcd\xa2\x00\x00\x29\xa3\x00\x00\x85\xa3\x00\x00\xe1\xa3\x00\x00\x3d\xa4\x00\x00\x99\xa4\x00\x00\xf5\xa4\x00\x00\x51\xa5\x00\x00\xad\xa5\x00\x00\x09\xa6\x00\x00\x65\xa6\x00\x00\xc1\xa6\x00\x00\x1d\xa7\x00\x00\x79\xa7\x00\x00\xd5\xa7\x00\x00\x31\xa8\x00\x00\x8d\xa8\x00\x00\xe9\xa8\x00\x00\x45\xa9\x00\x00\xa1\xa9\x00\x00\xfd\xa9\x00\x00\x59\xaa\x00\x00\xb5\xaa\x00\x00\x11\xab\x00\x00\x6d\xab\x00\x00\xc9\xab\x00\x00\x25\xac\x00\x00\x81\xac\x00\x00\xdd\xac\x00\x00\x39\xad\x00\x00\x95\xad\x00\x00\xf1\xad\x00\x00\x4d\xae\x00\x00\xa9\xae\x00\x00\x05\xaf\x00\x00\x61\xaf\x00\x00\xbd\xaf\x00\x00\x19\xb0\x00\x00\x75\xb0\x00\x00\xd1\xb0\x00\x00\x2d\xb1\x00\x00\x89\xb1\x00\x00\xe5\xb1\x00\x00\x41\xb2\x00\x00\x9d\xb2\x00\x00\xf9\xb2\x00\x00\x55\xb3\x00\x00\xb1\xb3\x00\x00\x0d\xb4\x00\x00\x69\xb4\x00\x00\xc5\xb4\x00\x00\x21\xb5\x00\x00\x7d\xb5\x00\x00\xd9\xb5\x00\x00\x35\xb6\x00\x00\x91\xb6\x00\x00\xed\xb6\x00\x00"#
 
 alex_table :: AlexAddr
-alex_table = AlexA# "\x00\x00\x9e\x00\x4f\x00\x4f\x00\x4f\x00\x4e\x00\x98\x00\x99\x00\xc4\x00\x08\x00\x22\x00\x18\x00\x19\x00\x1d\x00\x1c\x00\x1a\x00\x11\x00\x3e\x00\x51\x00\xc7\x00\xc8\x00\x00\x00\x00\x00\x4f\x00\x2e\x01\xd9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xd8\x00\xd0\x00\xd1\x00\x2e\x01\x2e\x01\x2e\x01\xe7\x00\xc9\x00\x2e\x01\xde\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xcb\x00\xca\x00\x2e\x01\xcc\x00\x2e\x01\xce\x00\xd4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x43\x01\x2e\x01\x2e\x01\xfd\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xd3\x00\x2e\x01\x2e\x01\xcd\x00\x2e\x01\x2f\x01\x2e\x01\x22\x01\x0a\x01\x2e\x01\x18\x01\x2e\x01\x28\x01\x6d\x01\x2e\x01\x2e\x01\xf7\x00\x21\x01\x2e\x01\x45\x01\x2a\x01\x1b\x01\x23\x01\x27\x01\x2e\x01\x1d\x01\x2e\x01\x04\x01\x2e\x01\x2e\x01\x2e\x01\xd6\x00\xcf\x00\xd7\x00\x2e\x01\x9f\x00\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4f\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0a\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x4f\x00\x2e\x01\xd9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xd8\x00\xd0\x00\xd1\x00\x2e\x01\x2e\x01\x2e\x01\xe7\x00\xc9\x00\x2e\x01\xde\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xcb\x00\xca\x00\x2e\x01\xcc\x00\x2e\x01\xce\x00\xd4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x43\x01\x2e\x01\x2e\x01\xfd\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xd3\x00\x2e\x01\x2e\x01\xcd\x00\x2e\x01\x2f\x01\x2e\x01\x22\x01\x0a\x01\x2e\x01\x18\x01\x2e\x01\x28\x01\x6d\x01\x2e\x01\x2e\x01\xf7\x00\x21\x01\x2e\x01\x45\x01\x2a\x01\x1b\x01\x23\x01\x27\x01\x2e\x01\x1d\x01\x2e\x01\x04\x01\x2e\x01\x2e\x01\x2e\x01\xd6\x00\xcf\x00\xd7\x00\x2e\x01\x4f\x00\x4f\x00\x4f\x00\x9e\x00\x4f\x00\x4f\x00\x4f\x00\xa0\x00\x4f\x00\x4f\x00\x4f\x00\xc6\x00\x00\x00\xff\xff\x50\x00\x50\x00\x50\x00\x50\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x97\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x50\x00\x00\x00\x0a\x00\x6c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x7f\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x00\x00\x75\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x82\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x49\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\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\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0d\x00\x2e\x01\x2e\x01\x0c\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x39\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x36\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\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\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\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\x38\x00\x38\x00\x38\x00\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x0f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x13\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\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\x2a\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\x2c\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\x2e\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\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\x37\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\x3c\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\xe5\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0d\x00\x2e\x01\x2e\x01\x0c\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x0f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2e\x00\x14\x00\x25\x00\x25\x00\x25\x00\x26\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\x3f\x00\x3f\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x3f\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xfa\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\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\x3f\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x40\x00\x2e\x01\x00\x00\x2e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\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\x43\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x45\x00\x2e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x46\x00\x2e\x01\x00\x00\x2e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb2\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xbb\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x2e\x01\x52\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x56\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x60\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x60\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x92\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x88\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x11\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x13\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x99\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x99\x00\x00\x00\x99\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x9d\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x99\x00\x00\x00\x99\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\xff\xff\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x99\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x99\x00\x00\x00\x99\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x5c\x01\x2e\x01\x5c\x01\x2f\x00\x2e\x01\xdc\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2f\x00\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2f\x00\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xda\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x59\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2f\x00\x2e\x01\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2f\x00\x2e\x01\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5d\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x5c\x01\x2e\x01\x5c\x01\x0e\x00\x2e\x01\xe2\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x59\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5a\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x59\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x9d\x00\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\xd2\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa3\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa6\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa7\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa8\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xab\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xac\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xad\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb5\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xbd\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xbe\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xbf\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc2\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc3\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc5\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x6e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x6a\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x67\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x66\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x65\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x64\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x63\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x62\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x5e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf6\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x58\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x57\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x02\x01\x56\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x55\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x54\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x53\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x52\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x51\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x50\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xfb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xfc\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4d\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xff\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x4a\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x49\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x48\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x47\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x46\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x03\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x37\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x29\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x40\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x44\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x12\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x14\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x26\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x15\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x17\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3a\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x19\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x1a\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x38\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x1c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x36\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x35\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x1e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2c\x01\x2e\x01\x2e\x01\x25\x01\x2e\x01\x2e\x01\x34\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x33\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x32\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x30\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x31\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x24\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x1f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x39\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x41\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x16\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x42\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x10\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x20\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0f\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0d\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2d\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x09\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x08\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x07\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x06\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x05\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x01\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xfe\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf8\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf5\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf3\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf2\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xf0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x61\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xef\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x68\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xee\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xed\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xec\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x69\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xeb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xea\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x6b\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x6c\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe8\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x5c\x01\x2e\x01\x5c\x01\x0e\x00\x2e\x01\xe6\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xe6\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\xdb\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xc0\x00\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xbc\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb8\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb7\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb6\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb3\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xb0\x00\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xaf\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xae\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xaa\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa9\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa5\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa4\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x3d\x01\xa2\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x0e\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\xa1\x00\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x00\x00\x2e\x01\x00\x00\x2e\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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_table = AlexA# "\x00\x00\xb2\x00\x4f\x00\x4f\x00\x4f\x00\x4e\x00\xac\x00\xad\x00\xdb\x00\x08\x00\x22\x00\x18\x00\x19\x00\x1d\x00\x1c\x00\x1a\x00\x11\x00\x3e\x00\x51\x00\xde\x00\xdf\x00\x00\x00\x00\x00\x4f\x00\x4e\x01\xf0\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xef\x00\xe7\x00\xe8\x00\x4e\x01\x4e\x01\x4e\x01\xfe\x00\xe0\x00\x4e\x01\xf5\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xe2\x00\xe1\x00\x4e\x01\xe3\x00\x4e\x01\xe5\x00\xeb\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x69\x01\x4e\x01\x4e\x01\x16\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xea\x00\x4e\x01\x4e\x01\xe4\x00\x4e\x01\x50\x01\x4e\x01\x3e\x01\x23\x01\x4e\x01\x34\x01\x4e\x01\x46\x01\x97\x01\x4e\x01\x4e\x01\x10\x01\x3d\x01\x4e\x01\x6b\x01\x48\x01\x37\x01\x3f\x01\x45\x01\x4e\x01\x39\x01\x4e\x01\x1d\x01\x4e\x01\x4e\x01\x4e\x01\xed\x00\xe6\x00\xee\x00\x4e\x01\xb3\x00\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4f\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0a\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x4f\x00\x4f\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x4f\x00\x4e\x01\xf0\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xef\x00\xe7\x00\xe8\x00\x4e\x01\x4e\x01\x4e\x01\xfe\x00\xe0\x00\x4e\x01\xf5\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xe2\x00\xe1\x00\x4e\x01\xe3\x00\x4e\x01\xe5\x00\xeb\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x69\x01\x4e\x01\x4e\x01\x16\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xea\x00\x4e\x01\x4e\x01\xe4\x00\x4e\x01\x50\x01\x4e\x01\x3e\x01\x23\x01\x4e\x01\x34\x01\x4e\x01\x46\x01\x97\x01\x4e\x01\x4e\x01\x10\x01\x3d\x01\x4e\x01\x6b\x01\x48\x01\x37\x01\x3f\x01\x45\x01\x4e\x01\x39\x01\x4e\x01\x1d\x01\x4e\x01\x4e\x01\x4e\x01\xed\x00\xe6\x00\xee\x00\x4e\x01\x4f\x00\x4f\x00\x4f\x00\xb2\x00\x4f\x00\x4f\x00\x4f\x00\xb4\x00\x4f\x00\x4f\x00\x4f\x00\xdd\x00\x00\x00\xff\xff\x50\x00\x50\x00\x50\x00\x50\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\xab\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x50\x00\x00\x00\x0a\x00\x6e\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x85\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x79\x00\x00\x00\x8d\x00\x94\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x49\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\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\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0d\x00\x4e\x01\x4e\x01\x0c\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x39\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x36\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\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\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\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\x38\x00\x38\x00\x38\x00\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x0f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x13\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\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\x2a\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\x2c\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\x2e\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\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\x37\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\x3c\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\xfc\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0d\x00\x4e\x01\x4e\x01\x0c\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3c\x00\x0f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2e\x00\x14\x00\x25\x00\x25\x00\x25\x00\x26\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\x3f\x00\x3f\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x3f\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x49\x01\x4e\x01\x13\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\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\x3f\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x40\x00\x4e\x01\x00\x00\x4e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\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\x43\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x45\x00\x4e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x46\x00\x4e\x01\x00\x00\x4e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x49\x00\x49\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\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\x36\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\x37\x00\x10\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2c\x00\x15\x00\x23\x00\x23\x00\x23\x00\x24\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xd1\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x4e\x01\x52\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x56\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x61\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\xd0\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xa6\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8a\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x9c\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x92\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xff\xff\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x33\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x35\x00\x34\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x20\x00\x20\x00\x20\x00\x21\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\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\xad\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xad\x00\x00\x00\xad\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\xb1\x00\xb1\x00\xb1\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\xb1\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xad\x00\x00\x00\xad\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xff\xff\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\xad\x00\x00\x00\xad\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\x30\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x31\x00\x13\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\x17\x00\x1e\x00\x1e\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x85\x01\x4e\x01\x85\x01\x2f\x00\x4e\x01\xf3\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x00\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x00\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf1\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x82\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x00\x4e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x00\x4e\x01\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\xf4\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x86\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x85\x01\x4e\x01\x85\x01\x0e\x00\x4e\x01\xf9\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf6\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x82\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\xfa\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x84\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x83\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x82\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\xb1\x00\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\xe9\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xb7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xba\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbb\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbc\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc0\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc1\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc4\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc5\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcb\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd3\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd4\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd5\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd9\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xda\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xdc\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x98\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x94\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x91\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x90\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x89\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x88\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x81\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x80\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1b\x01\x7f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x7a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x79\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x78\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x77\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x76\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x75\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x14\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x15\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x74\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x73\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x18\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x72\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x71\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x70\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x25\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x47\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x66\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x6a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x44\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x31\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x33\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x65\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x64\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x62\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x61\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x35\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x36\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x60\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x38\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5a\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x58\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x3a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x55\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4c\x01\x4e\x01\x4e\x01\x43\x01\x4e\x01\x4e\x01\x57\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x41\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x42\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x56\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x54\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x52\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x51\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x53\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x40\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x3b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x59\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x5d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x67\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x32\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x30\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x68\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x3c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x2a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x29\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x28\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x27\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x26\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x24\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x22\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x21\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x20\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1f\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x1a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x19\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x17\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x12\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x11\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0d\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0c\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x87\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0a\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x09\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x8b\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x08\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x07\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x06\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x92\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x05\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x04\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x03\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x93\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x02\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x01\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x95\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x96\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xff\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\xf8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\xf7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x85\x01\x4e\x01\x85\x01\x0e\x00\x4e\x01\xfd\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xfd\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\xfb\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd7\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd6\x00\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xd2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xce\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcd\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xcc\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xca\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc9\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc6\x00\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc3\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xc2\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbe\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xbd\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xb9\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xb8\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x63\x01\xb6\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x0e\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\xb5\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x00\x00\x4e\x01\x00\x00\x4e\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x2d\x00\x2d\x00\x6f\x00\x65\x00\x6f\x00\x63\x00\x7b\x00\x6e\x00\x65\x00\x64\x00\x64\x00\x0a\x00\x23\x00\x2e\x00\x2e\x00\xff\xff\xff\xff\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x0b\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\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\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x21\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\xff\xff\xff\xff\x2d\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\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\x53\x00\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\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\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\x7c\x00\xff\xff\x7e\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\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\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\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\x21\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\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\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\x65\x00\x7c\x00\xff\xff\x7e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\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\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\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\x63\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\x7b\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\x69\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x67\x00\x7e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\x65\x00\x7c\x00\xff\xff\x7e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x0a\x00\x0b\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\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\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\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\x62\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\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\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\x64\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\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\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\x5f\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\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\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\x53\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\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\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\x43\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\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\x09\x00\x0a\x00\x0b\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\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\x53\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\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\x09\x00\x0a\x00\x0b\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\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\x43\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\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x09\x00\x0a\x00\x0b\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\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\x2d\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x4f\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x59\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\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\x09\x00\x0a\x00\x0b\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\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\x4f\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x4d\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\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\x09\x00\x0a\x00\x0b\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\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\x53\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\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\x09\x00\x0a\x00\x0b\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\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\x55\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\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\x09\x00\x0a\x00\x0b\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\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\x4d\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\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\x09\x00\x0a\x00\x0b\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\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\x4f\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\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x4c\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\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\x09\x00\x0a\x00\x0b\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\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\x42\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x4c\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x4e\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x4c\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\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\x09\x00\x0a\x00\x0b\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\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\x52\x00\x53\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\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\x09\x00\x0a\x00\x0b\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\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\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x4e\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x44\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\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\x09\x00\x0a\x00\x0b\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\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\x4e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x5c\x00\xff\xff\xff\xff\x5f\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\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\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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"#
+alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x2d\x00\x2d\x00\x6f\x00\x65\x00\x6f\x00\x63\x00\x7b\x00\x6e\x00\x65\x00\x64\x00\x64\x00\x0a\x00\x23\x00\x2e\x00\x2e\x00\xff\xff\xff\xff\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x0b\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\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\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x21\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\xff\xff\xff\xff\x2d\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\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x53\x00\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\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\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\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\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\x7c\x00\xff\xff\x7e\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\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\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\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\x21\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\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\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\x65\x00\x7c\x00\xff\xff\x7e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6f\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\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\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\x63\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\x7b\x00\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\x69\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x67\x00\x7e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\x65\x00\x7c\x00\xff\xff\x7e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x0a\x00\x0b\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\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\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\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\x62\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\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\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\x64\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\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\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\x5f\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\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\x23\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\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\x53\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\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\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\x43\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\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\x09\x00\x0a\x00\x0b\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\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\x53\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\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\x09\x00\x0a\x00\x0b\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\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\x43\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\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x4b\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\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x20\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\x2d\x00\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\x09\x00\x0a\x00\x0b\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\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\x2d\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x43\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\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\x09\x00\x0a\x00\x0b\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\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\x4f\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x59\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\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\x09\x00\x0a\x00\x0b\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\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\x4f\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\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x4d\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\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\x09\x00\x0a\x00\x0b\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\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\x53\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\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\x09\x00\x0a\x00\x0b\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\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\x43\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\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\x09\x00\x0a\x00\x0b\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\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\x55\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\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\x09\x00\x0a\x00\x0b\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\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\x4d\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\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\x09\x00\x0a\x00\x0b\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\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\x5f\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\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\x09\x00\x0a\x00\x0b\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\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\x4f\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\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\x09\x00\x0a\x00\x0b\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\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\x4f\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\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\x20\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x41\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\xff\xff\x7c\x00\xff\xff\x7e\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\x09\x00\x0a\x00\x0b\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\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\x49\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\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\x09\x00\x0a\x00\x0b\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\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\x4d\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\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\x09\x00\x0a\x00\x0b\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\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\x45\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\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\x09\x00\x0a\x00\x0b\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\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\x5f\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\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\x09\x00\x0a\x00\x0b\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\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\x4f\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\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\x09\x00\x0a\x00\x0b\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\x20\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x52\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\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\x09\x00\x0a\x00\x0b\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\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\x4e\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x4e\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x48\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x4c\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\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\x09\x00\x0a\x00\x0b\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\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\x42\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x4c\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x4e\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x4c\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\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\x09\x00\x0a\x00\x0b\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\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\x52\x00\x53\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\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\x09\x00\x0a\x00\x0b\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\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\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x50\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x4e\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\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\x09\x00\x0a\x00\x0b\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\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\x54\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\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\x09\x00\x0a\x00\x0b\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\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\x44\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\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\x09\x00\x0a\x00\x0b\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\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\x4e\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\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\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x5c\x00\xff\xff\xff\xff\x5f\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\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\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\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\x7c\x00\xff\xff\x7e\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\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\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\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\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\x7b\x00\xff\xff\x7d\x00\xff\xff\x7f\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\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\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\xff\xff\x7c\x00\xff\xff\x7e\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"#
 
 alex_deflt :: AlexAddr
-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x48\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\x27\x00\x27\x00\x29\x00\x29\x00\xff\xff\x2b\x00\x2b\x00\x2d\x00\x2d\x00\x32\x00\x32\x00\x35\x00\x35\x00\x38\x00\x38\x00\x3d\x00\x3d\x00\xff\xff\x99\x00\x99\x00\x99\x00\x80\x00\x80\x00\x80\x00\x48\x00\x48\x00\x48\x00\x3e\x00\xff\xff\x3e\x00\x3e\x00\x3e\x00\xff\xff\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\xff\xff\xff\xff\x99\x00\x9d\x00\x99\x00\x9d\x00\x9d\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"#
+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x00\x48\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\x27\x00\x27\x00\x29\x00\x29\x00\xff\xff\x2b\x00\x2b\x00\x2d\x00\x2d\x00\x32\x00\x32\x00\x35\x00\x35\x00\x38\x00\x38\x00\x3d\x00\x3d\x00\xff\xff\xad\x00\xad\x00\xad\x00\x8e\x00\x8e\x00\x8e\x00\x48\x00\x48\x00\x48\x00\x3e\x00\xff\xff\x3e\x00\x3e\x00\x3e\x00\xff\xff\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\x8e\x00\xff\xff\xff\xff\xad\x00\xb1\x00\xad\x00\xb1\x00\xb1\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"#
 
-alex_accept = listArray (0::Int,366) [[],[(AlexAccPred  (alex_action_29) ( not' eof ))],[],[(AlexAcc (alex_action_32))],[],[(AlexAcc (alex_action_31))],[],[(AlexAccPred  (alex_action_4) ( eof ))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_0) (alexRightContext 58)),(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_5) ( inState code ))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAccPred  (alex_action_24) ( not' (followedBy '#') ))],[(AlexAccPred  (alex_action_24) ( not' (followedBy '#') ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_27))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_82))],[(AlexAccPred  (alex_action_83) (alexRightContext 59))],[(AlexAcc (alex_action_84))],[(AlexAcc (alex_action_85))],[(AlexAcc (alex_action_86))],[(AlexAcc (alex_action_87))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))]]
-{-# LINE 208 "src/full/Agda/Syntax/Parser/Lexer.x" #-}
+alex_accept = listArray (0::Int,408) [[],[(AlexAccPred  (alex_action_30) ( not' eof ))],[],[(AlexAcc (alex_action_33))],[],[(AlexAcc (alex_action_32))],[],[(AlexAccPred  (alex_action_4) ( eof ))],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_0) (alexRightContext 58)),(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_5) ( inState code ))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[(AlexAccPred  (alex_action_25) ( not' (followedBy '#') ))],[(AlexAccPred  (alex_action_25) ( not' (followedBy '#') ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_26) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_28))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_84))],[(AlexAcc (alex_action_85))],[(AlexAcc (alex_action_86))],[(AlexAccPred  (alex_action_87) (alexRightContext 59))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_91))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_92))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_93))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))],[(AlexAcc (alex_action_94))]]
+{-# LINE 212 "src/full/Agda/Syntax/Parser/Lexer.x" #-}
 
 
 -- | This is the initial state for parsing a literate file. Code blocks
@@ -164,76 +164,80 @@
 alex_action_19 =  keyword KwIMPORT 
 alex_action_20 =  keyword KwIMPOSSIBLE 
 alex_action_21 =  keyword KwETA 
-alex_action_22 =  keyword KwLINE 
-alex_action_23 =  withInterval $ TokString 
-alex_action_24 =  nestedComment 
-alex_action_25 =  withInterval TokComment 
-alex_action_27 =  begin bol_ 
-alex_action_29 =  offsideRule 
-alex_action_31 =  endWith newLayoutContext 
-alex_action_32 =  emptyLayout 
-alex_action_33 =  keyword KwLet 
-alex_action_34 =  keyword KwIn 
-alex_action_35 =  keyword KwWhere 
-alex_action_36 =  keyword KwField 
-alex_action_37 =  keyword KwWith 
-alex_action_38 =  keyword KwRewrite 
-alex_action_39 =  keyword KwPostulate 
-alex_action_40 =  keyword KwPrimitive 
-alex_action_41 =  keyword KwOpen 
-alex_action_42 =  keyword KwImport 
-alex_action_43 =  keyword KwModule 
-alex_action_44 =  keyword KwData 
-alex_action_45 =  keyword KwCoData 
-alex_action_46 =  keyword KwRecord 
-alex_action_47 =  keyword KwConstructor 
-alex_action_48 =  keyword KwInfix 
-alex_action_49 =  keyword KwInfixL 
-alex_action_50 =  keyword KwInfixR 
-alex_action_51 =  keyword KwMutual 
-alex_action_52 =  keyword KwAbstract 
-alex_action_53 =  keyword KwPrivate 
-alex_action_54 =  keyword KwSet 
-alex_action_55 =  keyword KwProp 
-alex_action_56 =  keyword KwForall 
-alex_action_57 =  withInterval' (read . drop 3) TokSetN 
-alex_action_58 =  keyword KwQuoteGoal 
-alex_action_59 =  keyword KwQuote 
-alex_action_60 =  keyword KwQuoteTerm 
-alex_action_61 =  keyword KwUnquote 
-alex_action_62 =  keyword KwSyntax 
-alex_action_63 =  keyword KwUsing 
-alex_action_64 =  keyword KwHiding 
-alex_action_65 =  keyword KwRenaming 
-alex_action_66 =  endWith $ keyword KwTo 
-alex_action_67 =  keyword KwPublic 
-alex_action_68 =  hole 
-alex_action_69 =  symbol SymEllipsis 
-alex_action_70 =  symbol SymDotDot 
-alex_action_71 =  symbol SymDot 
-alex_action_72 =  symbol SymSemi 
-alex_action_73 =  symbol SymColon 
-alex_action_74 =  symbol SymEqual 
-alex_action_75 =  symbol SymUnderscore 
-alex_action_76 =  symbol SymQuestionMark 
-alex_action_77 =  symbol SymBar 
-alex_action_78 =  symbol SymOpenParen 
-alex_action_79 =  symbol SymCloseParen 
-alex_action_80 =  symbol SymArrow 
-alex_action_81 =  symbol SymLambda 
-alex_action_82 =  symbol SymAs 
-alex_action_83 =  symbol SymDoubleOpenBrace 
-alex_action_84 =  symbol SymOpenBrace 
-alex_action_85 =  symbol SymCloseBrace 
-alex_action_86 =  litChar 
-alex_action_87 =  litString 
-alex_action_88 =  literal LitInt 
-alex_action_89 =  literal LitFloat 
-alex_action_90 =  identifier 
+alex_action_22 =  keyword KwNO_TERMINATION_CHECK 
+alex_action_23 =  keyword KwLINE 
+alex_action_24 =  withInterval $ TokString 
+alex_action_25 =  nestedComment 
+alex_action_26 =  withInterval TokComment 
+alex_action_28 =  begin bol_ 
+alex_action_30 =  offsideRule 
+alex_action_32 =  endWith newLayoutContext 
+alex_action_33 =  emptyLayout 
+alex_action_34 =  keyword KwLet 
+alex_action_35 =  keyword KwIn 
+alex_action_36 =  keyword KwWhere 
+alex_action_37 =  keyword KwField 
+alex_action_38 =  keyword KwWith 
+alex_action_39 =  keyword KwRewrite 
+alex_action_40 =  keyword KwPostulate 
+alex_action_41 =  keyword KwPrimitive 
+alex_action_42 =  keyword KwOpen 
+alex_action_43 =  keyword KwImport 
+alex_action_44 =  keyword KwModule 
+alex_action_45 =  keyword KwData 
+alex_action_46 =  keyword KwCoData 
+alex_action_47 =  keyword KwRecord 
+alex_action_48 =  keyword KwConstructor 
+alex_action_49 =  keyword KwInductive 
+alex_action_50 =  keyword KwCoInductive 
+alex_action_51 =  keyword KwInfix 
+alex_action_52 =  keyword KwInfixL 
+alex_action_53 =  keyword KwInfixR 
+alex_action_54 =  keyword KwMutual 
+alex_action_55 =  keyword KwAbstract 
+alex_action_56 =  keyword KwPrivate 
+alex_action_57 =  keyword KwSet 
+alex_action_58 =  keyword KwProp 
+alex_action_59 =  keyword KwForall 
+alex_action_60 =  withInterval' (read . drop 3) TokSetN 
+alex_action_61 =  keyword KwQuoteGoal 
+alex_action_62 =  keyword KwQuote 
+alex_action_63 =  keyword KwQuoteTerm 
+alex_action_64 =  keyword KwUnquote 
+alex_action_65 =  keyword KwSyntax 
+alex_action_66 =  keyword KwPatternSyn 
+alex_action_67 =  keyword KwUsing 
+alex_action_68 =  keyword KwHiding 
+alex_action_69 =  keyword KwRenaming 
+alex_action_70 =  endWith $ keyword KwTo 
+alex_action_71 =  keyword KwPublic 
+alex_action_72 =  hole 
+alex_action_73 =  symbol SymEllipsis 
+alex_action_74 =  symbol SymDotDot 
+alex_action_75 =  symbol SymDot 
+alex_action_76 =  symbol SymSemi 
+alex_action_77 =  symbol SymColon 
+alex_action_78 =  symbol SymEqual 
+alex_action_79 =  symbol SymUnderscore 
+alex_action_80 =  symbol SymQuestionMark 
+alex_action_81 =  symbol SymBar 
+alex_action_82 =  symbol SymOpenParen 
+alex_action_83 =  symbol SymCloseParen 
+alex_action_84 =  symbol SymArrow 
+alex_action_85 =  symbol SymLambda 
+alex_action_86 =  symbol SymAs 
+alex_action_87 =  symbol SymDoubleOpenBrace 
+alex_action_88 =  symbol SymOpenBrace 
+alex_action_89 =  symbol SymCloseBrace 
+alex_action_90 =  litChar 
+alex_action_91 =  litString 
+alex_action_92 =  literal LitInt 
+alex_action_93 =  literal LitFloat 
+alex_action_94 =  identifier 
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "<built-in>" #-}
-{-# LINE 1 "<command-line>" #-}
+{-# LINE 1 "<command line>" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 -- -----------------------------------------------------------------------------
 -- ALEX TEMPLATE
diff --git a/dist/build/Agda/Syntax/Parser/Parser.hs b/dist/build/Agda/Syntax/Parser/Parser.hs
--- a/dist/build/Agda/Syntax/Parser/Parser.hs
+++ b/dist/build/Agda/Syntax/Parser/Parser.hs
@@ -2,4789 +2,5049 @@
 {-# OPTIONS -fglasgow-exts -cpp #-}
 {-# OPTIONS_GHC -fno-warn-incomplete-patterns
                 -fno-warn-deprecated-flags #-}
-{-# LANGUAGE BangPatterns #-}
-{-| The parser is generated by Happy (<http://www.haskell.org/happy>).
--}
-module Agda.Syntax.Parser.Parser (
-      moduleParser
-    , exprParser
-    , tokensParser
-    , tests
-    ) where
-
-import Control.Arrow
-import Control.Monad
-import Control.Monad.State
-import Data.Char
-import Data.List
-import Data.Maybe
-import qualified Data.Traversable as T
-
-import Agda.Syntax.Position hiding (tests)
-import Agda.Syntax.Parser.Monad
-import Agda.Syntax.Parser.Lexer
-import Agda.Syntax.Parser.Tokens
-import Agda.Syntax.Concrete
-import Agda.Syntax.Concrete.Name
-import Agda.Syntax.Concrete.Pretty
-import Agda.Syntax.Common
-import Agda.Syntax.Fixity
-import Agda.Syntax.Notation
-import Agda.Syntax.Literal
-
-import Agda.Utils.Monad
-import Agda.Utils.QuickCheck
-import Agda.Utils.TestHelpers
-import qualified Data.Array as Happy_Data_Array
-import qualified GHC.Exts as Happy_GHC_Exts
-
--- parser produced by Happy Version 1.18.9
-
-newtype HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70 = HappyAbsSyn HappyAny
-#if __GLASGOW_HASKELL__ >= 607
-type HappyAny = Happy_GHC_Exts.Any
-#else
-type HappyAny = forall a . a
-#endif
-happyIn6 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn6 #-}
-happyOut6 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Token])
-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut6 #-}
-happyIn7 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn7 #-}
-happyOut7 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Token])
-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut7 #-}
-happyIn8 :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn8 #-}
-happyOut8 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Token)
-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut8 #-}
-happyIn9 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn9 #-}
-happyOut9 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (([Pragma], [Declaration]))
-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut9 #-}
-happyIn10 :: t10 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn10 #-}
-happyOut10 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t10
-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut10 #-}
-happyIn11 :: t11 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn11 #-}
-happyOut11 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t11
-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut11 #-}
-happyIn12 :: t12 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn12 #-}
-happyOut12 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t12
-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut12 #-}
-happyIn13 :: (()) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn13 #-}
-happyOut13 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (())
-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut13 #-}
-happyIn14 :: (Integer) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn14 #-}
-happyOut14 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Integer)
-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut14 #-}
-happyIn15 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn15 #-}
-happyOut15 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)
-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut15 #-}
-happyIn16 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn16 #-}
-happyOut16 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])
-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut16 #-}
-happyIn17 :: (Range) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn17 #-}
-happyOut17 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Range)
-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut17 #-}
-happyIn18 :: (Arg Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn18 #-}
-happyOut18 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Arg Name)
-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut18 #-}
-happyIn19 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn19 #-}
-happyOut19 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Name])
-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut19 #-}
-happyIn20 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn20 #-}
-happyOut20 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Name])
-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut20 #-}
-happyIn21 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn21 #-}
-happyOut21 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)
-happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut21 #-}
-happyIn22 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn22 #-}
-happyOut22 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)
-happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut22 #-}
-happyIn23 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn23 #-}
-happyOut23 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)
-happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut23 #-}
-happyIn24 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn24 #-}
-happyOut24 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])
-happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut24 #-}
-happyIn25 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn25 #-}
-happyOut25 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])
-happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut25 #-}
-happyIn26 :: (Either [Name] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn26 #-}
-happyOut26 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [Name] [Expr])
-happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut26 #-}
-happyIn27 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn27 #-}
-happyOut27 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([String])
-happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut27 #-}
-happyIn28 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn28 #-}
-happyOut28 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)
-happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut28 #-}
-happyIn29 :: (Expr) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn29 #-}
-happyOut29 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Expr)
-happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut29 #-}
-happyIn30 :: t30 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn30 #-}
-happyOut30 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t30
-happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut30 #-}
-happyIn31 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn31 #-}
-happyOut31 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])
-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut31 #-}
-happyIn32 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn32 #-}
-happyOut32 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])
-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut32 #-}
-happyIn33 :: t33 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn33 #-}
-happyOut33 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t33
-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut33 #-}
-happyIn34 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn34 #-}
-happyOut34 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])
-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut34 #-}
-happyIn35 :: t35 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn35 #-}
-happyOut35 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t35
-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut35 #-}
-happyIn36 :: t36 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn36 #-}
-happyOut36 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t36
-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut36 #-}
-happyIn37 :: t37 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn37 #-}
-happyOut37 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t37
-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut37 #-}
-happyIn38 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn38 #-}
-happyOut38 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(Name, Expr)])
-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut38 #-}
-happyIn39 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn39 #-}
-happyOut39 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(Name, Expr)])
-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut39 #-}
-happyIn40 :: ((Name, Expr)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn40 #-}
-happyOut40 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Name, Expr))
-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut40 #-}
-happyIn41 :: t41 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn41 #-}
-happyOut41 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t41
-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut41 #-}
-happyIn42 :: t42 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn42 #-}
-happyOut42 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t42
-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut42 #-}
-happyIn43 :: ([TypedBindings]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn43 #-}
-happyOut43 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypedBindings])
-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut43 #-}
-happyIn44 :: (TypedBindings) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn44 #-}
-happyOut44 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (TypedBindings)
-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut44 #-}
-happyIn45 :: (TypedBinding) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn45 #-}
-happyOut45 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (TypedBinding)
-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut45 #-}
-happyIn46 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn46 #-}
-happyOut46 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])
-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut46 #-}
-happyIn47 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn47 #-}
-happyOut47 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either ([LamBinding], Hiding) [Expr])
-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut47 #-}
-happyIn48 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn48 #-}
-happyOut48 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Either Hiding LamBinding])
-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut48 #-}
-happyIn49 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn49 #-}
-happyOut49 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [Either Hiding LamBinding] [Expr])
-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut49 #-}
-happyIn50 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn50 #-}
-happyOut50 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))
-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut50 #-}
-happyIn51 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn51 #-}
-happyOut51 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))
-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut51 #-}
-happyIn52 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn52 #-}
-happyOut52 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))
-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut52 #-}
-happyIn53 :: ([(LHS,RHS,WhereClause)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn53 #-}
-happyOut53 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(LHS,RHS,WhereClause)])
-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut53 #-}
-happyIn54 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn54 #-}
-happyOut54 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])
-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut54 #-}
-happyIn55 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn55 #-}
-happyOut55 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])
-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut55 #-}
-happyIn56 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn56 #-}
-happyOut56 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])
-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut56 #-}
-happyIn57 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn57 #-}
-happyOut57 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])
-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut57 #-}
-happyIn58 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn58 #-}
-happyOut58 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [LamBinding] [Expr])
-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut58 #-}
-happyIn59 :: ((Maybe AsName, ImportDirective)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn59 #-}
-happyOut59 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Maybe AsName, ImportDirective))
-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut59 #-}
-happyIn60 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn60 #-}
-happyOut60 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)
-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut60 #-}
-happyIn61 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn61 #-}
-happyOut61 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)
-happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut61 #-}
-happyIn62 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn62 #-}
-happyOut62 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)
-happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut62 #-}
-happyIn63 :: ((UsingOrHiding , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn63 #-}
-happyOut63 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((UsingOrHiding , Range))
-happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut63 #-}
-happyIn64 :: (([Renaming] , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn64 #-}
-happyOut64 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (([Renaming] , Range))
-happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut64 #-}
-happyIn65 :: ([Renaming]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn65 #-}
-happyOut65 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Renaming])
-happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut65 #-}
-happyIn66 :: (Renaming) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn66 #-}
-happyOut66 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Renaming)
-happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut66 #-}
-happyIn67 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn67 #-}
-happyOut67 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportedName)
-happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut67 #-}
-happyIn68 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn68 #-}
-happyOut68 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportedName)
-happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut68 #-}
-happyIn69 :: ([ImportedName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn69 #-}
-happyOut69 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([ImportedName])
-happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut69 #-}
-happyIn70 :: t70 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn70 #-}
-happyOut70 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t70
-happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut70 #-}
-happyIn71 :: (LHS) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn71 #-}
-happyOut71 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (LHS)
-happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut71 #-}
-happyIn72 :: ([Pattern]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn72 #-}
-happyOut72 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Pattern])
-happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut72 #-}
-happyIn73 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn73 #-}
-happyOut73 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])
-happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut73 #-}
-happyIn74 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn74 #-}
-happyOut74 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])
-happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut74 #-}
-happyIn75 :: (WhereClause) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn75 #-}
-happyOut75 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (WhereClause)
-happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut75 #-}
-happyIn76 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn76 #-}
-happyOut76 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])
-happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut76 #-}
-happyIn77 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn77 #-}
-happyOut77 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])
-happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut77 #-}
-happyIn78 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn78 #-}
-happyOut78 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut78 #-}
-happyIn79 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn79 #-}
-happyOut79 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])
-happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut79 #-}
-happyIn80 :: ([Arg Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn80 #-}
-happyOut80 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Declaration])
-happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut80 #-}
-happyIn81 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn81 #-}
-happyOut81 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut81 #-}
-happyIn82 :: (RHS) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn82 #-}
-happyOut82 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (RHS)
-happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut82 #-}
-happyIn83 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn83 #-}
-happyOut83 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut83 #-}
-happyIn84 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn84 #-}
-happyOut84 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut84 #-}
-happyIn85 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn85 #-}
-happyOut85 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut85 #-}
-happyIn86 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn86 #-}
-happyOut86 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut86 #-}
-happyIn87 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn87 #-}
-happyOut87 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)
-happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut87 #-}
-happyIn88 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn88 #-}
-happyOut88 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut88 #-}
-happyIn89 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn89 #-}
-happyOut89 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])
-happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut89 #-}
-happyIn90 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn90 #-}
-happyOut90 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut90 #-}
-happyIn91 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn91 #-}
-happyOut91 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut91 #-}
-happyIn92 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn92 #-}
-happyOut92 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut92 #-}
-happyIn93 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn93 #-}
-happyOut93 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut93 #-}
-happyIn94 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn94 #-}
-happyOut94 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut94 #-}
-happyIn95 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn95 #-}
-happyOut95 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut95 #-}
-happyIn96 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn96 #-}
-happyOut96 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([String])
-happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut96 #-}
-happyIn97 :: ([HoleName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn97 #-}
-happyOut97 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([HoleName])
-happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut97 #-}
-happyIn98 :: (HoleName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn98 #-}
-happyOut98 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (HoleName)
-happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut98 #-}
-happyIn99 :: (String) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn99 #-}
-happyOut99 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (String)
-happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut99 #-}
-happyIn100 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn100 #-}
-happyOut100 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut100 #-}
-happyIn101 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn101 #-}
-happyOut101 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])
-happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut101 #-}
-happyIn102 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn102 #-}
-happyOut102 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypedBindings] -> Parser ModuleApplication)
-happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut102 #-}
-happyIn103 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn103 #-}
-happyOut103 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut103 #-}
-happyIn104 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn104 #-}
-happyOut104 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut104 #-}
-happyIn105 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn105 #-}
-happyOut105 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut105 #-}
-happyIn106 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn106 #-}
-happyOut106 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])
-happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut106 #-}
-happyIn107 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn107 #-}
-happyOut107 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut107 #-}
-happyIn108 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn108 #-}
-happyOut108 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)
-happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut108 #-}
-happyIn109 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn109 #-}
-happyOut109 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut109 #-}
-happyIn110 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn110 #-}
-happyOut110 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut110 #-}
-happyIn111 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn111 #-}
-happyOut111 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut111 #-}
-happyIn112 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn112 #-}
-happyOut112 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut112 #-}
-happyIn113 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn113 #-}
-happyOut113 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut113 #-}
-happyIn114 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn114 #-}
-happyOut114 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut114 #-}
-happyIn115 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn115 #-}
-happyOut115 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut115 #-}
-happyIn116 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn116 #-}
-happyOut116 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut116 #-}
-happyIn117 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn117 #-}
-happyOut117 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut117 #-}
-happyIn118 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn118 #-}
-happyOut118 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut118 #-}
-happyIn119 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn119 #-}
-happyOut119 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut119 #-}
-happyIn120 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn120 #-}
-happyOut120 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut120 #-}
-happyIn121 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn121 #-}
-happyOut121 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)
-happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut121 #-}
-happyIn122 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn122 #-}
-happyOut122 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])
-happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut122 #-}
-happyIn123 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn123 #-}
-happyOut123 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])
-happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut123 #-}
-happyIn124 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn124 #-}
-happyOut124 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])
-happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut124 #-}
-happyIn125 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn125 #-}
-happyOut125 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])
-happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut125 #-}
-happyIn126 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn126 #-}
-happyOut126 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg TypeSignature])
-happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut126 #-}
-happyIn127 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn127 #-}
-happyOut127 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg TypeSignature])
-happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut127 #-}
-happyIn128 :: ([Constructor]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn128 #-}
-happyOut128 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Constructor])
-happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut128 #-}
-happyIn129 :: ((Maybe Name, [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn129 #-}
-happyOut129 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Maybe Name, [Declaration]))
-happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut129 #-}
-happyIn130 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn130 #-}
-happyOut130 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])
-happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut130 #-}
-happyIn131 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn131 #-}
-happyOut131 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])
-happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut131 #-}
-happyIn132 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn132 #-}
-happyOut132 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])
-happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut132 #-}
-happyInTok :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)
-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyInTok #-}
-happyOutTok :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Token)
-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOutTok #-}
-
-
-happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\x00\x00\xd9\x05\x1f\x00\x00\x00\xb8\x02\x34\x05\x00\x00\x4d\x02\x4d\x02\x00\x00\x00\x00\x1f\x00\x00\x00\x58\x00\xc7\x03\xc7\x03\x59\x05\x3a\x05\x00\x00\x2a\x05\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x00\x00\x00\x00\x00\xa8\x05\x81\x05\x35\x05\x00\x00\xff\x00\x2c\x05\x9a\x07\x00\x00\x00\x00\x66\x07\x2b\x05\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x02\x73\x07\x00\x00\x00\x00\x3f\x07\xaa\x04\x90\x03\x77\x04\x00\x00\x00\x00\x00\x00\x24\x05\xe5\x00\x38\x05\x00\x00\x27\x05\xd4\x01\x25\x05\x00\x00\xe1\x00\x00\x00\x69\x01\x69\x01\x00\x00\x23\x05\x26\x05\x1c\x05\x00\x00\x00\x00\x00\x00\xa4\x01\x81\x05\x00\x00\x20\x05\x00\x00\x18\x07\x39\x01\x6c\x02\x20\x02\x00\x00\x89\x06\x50\x05\x58\x06\x00\x00\x4c\x07\x50\x04\x90\x03\x1d\x04\xb0\x06\xb0\x06\xb0\x06\x4e\x05\xf1\x06\x29\x05\x1f\x05\xf1\x06\x00\x00\xb0\x06\xb0\x06\xb0\x06\x11\x05\xf6\x03\x90\x03\x06\x05\x4a\x05\x03\x03\x00\x00\x60\x01\xb0\x06\xb0\x06\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x03\x29\x05\xb0\x06\x4c\x07\x03\x05\x00\x00\x00\x00\xf1\x06\x35\x00\x25\x07\xc7\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\xfe\x06\x36\x02\x5d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x36\x05\x00\x00\x02\x05\x01\x05\xff\x04\x71\x03\xee\x04\xf1\x06\x31\x05\xf1\x06\xec\x04\xe7\x04\x00\x00\x00\x00\xed\x04\x00\x00\x00\x00\xb0\x06\xb0\x06\xb0\x06\xb0\x06\xd2\x01\x22\x05\xeb\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\xdc\x04\xda\x04\x9f\x00\xc9\x04\xc9\x04\xc9\x04\xd7\x06\xd8\x04\xcc\x04\xcc\x04\xcc\x04\xd2\x04\xd2\x04\xd2\x04\xc4\x04\xc6\x04\xa7\x01\xc7\x0c\x29\x05\xbe\x04\xb8\x04\x00\x00\xbc\x04\xb0\x04\xb4\x04\xcf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x29\x05\xa8\x04\x69\x01\xb1\x04\xa4\x04\x69\x01\x9c\x04\xca\x00\xac\x04\x00\x00\x73\x00\xe8\xff\xa7\x04\xa6\x04\xa5\x04\x00\x00\xb0\x06\xb0\x06\x00\x00\xb0\x06\xb0\x06\xca\x06\xa2\x04\xca\x06\x31\x06\xf8\x04\x00\x06\x00\x00\x00\x00\xa0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x04\x00\x00\x00\x00\xd1\x04\xd1\x04\x91\x04\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\xcf\xff\x64\x00\xcf\xff\xb0\x06\x00\x00\x00\x00\x00\x00\xb0\x06\xd1\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x04\x86\x04\x00\x00\xd1\x04\x00\x00\x7e\x04\x7a\x04\x7c\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\xcc\x00\xb5\x04\xa7\x01\xc5\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x00\x00\xce\x04\xaa\x03\xaf\x06\xaf\x06\xaf\x06\x6d\x04\x00\x00\x6d\x04\x00\x00\xed\xff\x00\x00\x03\x03\x00\x00\x00\x00\xdf\x00\xd1\x04\xae\x04\xd1\x04\xd1\x04\x00\x00\x00\x00\x00\x00\x70\x04\x00\x00\x36\x02\x00\x00\xa1\x04\x14\x00\x14\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x36\x02\x00\x00\x6b\x04\x6f\x04\x00\x00\x5f\x04\x6e\x04\x5e\x04\x60\x04\x69\x04\x8d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\xd1\x04\x00\x00\x00\x00\x59\x04\x4f\x04\x00\x00\x00\x00\xed\xff\x61\x04\x00\x00\x59\x00\x4d\x04\x4d\x04\x5b\x04\x00\x00\x59\x00\xaf\x06\x7f\x00\xac\x00\x9c\x00\x09\x00\xce\x04\x57\x04\x00\x00\x59\x00\x0e\x01\xc9\x01\xed\xff\xed\xff\x6e\x00\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x51\x04\x00\x00\x45\x04\xa7\x01\x6a\x04\xd1\x04\x39\x04\x00\x00\x20\x04\x20\x04\x20\x04\x1f\x04\x1a\x04\x38\x04\x00\x00\x32\x04\x16\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\x14\x04\x00\x00\x00\x00\x12\x04\x13\x04\x11\x04\x0f\x04\x0c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x04\x00\x00\x0a\x04\x00\x00\x0b\x04\x49\x01\x00\x00\x04\x04\x04\x04\x04\x04\x04\x04\x00\x00\xce\x04\xd1\x04\x00\x00\x02\x04\xd1\x04\x01\x04\xd1\x04\x01\x04\xd1\x04\x00\x04\xc7\x03\x06\x04\x00\x00\xf3\x03\xd1\x04\x00\x00\x00\x00\xed\xff\xd1\x04\x00\x00\x2f\x04\x00\x00\x00\x00\x00\x00\xe9\x03\xe9\x03\x27\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x03\x3c\x01\x36\x02\x00\x00\x24\x04\x00\x00\x00\x00\x13\x00\x23\x04\x00\x00\x22\x04\x00\x00\x21\x02\x00\x00\x00\x00\xdd\x03\x49\x01\xd2\x03\x49\x01\xce\x04\xce\x04\xc2\x03\x00\x00\xcd\x03\x00\x00\x00\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\xb7\x03\x00\x00\x00\x00\x00\x00\xce\x04\xce\x04\xce\x04\xce\x04\x00\x00\x59\x00\x59\x00\xab\x03\xb5\x03\xa5\x03\x00\x00\xa5\x03\x00\x00\x00\x00\x2a\x03\x36\x02\x00\x00\x00\x00\x49\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00\x00\x00\xac\x03\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00"#
-
-happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\xbf\x03\xc0\x0c\x1a\x00\xe5\x03\xd8\x03\x00\x00\x00\x00\x01\x03\xc2\x02\x00\x00\x00\x00\x2e\x00\x00\x00\x81\x02\x68\x02\x1c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x03\xa8\x0c\x00\x00\x00\x00\x8b\x03\x5b\x03\xf4\x00\x00\x00\x00\x00\x17\x05\xcb\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x05\x00\x00\x00\x00\x1d\x02\x7d\x08\x19\x08\x64\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\xc8\x03\xba\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x05\x90\x0c\x00\x00\x00\x00\x00\x00\x70\x05\x00\x00\x0d\x01\x22\x00\x00\x00\x51\x0a\xb3\x08\xdb\x07\x00\x00\x40\x05\x4b\x08\xfa\x07\x32\x08\x3a\x0a\x23\x0a\x0c\x0a\x00\x00\xb8\x07\x78\x0c\x00\x00\x76\x06\x00\x00\xf5\x09\xde\x09\xc7\x09\x00\x00\x60\x0c\x68\x0a\xf3\x00\x00\x00\x42\x01\x00\x00\x00\x00\xb0\x09\x99\x09\x00\x00\x00\x00\x00\x00\x00\x00\x48\x0c\x30\x0c\x65\x03\x0f\x05\xb9\x03\x00\x00\x00\x00\x1e\x06\x44\x0a\xdc\x00\xae\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x07\x8d\x00\x7b\x08\x68\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x92\x03\x00\x00\x00\x00\x00\x00\x00\x00\x18\x03\xaf\x03\xc6\x05\x00\x00\x6e\x05\x00\x00\x86\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x04\x82\x09\x6b\x09\x54\x09\x00\x00\x5c\x03\x4d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x03\x1c\x03\xf4\x02\x43\x01\x57\x03\x4a\x03\x3f\x03\xda\x00\xc7\x02\x2f\x03\x24\x03\x22\x03\xac\x02\x9a\x02\x92\x02\xae\x02\x70\x02\xe8\x04\x00\x00\x18\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\x00\x00\x9d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x9b\x02\x00\x00\x00\x00\x94\x02\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x02\x75\x02\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x09\x26\x09\x00\x00\x0f\x09\xf8\x08\xff\x02\x00\x00\x69\x02\xe1\x08\x9c\x08\xca\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x0b\x00\x00\x00\x00\xd0\x0b\xb8\x0b\x00\x00\x00\x00\x6e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x02\x00\x00\x59\x02\x58\x04\x00\x00\x00\x00\x00\x00\xfe\x03\xa0\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x88\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x44\x02\x3d\x02\x28\x02\x19\x02\x17\x02\xf6\x01\xf3\x01\x00\x00\xba\x01\xb2\x01\xaa\x02\x00\x00\x00\x00\x00\x00\xd9\x01\x00\x00\x95\x01\x6e\x01\x00\x00\x16\x00\x97\x04\x3d\x04\xe3\x03\xb0\x03\xf0\x01\x00\x00\x1c\x00\x00\x00\xfd\xff\x00\x00\xad\x01\x00\x00\x00\x00\xaf\x01\x70\x0b\xb3\x01\x58\x0b\x40\x0b\x00\x00\x00\x00\x00\x00\x2d\x03\x00\x00\xba\x07\x00\x00\xce\x00\xc0\x00\xf9\xff\x00\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x9f\x06\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\xd7\x01\x00\x00\x00\x00\x00\x00\xc6\x01\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x28\x0b\x00\x00\x00\x00\x48\x01\xb6\x01\x00\x00\x00\x00\x64\x03\x00\x00\x00\x00\x9e\x03\xb1\x01\x6d\x03\x00\x00\x00\x00\x87\x03\x5a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x34\x04\x00\x00\x00\x00\x80\x03\x00\x00\xb1\x01\x2c\x03\x89\x02\x08\x01\x00\x00\x00\x00\x00\x00\xfd\x02\x00\x00\x00\x00\x00\x00\x00\x00\x76\x01\x47\x01\x3b\x01\x10\x0b\x00\x00\x00\x00\x7e\x01\x79\x01\x6d\x01\x00\x00\x67\x01\x00\x00\x00\x00\x00\x00\x5f\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\x58\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x14\x01\x00\x00\x00\x00\x4e\x01\x00\x00\x19\x03\xa6\x02\x98\x02\x66\x02\x00\x00\x28\x00\xf8\x0a\x00\x00\xd9\x00\xe0\x0a\x7d\x01\xc8\x0a\x73\x01\xb0\x0a\xcd\x01\x67\x00\x00\x00\x00\x00\x32\x00\x98\x0a\x00\x00\x00\x00\xbf\x00\x80\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x01\x1a\x01\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x85\x00\x75\x06\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xa8\x00\xf0\x03\xbd\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xff\x00\x00\x00\x00\x00\x00\x8a\x03\x41\x03\x35\x03\x04\x00\x00\x00\x1e\x02\xd3\x01\x31\x00\xb1\xff\x28\x01\x00\x00\x12\x01\x00\x00\x00\x00\x68\x0a\x1d\x06\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x00\x00\x00\x00"#
-
-happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\xfa\xff\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\xae\xff\x00\x00\x00\x00\xad\xff\xbb\xfe\x00\x00\xb6\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\x6e\xff\x00\x00\x7f\xff\x7e\xff\x7c\xff\x7b\xff\x00\x00\x5b\xff\x5a\xff\x75\xff\x00\x00\x00\x00\x53\xff\x51\xff\x00\x00\x00\x00\x6a\xff\x69\xff\x00\x00\x00\x00\x68\xff\x67\xff\x66\xff\x65\xff\x00\x00\x00\x00\x6b\xff\x6c\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\x8e\xff\x6d\xff\x00\x00\x8d\xff\x00\x00\x87\xff\x00\x00\x86\xff\x00\x00\x6f\xff\x8d\xff\x60\xff\x00\x00\x00\x00\xa2\xff\x00\x00\x00\x00\x00\x00\x61\xff\x8b\xff\x26\xff\x3a\xff\x00\x00\x77\xff\x00\x00\x45\xff\x42\xff\x3b\xff\x00\x00\x00\x00\x8a\xff\x00\x00\x00\x00\x00\x00\x5e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\xff\x00\x00\x00\x00\x2c\xff\x27\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\xff\x00\x00\x00\x00\x52\xff\x00\x00\x00\x00\x00\x00\x54\xff\x82\xff\x7a\xff\x72\xff\x00\x00\x00\x00\x00\x00\x00\x00\x85\xff\x8d\xff\x8c\xff\x28\xff\x15\xff\xc4\xfe\x00\x00\xac\xff\xba\xfe\xb9\xfe\xfb\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd2\xff\xd1\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\x15\xff\xc4\xfe\x15\xff\x00\x00\xbe\xfe\x1d\xff\x1b\xff\x19\xff\x16\xff\x17\xff\x00\x00\x00\x00\x00\x00\x15\xff\x00\x00\x28\xff\x00\x00\x28\xff\x00\x00\x85\xff\x5f\xff\x7d\xff\x00\x00\x80\xff\x86\xff\x75\xff\x00\x00\x00\x00\x00\x00\x8d\xff\x00\xff\xe1\xfe\x8d\xfe\xfb\xfe\xf9\xfe\xf8\xfe\xf7\xfe\xf6\xfe\xf5\xfe\xf4\xfe\xfa\xfe\xf3\xfe\xf2\xfe\xf1\xfe\xf0\xfe\xef\xfe\xe9\xfe\xee\xfe\xec\xfe\xed\xfe\xeb\xfe\xea\xfe\xb7\xfe\xb5\xfe\xb4\xfe\xb2\xfe\xb3\xfe\xb1\xfe\xb0\xfe\xaf\xfe\xac\xfe\xae\xfe\xad\xfe\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\xff\x57\xff\x59\xff\x87\xff\x00\x00\x2e\xff\x2f\xff\x81\xff\x2d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\xff\x00\x00\x30\xff\x00\x00\x00\x00\x38\xff\x37\xff\x39\xff\x25\xff\x00\x00\x00\x00\x24\xff\x00\x00\x00\x00\x41\xff\x3d\xff\x42\xff\x00\x00\x00\x00\x00\x00\x46\xff\x79\xff\x3c\xff\x4a\xff\x62\xff\xa1\xff\x49\xff\x64\xff\x00\x00\x48\xff\x71\xff\x00\x00\x00\x00\x00\x00\x47\xff\x00\x00\x3f\xff\x3e\xff\x40\xff\x44\xff\x43\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\x78\xff\xa8\xff\x00\x00\x00\x00\x50\xff\x4e\xff\x4f\xff\x4d\xff\x4b\xff\x4c\xff\x74\xff\x22\xff\x23\xff\x00\x00\x00\x00\x5d\xff\x00\x00\x76\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\x00\xff\x00\x00\x00\x00\xd1\xfe\xd2\xfe\xd3\xfe\x00\x00\xa6\xff\x00\x00\x00\x00\xd4\xfe\x00\x00\x28\xff\x28\xff\x28\xff\x28\xff\x00\x00\xcf\xfe\x00\x00\xd0\xfe\x00\x00\x91\xfe\x00\x00\xaa\xff\xab\xff\xfe\xfe\x00\x00\x02\xff\x00\x00\x00\x00\x84\xff\xab\xfe\x2a\xff\x00\x00\x29\xff\x15\xff\x1a\xff\xa7\xff\x00\x00\x0a\xff\x18\xff\x00\x00\xc6\xfe\xc3\xfe\xbd\xfe\x15\xff\x0c\xff\x08\xff\x00\x00\x09\xff\x00\x00\x00\x00\x00\x00\x00\x00\x10\xff\x00\x00\xa7\xff\x1c\xff\x8f\xfe\xb8\xfe\x00\x00\xe6\xfe\xff\xfe\x06\xff\x00\x00\xe2\xfe\xe3\xfe\x00\x00\x00\x00\x8e\xfe\x9f\xff\x9d\xff\x00\x00\x9b\xfe\x00\x00\x00\x00\xa3\xff\x00\x00\x9e\xfe\x00\x00\x28\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff\x00\x00\x98\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\xff\xd7\xfe\xd6\xfe\xd5\xfe\x00\x00\xcb\xfe\xc9\xfe\x00\x00\xc7\xfe\x04\xff\x73\xff\x02\xff\x00\x00\x00\x00\x83\xff\x85\xff\x85\xff\x85\xff\x00\x00\x85\xff\x00\x00\xa1\xfe\x00\x00\x00\x00\x55\xff\x56\xff\x5c\xff\x36\xff\x35\xff\x34\xff\x33\xff\x31\xff\x32\xff\x20\xff\x21\xff\x1e\xff\x1f\xff\x63\xff\x70\xff\x00\x00\xa2\xfe\xa3\xfe\x00\x00\x85\xff\x00\x00\x00\x00\x00\x00\xa4\xfe\xe7\xfe\x05\xff\x03\xff\x00\x00\xca\xfe\x00\x00\x89\xff\x00\x00\x00\x00\xa0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xfe\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xfe\x00\x00\x00\x00\xa4\xff\x9d\xfe\x00\x00\x00\x00\x9e\xff\x00\x00\xfd\xfe\x01\xff\x90\xfe\x00\x00\x00\x00\xa7\xff\x12\xff\x0e\xff\x13\xff\x0b\xff\x14\xff\x00\x00\xc5\xfe\x07\xff\x11\xff\x0f\xff\x0d\xff\x00\x00\xe5\xfe\x9c\xfe\xe8\xfe\x9f\xfe\x00\x00\xc4\xfe\x15\xff\xbc\xfe\xdc\xfe\x96\xfe\xde\xfe\x00\x00\x00\x00\xdd\xfe\xd9\xfe\xda\xfe\x00\x00\xe4\xfe\x99\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\x97\xff\xce\xfe\xcd\xfe\x00\x00\xa5\xfe\xa6\xfe\xa8\xfe\x00\x00\xa9\xfe\xaa\xfe\xa7\xfe\x00\x00\xcc\xfe\x98\xff\x9a\xff\x93\xff\x95\xff\x8f\xff\x91\xff\x95\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\xfe\x00\x00\xc0\xfe\xc1\xfe\x00\x00\x15\xff\xfc\xfe\xbf\xfe\x00\x00\xe0\xfe\xdf\xfe\xdb\xfe\xd8\xfe\x92\xfe\x94\xfe\x00\x00\x92\xff\x90\xff\x96\xff\x94\xff\x00\x00\xc8\xfe\x00\x00\xc2\xfe\x93\xfe"#
-
-happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x05\x00\x09\x00\x05\x00\x35\x00\x09\x00\x09\x00\x09\x00\x0a\x00\x0c\x00\x0d\x00\x0f\x00\x03\x00\x09\x00\x0b\x00\x40\x00\x0c\x00\x42\x00\x0e\x00\x00\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x34\x00\x03\x00\x04\x00\x09\x00\x33\x00\x09\x00\x0c\x00\x0f\x00\x0e\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x09\x00\x42\x00\x09\x00\x7b\x00\x45\x00\x0f\x00\x0f\x00\x10\x00\x09\x00\x04\x00\x11\x00\x0c\x00\x48\x00\x0e\x00\x3e\x00\x3f\x00\x40\x00\x09\x00\x09\x00\x0a\x00\x41\x00\x35\x00\x0a\x00\x0b\x00\x0c\x00\x46\x00\x0e\x00\x48\x00\x47\x00\x49\x00\x4b\x00\x5d\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\x3e\x00\x44\x00\x40\x00\x00\x00\x5e\x00\x48\x00\x48\x00\x61\x00\x62\x00\x63\x00\x4a\x00\x09\x00\x66\x00\x47\x00\x68\x00\x46\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x05\x00\x4a\x00\x75\x00\x77\x00\x09\x00\x0f\x00\x10\x00\x5e\x00\x47\x00\x7e\x00\x0f\x00\x62\x00\x48\x00\x64\x00\x65\x00\x60\x00\x67\x00\x03\x00\x69\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x5e\x00\x34\x00\x09\x00\x79\x00\x62\x00\x75\x00\x64\x00\x65\x00\x0f\x00\x67\x00\x09\x00\x69\x00\x09\x00\x35\x00\x05\x00\x06\x00\x0f\x00\x44\x00\x45\x00\x03\x00\x48\x00\x49\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x42\x00\x34\x00\x09\x00\x5d\x00\x1d\x00\x1e\x00\x1f\x00\x41\x00\x0f\x00\x03\x00\x21\x00\x22\x00\x46\x00\x0b\x00\x48\x00\x36\x00\x48\x00\x4b\x00\x45\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x0b\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x35\x00\x60\x00\x09\x00\x09\x00\x5e\x00\x0c\x00\x0d\x00\x61\x00\x62\x00\x63\x00\x07\x00\x35\x00\x66\x00\x42\x00\x68\x00\x07\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x35\x00\x03\x00\x09\x00\x5f\x00\x09\x00\x0f\x00\x48\x00\x49\x00\x0f\x00\x7e\x00\x0f\x00\x5f\x00\x7c\x00\x0f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x1e\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x09\x00\x3e\x00\x35\x00\x40\x00\x35\x00\x3d\x00\x0f\x00\x3b\x00\x3c\x00\x3d\x00\x3b\x00\x49\x00\x3b\x00\x3c\x00\x3d\x00\x42\x00\x48\x00\x20\x00\x21\x00\x22\x00\x09\x00\x1e\x00\x20\x00\x21\x00\x22\x00\x09\x00\x36\x00\x41\x00\x11\x00\x12\x00\x36\x00\x3b\x00\x46\x00\x11\x00\x48\x00\x3b\x00\x36\x00\x4b\x00\x09\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x3d\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x32\x00\x33\x00\x48\x00\x39\x00\x5e\x00\x09\x00\x3c\x00\x61\x00\x62\x00\x63\x00\x5f\x00\x3d\x00\x66\x00\x3f\x00\x68\x00\x41\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x09\x00\x3f\x00\x12\x00\x41\x00\x09\x00\x0f\x00\x0f\x00\x10\x00\x7b\x00\x7e\x00\x0f\x00\x1b\x00\x1c\x00\x0b\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x5d\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x15\x00\x5a\x00\x33\x00\x37\x00\x5d\x00\x39\x00\x37\x00\x38\x00\x16\x00\x3d\x00\x09\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x15\x00\x41\x00\x43\x00\x11\x00\x12\x00\x48\x00\x15\x00\x41\x00\x48\x00\x49\x00\x74\x00\x4b\x00\x46\x00\x40\x00\x48\x00\x42\x00\x7a\x00\x4b\x00\x15\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x15\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x74\x00\x3d\x00\x09\x00\x3f\x00\x5e\x00\x41\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x11\x00\x12\x00\x66\x00\x40\x00\x68\x00\x42\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x09\x00\x42\x00\x12\x00\x09\x00\x09\x00\x0f\x00\x0f\x00\x10\x00\x09\x00\x7e\x00\x0f\x00\x1b\x00\x1c\x00\x7c\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x07\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x05\x00\x06\x00\x33\x00\x37\x00\x0b\x00\x39\x00\x37\x00\x38\x00\x09\x00\x3d\x00\x09\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x74\x00\x41\x00\x09\x00\x11\x00\x12\x00\x48\x00\x7a\x00\x41\x00\x48\x00\x49\x00\x74\x00\x4b\x00\x46\x00\x45\x00\x48\x00\x43\x00\x7a\x00\x4b\x00\x09\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x44\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x35\x00\x3f\x00\x16\x00\x41\x00\x5e\x00\x16\x00\x3b\x00\x61\x00\x62\x00\x63\x00\x48\x00\x3e\x00\x66\x00\x40\x00\x68\x00\x42\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x00\x00\x01\x00\x05\x00\x06\x00\x09\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x16\x00\x11\x00\x16\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\x16\x00\x1e\x00\x0a\x00\x0b\x00\x0c\x00\x26\x00\x0e\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x7c\x00\x7d\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x16\x00\x33\x00\x08\x00\x09\x00\x37\x00\x37\x00\x38\x00\x16\x00\x3a\x00\x0f\x00\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x09\x00\x0b\x00\x44\x00\x0b\x00\x46\x00\x48\x00\x48\x00\x49\x00\x11\x00\x4b\x00\x00\x00\x01\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x0b\x00\x11\x00\x06\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x26\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x09\x00\x1e\x00\x32\x00\x33\x00\x34\x00\x26\x00\x0f\x00\x10\x00\x09\x00\x2a\x00\x06\x00\x0c\x00\x0d\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x0b\x00\x33\x00\x09\x00\x0a\x00\x37\x00\x37\x00\x38\x00\x0b\x00\x3a\x00\x0b\x00\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x09\x00\x0a\x00\x44\x00\x42\x00\x46\x00\x48\x00\x48\x00\x49\x00\x09\x00\x4b\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\x01\x00\x5b\x00\x5c\x00\x5d\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x3d\x00\x7c\x00\x3f\x00\x11\x00\x41\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x7c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x5e\x00\x1e\x00\x09\x00\x0a\x00\x62\x00\x26\x00\x64\x00\x65\x00\x7c\x00\x2a\x00\x08\x00\x01\x00\x08\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x09\x00\x33\x00\x08\x00\x0c\x00\x0d\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x09\x00\x78\x00\x3d\x00\x0c\x00\x3f\x00\x0e\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x46\x00\x09\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x0e\x00\x38\x00\x39\x00\x3a\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x5c\x00\x5d\x00\x31\x00\x32\x00\x33\x00\x01\x00\x5e\x00\x09\x00\x37\x00\x38\x00\x62\x00\x3a\x00\x64\x00\x65\x00\x3d\x00\x74\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x09\x00\x09\x00\x12\x00\x0c\x00\x0d\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x09\x00\x0a\x00\x1b\x00\x1c\x00\x1d\x00\x0a\x00\x0b\x00\x0c\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x05\x00\x06\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x05\x00\x06\x00\x31\x00\x32\x00\x33\x00\x01\x00\x76\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x4c\x00\x3d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x44\x00\x09\x00\x12\x00\x05\x00\x06\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x7c\x00\x7d\x00\x1b\x00\x1c\x00\x1d\x00\x05\x00\x06\x00\x25\x00\x26\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x01\x00\x11\x00\x32\x00\x33\x00\x01\x00\x0b\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x3a\x00\x3d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x0b\x00\x09\x00\x12\x00\x26\x00\x7c\x00\x48\x00\x49\x00\x02\x00\x4b\x00\x32\x00\x33\x00\x1b\x00\x1c\x00\x1d\x00\x37\x00\x32\x00\x33\x00\x34\x00\x3b\x00\x01\x00\x3d\x00\x43\x00\x3f\x00\x3e\x00\x41\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x48\x00\x11\x00\x32\x00\x33\x00\x01\x00\x43\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x48\x00\x3d\x00\x43\x00\x3f\x00\x47\x00\x41\x00\x42\x00\x39\x00\x09\x00\x12\x00\x26\x00\x48\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x48\x00\x49\x00\x1b\x00\x1c\x00\x1d\x00\x42\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x03\x00\x03\x00\x03\x00\x32\x00\x33\x00\x2c\x00\x2d\x00\x2e\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x48\x00\x03\x00\x3d\x00\x3e\x00\x3f\x00\x0f\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x48\x00\x36\x00\x09\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x0e\x00\x43\x00\x43\x00\x43\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x42\x00\x11\x00\x32\x00\x33\x00\x01\x00\x48\x00\x47\x00\x37\x00\x38\x00\x47\x00\x3a\x00\x47\x00\x47\x00\x3d\x00\x47\x00\x3f\x00\x4a\x00\x41\x00\x42\x00\x4a\x00\x09\x00\x12\x00\x26\x00\x4a\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x4a\x00\x4a\x00\x1b\x00\x1c\x00\x1d\x00\x04\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x47\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x47\x00\x47\x00\x3c\x00\x32\x00\x33\x00\x2c\x00\x2d\x00\x2e\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x3a\x00\x35\x00\x3d\x00\x3e\x00\x3f\x00\x35\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x48\x00\x35\x00\x48\x00\x48\x00\x49\x00\x0d\x00\x4b\x00\x43\x00\x34\x00\x3e\x00\x34\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x48\x00\x11\x00\x32\x00\x33\x00\x01\x00\x3e\x00\x3e\x00\x37\x00\x38\x00\x0f\x00\x3a\x00\x04\x00\x43\x00\x3d\x00\x48\x00\x3f\x00\x42\x00\x41\x00\x42\x00\x05\x00\x09\x00\x12\x00\x26\x00\x4a\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x47\x00\x4a\x00\x1b\x00\x1c\x00\x1d\x00\x4a\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x48\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x39\x00\x3e\x00\x39\x00\x32\x00\x33\x00\x39\x00\x39\x00\x39\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x39\x00\x42\x00\x3d\x00\x3e\x00\x3f\x00\x42\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x3e\x00\x34\x00\x09\x00\x48\x00\x49\x00\x36\x00\x4b\x00\x42\x00\x0f\x00\x48\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x3c\x00\x32\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x48\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x48\x00\x41\x00\x1b\x00\x1c\x00\x43\x00\x48\x00\x4b\x00\x09\x00\x48\x00\x49\x00\x43\x00\x4b\x00\x43\x00\x0f\x00\x43\x00\x09\x00\x36\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x05\x00\x11\x00\x3c\x00\x01\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x4a\x00\x3a\x00\x47\x00\x03\x00\x3d\x00\x48\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x12\x00\x3d\x00\x26\x00\x3d\x00\x3d\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\x30\x00\x31\x00\x09\x00\x33\x00\x34\x00\x02\x00\x4a\x00\x48\x00\x0f\x00\x02\x00\x01\x00\x41\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x39\x00\x39\x00\x3e\x00\x32\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x3e\x00\x42\x00\x3d\x00\x42\x00\x3f\x00\x42\x00\x41\x00\x1b\x00\x1c\x00\x35\x00\x39\x00\x43\x00\x4c\x00\x48\x00\x49\x00\x48\x00\x4b\x00\x3b\x00\x4c\x00\x09\x00\x1f\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\x4c\x00\x11\x00\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\x26\x00\xff\xff\x48\x00\x49\x00\x2a\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\x32\x00\x33\x00\x34\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\x11\x00\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x12\x00\x26\x00\xff\xff\x26\x00\xff\xff\x48\x00\x49\x00\x2a\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\x32\x00\x33\x00\x34\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x32\x00\x33\x00\x34\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x1b\x00\x1c\x00\xff\xff\x31\x00\xff\xff\x33\x00\x34\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x32\x00\x33\x00\x33\x00\xff\xff\xff\xff\x37\x00\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x48\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\xff\xff\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\x09\x00\x4b\x00\xff\xff\xff\xff\xff\xff\x31\x00\x0f\x00\x33\x00\x34\x00\xff\xff\x13\x00\x14\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x2c\x00\x2d\x00\x0f\x00\x2f\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\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"#
-
-happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\x6d\x02\xad\x01\x73\x02\x53\x01\xeb\x00\xc5\x01\xcb\x01\xcc\x01\xc6\x01\xc7\x01\x12\x00\x1f\x02\xc5\x01\x8a\x02\x42\x00\xd4\x01\x43\x00\x83\x02\x97\x01\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x62\x01\x05\x00\x06\x00\xc5\x01\xcb\x01\xad\x01\xd4\x01\xb2\x01\xd5\x01\xcb\x01\xcc\x01\x0e\x00\x0f\x00\x79\x00\x63\x01\x46\x00\x7e\x02\x64\x01\x10\x00\x7a\x00\x47\x02\xc5\x01\x7f\x00\x3b\x01\xd4\x01\x33\x00\xd5\x01\xae\x01\xaf\x01\xb0\x01\x7f\x02\xcb\x01\xcc\x01\xed\x00\x20\x02\xd9\x00\xda\x00\xdb\x00\xee\x00\xdc\x00\xef\x00\xcd\x01\xc8\x01\xf0\x00\x87\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x6e\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xae\x01\x98\x01\x3d\x02\x97\x01\xfd\x00\x33\x00\x33\x00\xfe\x00\xff\x00\x00\x01\xd6\x01\x7f\x00\x01\x01\xcd\x01\x02\x01\x11\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x79\x00\x32\x02\x54\x02\xce\x01\xc9\x01\xeb\x00\x7a\x00\x47\x02\x07\x00\x45\x02\x6f\x02\x12\x00\x08\x00\xdd\x00\x09\x00\x0a\x00\x78\x02\x0b\x00\x25\x02\x0c\x00\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x07\x00\x62\x01\x11\x00\xd7\x01\x08\x00\xce\x01\x09\x00\x0a\x00\x12\x00\x0b\x00\x11\x00\x0c\x00\x21\x01\x53\x01\x8b\x02\x95\x01\x12\x00\x98\x01\x64\x01\x21\x02\x33\x00\x34\x00\x19\x00\x1a\x00\xcf\x00\x52\x00\xff\x01\x62\x01\x7f\x00\x66\x02\x19\x00\x1a\x00\xcf\x00\xed\x00\x90\x01\x23\x02\xf5\x01\x24\x01\xee\x00\x69\x02\xef\x00\x26\x02\x33\x00\xf0\x00\x64\x01\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x6b\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x53\x01\x48\x02\xc5\x01\xad\x01\xfd\x00\xc6\x01\xc7\x01\xfe\x00\xff\x00\x00\x01\xb3\x01\x22\x02\x01\x01\x01\x02\x02\x01\xb3\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x24\x02\xc3\x01\x8b\x01\x76\x02\x11\x00\x12\x00\x33\x00\x34\x00\x12\x00\x0d\x01\x12\x00\xaa\x01\x79\x02\xc4\x01\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x21\x01\x66\x00\x19\x00\x1a\x00\xcf\x00\x21\x01\x11\x00\xae\x01\x86\xff\xb2\x01\xe9\x01\xe4\x01\x12\x00\x3e\x02\xb5\x01\xb6\x01\x78\x00\x43\x02\xb4\x01\xb5\x01\xb6\x01\x86\xff\xe5\x01\x6f\x01\x23\x01\x24\x01\x46\x00\x66\x00\x22\x01\x23\x01\x24\x01\x46\x00\x50\x01\xed\x00\xdc\x01\x12\x02\x54\x01\x78\x00\xee\x00\x3e\x01\xef\x00\x78\x00\x12\x02\xf0\x00\x3f\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xe4\x01\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x2b\x00\x6e\x00\xe5\x01\x76\x00\xfd\x00\x40\x02\x77\x00\xfe\x00\xff\x00\x00\x01\xd0\x00\x64\x00\x01\x01\x6f\x00\x02\x01\x70\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x79\x00\x19\x02\x22\x00\x1a\x02\x11\x00\x12\x00\x7a\x00\x7d\x00\x51\x02\x89\x02\x12\x00\x23\x00\x24\x00\x59\x02\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x5d\x02\x73\x00\x19\x00\x1a\x00\xe6\x01\x27\x00\x28\x00\x29\x00\x2a\x00\x27\xff\x27\xff\x61\x02\x5b\x02\x57\x00\x27\xff\x5c\x02\x27\xff\x2d\x00\x2e\x00\x03\x02\x27\xff\x46\x00\x27\xff\x68\x00\x27\xff\x78\x02\x06\x02\x75\x00\x0d\x02\xdc\x01\xdd\x01\x27\xff\x08\x02\xed\x00\x33\x00\x34\x00\x4b\x02\x35\x00\xee\x00\x42\x00\xef\x00\x43\x00\x7c\x02\xf0\x00\x09\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x0a\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x4b\x02\xe9\x00\x46\x00\xea\x00\xfd\x00\xeb\x00\x7d\x02\xfe\x00\xff\x00\x00\x01\xdc\x01\xde\x01\x01\x01\x42\x00\x02\x01\x43\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x79\x00\x0e\x02\x22\x00\x15\x02\x11\x00\x12\x00\x7a\x00\xce\x00\x2f\x02\x0d\x01\x12\x00\x23\x00\x24\x00\x30\x02\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x33\x02\xe5\x01\x19\x00\x1a\x00\xe6\x01\x27\x00\x28\x00\x29\x00\x2a\x00\x50\x00\x51\x00\x80\x02\x95\x01\x57\x00\x52\x00\xac\x01\x41\xff\x2d\x00\x2e\x00\x37\x02\x45\x01\x46\x00\x46\x01\x68\x00\x47\x01\x69\x00\x4b\x02\x75\x00\x39\x02\xdc\x01\xdf\x01\x33\x00\x4c\x02\xed\x00\x33\x00\x34\x00\x4b\x02\x35\x00\xc4\x01\xc1\x01\xef\x00\xbe\x01\x4f\x02\xf0\x00\xcf\x01\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xe7\x01\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x9d\x01\x17\x02\xe9\x01\x18\x02\xfd\x00\xeb\x01\x78\x00\xfe\x00\xff\x00\x00\x01\x33\x00\x7c\xff\x01\x01\x7c\xff\x02\x01\x7c\xff\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x97\x01\x21\x00\x81\x02\x82\x02\x79\x00\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x7a\x00\x7b\x00\xec\x01\x47\x00\xed\x01\x12\x01\x13\x01\x14\x01\x15\x01\x71\x02\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\xee\x01\x1d\x01\xd9\x00\xda\x00\xdb\x00\x48\x00\xdc\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\xb9\x01\x49\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x4d\x00\x4e\x00\x1e\x01\xef\x01\x1f\x01\x0e\x00\x0f\x00\x52\x00\x2d\x00\x2e\x00\xf0\x01\x2f\x00\x10\x00\xe9\x00\x68\x00\x3d\x01\x69\x00\x3e\x01\x75\x00\x46\x00\xfd\x01\x98\x01\xff\x01\x20\x01\x33\x00\x33\x00\x34\x00\x47\x00\x35\x00\x97\x01\x21\x00\xcb\x01\x55\x02\x79\x00\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x7a\x00\x7c\x00\x01\x02\x47\x00\x60\x01\x12\x01\x13\x01\x14\x01\x15\x01\xdd\x00\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\x79\x00\x1d\x01\x26\x02\xdf\x00\x62\x00\x41\x01\x7a\x00\x7d\x00\xc5\x01\x5a\x01\x64\x01\xc6\x01\x13\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\x01\x62\x00\x1e\x01\x67\x01\x1f\x01\xcb\x01\x56\x02\x52\x00\x2d\x00\x2e\x00\x6a\x01\x2f\x00\x6d\x01\x5b\x00\x68\x00\x40\x01\x69\x00\x41\x01\x75\x00\xcb\x01\x57\x02\x98\x01\x7f\x01\x20\x01\x33\x00\x33\x00\x34\x00\x81\x01\x35\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\x21\x00\xe0\x01\xe1\x01\xe2\x01\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x5b\x00\x82\x01\x5c\x00\x47\x00\x5d\x00\x12\x01\x13\x01\x14\x01\x15\x01\x83\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\x07\x00\x1d\x01\xcb\x01\x58\x02\x08\x00\x41\x01\x80\x00\x0a\x00\x84\x01\x5b\x01\x85\x01\x21\x00\x87\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\x01\x62\x00\x1e\x01\xc5\x01\x1f\x01\x88\x01\xc6\x01\x14\x02\x2d\x00\x2e\x00\x22\x00\x2f\x00\xc5\x01\x89\x01\x68\x00\xd4\x01\x69\x00\x84\x02\x75\x00\x23\x00\x24\x00\x25\x00\x8c\x01\x20\x01\xc5\x01\x33\x00\x34\x00\xd4\x01\x35\x00\x85\x02\xa3\x01\xd6\x00\xd7\x00\x8d\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x10\x02\xe2\x01\x7c\x02\x2b\x00\x2c\x00\x21\x00\x07\x00\x8e\x01\x2d\x00\x2e\x00\x08\x00\x2f\x00\x81\x00\x0a\x00\x30\x00\x90\x01\x31\x00\x42\x00\x32\x00\x43\x00\xc5\x01\x11\x00\x22\x00\xc6\x01\x2e\x02\x33\x00\x34\x00\x12\x00\x35\x00\xcb\x01\x2a\x02\x23\x00\x24\x00\x25\x00\xd9\x00\xda\x00\xdb\x00\xe3\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x1a\x02\x1b\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x02\x28\x02\xa9\x01\x2b\x00\x2c\x00\x21\x00\x92\x01\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x86\x02\x98\x01\x30\x00\x9d\x01\x31\x00\x42\x00\x32\x00\x43\x00\x9a\x01\x11\x00\x22\x00\x2b\x02\x2c\x02\x33\x00\x34\x00\x12\x00\x35\x00\xb9\x01\xba\x01\x23\x00\x24\x00\x25\x00\x94\x01\x95\x01\x6c\x00\x1f\x00\x72\x00\x17\x00\x73\x00\x19\x00\x1a\x00\x1b\x00\xa2\x01\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x35\x00\x04\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x4d\x01\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x67\x02\xa7\x01\x30\x00\xe0\x00\x31\x00\x42\x00\x32\x00\x43\x00\x4e\x01\x5d\x00\x22\x00\xdd\x00\x6a\x00\x33\x00\x34\x00\x82\x00\x35\x00\x50\x00\x51\x00\x23\x00\x24\x00\x25\x00\x52\x00\xd0\x01\xdf\x00\x62\x00\x78\x00\x04\x00\x64\x00\x4e\x02\x65\x00\x89\x02\x66\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x33\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x53\x02\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x68\x02\xe5\x01\x30\x00\x6c\x00\x31\x00\x65\x02\x32\x00\x3d\x00\x66\x02\x11\x00\x22\x00\xdd\x00\xe5\x01\x33\x00\x34\x00\x12\x00\x35\x00\x33\x00\x34\x00\x23\x00\x24\x00\x25\x00\x6b\x02\xd1\x01\xdf\x00\x62\x00\xf8\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\x21\x00\x6d\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x72\x02\x73\x02\x75\x02\x2b\x00\x2c\x00\xf9\x01\xfa\x01\xfb\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\x33\x00\x42\x02\x30\x00\x46\x00\x31\x00\xb8\x01\x32\x00\x23\x00\x24\x00\x25\x00\x33\x00\x47\x02\xc5\x01\x33\x00\x34\x00\xd4\x01\x35\x00\x1d\x02\xbc\x01\x4e\x02\x53\x02\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x5b\x02\x47\x00\x2b\x00\x2c\x00\x21\x00\xe5\x01\x5f\x02\x2d\x00\x2e\x00\x60\x02\x2f\x00\x61\x02\x63\x02\x30\x00\x64\x02\x31\x00\xe2\x00\x32\x00\x3d\x00\xeb\x01\x11\x00\x22\x00\xdd\x00\xe2\x00\x33\x00\x34\x00\x12\x00\x35\x00\x08\x02\xe2\x00\x23\x00\x24\x00\x25\x00\xc0\x01\xd2\x01\xdf\x00\x62\x00\xf8\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\x21\x00\x05\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x06\x02\x0c\x02\x81\x01\x2b\x00\x2c\x00\xf9\x01\xfa\x01\xfc\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\x10\x02\x1d\x02\x30\x00\x46\x00\x31\x00\x2a\x02\x32\x00\x23\x00\x24\x00\x25\x00\x33\x00\x2e\x02\x33\x00\x33\x00\x34\x00\x35\x02\x35\x00\x6c\x00\x36\x02\x37\x02\x3c\x02\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x33\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x39\x02\x3b\x02\x2d\x00\x2e\x00\xb8\x01\x2f\x00\xc0\x01\xbc\x01\x30\x00\x33\x00\x31\x00\xf7\x01\x32\x00\x3d\x00\x9c\x01\x11\x00\x22\x00\xdd\x00\xeb\x01\x33\x00\x34\x00\x12\x00\x35\x00\xf2\x01\xf3\x01\x23\x00\x24\x00\x25\x00\xf4\x01\xd3\x01\xdf\x00\x62\x00\x72\x00\x17\x00\x33\x00\x19\x00\x1a\x00\xe7\x00\x21\x00\x03\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\xff\x67\x01\x44\xff\x2b\x00\x2c\x00\x40\xff\x3e\xff\x3f\xff\x2d\x00\x2e\x00\x22\x00\x2f\x00\x66\x01\x69\x01\x30\x00\x46\x00\x31\x00\x6c\x01\x32\x00\x23\x00\x24\x00\x25\x00\x6a\x01\x71\x01\x7e\x01\x33\x00\x34\x00\x73\x01\x35\x00\x6f\x01\x12\x00\x33\x00\x21\x00\x72\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xd9\x01\xda\x01\x81\x01\x2b\x00\x2c\x00\x19\x00\x1a\x00\x55\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x33\x00\xdb\x01\x30\x00\xdc\x01\x31\x00\x33\x00\x32\x00\x23\x00\x24\x00\x6c\x00\x33\x00\x87\x01\x11\x00\x33\x00\x34\x00\x8b\x01\x35\x00\x92\x01\x12\x00\x94\x01\x46\x00\x9a\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9c\x01\x47\x00\x77\x00\x21\x00\x57\x00\x19\x00\x1a\x00\xe2\x00\x2d\x00\x2e\x00\xe2\x00\x2f\x00\x9f\x01\xa1\x01\x68\x00\x33\x00\x69\x00\x42\x00\x75\x00\x43\x00\x22\x00\xa5\x01\x5e\x00\xa6\x01\xa7\x01\x33\x00\x34\x00\xdb\x00\x35\x00\x23\x00\x24\x00\x25\x00\x5f\x00\x60\x00\x11\x00\x61\x00\x62\x00\x21\x01\xe2\x00\x33\x00\x12\x00\x2d\x01\x21\x00\x26\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2a\x01\x48\x01\x4b\x01\x2b\x00\x2c\x00\x19\x00\x1a\x00\x55\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x4c\x01\x4d\x01\x30\x00\x51\x01\x31\x00\x52\x01\x32\x00\x23\x00\x24\x00\x53\x01\x71\x00\x6c\x00\xff\xff\x33\x00\x34\x00\x33\x00\x35\x00\x78\x00\xff\xff\x46\x00\x79\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\xff\xff\x47\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x42\x00\x75\x00\x43\x00\x22\x00\xdd\x00\x00\x00\x41\x01\x00\x00\x33\x00\x34\x00\x42\x01\x35\x00\x23\x00\x24\x00\x25\x00\x00\x00\x9f\x01\xdf\x00\x62\x00\x43\x01\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x47\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x73\xff\x2f\x00\x00\x00\x73\xff\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x00\x00\x22\x00\xdd\x00\x00\x00\x41\x01\x00\x00\x33\x00\x34\x00\x49\x01\x35\x00\x23\x00\x24\x00\x25\x00\x00\x00\xa1\x01\xdf\x00\x62\x00\x43\x01\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x58\x01\x22\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x23\x00\x24\x00\x00\x00\x00\x00\xde\x00\xdf\x00\x62\x00\x7a\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x5a\x01\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x39\x01\x22\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x23\x00\x24\x00\x00\x00\x28\x01\x00\x00\x61\x00\x62\x00\x75\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x3b\x01\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x3c\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x50\x00\x51\x00\x57\x00\x00\x00\x00\x00\x52\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x64\x00\x68\x00\x65\x00\x69\x00\x66\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x45\x01\x00\x00\x46\x01\x57\x00\x47\x01\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x00\x00\x65\x00\x57\x00\x66\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x45\x01\x00\x00\x46\x01\x57\x00\x47\x01\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\xd2\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x53\x00\x00\x00\x54\x00\x57\x00\x55\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x00\x00\x65\x00\x57\x00\x66\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x11\x00\x35\x00\x00\x00\x00\x00\x00\x00\x2b\x01\x12\x00\x61\x00\x62\x00\x00\x00\x37\x00\x26\x01\xb8\x01\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x33\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\xab\x01\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x3b\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x35\x01\x36\x01\x12\x00\x37\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x31\x01\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x40\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x11\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x30\x01\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x32\x01\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x11\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x3b\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x44\x00\x11\x00\x00\x00\x58\x01\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x27\x01\x38\x00\xa9\x01\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x39\x01\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x27\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x26\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\x00\x00\x00\x00\x5c\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2d\x01\x00\x00\x00\x00\x5d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2e\x01\x00\x00\x00\x00\x5e\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x30\x01\x00\x00\x00\x00\x5f\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x31\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x30\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x31\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x32\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x26\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x27\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2d\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2e\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2f\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x3f\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x36\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x75\x01\x76\x01\x77\x01\x78\x01\x79\x01\x7a\x01\x7b\x01\x7c\x01\x7d\x01\x7e\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 (3, 370) [
-	(3 , happyReduce_3),
-	(4 , happyReduce_4),
-	(5 , happyReduce_5),
-	(6 , happyReduce_6),
-	(7 , happyReduce_7),
-	(8 , happyReduce_8),
-	(9 , happyReduce_9),
-	(10 , happyReduce_10),
-	(11 , happyReduce_11),
-	(12 , happyReduce_12),
-	(13 , happyReduce_13),
-	(14 , happyReduce_14),
-	(15 , happyReduce_15),
-	(16 , happyReduce_16),
-	(17 , happyReduce_17),
-	(18 , happyReduce_18),
-	(19 , happyReduce_19),
-	(20 , happyReduce_20),
-	(21 , happyReduce_21),
-	(22 , happyReduce_22),
-	(23 , happyReduce_23),
-	(24 , happyReduce_24),
-	(25 , happyReduce_25),
-	(26 , happyReduce_26),
-	(27 , happyReduce_27),
-	(28 , happyReduce_28),
-	(29 , happyReduce_29),
-	(30 , happyReduce_30),
-	(31 , happyReduce_31),
-	(32 , happyReduce_32),
-	(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),
-	(142 , happyReduce_142),
-	(143 , happyReduce_143),
-	(144 , happyReduce_144),
-	(145 , happyReduce_145),
-	(146 , happyReduce_146),
-	(147 , happyReduce_147),
-	(148 , happyReduce_148),
-	(149 , happyReduce_149),
-	(150 , happyReduce_150),
-	(151 , happyReduce_151),
-	(152 , happyReduce_152),
-	(153 , happyReduce_153),
-	(154 , happyReduce_154),
-	(155 , happyReduce_155),
-	(156 , happyReduce_156),
-	(157 , happyReduce_157),
-	(158 , happyReduce_158),
-	(159 , happyReduce_159),
-	(160 , happyReduce_160),
-	(161 , happyReduce_161),
-	(162 , happyReduce_162),
-	(163 , happyReduce_163),
-	(164 , happyReduce_164),
-	(165 , happyReduce_165),
-	(166 , happyReduce_166),
-	(167 , happyReduce_167),
-	(168 , happyReduce_168),
-	(169 , happyReduce_169),
-	(170 , happyReduce_170),
-	(171 , happyReduce_171),
-	(172 , happyReduce_172),
-	(173 , happyReduce_173),
-	(174 , happyReduce_174),
-	(175 , happyReduce_175),
-	(176 , happyReduce_176),
-	(177 , happyReduce_177),
-	(178 , happyReduce_178),
-	(179 , happyReduce_179),
-	(180 , happyReduce_180),
-	(181 , happyReduce_181),
-	(182 , happyReduce_182),
-	(183 , happyReduce_183),
-	(184 , happyReduce_184),
-	(185 , happyReduce_185),
-	(186 , happyReduce_186),
-	(187 , happyReduce_187),
-	(188 , happyReduce_188),
-	(189 , happyReduce_189),
-	(190 , happyReduce_190),
-	(191 , happyReduce_191),
-	(192 , happyReduce_192),
-	(193 , happyReduce_193),
-	(194 , happyReduce_194),
-	(195 , happyReduce_195),
-	(196 , happyReduce_196),
-	(197 , happyReduce_197),
-	(198 , happyReduce_198),
-	(199 , happyReduce_199),
-	(200 , happyReduce_200),
-	(201 , happyReduce_201),
-	(202 , happyReduce_202),
-	(203 , happyReduce_203),
-	(204 , happyReduce_204),
-	(205 , happyReduce_205),
-	(206 , happyReduce_206),
-	(207 , happyReduce_207),
-	(208 , happyReduce_208),
-	(209 , happyReduce_209),
-	(210 , happyReduce_210),
-	(211 , happyReduce_211),
-	(212 , happyReduce_212),
-	(213 , happyReduce_213),
-	(214 , happyReduce_214),
-	(215 , happyReduce_215),
-	(216 , happyReduce_216),
-	(217 , happyReduce_217),
-	(218 , happyReduce_218),
-	(219 , happyReduce_219),
-	(220 , happyReduce_220),
-	(221 , happyReduce_221),
-	(222 , happyReduce_222),
-	(223 , happyReduce_223),
-	(224 , happyReduce_224),
-	(225 , happyReduce_225),
-	(226 , happyReduce_226),
-	(227 , happyReduce_227),
-	(228 , happyReduce_228),
-	(229 , happyReduce_229),
-	(230 , happyReduce_230),
-	(231 , happyReduce_231),
-	(232 , happyReduce_232),
-	(233 , happyReduce_233),
-	(234 , happyReduce_234),
-	(235 , happyReduce_235),
-	(236 , happyReduce_236),
-	(237 , happyReduce_237),
-	(238 , happyReduce_238),
-	(239 , happyReduce_239),
-	(240 , happyReduce_240),
-	(241 , happyReduce_241),
-	(242 , happyReduce_242),
-	(243 , happyReduce_243),
-	(244 , happyReduce_244),
-	(245 , happyReduce_245),
-	(246 , happyReduce_246),
-	(247 , happyReduce_247),
-	(248 , happyReduce_248),
-	(249 , happyReduce_249),
-	(250 , happyReduce_250),
-	(251 , happyReduce_251),
-	(252 , happyReduce_252),
-	(253 , happyReduce_253),
-	(254 , happyReduce_254),
-	(255 , happyReduce_255),
-	(256 , happyReduce_256),
-	(257 , happyReduce_257),
-	(258 , happyReduce_258),
-	(259 , happyReduce_259),
-	(260 , happyReduce_260),
-	(261 , happyReduce_261),
-	(262 , happyReduce_262),
-	(263 , happyReduce_263),
-	(264 , happyReduce_264),
-	(265 , happyReduce_265),
-	(266 , happyReduce_266),
-	(267 , happyReduce_267),
-	(268 , happyReduce_268),
-	(269 , happyReduce_269),
-	(270 , happyReduce_270),
-	(271 , happyReduce_271),
-	(272 , happyReduce_272),
-	(273 , happyReduce_273),
-	(274 , happyReduce_274),
-	(275 , happyReduce_275),
-	(276 , happyReduce_276),
-	(277 , happyReduce_277),
-	(278 , happyReduce_278),
-	(279 , happyReduce_279),
-	(280 , happyReduce_280),
-	(281 , happyReduce_281),
-	(282 , happyReduce_282),
-	(283 , happyReduce_283),
-	(284 , happyReduce_284),
-	(285 , happyReduce_285),
-	(286 , happyReduce_286),
-	(287 , happyReduce_287),
-	(288 , happyReduce_288),
-	(289 , happyReduce_289),
-	(290 , happyReduce_290),
-	(291 , happyReduce_291),
-	(292 , happyReduce_292),
-	(293 , happyReduce_293),
-	(294 , happyReduce_294),
-	(295 , happyReduce_295),
-	(296 , happyReduce_296),
-	(297 , happyReduce_297),
-	(298 , happyReduce_298),
-	(299 , happyReduce_299),
-	(300 , happyReduce_300),
-	(301 , happyReduce_301),
-	(302 , happyReduce_302),
-	(303 , happyReduce_303),
-	(304 , happyReduce_304),
-	(305 , happyReduce_305),
-	(306 , happyReduce_306),
-	(307 , happyReduce_307),
-	(308 , happyReduce_308),
-	(309 , happyReduce_309),
-	(310 , happyReduce_310),
-	(311 , happyReduce_311),
-	(312 , happyReduce_312),
-	(313 , happyReduce_313),
-	(314 , happyReduce_314),
-	(315 , happyReduce_315),
-	(316 , happyReduce_316),
-	(317 , happyReduce_317),
-	(318 , happyReduce_318),
-	(319 , happyReduce_319),
-	(320 , happyReduce_320),
-	(321 , happyReduce_321),
-	(322 , happyReduce_322),
-	(323 , happyReduce_323),
-	(324 , happyReduce_324),
-	(325 , happyReduce_325),
-	(326 , happyReduce_326),
-	(327 , happyReduce_327),
-	(328 , happyReduce_328),
-	(329 , happyReduce_329),
-	(330 , happyReduce_330),
-	(331 , happyReduce_331),
-	(332 , happyReduce_332),
-	(333 , happyReduce_333),
-	(334 , happyReduce_334),
-	(335 , happyReduce_335),
-	(336 , happyReduce_336),
-	(337 , happyReduce_337),
-	(338 , happyReduce_338),
-	(339 , happyReduce_339),
-	(340 , happyReduce_340),
-	(341 , happyReduce_341),
-	(342 , happyReduce_342),
-	(343 , happyReduce_343),
-	(344 , happyReduce_344),
-	(345 , happyReduce_345),
-	(346 , happyReduce_346),
-	(347 , happyReduce_347),
-	(348 , happyReduce_348),
-	(349 , happyReduce_349),
-	(350 , happyReduce_350),
-	(351 , happyReduce_351),
-	(352 , happyReduce_352),
-	(353 , happyReduce_353),
-	(354 , happyReduce_354),
-	(355 , happyReduce_355),
-	(356 , happyReduce_356),
-	(357 , happyReduce_357),
-	(358 , happyReduce_358),
-	(359 , happyReduce_359),
-	(360 , happyReduce_360),
-	(361 , happyReduce_361),
-	(362 , happyReduce_362),
-	(363 , happyReduce_363),
-	(364 , happyReduce_364),
-	(365 , happyReduce_365),
-	(366 , happyReduce_366),
-	(367 , happyReduce_367),
-	(368 , happyReduce_368),
-	(369 , happyReduce_369),
-	(370 , happyReduce_370)
-	]
-
-happy_n_terms = 77 :: Int
-happy_n_nonterms = 127 :: Int
-
-happyReduce_3 = happySpecReduce_1  0# happyReduction_3
-happyReduction_3 happy_x_1
-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
-	happyIn6
-		 (reverse happy_var_1
-	)}
-
-happyReduce_4 = happySpecReduce_2  1# happyReduction_4
-happyReduction_4 happy_x_2
-	happy_x_1
-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
-	case happyOut8 happy_x_2 of { happy_var_2 -> 
-	happyIn7
-		 (happy_var_2 : happy_var_1
-	)}}
-
-happyReduce_5 = happySpecReduce_0  1# happyReduction_5
-happyReduction_5  =  happyIn7
-		 ([]
-	)
-
-happyReduce_6 = happySpecReduce_1  2# happyReduction_6
-happyReduction_6 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwLet happy_var_1
-	)}
-
-happyReduce_7 = happySpecReduce_1  2# happyReduction_7
-happyReduction_7 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwIn happy_var_1
-	)}
-
-happyReduce_8 = happySpecReduce_1  2# happyReduction_8
-happyReduction_8 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwWhere happy_var_1
-	)}
-
-happyReduce_9 = happySpecReduce_1  2# happyReduction_9
-happyReduction_9 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwWith happy_var_1
-	)}
-
-happyReduce_10 = happySpecReduce_1  2# happyReduction_10
-happyReduction_10 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwRewrite happy_var_1
-	)}
-
-happyReduce_11 = happySpecReduce_1  2# happyReduction_11
-happyReduction_11 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwPostulate happy_var_1
-	)}
-
-happyReduce_12 = happySpecReduce_1  2# happyReduction_12
-happyReduction_12 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwPrimitive happy_var_1
-	)}
-
-happyReduce_13 = happySpecReduce_1  2# happyReduction_13
-happyReduction_13 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwOpen happy_var_1
-	)}
-
-happyReduce_14 = happySpecReduce_1  2# happyReduction_14
-happyReduction_14 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwImport happy_var_1
-	)}
-
-happyReduce_15 = happySpecReduce_1  2# happyReduction_15
-happyReduction_15 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwUsing happy_var_1
-	)}
-
-happyReduce_16 = happySpecReduce_1  2# happyReduction_16
-happyReduction_16 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwHiding happy_var_1
-	)}
-
-happyReduce_17 = happySpecReduce_1  2# happyReduction_17
-happyReduction_17 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwRenaming happy_var_1
-	)}
-
-happyReduce_18 = happySpecReduce_1  2# happyReduction_18
-happyReduction_18 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwTo happy_var_1
-	)}
-
-happyReduce_19 = happySpecReduce_1  2# happyReduction_19
-happyReduction_19 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwPublic happy_var_1
-	)}
-
-happyReduce_20 = happySpecReduce_1  2# happyReduction_20
-happyReduction_20 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwModule happy_var_1
-	)}
-
-happyReduce_21 = happySpecReduce_1  2# happyReduction_21
-happyReduction_21 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwData happy_var_1
-	)}
-
-happyReduce_22 = happySpecReduce_1  2# happyReduction_22
-happyReduction_22 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCoData happy_var_1
-	)}
-
-happyReduce_23 = happySpecReduce_1  2# happyReduction_23
-happyReduction_23 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwRecord happy_var_1
-	)}
-
-happyReduce_24 = happySpecReduce_1  2# happyReduction_24
-happyReduction_24 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwConstructor happy_var_1
-	)}
-
-happyReduce_25 = happySpecReduce_1  2# happyReduction_25
-happyReduction_25 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwField happy_var_1
-	)}
-
-happyReduce_26 = happySpecReduce_1  2# happyReduction_26
-happyReduction_26 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwInfix happy_var_1
-	)}
-
-happyReduce_27 = happySpecReduce_1  2# happyReduction_27
-happyReduction_27 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwInfixL happy_var_1
-	)}
-
-happyReduce_28 = happySpecReduce_1  2# happyReduction_28
-happyReduction_28 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwInfixR happy_var_1
-	)}
-
-happyReduce_29 = happySpecReduce_1  2# happyReduction_29
-happyReduction_29 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwMutual happy_var_1
-	)}
-
-happyReduce_30 = happySpecReduce_1  2# happyReduction_30
-happyReduction_30 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwAbstract happy_var_1
-	)}
-
-happyReduce_31 = happySpecReduce_1  2# happyReduction_31
-happyReduction_31 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwPrivate happy_var_1
-	)}
-
-happyReduce_32 = happySpecReduce_1  2# happyReduction_32
-happyReduction_32 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwProp happy_var_1
-	)}
-
-happyReduce_33 = happySpecReduce_1  2# happyReduction_33
-happyReduction_33 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwSet happy_var_1
-	)}
-
-happyReduce_34 = happySpecReduce_1  2# happyReduction_34
-happyReduction_34 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwForall happy_var_1
-	)}
-
-happyReduce_35 = happySpecReduce_1  2# happyReduction_35
-happyReduction_35 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwSyntax happy_var_1
-	)}
-
-happyReduce_36 = happySpecReduce_1  2# happyReduction_36
-happyReduction_36 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwOPTIONS happy_var_1
-	)}
-
-happyReduce_37 = happySpecReduce_1  2# happyReduction_37
-happyReduction_37 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwBUILTIN happy_var_1
-	)}
-
-happyReduce_38 = happySpecReduce_1  2# happyReduction_38
-happyReduction_38 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwIMPORT happy_var_1
-	)}
-
-happyReduce_39 = happySpecReduce_1  2# happyReduction_39
-happyReduction_39 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCOMPILED happy_var_1
-	)}
-
-happyReduce_40 = happySpecReduce_1  2# happyReduction_40
-happyReduction_40 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCOMPILED_DATA happy_var_1
-	)}
-
-happyReduce_41 = happySpecReduce_1  2# happyReduction_41
-happyReduction_41 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCOMPILED_TYPE happy_var_1
-	)}
-
-happyReduce_42 = happySpecReduce_1  2# happyReduction_42
-happyReduction_42 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCOMPILED_EPIC happy_var_1
-	)}
-
-happyReduce_43 = happySpecReduce_1  2# happyReduction_43
-happyReduction_43 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwCOMPILED_JS happy_var_1
-	)}
-
-happyReduce_44 = happySpecReduce_1  2# happyReduction_44
-happyReduction_44 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwSTATIC happy_var_1
-	)}
-
-happyReduce_45 = happySpecReduce_1  2# happyReduction_45
-happyReduction_45 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwIMPOSSIBLE happy_var_1
-	)}
-
-happyReduce_46 = happySpecReduce_1  2# happyReduction_46
-happyReduction_46 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwETA happy_var_1
-	)}
-
-happyReduce_47 = happySpecReduce_1  2# happyReduction_47
-happyReduction_47 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwQuoteGoal happy_var_1
-	)}
-
-happyReduce_48 = happySpecReduce_1  2# happyReduction_48
-happyReduction_48 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwQuote happy_var_1
-	)}
-
-happyReduce_49 = happySpecReduce_1  2# happyReduction_49
-happyReduction_49 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwQuoteTerm happy_var_1
-	)}
-
-happyReduce_50 = happySpecReduce_1  2# happyReduction_50
-happyReduction_50 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> 
-	happyIn8
-		 (TokKeyword KwUnquote happy_var_1
-	)}
-
-happyReduce_51 = happySpecReduce_1  2# happyReduction_51
-happyReduction_51 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
-	happyIn8
-		 (TokSetN happy_var_1
-	)}
-
-happyReduce_52 = happySpecReduce_1  2# happyReduction_52
-happyReduction_52 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> 
-	happyIn8
-		 (TokTeX happy_var_1
-	)}
-
-happyReduce_53 = happySpecReduce_1  2# happyReduction_53
-happyReduction_53 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> 
-	happyIn8
-		 (TokComment happy_var_1
-	)}
-
-happyReduce_54 = happySpecReduce_1  2# happyReduction_54
-happyReduction_54 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymEllipsis happy_var_1
-	)}
-
-happyReduce_55 = happySpecReduce_1  2# happyReduction_55
-happyReduction_55 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymDotDot happy_var_1
-	)}
-
-happyReduce_56 = happySpecReduce_1  2# happyReduction_56
-happyReduction_56 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymDot happy_var_1
-	)}
-
-happyReduce_57 = happySpecReduce_1  2# happyReduction_57
-happyReduction_57 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymSemi happy_var_1
-	)}
-
-happyReduce_58 = happySpecReduce_1  2# happyReduction_58
-happyReduction_58 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymColon happy_var_1
-	)}
-
-happyReduce_59 = happySpecReduce_1  2# happyReduction_59
-happyReduction_59 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymEqual happy_var_1
-	)}
-
-happyReduce_60 = happySpecReduce_1  2# happyReduction_60
-happyReduction_60 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymUnderscore happy_var_1
-	)}
-
-happyReduce_61 = happySpecReduce_1  2# happyReduction_61
-happyReduction_61 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymQuestionMark happy_var_1
-	)}
-
-happyReduce_62 = happySpecReduce_1  2# happyReduction_62
-happyReduction_62 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymArrow happy_var_1
-	)}
-
-happyReduce_63 = happySpecReduce_1  2# happyReduction_63
-happyReduction_63 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymLambda happy_var_1
-	)}
-
-happyReduce_64 = happySpecReduce_1  2# happyReduction_64
-happyReduction_64 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymAs happy_var_1
-	)}
-
-happyReduce_65 = happySpecReduce_1  2# happyReduction_65
-happyReduction_65 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymBar happy_var_1
-	)}
-
-happyReduce_66 = happySpecReduce_1  2# happyReduction_66
-happyReduction_66 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymOpenParen happy_var_1
-	)}
-
-happyReduce_67 = happySpecReduce_1  2# happyReduction_67
-happyReduction_67 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymCloseParen happy_var_1
-	)}
-
-happyReduce_68 = happySpecReduce_1  2# happyReduction_68
-happyReduction_68 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymDoubleOpenBrace happy_var_1
-	)}
-
-happyReduce_69 = happySpecReduce_1  2# happyReduction_69
-happyReduction_69 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymDoubleCloseBrace happy_var_1
-	)}
-
-happyReduce_70 = happySpecReduce_1  2# happyReduction_70
-happyReduction_70 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymOpenBrace happy_var_1
-	)}
-
-happyReduce_71 = happySpecReduce_1  2# happyReduction_71
-happyReduction_71 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymCloseBrace happy_var_1
-	)}
-
-happyReduce_72 = happySpecReduce_1  2# happyReduction_72
-happyReduction_72 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymOpenVirtualBrace happy_var_1
-	)}
-
-happyReduce_73 = happySpecReduce_1  2# happyReduction_73
-happyReduction_73 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymCloseVirtualBrace happy_var_1
-	)}
-
-happyReduce_74 = happySpecReduce_1  2# happyReduction_74
-happyReduction_74 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymVirtualSemi happy_var_1
-	)}
-
-happyReduce_75 = happySpecReduce_1  2# happyReduction_75
-happyReduction_75 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymOpenPragma happy_var_1
-	)}
-
-happyReduce_76 = happySpecReduce_1  2# happyReduction_76
-happyReduction_76 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> 
-	happyIn8
-		 (TokSymbol SymClosePragma happy_var_1
-	)}
-
-happyReduce_77 = happySpecReduce_1  2# happyReduction_77
-happyReduction_77 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
-	happyIn8
-		 (TokId happy_var_1
-	)}
-
-happyReduce_78 = happySpecReduce_1  2# happyReduction_78
-happyReduction_78 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
-	happyIn8
-		 (TokQId happy_var_1
-	)}
-
-happyReduce_79 = happySpecReduce_1  2# happyReduction_79
-happyReduction_79 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
-	happyIn8
-		 (TokString happy_var_1
-	)}
-
-happyReduce_80 = happySpecReduce_1  2# happyReduction_80
-happyReduction_80 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
-	happyIn8
-		 (TokLiteral happy_var_1
-	)}
-
-happyReduce_81 = happySpecReduce_1  3# happyReduction_81
-happyReduction_81 happy_x_1
-	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
-	happyIn9
-		 (happy_var_1
-	)}
-
-happyReduce_82 = happySpecReduce_1  4# happyReduction_82
-happyReduction_82 happy_x_1
-	 =  case happyOut106 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (([], happy_var_1)
-	)}
-
-happyReduce_83 = happySpecReduce_2  4# happyReduction_83
-happyReduction_83 happy_x_2
-	happy_x_1
-	 =  case happyOut109 happy_x_1 of { happy_var_1 -> 
-	case happyOut10 happy_x_2 of { happy_var_2 -> 
-	happyIn10
-		 (let (ps,m) = happy_var_2 in (happy_var_1 : ps, m)
-	)}}
-
-happyReduce_84 = happySpecReduce_1  5# happyReduction_84
-happyReduction_84 happy_x_1
-	 =  happyIn11
-		 (()
-	)
-
-happyReduce_85 = happyMonadReduce 1# 5# happyReduction_85
-happyReduction_85 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (( popContext)
-	) (\r -> happyReturn (happyIn11 r))
-
-happyReduce_86 = happySpecReduce_1  6# happyReduction_86
-happyReduction_86 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
-	happyIn12
-		 (happy_var_1
-	)}
-
-happyReduce_87 = happySpecReduce_1  6# happyReduction_87
-happyReduction_87 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> 
-	happyIn12
-		 (happy_var_1
-	)}
-
-happyReduce_88 = happyMonadReduce 0# 7# happyReduction_88
-happyReduction_88 (happyRest) tk
-	 = happyThen (( pushLexState imp_dir)
-	) (\r -> happyReturn (happyIn13 r))
-
-happyReduce_89 = happyMonadReduce 1# 8# happyReduction_89
-happyReduction_89 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
-	( case happy_var_1 of {
-		     LitInt _ n	-> return n;
-		     _		-> fail $ "Expected integer"
-		   })}
-	) (\r -> happyReturn (happyIn14 r))
-
-happyReduce_90 = happyMonadReduce 1# 9# happyReduction_90
-happyReduction_90 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
-	( mkName happy_var_1)}
-	) (\r -> happyReturn (happyIn15 r))
-
-happyReduce_91 = happySpecReduce_2  10# happyReduction_91
-happyReduction_91 happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	case happyOut16 happy_x_2 of { happy_var_2 -> 
-	happyIn16
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_92 = happySpecReduce_1  10# happyReduction_92
-happyReduction_92 happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	happyIn16
-		 ([happy_var_1]
-	)}
-
-happyReduce_93 = happySpecReduce_1  11# happyReduction_93
-happyReduction_93 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> 
-	happyIn17
-		 (getRange happy_var_1
-	)}
-
-happyReduce_94 = happyMonadReduce 2# 11# happyReduction_94
-happyReduction_94 (happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> 
-	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> 
-	(
-      if posPos (fromJust (rEnd (getRange happy_var_2))) -
-	 posPos (fromJust (rStart (getRange happy_var_1))) > 2
-      then parseErrorAt (fromJust (rStart (getRange happy_var_2)))
-	 "Expecting '}}', found separated '}'s."
-      else return $ fuseRange (getRange happy_var_1) (getRange (happy_var_2)))}}
-	) (\r -> happyReturn (happyIn17 r))
-
-happyReduce_95 = happySpecReduce_2  12# happyReduction_95
-happyReduction_95 happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
-	happyIn18
-		 (Arg NotHidden Irrelevant happy_var_2
-	)}
-
-happyReduce_96 = happySpecReduce_1  12# happyReduction_96
-happyReduction_96 happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	happyIn18
-		 (defaultArg happy_var_1
-	)}
-
-happyReduce_97 = happySpecReduce_2  13# happyReduction_97
-happyReduction_97 happy_x_2
-	happy_x_1
-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
-	case happyOut19 happy_x_2 of { happy_var_2 -> 
-	happyIn19
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_98 = happySpecReduce_1  13# happyReduction_98
-happyReduction_98 happy_x_1
-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
-	happyIn19
-		 ([happy_var_1]
-	)}
-
-happyReduce_99 = happySpecReduce_2  14# happyReduction_99
-happyReduction_99 happy_x_2
-	happy_x_1
-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
-	case happyOut20 happy_x_2 of { happy_var_2 -> 
-	happyIn20
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_100 = happySpecReduce_1  14# happyReduction_100
-happyReduction_100 happy_x_1
-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
-	happyIn20
-		 ([happy_var_1]
-	)}
-
-happyReduce_101 = happyReduce 4# 14# happyReduction_101
-happyReduction_101 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut19 happy_x_2 of { happy_var_2 -> 
-	case happyOut20 happy_x_4 of { happy_var_4 -> 
-	happyIn20
-		 (map makeInstance happy_var_2 ++ happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_102 = happySpecReduce_3  14# happyReduction_102
-happyReduction_102 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
-	happyIn20
-		 (map makeInstance happy_var_2
-	)}
-
-happyReduce_103 = happyReduce 4# 14# happyReduction_103
-happyReduction_103 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut19 happy_x_2 of { happy_var_2 -> 
-	case happyOut20 happy_x_4 of { happy_var_4 -> 
-	happyIn20
-		 (map hide happy_var_2 ++ happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_104 = happySpecReduce_3  14# happyReduction_104
-happyReduction_104 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
-	happyIn20
-		 (map hide happy_var_2
-	)}
-
-happyReduce_105 = happyReduce 5# 14# happyReduction_105
-happyReduction_105 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
-	case happyOut20 happy_x_5 of { happy_var_5 -> 
-	happyIn20
-		 (map (Arg Hidden Irrelevant) happy_var_3 ++ happy_var_5
-	) `HappyStk` happyRest}}
-
-happyReduce_106 = happyReduce 4# 14# happyReduction_106
-happyReduction_106 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
-	happyIn20
-		 (map (Arg Hidden Irrelevant) happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_107 = happyReduce 5# 14# happyReduction_107
-happyReduction_107 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
-	case happyOut20 happy_x_5 of { happy_var_5 -> 
-	happyIn20
-		 (map (Arg Instance Irrelevant) happy_var_3 ++ happy_var_5
-	) `HappyStk` happyRest}}
-
-happyReduce_108 = happyReduce 4# 14# happyReduction_108
-happyReduction_108 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
-	happyIn20
-		 (map (Arg Instance Irrelevant) happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_109 = happyReduce 5# 14# happyReduction_109
-happyReduction_109 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
-	case happyOut20 happy_x_5 of { happy_var_5 -> 
-	happyIn20
-		 (map (Arg Hidden NonStrict) happy_var_3 ++ happy_var_5
-	) `HappyStk` happyRest}}
-
-happyReduce_110 = happyReduce 4# 14# happyReduction_110
-happyReduction_110 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
-	happyIn20
-		 (map (Arg Hidden NonStrict) happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_111 = happyReduce 5# 14# happyReduction_111
-happyReduction_111 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
-	case happyOut20 happy_x_5 of { happy_var_5 -> 
-	happyIn20
-		 (map (Arg Instance NonStrict) happy_var_3 ++ happy_var_5
-	) `HappyStk` happyRest}}
-
-happyReduce_112 = happyReduce 4# 14# happyReduction_112
-happyReduction_112 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
-	happyIn20
-		 (map (Arg Instance NonStrict) happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_113 = happyMonadReduce 1# 15# happyReduction_113
-happyReduction_113 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
-	( mkQName happy_var_1)}
-	) (\r -> happyReturn (happyIn21 r))
-
-happyReduce_114 = happySpecReduce_1  15# happyReduction_114
-happyReduction_114 happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	happyIn21
-		 (QName happy_var_1
-	)}
-
-happyReduce_115 = happySpecReduce_1  16# happyReduction_115
-happyReduction_115 happy_x_1
-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
-	happyIn22
-		 (happy_var_1
-	)}
-
-happyReduce_116 = happySpecReduce_1  17# happyReduction_116
-happyReduction_116 happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	happyIn23
-		 (happy_var_1
-	)}
-
-happyReduce_117 = happySpecReduce_1  17# happyReduction_117
-happyReduction_117 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
-	happyIn23
-		 (Name (getRange happy_var_1) [Hole]
-	)}
-
-happyReduce_118 = happySpecReduce_2  18# happyReduction_118
-happyReduction_118 happy_x_2
-	happy_x_1
-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
-	case happyOut24 happy_x_2 of { happy_var_2 -> 
-	happyIn24
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_119 = happySpecReduce_1  18# happyReduction_119
-happyReduction_119 happy_x_1
-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
-	happyIn24
-		 ([happy_var_1]
-	)}
-
-happyReduce_120 = happySpecReduce_1  19# happyReduction_120
-happyReduction_120 happy_x_1
-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
-	happyIn25
-		 (case happy_var_1 of
-      Left ns -> ns
-      Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"
-	)}
-
-happyReduce_121 = happyMonadReduce 1# 20# happyReduction_121
-happyReduction_121 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> 
-	(
-    let getName (Ident (QName x)) = Just x
-	getName (Underscore r _)  = Just (Name r [Hole])
-	getName _		  = Nothing
-
-        containsAbsurd (Absurd _) = True
-        containsAbsurd (HiddenArg _ (Named _ e)) = containsAbsurd e
-        containsAbsurd (InstanceArg _ (Named _ e)) = containsAbsurd e
-        containsAbsurd (Paren _ expr)    = containsAbsurd expr
-        containsAbsurd (RawApp _ exprs)    = any containsAbsurd exprs
-        containsAbsurd _          = False
-    in
-    if isJust $ find containsAbsurd happy_var_1 then return $ Right happy_var_1 else
-    case partition isJust $ map getName happy_var_1 of
-	(good, []) -> return $ Left $ map fromJust good
-	_	   -> fail $ "expected sequence of bound identifiers")}
-	) (\r -> happyReturn (happyIn26 r))
-
-happyReduce_122 = happySpecReduce_0  21# happyReduction_122
-happyReduction_122  =  happyIn27
-		 ([]
-	)
-
-happyReduce_123 = happySpecReduce_2  21# happyReduction_123
-happyReduction_123 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
-	case happyOut27 happy_x_2 of { happy_var_2 -> 
-	happyIn27
-		 (snd happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_124 = happyMonadReduce 1# 22# happyReduction_124
-happyReduction_124 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
-	( fmap QName (mkName happy_var_1))}
-	) (\r -> happyReturn (happyIn28 r))
-
-happyReduce_125 = happySpecReduce_2  23# happyReduction_125
-happyReduction_125 happy_x_2
-	happy_x_1
-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_2 of { happy_var_2 -> 
-	happyIn29
-		 (Pi happy_var_1 happy_var_2
-	)}}
-
-happyReduce_126 = happySpecReduce_3  23# happyReduction_126
-happyReduction_126 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut54 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn29
-		 (forallPi happy_var_2 happy_var_3
-	)}}
-
-happyReduce_127 = happySpecReduce_3  23# happyReduction_127
-happyReduction_127 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn29
-		 (Fun (fuseRange happy_var_1 happy_var_3) (RawApp (getRange happy_var_1) happy_var_1) happy_var_3
-	)}}
-
-happyReduce_128 = happySpecReduce_1  23# happyReduction_128
-happyReduction_128 happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	happyIn29
-		 (happy_var_1
-	)}
-
-happyReduce_129 = happyMonadReduce 1# 24# happyReduction_129
-happyReduction_129 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut31 happy_x_1 of { happy_var_1 -> 
-	( case happy_var_1 of
-		      { [e]    -> return e
-		      ; e : es -> return $ WithApp (fuseRange e es) e es
-		      ; []     -> fail "impossible: empty with expressions"
-		      })}
-	) (\r -> happyReturn (happyIn30 r))
-
-happyReduce_130 = happySpecReduce_3  25# happyReduction_130
-happyReduction_130 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
-	case happyOut31 happy_x_3 of { happy_var_3 -> 
-	happyIn31
-		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3
-	)}}
-
-happyReduce_131 = happySpecReduce_1  25# happyReduction_131
-happyReduction_131 happy_x_1
-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
-	happyIn31
-		 ([RawApp (getRange happy_var_1) happy_var_1]
-	)}
-
-happyReduce_132 = happySpecReduce_1  26# happyReduction_132
-happyReduction_132 happy_x_1
-	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
-	happyIn32
-		 ([happy_var_1]
-	)}
-
-happyReduce_133 = happySpecReduce_2  26# happyReduction_133
-happyReduction_133 happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOut32 happy_x_2 of { happy_var_2 -> 
-	happyIn32
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_134 = happySpecReduce_3  27# happyReduction_134
-happyReduction_134 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
-	case happyOut46 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn33
-		 (Lam (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3
-	)}}}
-
-happyReduce_135 = happyReduce 4# 27# happyReduction_135
-happyReduction_135 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
-	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> 
-	case happyOut53 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
-	happyIn33
-		 (ExtendedLam (fuseRange happy_var_1 (fuseRange happy_var_2 happy_var_4)) (reverse happy_var_3)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_136 = happyMonadReduce 2# 27# happyReduction_136
-happyReduction_136 (happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
-	case happyOut47 happy_x_2 of { happy_var_2 -> 
-	( case happy_var_2 of
-                                       Left (bs, h) -> if null bs then return $ AbsurdLam r h else
-                                                       return $ Lam r bs (AbsurdLam r h)
-                                                         where r = fuseRange happy_var_1 bs
-    				       Right es -> do -- it is of the form @\ { p1 ... () }@
-                                                     p <- exprToLHS (RawApp (getRange es) es);
-                                                     return $ ExtendedLam (fuseRange happy_var_1 es)
-                                                                     [(p [] [], AbsurdRHS, NoWhere)])}}
-	) (\r -> happyReturn (happyIn33 r))
-
-happyReduce_137 = happyReduce 4# 27# happyReduction_137
-happyReduction_137 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
-	case happyOut130 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_4 of { happy_var_4 -> 
-	happyIn33
-		 (Let (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}}
-
-happyReduce_138 = happySpecReduce_1  27# happyReduction_138
-happyReduction_138 happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	happyIn33
-		 (happy_var_1
-	)}
-
-happyReduce_139 = happyReduce 4# 27# happyReduction_139
-happyReduction_139 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_4 of { happy_var_4 -> 
-	happyIn33
-		 (QuoteGoal (getRange (happy_var_1,happy_var_4)) happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}}
-
-happyReduce_140 = happySpecReduce_1  28# happyReduction_140
-happyReduction_140 happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	happyIn34
-		 ([happy_var_1]
-	)}
-
-happyReduce_141 = happySpecReduce_2  28# happyReduction_141
-happyReduction_141 happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOut34 happy_x_2 of { happy_var_2 -> 
-	happyIn34
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_142 = happySpecReduce_3  29# happyReduction_142
-happyReduction_142 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	case happyOut29 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
-	happyIn35
-		 (HiddenArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)
-	)}}}
-
-happyReduce_143 = happyReduce 5# 29# happyReduction_143
-happyReduction_143 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> 
-	happyIn35
-		 (HiddenArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_144 = happySpecReduce_2  29# happyReduction_144
-happyReduction_144 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> 
-	happyIn35
-		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r
-	)}}
-
-happyReduce_145 = happySpecReduce_1  30# happyReduction_145
-happyReduction_145 happy_x_1
-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
-	happyIn36
-		 (Ident happy_var_1
-	)}
-
-happyReduce_146 = happySpecReduce_1  30# happyReduction_146
-happyReduction_146 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
-	happyIn36
-		 (Lit happy_var_1
-	)}
-
-happyReduce_147 = happySpecReduce_1  30# happyReduction_147
-happyReduction_147 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
-	happyIn36
-		 (QuestionMark (getRange happy_var_1) Nothing
-	)}
-
-happyReduce_148 = happySpecReduce_1  30# happyReduction_148
-happyReduction_148 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
-	happyIn36
-		 (Underscore (getRange happy_var_1) Nothing
-	)}
-
-happyReduce_149 = happySpecReduce_1  30# happyReduction_149
-happyReduction_149 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
-	happyIn36
-		 (Prop (getRange happy_var_1)
-	)}
-
-happyReduce_150 = happySpecReduce_1  30# happyReduction_150
-happyReduction_150 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
-	happyIn36
-		 (Set (getRange happy_var_1)
-	)}
-
-happyReduce_151 = happySpecReduce_1  30# happyReduction_151
-happyReduction_151 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> 
-	happyIn36
-		 (Quote (getRange happy_var_1)
-	)}
-
-happyReduce_152 = happySpecReduce_1  30# happyReduction_152
-happyReduction_152 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> 
-	happyIn36
-		 (QuoteTerm (getRange happy_var_1)
-	)}
-
-happyReduce_153 = happySpecReduce_1  30# happyReduction_153
-happyReduction_153 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> 
-	happyIn36
-		 (Unquote (getRange happy_var_1)
-	)}
-
-happyReduce_154 = happySpecReduce_1  30# happyReduction_154
-happyReduction_154 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
-	happyIn36
-		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)
-	)}
-
-happyReduce_155 = happySpecReduce_3  30# happyReduction_155
-happyReduction_155 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
-	case happyOut29 happy_x_2 of { happy_var_2 -> 
-	case happyOut17 happy_x_3 of { happy_var_3 -> 
-	happyIn36
-		 (InstanceArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)
-	)}}}
-
-happyReduce_156 = happyReduce 5# 30# happyReduction_156
-happyReduction_156 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_4 of { happy_var_4 -> 
-	case happyOut17 happy_x_5 of { happy_var_5 -> 
-	happyIn36
-		 (InstanceArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_157 = happySpecReduce_3  30# happyReduction_157
-happyReduction_157 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
-	case happyOut29 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
-	happyIn36
-		 (Paren (fuseRange happy_var_1 happy_var_3) happy_var_2
-	)}}}
-
-happyReduce_158 = happySpecReduce_2  30# happyReduction_158
-happyReduction_158 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
-	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> 
-	happyIn36
-		 (Absurd (fuseRange happy_var_1 happy_var_2)
-	)}}
-
-happyReduce_159 = happySpecReduce_2  30# happyReduction_159
-happyReduction_159 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
-	case happyOut17 happy_x_2 of { happy_var_2 -> 
-	happyIn36
-		 (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r
-	)}}
-
-happyReduce_160 = happySpecReduce_3  30# happyReduction_160
-happyReduction_160 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	case happyOut37 happy_x_3 of { happy_var_3 -> 
-	happyIn36
-		 (As (fuseRange happy_var_1 happy_var_3) happy_var_1 happy_var_3
-	)}}
-
-happyReduce_161 = happySpecReduce_2  30# happyReduction_161
-happyReduction_161 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
-	case happyOut37 happy_x_2 of { happy_var_2 -> 
-	happyIn36
-		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_162 = happyReduce 4# 30# happyReduction_162
-happyReduction_162 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	case happyOut38 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
-	happyIn36
-		 (Rec (getRange (happy_var_1,happy_var_4)) happy_var_3
-	) `HappyStk` happyRest}}}
-
-happyReduce_163 = happyReduce 5# 30# happyReduction_163
-happyReduction_163 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	case happyOut36 happy_x_2 of { happy_var_2 -> 
-	case happyOut38 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> 
-	happyIn36
-		 (RecUpdate (getRange (happy_var_1,happy_var_5)) happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}}}
-
-happyReduce_164 = happySpecReduce_1  31# happyReduction_164
-happyReduction_164 happy_x_1
-	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
-	happyIn37
-		 (happy_var_1
-	)}
-
-happyReduce_165 = happySpecReduce_1  31# happyReduction_165
-happyReduction_165 happy_x_1
-	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
-	happyIn37
-		 (happy_var_1
-	)}
-
-happyReduce_166 = happySpecReduce_0  32# happyReduction_166
-happyReduction_166  =  happyIn38
-		 ([]
-	)
-
-happyReduce_167 = happySpecReduce_1  32# happyReduction_167
-happyReduction_167 happy_x_1
-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
-	happyIn38
-		 (happy_var_1
-	)}
-
-happyReduce_168 = happySpecReduce_1  33# happyReduction_168
-happyReduction_168 happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	happyIn39
-		 ([happy_var_1]
-	)}
-
-happyReduce_169 = happySpecReduce_3  33# happyReduction_169
-happyReduction_169 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	case happyOut39 happy_x_3 of { happy_var_3 -> 
-	happyIn39
-		 (happy_var_1 : happy_var_3
-	)}}
-
-happyReduce_170 = happySpecReduce_3  34# happyReduction_170
-happyReduction_170 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn40
-		 ((happy_var_1, happy_var_3)
-	)}}
-
-happyReduce_171 = happySpecReduce_2  35# happyReduction_171
-happyReduction_171 happy_x_2
-	happy_x_1
-	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
-	happyIn41
-		 (happy_var_1
-	)}
-
-happyReduce_172 = happySpecReduce_1  36# happyReduction_172
-happyReduction_172 happy_x_1
-	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
-	happyIn42
-		 ({-TeleBind-} happy_var_1
-	)}
-
-happyReduce_173 = happySpecReduce_2  37# happyReduction_173
-happyReduction_173 happy_x_2
-	happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	case happyOut43 happy_x_2 of { happy_var_2 -> 
-	happyIn43
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_174 = happySpecReduce_1  37# happyReduction_174
-happyReduction_174 happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	happyIn43
-		 ([happy_var_1]
-	)}
-
-happyReduce_175 = happyReduce 4# 38# happyReduction_175
-happyReduction_175 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg NotHidden         Irrelevant happy_var_3)
-	) `HappyStk` happyRest}}}
-
-happyReduce_176 = happyReduce 4# 38# happyReduction_176
-happyReduction_176 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg Hidden            Irrelevant happy_var_3)
-	) `HappyStk` happyRest}}}
-
-happyReduce_177 = happyReduce 4# 38# happyReduction_177
-happyReduction_177 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance Irrelevant happy_var_3)
-	) `HappyStk` happyRest}}
-
-happyReduce_178 = happyReduce 4# 38# happyReduction_178
-happyReduction_178 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg NotHidden         NonStrict happy_var_3)
-	) `HappyStk` happyRest}}}
-
-happyReduce_179 = happyReduce 4# 38# happyReduction_179
-happyReduction_179 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg Hidden            NonStrict happy_var_3)
-	) `HappyStk` happyRest}}}
-
-happyReduce_180 = happyReduce 4# 38# happyReduction_180
-happyReduction_180 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> 
-	case happyOut45 happy_x_3 of { happy_var_3 -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance NonStrict happy_var_3)
-	) `HappyStk` happyRest}}
-
-happyReduce_181 = happySpecReduce_3  38# happyReduction_181
-happyReduction_181 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
-	case happyOut45 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg NotHidden         Relevant happy_var_2)
-	)}}}
-
-happyReduce_182 = happySpecReduce_3  38# happyReduction_182
-happyReduction_182 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
-	case happyOut45 happy_x_2 of { happy_var_2 -> 
-	case happyOut17 happy_x_3 of { happy_var_3 -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance Relevant happy_var_2)
-	)}}}
-
-happyReduce_183 = happySpecReduce_3  38# happyReduction_183
-happyReduction_183 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
-	case happyOut45 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
-	happyIn44
-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Hidden            Relevant happy_var_2)
-	)}}}
-
-happyReduce_184 = happySpecReduce_3  39# happyReduction_184
-happyReduction_184 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn45
-		 (TBind (fuseRange happy_var_1 happy_var_3) (map mkBoundName_ happy_var_1) happy_var_3
-	)}}
-
-happyReduce_185 = happyMonadReduce 2# 40# happyReduction_185
-happyReduction_185 (happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut48 happy_x_1 of { happy_var_1 -> 
-	(
-      case reverse happy_var_1 of
-        Left _ : _ -> parseError "Absurd lambda cannot have a body."
-	_ : _      -> return [ b | Right b <- happy_var_1 ]
-        []         -> parsePanic "Empty LamBinds")}
-	) (\r -> happyReturn (happyIn46 r))
-
-happyReduce_186 = happyMonadReduce 1# 41# happyReduction_186
-happyReduction_186 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut49 happy_x_1 of { happy_var_1 -> 
-	(
-    case happy_var_1 of
-      Left lb -> case reverse lb of
-                   Right _ : _ -> parseError "Missing body for lambda"
-                   Left h  : _ -> return $ Left ([ b | Right b <- init lb], h)
-                   _           -> parsePanic "Empty LamBindsAbsurd"
-      Right es -> return $ Right es)}
-	) (\r -> happyReturn (happyIn47 r))
-
-happyReduce_187 = happySpecReduce_2  42# happyReduction_187
-happyReduction_187 happy_x_2
-	happy_x_1
-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
-	case happyOut48 happy_x_2 of { happy_var_2 -> 
-	happyIn48
-		 (map Right happy_var_1 ++ happy_var_2
-	)}}
-
-happyReduce_188 = happySpecReduce_2  42# happyReduction_188
-happyReduction_188 happy_x_2
-	happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	case happyOut48 happy_x_2 of { happy_var_2 -> 
-	happyIn48
-		 (Right (DomainFull happy_var_1) : happy_var_2
-	)}}
-
-happyReduce_189 = happySpecReduce_1  42# happyReduction_189
-happyReduction_189 happy_x_1
-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
-	happyIn48
-		 (map Right happy_var_1
-	)}
-
-happyReduce_190 = happySpecReduce_1  42# happyReduction_190
-happyReduction_190 happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	happyIn48
-		 ([Right $ DomainFull happy_var_1]
-	)}
-
-happyReduce_191 = happySpecReduce_2  42# happyReduction_191
-happyReduction_191 happy_x_2
-	happy_x_1
-	 =  happyIn48
-		 ([Left NotHidden]
-	)
-
-happyReduce_192 = happySpecReduce_2  42# happyReduction_192
-happyReduction_192 happy_x_2
-	happy_x_1
-	 =  happyIn48
-		 ([Left Hidden]
-	)
-
-happyReduce_193 = happySpecReduce_2  42# happyReduction_193
-happyReduction_193 happy_x_2
-	happy_x_1
-	 =  happyIn48
-		 ([Left Instance]
-	)
-
-happyReduce_194 = happySpecReduce_2  43# happyReduction_194
-happyReduction_194 happy_x_2
-	happy_x_1
-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
-	case happyOut48 happy_x_2 of { happy_var_2 -> 
-	happyIn49
-		 (Left $ map Right happy_var_1 ++ happy_var_2
-	)}}
-
-happyReduce_195 = happySpecReduce_2  43# happyReduction_195
-happyReduction_195 happy_x_2
-	happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	case happyOut48 happy_x_2 of { happy_var_2 -> 
-	happyIn49
-		 (Left $ Right (DomainFull happy_var_1) : happy_var_2
-	)}}
-
-happyReduce_196 = happySpecReduce_1  43# happyReduction_196
-happyReduction_196 happy_x_1
-	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
-	happyIn49
-		 (case happy_var_1 of
-                                    Left lb -> Left $ map Right lb
-                                    Right es -> Right es
-	)}
-
-happyReduce_197 = happySpecReduce_1  43# happyReduction_197
-happyReduction_197 happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	happyIn49
-		 (Left [Right $ DomainFull happy_var_1]
-	)}
-
-happyReduce_198 = happySpecReduce_2  43# happyReduction_198
-happyReduction_198 happy_x_2
-	happy_x_1
-	 =  happyIn49
-		 (Left [Left NotHidden]
-	)
-
-happyReduce_199 = happySpecReduce_2  43# happyReduction_199
-happyReduction_199 happy_x_2
-	happy_x_1
-	 =  happyIn49
-		 (Left [Left Hidden]
-	)
-
-happyReduce_200 = happySpecReduce_2  43# happyReduction_200
-happyReduction_200 happy_x_2
-	happy_x_1
-	 =  happyIn49
-		 (Left [Left Instance]
-	)
-
-happyReduce_201 = happyMonadReduce 3# 44# happyReduction_201
-happyReduction_201 (happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut34 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	( do
-      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;
-      return (p [] [], RHS happy_var_3, NoWhere))}}
-	) (\r -> happyReturn (happyIn50 r))
-
-happyReduce_202 = happyMonadReduce 1# 45# happyReduction_202
-happyReduction_202 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> 
-	( do
-      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);
-      return (p [] [], AbsurdRHS, NoWhere))}
-	) (\r -> happyReturn (happyIn51 r))
-
-happyReduce_203 = happySpecReduce_1  46# happyReduction_203
-happyReduction_203 happy_x_1
-	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
-	happyIn52
-		 (happy_var_1
-	)}
-
-happyReduce_204 = happySpecReduce_1  46# happyReduction_204
-happyReduction_204 happy_x_1
-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> 
-	happyIn52
-		 (happy_var_1
-	)}
-
-happyReduce_205 = happySpecReduce_3  47# happyReduction_205
-happyReduction_205 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
-	case happyOut52 happy_x_3 of { happy_var_3 -> 
-	happyIn53
-		 (happy_var_3 : happy_var_1
-	)}}
-
-happyReduce_206 = happySpecReduce_3  47# happyReduction_206
-happyReduction_206 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> 
-	case happyOut52 happy_x_3 of { happy_var_3 -> 
-	happyIn53
-		 ([happy_var_3, happy_var_1]
-	)}}
-
-happyReduce_207 = happySpecReduce_1  47# happyReduction_207
-happyReduction_207 happy_x_1
-	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
-	happyIn53
-		 ([happy_var_1]
-	)}
-
-happyReduce_208 = happySpecReduce_2  48# happyReduction_208
-happyReduction_208 happy_x_2
-	happy_x_1
-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
-	happyIn54
-		 (happy_var_1
-	)}
-
-happyReduce_209 = happySpecReduce_2  49# happyReduction_209
-happyReduction_209 happy_x_2
-	happy_x_1
-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
-	case happyOut55 happy_x_2 of { happy_var_2 -> 
-	happyIn55
-		 (happy_var_1 ++ happy_var_2
-	)}}
-
-happyReduce_210 = happySpecReduce_2  49# happyReduction_210
-happyReduction_210 happy_x_2
-	happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	case happyOut55 happy_x_2 of { happy_var_2 -> 
-	happyIn55
-		 (DomainFull happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_211 = happySpecReduce_1  49# happyReduction_211
-happyReduction_211 happy_x_1
-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
-	happyIn55
-		 (happy_var_1
-	)}
-
-happyReduce_212 = happySpecReduce_1  49# happyReduction_212
-happyReduction_212 happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	happyIn55
-		 ([DomainFull happy_var_1]
-	)}
-
-happyReduce_213 = happySpecReduce_2  50# happyReduction_213
-happyReduction_213 happy_x_2
-	happy_x_1
-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
-	case happyOut56 happy_x_2 of { happy_var_2 -> 
-	happyIn56
-		 (happy_var_1 ++ happy_var_2
-	)}}
-
-happyReduce_214 = happySpecReduce_2  50# happyReduction_214
-happyReduction_214 happy_x_2
-	happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	case happyOut56 happy_x_2 of { happy_var_2 -> 
-	happyIn56
-		 (DomainFull happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_215 = happySpecReduce_0  50# happyReduction_215
-happyReduction_215  =  happyIn56
-		 ([]
-	)
-
-happyReduce_216 = happySpecReduce_1  51# happyReduction_216
-happyReduction_216 happy_x_1
-	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
-	happyIn57
-		 (case happy_var_1 of
-                             Left lbs -> lbs
-                             Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"
-	)}
-
-happyReduce_217 = happySpecReduce_1  52# happyReduction_217
-happyReduction_217 happy_x_1
-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
-	happyIn58
-		 (Left [DomainFree NotHidden Relevant $ mkBoundName_ happy_var_1]
-	)}
-
-happyReduce_218 = happySpecReduce_2  52# happyReduction_218
-happyReduction_218 happy_x_2
-	happy_x_1
-	 =  case happyOut23 happy_x_2 of { happy_var_2 -> 
-	happyIn58
-		 (Left [DomainFree NotHidden Irrelevant $ mkBoundName_ happy_var_2]
-	)}
-
-happyReduce_219 = happySpecReduce_2  52# happyReduction_219
-happyReduction_219 happy_x_2
-	happy_x_1
-	 =  case happyOut23 happy_x_2 of { happy_var_2 -> 
-	happyIn58
-		 (Left [DomainFree NotHidden NonStrict $ mkBoundName_ happy_var_2]
-	)}
-
-happyReduce_220 = happySpecReduce_3  52# happyReduction_220
-happyReduction_220 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut26 happy_x_2 of { happy_var_2 -> 
-	happyIn58
-		 (either (Left . map (DomainFree Hidden Relevant . mkBoundName_)) Right happy_var_2
-	)}
-
-happyReduce_221 = happySpecReduce_3  52# happyReduction_221
-happyReduction_221 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut25 happy_x_2 of { happy_var_2 -> 
-	happyIn58
-		 (Left $ map (DomainFree Instance Relevant . mkBoundName_) happy_var_2
-	)}
-
-happyReduce_222 = happyReduce 4# 52# happyReduction_222
-happyReduction_222 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut25 happy_x_3 of { happy_var_3 -> 
-	happyIn58
-		 (Left $ map (DomainFree Hidden Irrelevant . mkBoundName_) happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_223 = happyReduce 4# 52# happyReduction_223
-happyReduction_223 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut25 happy_x_3 of { happy_var_3 -> 
-	happyIn58
-		 (Left $ map (DomainFree Instance Irrelevant . mkBoundName_) happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_224 = happyReduce 4# 52# happyReduction_224
-happyReduction_224 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut25 happy_x_3 of { happy_var_3 -> 
-	happyIn58
-		 (Left $ map (DomainFree Hidden NonStrict . mkBoundName_) happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_225 = happyReduce 4# 52# happyReduction_225
-happyReduction_225 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut25 happy_x_3 of { happy_var_3 -> 
-	happyIn58
-		 (Left $ map (DomainFree Instance NonStrict . mkBoundName_) happy_var_3
-	) `HappyStk` happyRest}
-
-happyReduce_226 = happySpecReduce_1  53# happyReduction_226
-happyReduction_226 happy_x_1
-	 =  case happyOut60 happy_x_1 of { happy_var_1 -> 
-	happyIn59
-		 ((Nothing, happy_var_1)
-	)}
-
-happyReduce_227 = happyMonadReduce 3# 53# happyReduction_227
-happyReduction_227 (happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut60 happy_x_3 of { happy_var_3 -> 
-	( isName "as" happy_var_1 >>
-                               return (Just (AsName happy_var_2 (getRange (fst happy_var_1))), happy_var_3))}}}
-	) (\r -> happyReturn (happyIn59 r))
-
-happyReduce_228 = happyMonadReduce 1# 54# happyReduction_228
-happyReduction_228 (happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut61 happy_x_1 of { happy_var_1 -> 
-	( verifyImportDirective happy_var_1)}
-	) (\r -> happyReturn (happyIn60 r))
-
-happyReduce_229 = happySpecReduce_2  55# happyReduction_229
-happyReduction_229 happy_x_2
-	happy_x_1
-	 =  case happyOut62 happy_x_2 of { happy_var_2 -> 
-	happyIn61
-		 (happy_var_2 { publicOpen = True }
-	)}
-
-happyReduce_230 = happySpecReduce_1  55# happyReduction_230
-happyReduction_230 happy_x_1
-	 =  case happyOut62 happy_x_1 of { happy_var_1 -> 
-	happyIn61
-		 (happy_var_1
-	)}
-
-happyReduce_231 = happySpecReduce_2  56# happyReduction_231
-happyReduction_231 happy_x_2
-	happy_x_1
-	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
-	case happyOut64 happy_x_2 of { happy_var_2 -> 
-	happyIn62
-		 (ImportDirective (fuseRange (snd happy_var_1) (snd happy_var_2)) (fst happy_var_1) (fst happy_var_2) False
-	)}}
-
-happyReduce_232 = happySpecReduce_1  56# happyReduction_232
-happyReduction_232 happy_x_1
-	 =  case happyOut64 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 (ImportDirective (getRange (snd happy_var_1)) (Hiding []) (fst happy_var_1) False
-	)}
-
-happyReduce_233 = happySpecReduce_1  56# happyReduction_233
-happyReduction_233 happy_x_1
-	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
-	happyIn62
-		 (ImportDirective (getRange (snd happy_var_1)) (fst happy_var_1) [] False
-	)}
-
-happyReduce_234 = happySpecReduce_0  56# happyReduction_234
-happyReduction_234  =  happyIn62
-		 (ImportDirective noRange (Hiding []) [] False
-	)
-
-happyReduce_235 = happyReduce 4# 57# happyReduction_235
-happyReduction_235 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> 
-	case happyOut69 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
-	happyIn63
-		 ((Using happy_var_3 , fuseRange happy_var_1 happy_var_4)
-	) `HappyStk` happyRest}}}
-
-happyReduce_236 = happyReduce 4# 57# happyReduction_236
-happyReduction_236 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> 
-	case happyOut70 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
-	happyIn63
-		 ((Hiding happy_var_3 , fuseRange happy_var_1 happy_var_4)
-	) `HappyStk` happyRest}}}
-
-happyReduce_237 = happyReduce 4# 58# happyReduction_237
-happyReduction_237 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> 
-	case happyOut65 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
-	happyIn64
-		 ((happy_var_3 , fuseRange happy_var_1 happy_var_4)
-	) `HappyStk` happyRest}}}
-
-happyReduce_238 = happySpecReduce_3  59# happyReduction_238
-happyReduction_238 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut66 happy_x_1 of { happy_var_1 -> 
-	case happyOut65 happy_x_3 of { happy_var_3 -> 
-	happyIn65
-		 (happy_var_1 : happy_var_3
-	)}}
-
-happyReduce_239 = happySpecReduce_1  59# happyReduction_239
-happyReduction_239 happy_x_1
-	 =  case happyOut66 happy_x_1 of { happy_var_1 -> 
-	happyIn65
-		 ([happy_var_1]
-	)}
-
-happyReduce_240 = happySpecReduce_3  60# happyReduction_240
-happyReduction_240 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut67 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> 
-	case happyOut15 happy_x_3 of { happy_var_3 -> 
-	happyIn66
-		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)
-	)}}}
-
-happyReduce_241 = happySpecReduce_2  61# happyReduction_241
-happyReduction_241 happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
-	happyIn67
-		 (ImportedName happy_var_2
-	)}
-
-happyReduce_242 = happySpecReduce_3  61# happyReduction_242
-happyReduction_242 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_3 of { happy_var_3 -> 
-	happyIn67
-		 (ImportedModule happy_var_3
-	)}
-
-happyReduce_243 = happySpecReduce_1  62# happyReduction_243
-happyReduction_243 happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	happyIn68
-		 (ImportedName happy_var_1
-	)}
-
-happyReduce_244 = happySpecReduce_2  62# happyReduction_244
-happyReduction_244 happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
-	happyIn68
-		 (ImportedModule happy_var_2
-	)}
-
-happyReduce_245 = happySpecReduce_0  63# happyReduction_245
-happyReduction_245  =  happyIn69
-		 ([]
-	)
-
-happyReduce_246 = happySpecReduce_1  63# happyReduction_246
-happyReduction_246 happy_x_1
-	 =  case happyOut70 happy_x_1 of { happy_var_1 -> 
-	happyIn69
-		 (happy_var_1
-	)}
-
-happyReduce_247 = happySpecReduce_1  64# happyReduction_247
-happyReduction_247 happy_x_1
-	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
-	happyIn70
-		 ([happy_var_1]
-	)}
-
-happyReduce_248 = happySpecReduce_3  64# happyReduction_248
-happyReduction_248 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
-	case happyOut70 happy_x_3 of { happy_var_3 -> 
-	happyIn70
-		 (happy_var_1 : happy_var_3
-	)}}
-
-happyReduce_249 = happyMonadReduce 3# 65# happyReduction_249
-happyReduction_249 (happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> 
-	case happyOut74 happy_x_2 of { happy_var_2 -> 
-	case happyOut73 happy_x_3 of { happy_var_3 -> 
-	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}
-	) (\r -> happyReturn (happyIn71 r))
-
-happyReduce_250 = happyReduce 4# 65# happyReduction_250
-happyReduction_250 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
-	case happyOut72 happy_x_2 of { happy_var_2 -> 
-	case happyOut74 happy_x_3 of { happy_var_3 -> 
-	case happyOut73 happy_x_4 of { happy_var_4 -> 
-	happyIn71
-		 (Ellipsis (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3 happy_var_4
-	) `HappyStk` happyRest}}}}
-
-happyReduce_251 = happySpecReduce_0  66# happyReduction_251
-happyReduction_251  =  happyIn72
-		 ([]
-	)
-
-happyReduce_252 = happyMonadReduce 3# 66# happyReduction_252
-happyReduction_252 (happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut34 happy_x_2 of { happy_var_2 -> 
-	case happyOut72 happy_x_3 of { happy_var_3 -> 
-	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->
-		   return (p : happy_var_3))}}
-	) (\r -> happyReturn (happyIn72 r))
-
-happyReduce_253 = happySpecReduce_0  67# happyReduction_253
-happyReduction_253  =  happyIn73
-		 ([]
-	)
-
-happyReduce_254 = happySpecReduce_2  67# happyReduction_254
-happyReduction_254 happy_x_2
-	happy_x_1
-	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
-	happyIn73
-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
-	)}
-
-happyReduce_255 = happySpecReduce_0  68# happyReduction_255
-happyReduction_255  =  happyIn74
-		 ([]
-	)
-
-happyReduce_256 = happySpecReduce_2  68# happyReduction_256
-happyReduction_256 happy_x_2
-	happy_x_1
-	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
-	happyIn74
-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
-	)}
-
-happyReduce_257 = happySpecReduce_0  69# happyReduction_257
-happyReduction_257  =  happyIn75
-		 (NoWhere
-	)
-
-happyReduce_258 = happySpecReduce_2  69# happyReduction_258
-happyReduction_258 happy_x_2
-	happy_x_1
-	 =  case happyOut130 happy_x_2 of { happy_var_2 -> 
-	happyIn75
-		 (AnyWhere happy_var_2
-	)}
-
-happyReduce_259 = happyReduce 4# 69# happyReduction_259
-happyReduction_259 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut130 happy_x_4 of { happy_var_4 -> 
-	happyIn75
-		 (SomeWhere happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_260 = happySpecReduce_1  70# happyReduction_260
-happyReduction_260 happy_x_1
-	 =  case happyOut78 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_261 = happySpecReduce_1  70# happyReduction_261
-happyReduction_261 happy_x_1
-	 =  case happyOut89 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 (happy_var_1
-	)}
-
-happyReduce_262 = happySpecReduce_1  70# happyReduction_262
-happyReduction_262 happy_x_1
-	 =  case happyOut81 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_263 = happySpecReduce_1  70# happyReduction_263
-happyReduction_263 happy_x_1
-	 =  case happyOut83 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_264 = happySpecReduce_1  70# happyReduction_264
-happyReduction_264 happy_x_1
-	 =  case happyOut84 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_265 = happySpecReduce_1  70# happyReduction_265
-happyReduction_265 happy_x_1
-	 =  case happyOut85 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_266 = happySpecReduce_1  70# happyReduction_266
-happyReduction_266 happy_x_1
-	 =  case happyOut86 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_267 = happySpecReduce_1  70# happyReduction_267
-happyReduction_267 happy_x_1
-	 =  case happyOut88 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_268 = happySpecReduce_1  70# happyReduction_268
-happyReduction_268 happy_x_1
-	 =  case happyOut90 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_269 = happySpecReduce_1  70# happyReduction_269
-happyReduction_269 happy_x_1
-	 =  case happyOut91 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_270 = happySpecReduce_1  70# happyReduction_270
-happyReduction_270 happy_x_1
-	 =  case happyOut92 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_271 = happySpecReduce_1  70# happyReduction_271
-happyReduction_271 happy_x_1
-	 =  case happyOut93 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_272 = happySpecReduce_1  70# happyReduction_272
-happyReduction_272 happy_x_1
-	 =  case happyOut94 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_273 = happySpecReduce_1  70# happyReduction_273
-happyReduction_273 happy_x_1
-	 =  case happyOut100 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_274 = happySpecReduce_1  70# happyReduction_274
-happyReduction_274 happy_x_1
-	 =  case happyOut104 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_275 = happySpecReduce_1  70# happyReduction_275
-happyReduction_275 happy_x_1
-	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_276 = happySpecReduce_1  70# happyReduction_276
-happyReduction_276 happy_x_1
-	 =  case happyOut105 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_277 = happySpecReduce_1  70# happyReduction_277
-happyReduction_277 happy_x_1
-	 =  case happyOut108 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_278 = happySpecReduce_1  70# happyReduction_278
-happyReduction_278 happy_x_1
-	 =  case happyOut95 happy_x_1 of { happy_var_1 -> 
-	happyIn76
-		 ([happy_var_1]
-	)}
-
-happyReduce_279 = happySpecReduce_3  71# happyReduction_279
-happyReduction_279 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn77
-		 (map (flip (TypeSig Relevant) happy_var_3) happy_var_1
-	)}}
-
-happyReduce_280 = happyReduce 4# 72# happyReduction_280
-happyReduction_280 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut29 happy_x_4 of { happy_var_4 -> 
-	happyIn78
-		 (TypeSig Irrelevant happy_var_2 happy_var_4
-	) `HappyStk` happyRest}}
-
-happyReduce_281 = happySpecReduce_3  72# happyReduction_281
-happyReduction_281 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn78
-		 (TypeSig Relevant happy_var_1 happy_var_3
-	)}}
-
-happyReduce_282 = happySpecReduce_3  73# happyReduction_282
-happyReduction_282 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn79
-		 (map (\ (Arg _ rel x) -> TypeSig rel x happy_var_3) happy_var_1
-	)}}
-
-happyReduce_283 = happySpecReduce_3  74# happyReduction_283
-happyReduction_283 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut20 happy_x_1 of { happy_var_1 -> 
-	case happyOut29 happy_x_3 of { happy_var_3 -> 
-	happyIn80
-		 (map (fmap (flip (TypeSig Relevant) happy_var_3)) happy_var_1
-	)}}
-
-happyReduce_284 = happySpecReduce_3  75# happyReduction_284
-happyReduction_284 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> 
-	case happyOut82 happy_x_2 of { happy_var_2 -> 
-	case happyOut75 happy_x_3 of { happy_var_3 -> 
-	happyIn81
-		 (FunClause happy_var_1 happy_var_2 happy_var_3
-	)}}}
-
-happyReduce_285 = happySpecReduce_2  76# happyReduction_285
-happyReduction_285 happy_x_2
-	happy_x_1
-	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
-	happyIn82
-		 (RHS happy_var_2
-	)}
-
-happyReduce_286 = happySpecReduce_0  76# happyReduction_286
-happyReduction_286  =  happyIn82
-		 (AbsurdRHS
-	)
-
-happyReduce_287 = happyReduce 7# 77# happyReduction_287
-happyReduction_287 (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 happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOut29 happy_x_5 of { happy_var_5 -> 
-	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
-	case happyOut128 happy_x_7 of { happy_var_7 -> 
-	happyIn83
-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) Inductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7
-	) `HappyStk` happyRest}}}}}}
-
-happyReduce_288 = happyReduce 7# 77# happyReduction_288
-happyReduction_288 (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 happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOut29 happy_x_5 of { happy_var_5 -> 
-	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
-	case happyOut128 happy_x_7 of { happy_var_7 -> 
-	happyIn83
-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) CoInductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7
-	) `HappyStk` happyRest}}}}}}
-
-happyReduce_289 = happyReduce 5# 77# happyReduction_289
-happyReduction_289 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
-	case happyOut128 happy_x_5 of { happy_var_5 -> 
-	happyIn83
-		 (Data (getRange (happy_var_1, happy_var_4, happy_var_5)) Inductive happy_var_2 happy_var_3 Nothing happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_290 = happyReduce 5# 77# happyReduction_290
-happyReduction_290 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
-	case happyOut128 happy_x_5 of { happy_var_5 -> 
-	happyIn83
-		 (Data (getRange (happy_var_1, happy_var_4, happy_var_5)) CoInductive happy_var_2 happy_var_3 Nothing happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_291 = happyReduce 5# 78# happyReduction_291
-happyReduction_291 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOut29 happy_x_5 of { happy_var_5 -> 
-	happyIn84
-		 (DataSig (fuseRange happy_var_1 happy_var_5) Inductive happy_var_2 happy_var_3 happy_var_5
-	) `HappyStk` happyRest}}}}
-
-happyReduce_292 = happyReduce 7# 79# happyReduction_292
-happyReduction_292 (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 happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOut29 happy_x_5 of { happy_var_5 -> 
-	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
-	case happyOut129 happy_x_7 of { happy_var_7 -> 
-	happyIn85
-		 (Record (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_2 (fst happy_var_7) happy_var_3 (Just happy_var_5) (snd happy_var_7)
-	) `HappyStk` happyRest}}}}}}
-
-happyReduce_293 = happyReduce 5# 79# happyReduction_293
-happyReduction_293 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
-	case happyOut129 happy_x_5 of { happy_var_5 -> 
-	happyIn85
-		 (Record (getRange (happy_var_1, happy_var_4, happy_var_5)) happy_var_2 (fst happy_var_5) happy_var_3 Nothing (snd happy_var_5)
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_294 = happyReduce 5# 80# happyReduction_294
-happyReduction_294 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOut29 happy_x_5 of { happy_var_5 -> 
-	happyIn86
-		 (RecordSig (fuseRange happy_var_1 happy_var_5) happy_var_2 happy_var_3 happy_var_5
-	) `HappyStk` happyRest}}}}
-
-happyReduce_295 = happySpecReduce_2  81# happyReduction_295
-happyReduction_295 happy_x_2
-	happy_x_1
-	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
-	happyIn87
-		 (happy_var_2
-	)}
-
-happyReduce_296 = happySpecReduce_3  82# happyReduction_296
-happyReduction_296 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
-	case happyOut14 happy_x_2 of { happy_var_2 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn88
-		 (Infix (NonAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
-	)}}}
-
-happyReduce_297 = happySpecReduce_3  82# happyReduction_297
-happyReduction_297 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
-	case happyOut14 happy_x_2 of { happy_var_2 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn88
-		 (Infix (LeftAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
-	)}}}
-
-happyReduce_298 = happySpecReduce_3  82# happyReduction_298
-happyReduction_298 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
-	case happyOut14 happy_x_2 of { happy_var_2 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn88
-		 (Infix (RightAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3
-	)}}}
-
-happyReduce_299 = happySpecReduce_2  83# happyReduction_299
-happyReduction_299 happy_x_2
-	happy_x_1
-	 =  case happyOut126 happy_x_2 of { happy_var_2 -> 
-	happyIn89
-		 (let toField (Arg h rel (TypeSig _ x t)) = Field x (Arg h rel t) in map toField happy_var_2
-	)}
-
-happyReduce_300 = happySpecReduce_2  84# happyReduction_300
-happyReduction_300 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
-	case happyOut130 happy_x_2 of { happy_var_2 -> 
-	happyIn90
-		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_301 = happySpecReduce_2  85# happyReduction_301
-happyReduction_301 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
-	case happyOut130 happy_x_2 of { happy_var_2 -> 
-	happyIn91
-		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_302 = happySpecReduce_2  86# happyReduction_302
-happyReduction_302 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
-	case happyOut130 happy_x_2 of { happy_var_2 -> 
-	happyIn92
-		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_303 = happySpecReduce_2  87# happyReduction_303
-happyReduction_303 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
-	case happyOut124 happy_x_2 of { happy_var_2 -> 
-	happyIn93
-		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_304 = happySpecReduce_2  88# happyReduction_304
-happyReduction_304 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
-	case happyOut122 happy_x_2 of { happy_var_2 -> 
-	happyIn94
-		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2
-	)}}
-
-happyReduce_305 = happyMonadReduce 5# 89# happyReduction_305
-happyReduction_305 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut97 happy_x_3 of { happy_var_3 -> 
-	case happyOut96 happy_x_5 of { happy_var_5 -> 
-	(
-  case happy_var_2 of
-    Name _ [_] -> case mkNotation happy_var_3 happy_var_5 of
-      Left err -> parseError $ "malformed syntax declaration: " ++ err
-      Right n -> return $ Syntax happy_var_2 n
-    _ -> parseError "syntax declarations are allowed only for simple names (without holes)")}}}
-	) (\r -> happyReturn (happyIn95 r))
-
-happyReduce_306 = happySpecReduce_1  90# happyReduction_306
-happyReduction_306 happy_x_1
-	 =  case happyOut99 happy_x_1 of { happy_var_1 -> 
-	happyIn96
-		 ([happy_var_1]
-	)}
-
-happyReduce_307 = happySpecReduce_2  90# happyReduction_307
-happyReduction_307 happy_x_2
-	happy_x_1
-	 =  case happyOut96 happy_x_1 of { happy_var_1 -> 
-	case happyOut99 happy_x_2 of { happy_var_2 -> 
-	happyIn96
-		 (happy_var_1 ++ [happy_var_2]
-	)}}
-
-happyReduce_308 = happySpecReduce_1  91# happyReduction_308
-happyReduction_308 happy_x_1
-	 =  case happyOut98 happy_x_1 of { happy_var_1 -> 
-	happyIn97
-		 ([happy_var_1]
-	)}
-
-happyReduce_309 = happySpecReduce_2  91# happyReduction_309
-happyReduction_309 happy_x_2
-	happy_x_1
-	 =  case happyOut97 happy_x_1 of { happy_var_1 -> 
-	case happyOut98 happy_x_2 of { happy_var_2 -> 
-	happyIn97
-		 (happy_var_1 ++ [happy_var_2]
-	)}}
-
-happyReduce_310 = happySpecReduce_1  92# happyReduction_310
-happyReduction_310 happy_x_1
-	 =  case happyOut99 happy_x_1 of { happy_var_1 -> 
-	happyIn98
-		 (ExprHole happy_var_1
-	)}
-
-happyReduce_311 = happyReduce 6# 92# happyReduction_311
-happyReduction_311 (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 happyOut99 happy_x_3 of { happy_var_3 -> 
-	case happyOut99 happy_x_5 of { happy_var_5 -> 
-	happyIn98
-		 (LambdaHole happy_var_3 happy_var_5
-	) `HappyStk` happyRest}}
-
-happyReduce_312 = happySpecReduce_1  93# happyReduction_312
-happyReduction_312 happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
-	happyIn99
-		 (snd happy_var_1
-	)}
-
-happyReduce_313 = happyReduce 4# 94# happyReduction_313
-happyReduction_313 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	case happyOut22 happy_x_2 of { happy_var_2 -> 
-	case happyOut101 happy_x_3 of { happy_var_3 -> 
-	case happyOut60 happy_x_4 of { happy_var_4 -> 
-	happyIn100
-		 (let
-    { m   = happy_var_2
-    ; es  = happy_var_3
-    ; dir = happy_var_4
-    ; r   = getRange (happy_var_1, m, es, dir)
-    } in
-    case es of
-    { []  -> Open r m dir
-	; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)
-			     (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))
-			     DoOpen dir
-                       ]
-    }
-	) `HappyStk` happyRest}}}}
-
-happyReduce_314 = happyReduce 6# 94# happyReduction_314
-happyReduction_314 (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 happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	case happyOut22 happy_x_2 of { happy_var_2 -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymDoubleOpenBrace happy_var_3) -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymEllipsis happy_var_4) -> 
-	case happyOut60 happy_x_6 of { happy_var_6 -> 
-	happyIn100
-		 (let r = getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4) in
-    Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)
-    	      	(RecordModuleIFS r happy_var_2) DoOpen happy_var_6
-        ]
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_315 = happySpecReduce_0  95# happyReduction_315
-happyReduction_315  =  happyIn101
-		 ([]
-	)
-
-happyReduce_316 = happySpecReduce_2  95# happyReduction_316
-happyReduction_316 happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOut101 happy_x_2 of { happy_var_2 -> 
-	happyIn101
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_317 = happyReduce 4# 96# happyReduction_317
-happyReduction_317 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut22 happy_x_1 of { happy_var_1 -> 
-	case happyOut17 happy_x_4 of { happy_var_4 -> 
-	happyIn102
-		 ((\ts ->
-		    if null ts then return $ RecordModuleIFS (getRange (happy_var_1, happy_var_4)) happy_var_1
-		    else parseError "No bindings allowed for record module with non-canonical implicits" )
-	) `HappyStk` happyRest}}
-
-happyReduce_318 = happySpecReduce_2  96# happyReduction_318
-happyReduction_318 happy_x_2
-	happy_x_1
-	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
-	case happyOut101 happy_x_2 of { happy_var_2 -> 
-	happyIn102
-		 ((\ts -> return $ SectionApp (getRange (happy_var_1, happy_var_2)) ts (RawApp (fuseRange happy_var_1 happy_var_2) (Ident happy_var_1 : happy_var_2)) )
-	)}}
-
-happyReduce_319 = happyMonadReduce 6# 97# happyReduction_319
-happyReduction_319 (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) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOut102 happy_x_5 of { happy_var_5 -> 
-	case happyOut60 happy_x_6 of { happy_var_6 -> 
-	( do {ma <- happy_var_5 (map addType happy_var_3); return $ ModuleMacro (getRange (happy_var_1, ma, happy_var_6)) happy_var_2 ma DontOpen happy_var_6 })}}}}}
-	) (\r -> happyReturn (happyIn103 r))
-
-happyReduce_320 = happyMonadReduce 7# 97# happyReduction_320
-happyReduction_320 (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) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	case happyOut15 happy_x_3 of { happy_var_3 -> 
-	case happyOut56 happy_x_4 of { happy_var_4 -> 
-	case happyOut102 happy_x_6 of { happy_var_6 -> 
-	case happyOut60 happy_x_7 of { happy_var_7 -> 
-	( do {ma <- happy_var_6 (map addType happy_var_4); return $ ModuleMacro (getRange (happy_var_1, ma, happy_var_7)) happy_var_3 ma DoOpen happy_var_7 })}}}}}
-	) (\r -> happyReturn (happyIn103 r))
-
-happyReduce_321 = happySpecReduce_3  98# happyReduction_321
-happyReduction_321 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> 
-	case happyOut22 happy_x_2 of { happy_var_2 -> 
-	case happyOut59 happy_x_3 of { happy_var_3 -> 
-	happyIn104
-		 (Import (getRange (happy_var_1,happy_var_2,snd happy_var_3)) happy_var_2 (fst happy_var_3) DontOpen (snd happy_var_3)
-	)}}}
-
-happyReduce_322 = happyReduce 4# 98# happyReduction_322
-happyReduction_322 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
-	case happyOut22 happy_x_3 of { happy_var_3 -> 
-	case happyOut59 happy_x_4 of { happy_var_4 -> 
-	happyIn104
-		 (Import (getRange (happy_var_1,happy_var_3,snd happy_var_4)) happy_var_3 (fst happy_var_4) DoOpen (snd happy_var_4)
-	) `HappyStk` happyRest}}}
-
-happyReduce_323 = happyReduce 5# 99# happyReduction_323
-happyReduction_323 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
-	case happyOut15 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
-	case happyOut131 happy_x_5 of { happy_var_5 -> 
-	happyIn105
-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_324 = happySpecReduce_1  100# happyReduction_324
-happyReduction_324 happy_x_1
-	 =  case happyOut107 happy_x_1 of { happy_var_1 -> 
-	happyIn106
-		 ([happy_var_1]
-	)}
-
-happyReduce_325 = happySpecReduce_2  100# happyReduction_325
-happyReduction_325 happy_x_2
-	happy_x_1
-	 =  case happyOut104 happy_x_1 of { happy_var_1 -> 
-	case happyOut106 happy_x_2 of { happy_var_2 -> 
-	happyIn106
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_326 = happySpecReduce_2  100# happyReduction_326
-happyReduction_326 happy_x_2
-	happy_x_1
-	 =  case happyOut100 happy_x_1 of { happy_var_1 -> 
-	case happyOut106 happy_x_2 of { happy_var_2 -> 
-	happyIn106
-		 (happy_var_1 : happy_var_2
-	)}}
-
-happyReduce_327 = happyReduce 5# 101# happyReduction_327
-happyReduction_327 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
-	case happyOut22 happy_x_2 of { happy_var_2 -> 
-	case happyOut56 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
-	case happyOut131 happy_x_5 of { happy_var_5 -> 
-	happyIn107
-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_328 = happySpecReduce_1  102# happyReduction_328
-happyReduction_328 happy_x_1
-	 =  case happyOut110 happy_x_1 of { happy_var_1 -> 
-	happyIn108
-		 (Pragma happy_var_1
-	)}
-
-happyReduce_329 = happySpecReduce_1  103# happyReduction_329
-happyReduction_329 happy_x_1
-	 =  case happyOut111 happy_x_1 of { happy_var_1 -> 
-	happyIn109
-		 (happy_var_1
-	)}
-
-happyReduce_330 = happySpecReduce_1  104# happyReduction_330
-happyReduction_330 happy_x_1
-	 =  case happyOut112 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_331 = happySpecReduce_1  104# happyReduction_331
-happyReduction_331 happy_x_1
-	 =  case happyOut113 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_332 = happySpecReduce_1  104# happyReduction_332
-happyReduction_332 happy_x_1
-	 =  case happyOut115 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_333 = happySpecReduce_1  104# happyReduction_333
-happyReduction_333 happy_x_1
-	 =  case happyOut114 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_334 = happySpecReduce_1  104# happyReduction_334
-happyReduction_334 happy_x_1
-	 =  case happyOut116 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_335 = happySpecReduce_1  104# happyReduction_335
-happyReduction_335 happy_x_1
-	 =  case happyOut117 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_336 = happySpecReduce_1  104# happyReduction_336
-happyReduction_336 happy_x_1
-	 =  case happyOut118 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_337 = happySpecReduce_1  104# happyReduction_337
-happyReduction_337 happy_x_1
-	 =  case happyOut120 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_338 = happySpecReduce_1  104# happyReduction_338
-happyReduction_338 happy_x_1
-	 =  case happyOut121 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_339 = happySpecReduce_1  104# happyReduction_339
-happyReduction_339 happy_x_1
-	 =  case happyOut119 happy_x_1 of { happy_var_1 -> 
-	happyIn110
-		 (happy_var_1
-	)}
-
-happyReduce_340 = happyReduce 4# 105# happyReduction_340
-happyReduction_340 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut27 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
-	happyIn111
-		 (OptionsPragma (fuseRange happy_var_1 happy_var_4) happy_var_3
-	) `HappyStk` happyRest}}}
-
-happyReduce_341 = happyReduce 5# 106# happyReduction_341
-happyReduction_341 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
-	case happyOut28 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	happyIn112
-		 (BuiltinPragma (fuseRange happy_var_1 happy_var_5) (snd happy_var_3) (Ident happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_342 = happyReduce 5# 107# happyReduction_342
-happyReduction_342 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	happyIn113
-		 (CompiledPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_343 = happyReduce 5# 108# happyReduction_343
-happyReduction_343 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	happyIn114
-		 (CompiledTypePragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_344 = happyReduce 6# 109# happyReduction_344
-happyReduction_344 (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 happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> 
-	case happyOut27 happy_x_5 of { happy_var_5 -> 
-	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> 
-	happyIn115
-		 (CompiledDataPragma (fuseRange happy_var_1 happy_var_6) happy_var_3 (snd happy_var_4) happy_var_5
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_345 = happyReduce 5# 110# happyReduction_345
-happyReduction_345 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	happyIn116
-		 (CompiledEpicPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_346 = happyReduce 5# 111# happyReduction_346
-happyReduction_346 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_4 of { happy_var_4 -> 
-	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
-	happyIn117
-		 (CompiledJSPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)
-	) `HappyStk` happyRest}}}}
-
-happyReduce_347 = happyReduce 4# 112# happyReduction_347
-happyReduction_347 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
-	happyIn118
-		 (StaticPragma (fuseRange happy_var_1 happy_var_4) happy_var_3
-	) `HappyStk` happyRest}}}
-
-happyReduce_348 = happyReduce 4# 113# happyReduction_348
-happyReduction_348 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
-	happyIn119
-		 (EtaPragma (fuseRange happy_var_1 happy_var_4) happy_var_3
-	) `HappyStk` happyRest}}}
-
-happyReduce_349 = happyMonadReduce 4# 114# happyReduction_349
-happyReduction_349 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest) tk
-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
-	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
-	( let s = snd happy_var_3 in
-       if validHaskellModuleName s
-       then return $ ImportPragma (fuseRange happy_var_1 happy_var_4) s
-       else parseError $ "Malformed module name: " ++ s ++ ".")}}}
-	) (\r -> happyReturn (happyIn120 r))
-
-happyReduce_350 = happySpecReduce_3  115# happyReduction_350
-happyReduction_350 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
-	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
-	happyIn121
-		 (ImpossiblePragma (fuseRange happy_var_1 happy_var_3)
-	)}}
-
-happyReduce_351 = happySpecReduce_3  116# happyReduction_351
-happyReduction_351 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut123 happy_x_2 of { happy_var_2 -> 
-	happyIn122
-		 (reverse happy_var_2
-	)}
-
-happyReduce_352 = happySpecReduce_3  117# happyReduction_352
-happyReduction_352 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut123 happy_x_1 of { happy_var_1 -> 
-	case happyOut77 happy_x_3 of { happy_var_3 -> 
-	happyIn123
-		 (reverse happy_var_3 ++ happy_var_1
-	)}}
-
-happyReduce_353 = happySpecReduce_1  117# happyReduction_353
-happyReduction_353 happy_x_1
-	 =  case happyOut77 happy_x_1 of { happy_var_1 -> 
-	happyIn123
-		 (reverse happy_var_1
-	)}
-
-happyReduce_354 = happySpecReduce_3  118# happyReduction_354
-happyReduction_354 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut125 happy_x_2 of { happy_var_2 -> 
-	happyIn124
-		 (reverse happy_var_2
-	)}
-
-happyReduce_355 = happySpecReduce_3  119# happyReduction_355
-happyReduction_355 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut125 happy_x_1 of { happy_var_1 -> 
-	case happyOut79 happy_x_3 of { happy_var_3 -> 
-	happyIn125
-		 (reverse happy_var_3 ++ happy_var_1
-	)}}
-
-happyReduce_356 = happySpecReduce_1  119# happyReduction_356
-happyReduction_356 happy_x_1
-	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
-	happyIn125
-		 (reverse happy_var_1
-	)}
-
-happyReduce_357 = happySpecReduce_3  120# happyReduction_357
-happyReduction_357 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut127 happy_x_2 of { happy_var_2 -> 
-	happyIn126
-		 (reverse happy_var_2
-	)}
-
-happyReduce_358 = happySpecReduce_3  121# happyReduction_358
-happyReduction_358 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut127 happy_x_1 of { happy_var_1 -> 
-	case happyOut80 happy_x_3 of { happy_var_3 -> 
-	happyIn127
-		 (reverse happy_var_3 ++ happy_var_1
-	)}}
-
-happyReduce_359 = happySpecReduce_1  121# happyReduction_359
-happyReduction_359 happy_x_1
-	 =  case happyOut80 happy_x_1 of { happy_var_1 -> 
-	happyIn127
-		 (reverse happy_var_1
-	)}
-
-happyReduce_360 = happySpecReduce_2  122# happyReduction_360
-happyReduction_360 happy_x_2
-	happy_x_1
-	 =  happyIn128
-		 ([]
-	)
-
-happyReduce_361 = happySpecReduce_1  122# happyReduction_361
-happyReduction_361 happy_x_1
-	 =  case happyOut122 happy_x_1 of { happy_var_1 -> 
-	happyIn128
-		 (happy_var_1
-	)}
-
-happyReduce_362 = happySpecReduce_2  123# happyReduction_362
-happyReduction_362 happy_x_2
-	happy_x_1
-	 =  happyIn129
-		 ((Nothing, [])
-	)
-
-happyReduce_363 = happySpecReduce_3  123# happyReduction_363
-happyReduction_363 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut87 happy_x_2 of { happy_var_2 -> 
-	happyIn129
-		 ((Just happy_var_2, [])
-	)}
-
-happyReduce_364 = happyReduce 5# 123# happyReduction_364
-happyReduction_364 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut87 happy_x_2 of { happy_var_2 -> 
-	case happyOut132 happy_x_4 of { happy_var_4 -> 
-	happyIn129
-		 ((Just happy_var_2, reverse happy_var_4)
-	) `HappyStk` happyRest}}
-
-happyReduce_365 = happySpecReduce_3  123# happyReduction_365
-happyReduction_365 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut132 happy_x_2 of { happy_var_2 -> 
-	happyIn129
-		 ((Nothing, reverse happy_var_2)
-	)}
-
-happyReduce_366 = happySpecReduce_3  124# happyReduction_366
-happyReduction_366 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut132 happy_x_2 of { happy_var_2 -> 
-	happyIn130
-		 (reverse happy_var_2
-	)}
-
-happyReduce_367 = happySpecReduce_2  125# happyReduction_367
-happyReduction_367 happy_x_2
-	happy_x_1
-	 =  happyIn131
-		 ([]
-	)
-
-happyReduce_368 = happySpecReduce_1  125# happyReduction_368
-happyReduction_368 happy_x_1
-	 =  case happyOut130 happy_x_1 of { happy_var_1 -> 
-	happyIn131
-		 (happy_var_1
-	)}
-
-happyReduce_369 = happySpecReduce_3  126# happyReduction_369
-happyReduction_369 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut132 happy_x_1 of { happy_var_1 -> 
-	case happyOut76 happy_x_3 of { happy_var_3 -> 
-	happyIn132
-		 (reverse happy_var_3 ++ happy_var_1
-	)}}
-
-happyReduce_370 = happySpecReduce_1  126# happyReduction_370
-happyReduction_370 happy_x_1
-	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
-	happyIn132
-		 (reverse happy_var_1
-	)}
-
-happyNewToken action sts stk
-	= lexer(\tk -> 
-	let cont i = happyDoAction i tk action sts stk in
-	case tk of {
-	TokEOF -> happyDoAction 76# tk action sts stk;
-	TokKeyword KwLet happy_dollar_dollar -> cont 1#;
-	TokKeyword KwIn happy_dollar_dollar -> cont 2#;
-	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;
-	TokKeyword KwWith happy_dollar_dollar -> cont 4#;
-	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;
-	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;
-	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;
-	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;
-	TokKeyword KwImport happy_dollar_dollar -> cont 9#;
-	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;
-	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;
-	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;
-	TokKeyword KwTo happy_dollar_dollar -> cont 13#;
-	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;
-	TokKeyword KwModule happy_dollar_dollar -> cont 15#;
-	TokKeyword KwData happy_dollar_dollar -> cont 16#;
-	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;
-	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;
-	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;
-	TokKeyword KwField happy_dollar_dollar -> cont 20#;
-	TokKeyword KwInfix happy_dollar_dollar -> cont 21#;
-	TokKeyword KwInfixL happy_dollar_dollar -> cont 22#;
-	TokKeyword KwInfixR happy_dollar_dollar -> cont 23#;
-	TokKeyword KwMutual happy_dollar_dollar -> cont 24#;
-	TokKeyword KwAbstract happy_dollar_dollar -> cont 25#;
-	TokKeyword KwPrivate happy_dollar_dollar -> cont 26#;
-	TokKeyword KwProp happy_dollar_dollar -> cont 27#;
-	TokKeyword KwSet happy_dollar_dollar -> cont 28#;
-	TokKeyword KwForall happy_dollar_dollar -> cont 29#;
-	TokKeyword KwSyntax happy_dollar_dollar -> cont 30#;
-	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 31#;
-	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 32#;
-	TokKeyword KwIMPORT happy_dollar_dollar -> cont 33#;
-	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 34#;
-	TokKeyword KwETA happy_dollar_dollar -> cont 35#;
-	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 36#;
-	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 37#;
-	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 38#;
-	TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 39#;
-	TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 40#;
-	TokKeyword KwSTATIC happy_dollar_dollar -> cont 41#;
-	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 42#;
-	TokKeyword KwQuote happy_dollar_dollar -> cont 43#;
-	TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 44#;
-	TokKeyword KwUnquote happy_dollar_dollar -> cont 45#;
-	TokSetN happy_dollar_dollar -> cont 46#;
-	TokTeX happy_dollar_dollar -> cont 47#;
-	TokComment happy_dollar_dollar -> cont 48#;
-	TokSymbol SymEllipsis happy_dollar_dollar -> cont 49#;
-	TokSymbol SymDotDot happy_dollar_dollar -> cont 50#;
-	TokSymbol SymDot happy_dollar_dollar -> cont 51#;
-	TokSymbol SymSemi happy_dollar_dollar -> cont 52#;
-	TokSymbol SymColon happy_dollar_dollar -> cont 53#;
-	TokSymbol SymEqual happy_dollar_dollar -> cont 54#;
-	TokSymbol SymUnderscore happy_dollar_dollar -> cont 55#;
-	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 56#;
-	TokSymbol SymArrow happy_dollar_dollar -> cont 57#;
-	TokSymbol SymLambda happy_dollar_dollar -> cont 58#;
-	TokSymbol SymAs happy_dollar_dollar -> cont 59#;
-	TokSymbol SymBar happy_dollar_dollar -> cont 60#;
-	TokSymbol SymOpenParen happy_dollar_dollar -> cont 61#;
-	TokSymbol SymCloseParen happy_dollar_dollar -> cont 62#;
-	TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 63#;
-	TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 64#;
-	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 65#;
-	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 66#;
-	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 67#;
-	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 68#;
-	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 69#;
-	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 70#;
-	TokSymbol SymClosePragma happy_dollar_dollar -> cont 71#;
-	TokId happy_dollar_dollar -> cont 72#;
-	TokQId happy_dollar_dollar -> cont 73#;
-	TokString happy_dollar_dollar -> cont 74#;
-	TokLiteral happy_dollar_dollar -> cont 75#;
-	_ -> happyError' tk
-	})
-
-happyError_ 76# tk = happyError' tk
-happyError_ _ tk = happyError' tk
-
-happyThen :: () => Parser a -> (a -> Parser b) -> Parser b
-happyThen = (>>=)
-happyReturn :: () => a -> Parser a
-happyReturn = (return)
-happyThen1 = happyThen
-happyReturn1 :: () => a -> Parser a
-happyReturn1 = happyReturn
-happyError' :: () => (Token) -> Parser a
-happyError' tk = (\token -> happyError) tk
-
-tokensParser = happySomeParser where
-  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))
-
-exprParser = happySomeParser where
-  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut29 x))
-
-moduleParser = happySomeParser where
-  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut9 x))
-
-happySeq = happyDontSeq
-
-
-{--------------------------------------------------------------------------
-    Parsers
- --------------------------------------------------------------------------}
-
--- | Parse the token stream. Used by the TeX compiler.
-tokensParser :: Parser [Token]
-
--- | Parse an expression. Could be used in interactions.
-exprParser :: Parser Expr
-
--- | Parse a module.
-moduleParser :: Parser Module
-
-
-{--------------------------------------------------------------------------
-    Happy stuff
- --------------------------------------------------------------------------}
-
--- | Required by Happy.
-happyError :: Parser a
-happyError = parseError "Parse error"
-
-
-{--------------------------------------------------------------------------
-    Utility functions
- --------------------------------------------------------------------------}
-
--- | Create a name from a string.
-
-mkName :: (Interval, String) -> Parser Name
-mkName (i, s) = do
-    let xs = parts s
-    mapM_ isValidId xs
-    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"
-    return $ Name (getRange i) xs
-    where
-        parts :: String -> [NamePart]
-        parts ""        = []
-        parts ('_' : s) = Hole : parts s
-        parts s         = Id x : parts s'
-          where (x, s') = break (== '_') s
-
-	isValidId Hole   = return ()
-	isValidId (Id x) = case parse defaultParseFlags [0] (lexer return) x of
-	    ParseOk _ (TokId _) -> return ()
-	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"
-
-	-- we know that there are no two Ids in a row
-	alternating (Hole : Hole : _) = False
-	alternating (_ : xs)	      = alternating xs
-	alternating []		      = True
-
--- | Create a qualified name from a list of strings
-mkQName :: [(Interval, String)] -> Parser QName
-mkQName ss = do
-    xs <- mapM mkName ss
-    return $ foldr Qual (QName $ last xs) (init xs)
-
--- | Match a particular name.
-isName :: String -> (Interval, String) -> Parser ()
-isName s (_,s')
-    | s == s'	= return ()
-    | otherwise	= fail $ "expected " ++ s ++ ", found " ++ s'
-
--- | Build a forall pi (forall x y z -> ...)
-forallPi :: [LamBinding] -> Expr -> Expr
-forallPi bs e = Pi (map addType bs) e
-
--- | Converts lambda bindings to typed bindings.
-addType :: LamBinding -> TypedBindings
-addType (DomainFull b)	 = b
-addType (DomainFree h rel x) = TypedBindings r $ Arg h rel $ TBind r [x] $ Underscore r Nothing
-  where r = getRange x
-
--- | Check that an import directive doesn't contain repeated names
-verifyImportDirective :: ImportDirective -> Parser ImportDirective
-verifyImportDirective i =
-    case filter ((>1) . length)
-	 $ group
-	 $ sort xs
-    of
-	[]  -> return i
-	yss -> let Just pos = rStart $ getRange $ head $ concat yss in
-               parseErrorAt pos $
-		"repeated name" ++ s ++ " in import directive: " ++
-		concat (intersperse ", " $ map (show . head) yss)
-	    where
-		s = case yss of
-			[_] -> ""
-			_   -> "s"
-    where
-	xs = names (usingOrHiding i) ++ map renFrom (renaming i)
-	names (Using xs)    = xs
-	names (Hiding xs)   = xs
-
--- | Breaks up a string into substrings. Returns every maximal
--- subsequence of zero or more characters distinct from @'.'@.
---
--- > splitOnDots ""         == [""]
--- > splitOnDots "foo.bar"  == ["foo", "bar"]
--- > splitOnDots ".foo.bar" == ["", "foo", "bar"]
--- > splitOnDots "foo.bar." == ["foo", "bar", ""]
--- > splitOnDots "foo..bar" == ["foo", "", "bar"]
-splitOnDots :: String -> [String]
-splitOnDots ""        = [""]
-splitOnDots ('.' : s) = [] : splitOnDots s
-splitOnDots (c   : s) = case splitOnDots s of
-  p : ps -> (c : p) : ps
-
-prop_splitOnDots = and
-  [ splitOnDots ""         == [""]
-  , splitOnDots "foo.bar"  == ["foo", "bar"]
-  , splitOnDots ".foo.bar" == ["", "foo", "bar"]
-  , splitOnDots "foo.bar." == ["foo", "bar", ""]
-  , splitOnDots "foo..bar" == ["foo", "", "bar"]
-  ]
-
--- | Returns 'True' iff the name is a valid Haskell (hierarchical)
--- module name.
-validHaskellModuleName :: String -> Bool
-validHaskellModuleName = all ok . splitOnDots
-  where
-  -- Checks if a dot-less module name is well-formed.
-  ok :: String -> Bool
-  ok []      = False
-  ok (c : s) =
-    isUpper c &&
-    all (\c -> isLower c || c == '_' ||
-               isUpper c ||
-               generalCategory c == DecimalNumber ||
-               c == '\'')
-        s
-
-{--------------------------------------------------------------------------
-    Patterns
- --------------------------------------------------------------------------}
-
--- | Turn an expression into a left hand side.
-exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)
-exprToLHS e = case e of
-  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es
-  _		 -> LHS <$> exprToPattern e <*> return []
-
--- | Turn an expression into a pattern. Fails if the expression is not a
---   valid pattern.
-exprToPattern :: Expr -> Parser Pattern
-exprToPattern e =
-    case e of
-	Ident x			-> return $ IdentP x
-	App _ e1 e2		-> AppP <$> exprToPattern e1
-					<*> T.mapM (T.mapM exprToPattern) e2
-	Paren r e		-> ParenP r
-					<$> exprToPattern e
-	Underscore r _		-> return $ WildP r
-	Absurd r		-> return $ AbsurdP r
-	As r x e		-> AsP r x <$> exprToPattern e
-	Dot r (HiddenArg _ e)	-> return $ HiddenP r $ fmap (DotP r) e
-	Dot r e			-> return $ DotP r e
-	Lit l			-> return $ LitP l
-	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e
-	InstanceArg r e		-> InstanceP r <$> T.mapM exprToPattern e
-	RawApp r es		-> RawAppP r <$> mapM exprToPattern es
-	OpApp r x es		-> OpAppP r x <$> mapM opAppExprToPattern es
-	_			->
-          let Just pos = rStart $ getRange e in
-          parseErrorAt pos $ "Not a valid pattern: " ++ show e
-
-opAppExprToPattern :: OpApp Expr -> Parser Pattern
-opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "syntax binding lambda cannot appear in a pattern"
-opAppExprToPattern (Ordinary e) = exprToPattern e
-
-parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."
-
-{--------------------------------------------------------------------------
-    Tests
- --------------------------------------------------------------------------}
-
--- | Test suite.
-tests :: IO Bool
-tests = runTests "Agda.Syntax.Parser.Parser"
-  [ quickCheck' prop_splitOnDots
-  ]
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<built-in>" #-}
-{-# LINE 1 "<command-line>" #-}
+{-# LANGUAGE BangPatterns, PatternGuards #-}
+{-| The parser is generated by Happy (<http://www.haskell.org/happy>).
+ -
+ - Ideally, ranges should be as precise as possible, to get messages that
+ - emphasize precisely the faulting term(s) upon error.
+ -
+ - However, interactive highlighting is only applied at the end of each
+ - mutual block, keywords are only highlighted once (see
+ - `TypeChecking.Rules.Decl'). So if the ranges of two declarations
+ - interleave, one must ensure that keyword ranges are not included in
+ - the intersection. (Otherwise they are uncolored by the interactive
+ - highlighting.)
+ -
+ -}
+module Agda.Syntax.Parser.Parser (
+      moduleParser
+    , exprParser
+    , tokensParser
+    , tests
+    ) where
+
+import Control.Arrow
+import Control.Monad
+import Control.Monad.State
+import Data.Char
+import Data.List
+import Data.Maybe
+import qualified Data.Traversable as T
+
+import Agda.Syntax.Position hiding (tests)
+import Agda.Syntax.Parser.Monad
+import Agda.Syntax.Parser.Lexer
+import Agda.Syntax.Parser.Tokens
+import Agda.Syntax.Concrete
+import Agda.Syntax.Concrete.Name
+import Agda.Syntax.Concrete.Pretty
+import Agda.Syntax.Common
+import Agda.Syntax.Fixity
+import Agda.Syntax.Notation
+import Agda.Syntax.Literal
+
+import Agda.Utils.Hash
+import Agda.Utils.Monad
+import Agda.Utils.QuickCheck
+import Agda.Utils.TestHelpers
+import Agda.Utils.Tuple
+import qualified Data.Array as Happy_Data_Array
+import qualified GHC.Exts as Happy_GHC_Exts
+
+-- parser produced by Happy Version 1.18.8
+
+newtype HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70 = HappyAbsSyn HappyAny
+#if __GLASGOW_HASKELL__ >= 607
+type HappyAny = Happy_GHC_Exts.Any
+#else
+type HappyAny = forall a . a
+#endif
+happyIn6 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn6 #-}
+happyOut6 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Token])
+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut6 #-}
+happyIn7 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn7 #-}
+happyOut7 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Token])
+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut7 #-}
+happyIn8 :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn8 #-}
+happyOut8 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Token)
+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut8 #-}
+happyIn9 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn9 #-}
+happyOut9 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (([Pragma], [Declaration]))
+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut9 #-}
+happyIn10 :: t10 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn10 #-}
+happyOut10 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t10
+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut10 #-}
+happyIn11 :: t11 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn11 #-}
+happyOut11 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t11
+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut11 #-}
+happyIn12 :: t12 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn12 #-}
+happyOut12 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t12
+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut12 #-}
+happyIn13 :: (()) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn13 #-}
+happyOut13 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (())
+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut13 #-}
+happyIn14 :: (Integer) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn14 #-}
+happyOut14 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Integer)
+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut14 #-}
+happyIn15 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn15 #-}
+happyOut15 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Name)
+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut15 #-}
+happyIn16 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn16 #-}
+happyOut16 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Name])
+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut16 #-}
+happyIn17 :: (Range) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn17 #-}
+happyOut17 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Range)
+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut17 #-}
+happyIn18 :: (Arg Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn18 #-}
+happyOut18 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Arg Name)
+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut18 #-}
+happyIn19 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn19 #-}
+happyOut19 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg Name])
+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut19 #-}
+happyIn20 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn20 #-}
+happyOut20 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg Name])
+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut20 #-}
+happyIn21 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn21 #-}
+happyOut21 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (QName)
+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut21 #-}
+happyIn22 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn22 #-}
+happyOut22 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (QName)
+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut22 #-}
+happyIn23 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn23 #-}
+happyOut23 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Name)
+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut23 #-}
+happyIn24 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn24 #-}
+happyOut24 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Name])
+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut24 #-}
+happyIn25 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn25 #-}
+happyOut25 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Name])
+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut25 #-}
+happyIn26 :: (Either [Name] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn26 #-}
+happyOut26 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Either [Name] [Expr])
+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut26 #-}
+happyIn27 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn27 #-}
+happyOut27 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([String])
+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut27 #-}
+happyIn28 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn28 #-}
+happyOut28 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (QName)
+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut28 #-}
+happyIn29 :: (Expr) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn29 #-}
+happyOut29 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Expr)
+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut29 #-}
+happyIn30 :: t30 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn30 #-}
+happyOut30 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t30
+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut30 #-}
+happyIn31 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn31 #-}
+happyOut31 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])
+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut31 #-}
+happyIn32 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn32 #-}
+happyOut32 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])
+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut32 #-}
+happyIn33 :: t33 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn33 #-}
+happyOut33 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t33
+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut33 #-}
+happyIn34 :: (Expr) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn34 #-}
+happyOut34 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Expr)
+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut34 #-}
+happyIn35 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn35 #-}
+happyOut35 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])
+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut35 #-}
+happyIn36 :: t36 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t36
+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+happyIn37 :: t37 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t37
+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+happyIn38 :: t38 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t38
+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+happyIn39 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([(Name, Expr)])
+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+happyIn40 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([(Name, Expr)])
+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+happyIn41 :: ((Name, Expr)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((Name, Expr))
+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+happyIn42 :: t42 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t42
+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+happyIn43 :: t43 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t43
+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+happyIn44 :: ([TypedBindings]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypedBindings])
+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+happyIn45 :: (TypedBindings) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (TypedBindings)
+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+happyIn46 :: (TypedBinding) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (TypedBinding)
+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+happyIn47 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])
+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+happyIn48 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Either ([LamBinding], Hiding) [Expr])
+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+happyIn49 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Either Hiding LamBinding])
+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+happyIn50 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Either [Either Hiding LamBinding] [Expr])
+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+happyIn51 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((LHS,RHS,WhereClause))
+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+happyIn52 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((LHS,RHS,WhereClause))
+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+happyIn53 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((LHS,RHS,WhereClause))
+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+happyIn54 :: ([(LHS,RHS,WhereClause)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([(LHS,RHS,WhereClause)])
+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+happyIn55 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])
+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyIn56 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn56 #-}
+happyOut56 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])
+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut56 #-}
+happyIn57 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn57 #-}
+happyOut57 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])
+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut57 #-}
+happyIn58 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn58 #-}
+happyOut58 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([LamBinding])
+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut58 #-}
+happyIn59 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn59 #-}
+happyOut59 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Either [LamBinding] [Expr])
+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut59 #-}
+happyIn60 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn60 #-}
+happyOut60 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportDirective)
+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut60 #-}
+happyIn61 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn61 #-}
+happyOut61 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportDirective)
+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut61 #-}
+happyIn62 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn62 #-}
+happyOut62 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportDirective)
+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut62 #-}
+happyIn63 :: ((UsingOrHiding , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn63 #-}
+happyOut63 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((UsingOrHiding , Range))
+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut63 #-}
+happyIn64 :: (([Renaming] , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn64 #-}
+happyOut64 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (([Renaming] , Range))
+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut64 #-}
+happyIn65 :: ([Renaming]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn65 #-}
+happyOut65 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Renaming])
+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut65 #-}
+happyIn66 :: (Renaming) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn66 #-}
+happyOut66 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Renaming)
+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut66 #-}
+happyIn67 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn67 #-}
+happyOut67 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportedName)
+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut67 #-}
+happyIn68 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn68 #-}
+happyOut68 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (ImportedName)
+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut68 #-}
+happyIn69 :: ([ImportedName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn69 #-}
+happyOut69 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([ImportedName])
+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut69 #-}
+happyIn70 :: t70 -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn70 #-}
+happyOut70 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> t70
+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut70 #-}
+happyIn71 :: (LHS) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn71 #-}
+happyOut71 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (LHS)
+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut71 #-}
+happyIn72 :: ([Pattern]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn72 #-}
+happyOut72 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Pattern])
+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut72 #-}
+happyIn73 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn73 #-}
+happyOut73 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])
+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut73 #-}
+happyIn74 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn74 #-}
+happyOut74 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])
+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut74 #-}
+happyIn75 :: (WhereClause) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn75 #-}
+happyOut75 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (WhereClause)
+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut75 #-}
+happyIn76 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn76 #-}
+happyOut76 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut76 #-}
+happyIn77 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn77 #-}
+happyOut77 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut77 #-}
+happyIn78 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn78 #-}
+happyOut78 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut78 #-}
+happyIn79 :: ([Arg Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn79 #-}
+happyOut79 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg Declaration])
+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut79 #-}
+happyIn80 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn80 #-}
+happyOut80 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut80 #-}
+happyIn81 :: (RHSOrTypeSigs) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn81 #-}
+happyOut81 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (RHSOrTypeSigs)
+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut81 #-}
+happyIn82 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn82 #-}
+happyOut82 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut82 #-}
+happyIn83 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn83 #-}
+happyOut83 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut83 #-}
+happyIn84 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn84 #-}
+happyOut84 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut84 #-}
+happyIn85 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn85 #-}
+happyOut85 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut85 #-}
+happyIn86 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn86 #-}
+happyOut86 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Name)
+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut86 #-}
+happyIn87 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn87 #-}
+happyOut87 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut87 #-}
+happyIn88 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn88 #-}
+happyOut88 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut88 #-}
+happyIn89 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn89 #-}
+happyOut89 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut89 #-}
+happyIn90 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn90 #-}
+happyOut90 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut90 #-}
+happyIn91 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn91 #-}
+happyOut91 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut91 #-}
+happyIn92 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn92 #-}
+happyOut92 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut92 #-}
+happyIn93 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn93 #-}
+happyOut93 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut93 #-}
+happyIn94 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn94 #-}
+happyOut94 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut94 #-}
+happyIn95 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn95 #-}
+happyOut95 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut95 #-}
+happyIn96 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn96 #-}
+happyOut96 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([String])
+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut96 #-}
+happyIn97 :: ([HoleName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn97 #-}
+happyOut97 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([HoleName])
+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut97 #-}
+happyIn98 :: (HoleName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn98 #-}
+happyOut98 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (HoleName)
+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut98 #-}
+happyIn99 :: (String) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn99 #-}
+happyOut99 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (String)
+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut99 #-}
+happyIn100 :: (Maybe Range) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn100 #-}
+happyOut100 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Maybe Range)
+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut100 #-}
+happyIn101 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn101 #-}
+happyOut101 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut101 #-}
+happyIn102 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn102 #-}
+happyOut102 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Expr])
+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut102 #-}
+happyIn103 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn103 #-}
+happyOut103 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypedBindings] -> Parser ModuleApplication)
+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut103 #-}
+happyIn104 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn104 #-}
+happyOut104 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut104 #-}
+happyIn105 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn105 #-}
+happyOut105 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut105 #-}
+happyIn106 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn106 #-}
+happyOut106 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Name)
+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut106 #-}
+happyIn107 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn107 #-}
+happyOut107 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut107 #-}
+happyIn108 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn108 #-}
+happyOut108 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut108 #-}
+happyIn109 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn109 #-}
+happyOut109 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Declaration)
+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut109 #-}
+happyIn110 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn110 #-}
+happyOut110 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut110 #-}
+happyIn111 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn111 #-}
+happyOut111 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut111 #-}
+happyIn112 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn112 #-}
+happyOut112 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut112 #-}
+happyIn113 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn113 #-}
+happyOut113 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut113 #-}
+happyIn114 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn114 #-}
+happyOut114 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut114 #-}
+happyIn115 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn115 #-}
+happyOut115 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut115 #-}
+happyIn116 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn116 #-}
+happyOut116 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut116 #-}
+happyIn117 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn117 #-}
+happyOut117 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut117 #-}
+happyIn118 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn118 #-}
+happyOut118 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut118 #-}
+happyIn119 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn119 #-}
+happyOut119 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut119 #-}
+happyIn120 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn120 #-}
+happyOut120 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut120 #-}
+happyIn121 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn121 #-}
+happyOut121 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut121 #-}
+happyIn122 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn122 #-}
+happyOut122 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut122 #-}
+happyIn123 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn123 #-}
+happyOut123 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Pragma)
+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut123 #-}
+happyIn124 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn124 #-}
+happyOut124 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypeSignature])
+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut124 #-}
+happyIn125 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn125 #-}
+happyOut125 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypeSignature])
+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut125 #-}
+happyIn126 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn126 #-}
+happyOut126 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypeSignature])
+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut126 #-}
+happyIn127 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn127 #-}
+happyOut127 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([TypeSignature])
+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut127 #-}
+happyIn128 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn128 #-}
+happyOut128 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg TypeSignature])
+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut128 #-}
+happyIn129 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn129 #-}
+happyOut129 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Arg TypeSignature])
+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut129 #-}
+happyIn130 :: ([Constructor]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn130 #-}
+happyOut130 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Constructor])
+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut130 #-}
+happyIn131 :: ((Maybe Induction, Maybe Name, [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn131 #-}
+happyOut131 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ((Maybe Induction, Maybe Name, [Declaration]))
+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut131 #-}
+happyIn132 :: (Induction) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn132 #-}
+happyOut132 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Induction)
+happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut132 #-}
+happyIn133 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn133 #-}
+happyOut133 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut133 #-}
+happyIn134 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn134 #-}
+happyOut134 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut134 #-}
+happyIn135 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn135 #-}
+happyOut135 :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> ([Declaration])
+happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut135 #-}
+happyInTok :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70)
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn t10 t11 t12 t30 t33 t36 t37 t38 t42 t43 t70) -> (Token)
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\x00\x00\x2f\x06\x31\x00\x00\x00\xa3\x03\x44\x05\x00\x00\x81\x05\xdd\x01\x00\x00\x00\x00\x31\x00\x00\x00\x4f\x04\x4f\x04\x65\x05\x4a\x05\x00\x00\x38\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\x00\x00\xfb\x05\xd9\x05\x49\x05\x00\x00\xb3\x02\x3c\x05\xcb\x07\x00\x00\x00\x00\xe7\x0d\x39\x05\x00\x00\x00\x00\x00\x00\x00\x00\x53\x03\xaa\x07\x00\x00\x00\x00\xe4\x0d\x14\x05\x19\x02\xe9\x04\x00\x00\x00\x00\x00\x00\x28\x05\xc5\x01\x48\x05\x00\x00\x36\x05\x1c\x03\x33\x05\x00\x00\xaa\x01\x00\x00\xcb\x01\xcb\x01\x00\x00\x31\x05\x32\x05\x30\x05\x00\x00\x00\x00\x00\x00\xa1\x0d\xd9\x05\x00\x00\x2f\x05\x00\x00\xd4\x0d\x9e\x0d\xeb\x02\x85\x02\x00\x00\xc9\x06\xae\x05\x9e\x06\x00\x00\x93\x07\xbe\x04\x19\x02\x93\x04\xeb\x06\xeb\x06\xeb\x06\x62\x05\xc4\x0d\x8c\x05\x22\x05\xc4\x0d\x00\x00\xeb\x06\xeb\x06\xeb\x06\x16\x05\x68\x04\x19\x02\x0c\x05\x51\x05\x33\x04\x00\x00\xf7\x02\xeb\x06\xeb\x06\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02\x8c\x05\xeb\x06\x93\x07\x00\x05\x00\x00\x00\x00\xc4\x0d\x72\x07\x00\x00\x00\x00\x4f\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x07\x5b\x07\x10\x04\xac\x01\xc4\x0d\x46\x05\xc4\x0d\x02\x05\xfe\x04\x00\x00\x00\x00\x08\x05\x00\x00\x00\x00\xeb\x06\xeb\x06\xeb\x06\xeb\x06\x37\x05\x4a\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\xfa\x04\xf8\x04\x57\x00\xcb\x00\xfb\x04\xfb\x04\x3a\x07\xf7\x04\xec\x04\xec\x04\xec\x04\xf6\x04\xf6\x04\xf6\x04\xed\x04\xed\x04\xf0\x04\x11\x0e\x8c\x05\xf1\x04\xf4\x04\x00\x00\xf5\x04\xeb\x04\xee\x04\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x05\xdd\x04\xcb\x01\xe7\x04\xd8\x04\xcb\x01\xe6\x04\x67\x00\xe5\x04\x00\x00\xb2\x00\x22\x01\xe4\x04\xe0\x04\xdf\x04\x00\x00\xeb\x06\xeb\x06\x00\x00\xeb\x06\xeb\x06\xc1\x0d\xd9\x04\xc1\x0d\x7c\x06\x61\x05\x51\x06\x00\x00\x00\x00\xd7\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x05\x00\x00\x00\x00\x3f\x05\x3f\x05\xcd\x04\x00\x00\xcb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\xff\xfe\x00\xd9\xff\xfe\x00\xeb\x06\x00\x00\x00\x00\x00\x00\xeb\x06\x3f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x04\xc6\x04\x00\x00\x3f\x05\x00\x00\xc3\x04\xc2\x04\xc1\x04\xc0\x04\xad\x04\xbb\x04\xbb\x04\xbb\x04\xbb\x04\xbb\x04\xbb\x04\xfd\x04\x23\x07\xb9\x04\xc4\x04\xc3\xff\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x00\x00\xb9\x00\xb1\x0d\x9d\x06\x9d\x06\x9d\x06\x9d\x06\x00\x00\xb8\x04\x00\x00\xb8\x04\x00\x00\xd7\xff\x00\x00\x33\x04\x00\x00\x00\x00\x2f\x00\x3f\x05\x3f\x05\xf3\x04\x3f\x05\x00\x00\x00\x00\x00\x00\xb6\x04\x00\x00\xcb\x01\x00\x00\x00\x00\x00\x00\xea\x04\x00\x00\xb2\x04\xb1\x04\xb0\x04\xfc\x02\x00\x00\x10\x04\x00\x00\x00\x00\xdc\x04\xf9\xff\xf9\xff\x00\x00\x10\x04\x00\x00\x00\x00\x54\x03\x00\x00\x00\x00\x3f\x05\x00\x00\x00\x00\x00\x00\xa2\x04\x9c\x04\x00\x00\x00\x00\xd7\xff\xae\x04\x00\x00\x9d\x00\x9a\x04\xac\x04\x00\x00\x9d\x00\x9d\x06\xe1\x04\x09\x00\x9e\x00\x5e\x00\x06\x00\xeb\x06\xb9\x00\xaa\x04\x00\x00\x9d\x00\x38\x02\x1e\x02\xd7\xff\xd7\xff\x53\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x00\x00\xa3\x04\x00\x00\x3f\x05\x00\x00\x9e\x04\x23\x07\xd6\x04\x8a\x04\x00\x00\x89\x04\x89\x04\x89\x04\x85\x04\x7f\x04\x00\x00\x87\x04\x00\x00\x80\x04\x7e\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\x7d\x04\x00\x00\x00\x00\x7c\x04\x54\x04\x7b\x04\x75\x04\x73\x04\x00\x00\x00\x00\x00\x00\x00\x00\x71\x04\x00\x00\x71\x04\x00\x00\x70\x04\x5e\x01\x00\x00\x63\x04\x63\x04\x63\x04\x63\x04\x00\x00\xb9\x00\x3f\x05\x00\x00\xcd\x00\x6c\x04\x3f\x05\x67\x04\x3f\x05\x67\x04\x3f\x05\x65\x04\x26\x04\x65\x04\x6d\x04\x00\x00\x5c\x04\x3f\x05\x00\x00\xd7\xff\x3f\x05\x00\x00\x9d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x04\x5b\x04\x00\x00\x49\x04\x51\x04\x29\x04\x3c\x04\x41\x04\x6a\x04\x00\x00\x24\x04\x24\x04\x5e\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x20\x04\x00\x00\x00\x00\x00\x00\x00\x00\x26\x04\x00\x00\x02\x07\x10\x04\x00\x00\x5a\x04\x00\x00\x00\x00\x2b\x00\x57\x04\x00\x00\x3a\x04\x00\x00\x04\x03\x00\x00\x00\x00\x0c\x04\x5e\x01\x02\x04\x5e\x01\xb9\x00\xb9\x00\xf4\x03\x00\x00\xfb\x03\x00\x00\x00\x00\x00\x00\xeb\x03\x00\x00\x00\x00\x00\x00\xe3\x03\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\xe0\x03\x00\x00\x00\x00\xd8\x03\xd2\x03\x00\x00\xd2\x03\x00\x00\x00\x00\x3f\x01\x10\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x03\x00\x00\x33\x04\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x03\x00\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x33\x04\x00\x00\x9d\x00\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\x6b\x04\xac\x0d\x34\x00\x05\x04\xf9\x03\x00\x00\x00\x00\x00\x00\x19\x01\x00\x00\x00\x00\x1a\x00\x00\x00\x49\x02\x05\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\x4b\x05\x93\x0d\x00\x00\x00\x00\x39\x04\x81\x03\x78\x01\x00\x00\x00\x00\x80\x06\xf5\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x00\x00\x00\x00\xf7\x07\x26\x09\xbe\x08\x0c\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x03\x88\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x08\x7a\x0d\x00\x00\x00\x00\x00\x00\x4c\x08\x00\x00\x61\x01\xac\x00\x00\x00\x23\x0b\x73\x09\x69\x08\x00\x00\x7c\x02\xf2\x08\x9e\x08\xd8\x08\x0b\x0b\xf3\x0a\xdb\x0a\x00\x00\xf6\x03\x61\x0d\x00\x00\x58\x03\x00\x00\xc3\x0a\xab\x0a\x93\x0a\x00\x00\x48\x0d\x3b\x0b\x36\x01\x00\x00\x21\x02\x00\x00\x00\x00\x7b\x0a\x63\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x0d\x16\x0d\x72\x04\x16\x01\x8a\x03\x00\x00\x00\x00\x38\x08\xa9\x00\x00\x00\x00\x00\x98\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x87\x00\x82\x04\x3b\x0b\x2f\x08\x00\x00\x25\x08\x00\x00\x7c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x06\x4b\x0a\x33\x0a\x1b\x0a\x59\x03\x43\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x04\x09\x03\x07\x03\x99\x00\x1f\x00\x56\x03\x49\x03\x6a\x01\xff\x02\x47\x03\x3c\x03\x29\x03\xcb\x02\xc7\x02\xbe\x02\x1e\x03\x3d\x04\xed\x02\x00\x00\xfd\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x31\x01\x00\x00\x18\x03\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x0c\x00\x00\xfe\x02\x00\x00\x00\x00\xd3\x02\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x02\xe2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0a\xeb\x09\x00\x00\xd3\x09\xbb\x09\x1f\x08\x00\x00\x1c\x08\xa3\x09\x5b\x09\x8b\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x0c\x00\x00\x00\x00\xb2\x0c\x99\x0c\x00\x00\x00\x00\xce\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x02\x00\x00\x7e\x02\x81\x08\x00\x00\x00\x00\x00\x00\xf4\x00\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x67\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x02\x00\x00\xad\x02\x88\x02\x70\x02\x6b\x02\x68\x02\x5b\x02\x28\x02\x0f\x02\x28\x04\x00\x00\xd6\x01\x00\x00\x00\x00\x00\x00\x3b\x02\x00\x00\xe5\x01\xe2\x01\x00\x00\x14\x00\x0a\x08\x00\x08\xc0\x07\x92\x06\x34\x06\x00\x00\x60\x02\x00\x00\x1d\x00\x00\x00\x18\x00\x00\x00\x8e\x02\x00\x00\x00\x00\x1f\x02\x4e\x0c\x35\x0c\x1d\x02\x1c\x0c\x00\x00\x00\x00\x00\x00\xa6\x03\x00\x00\x50\x02\x00\x00\x00\x00\x00\x00\x1c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x01\x00\x00\x1f\x04\x00\x00\x00\x00\xe1\x00\xca\x00\xc1\x00\x00\x00\xde\x03\x00\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x03\x0c\x00\x00\x00\x00\x00\x00\xc4\x01\x2b\x02\x00\x00\x00\x00\xb2\x02\x00\x00\x00\x00\xf7\x03\x13\x02\x00\x00\x00\x00\xf1\x03\x55\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x09\x72\x03\x00\x00\x00\x00\xef\x03\x00\x00\x13\x02\x39\x02\xcc\x01\xce\x01\x00\x00\x00\x00\x00\x00\x3e\x03\x00\x00\x00\x00\x00\x00\x00\x00\xea\x0b\x00\x00\xd7\x01\xa2\x01\xcd\x01\x00\x00\x00\x00\xd1\x01\xc1\x01\xb2\x01\x00\x00\x9a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x96\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\x7d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x01\x00\x00\xff\xff\x00\x00\x00\x00\x84\x01\x00\x00\x7e\x03\x5e\x03\x4f\x03\x4d\x03\x00\x00\xa8\x00\xd1\x0b\x00\x00\x00\x00\x09\x01\xb8\x0b\x23\x02\x9f\x0b\x06\x02\x86\x0b\xaa\x02\x20\x00\x73\x02\x00\x00\x00\x00\xa6\x00\x6d\x0b\x00\x00\xc5\x00\x54\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x01\x00\x00\x63\x01\x00\x00\x00\x00\x00\x00\x62\x01\x4c\x01\x35\x01\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x38\x00\xd8\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x6a\x00\x6e\x03\x6a\x03\x8e\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\x3f\x03\x35\x03\x1f\x03\x45\x02\x00\x00\xe9\x02\xd1\x02\xc8\x02\x2c\x00\x00\x00\x00\x00\x90\xff\x14\x01\x00\x00\xbe\xff\x00\x00\x00\x00\x3b\x0b\x79\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\x00\x00\xb4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x02\x9b\x02\xf7\x01\x00\x00\x00\x00\x00\x00\x47\x01\x00\x00\x10\x01\x00\x00\x00\x00"#
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\xfa\xff\x00\x00\xc3\xfe\x00\x00\xfc\xff\x00\x00\xaa\xff\x00\x00\xc3\xfe\xa9\xff\xb6\xfe\xc3\xfe\xb2\xfe\xc4\xfe\x00\x00\x00\x00\x89\xff\x69\xff\x00\x00\x7b\xff\x7a\xff\x78\xff\x77\xff\x74\xff\x00\x00\x56\xff\x55\xff\x72\xff\x00\x00\x00\x00\x4e\xff\x4c\xff\x00\x00\x00\x00\x65\xff\x64\xff\x00\x00\x00\x00\x63\xff\x62\xff\x61\xff\x60\xff\x00\x00\x00\x00\x66\xff\x67\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xff\x8a\xff\x68\xff\x00\x00\x89\xff\x00\x00\x83\xff\x00\x00\x82\xff\x00\x00\x6a\xff\x89\xff\x5b\xff\x00\x00\x00\x00\x9e\xff\x00\x00\x00\x00\x00\x00\x5c\xff\x87\xff\x21\xff\x35\xff\x00\x00\x6f\xff\x00\x00\x40\xff\x3d\xff\x36\xff\x00\x00\x00\x00\x86\xff\x00\x00\x00\x00\x00\x00\x59\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\xff\x00\x00\x00\x00\x27\xff\x22\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\xff\x00\x00\xc3\xfe\x4d\xff\x00\x00\x00\x00\x00\x00\x4f\xff\x7e\xff\x76\xff\x6d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x81\xff\x89\xff\x88\xff\x23\xff\xbf\xfe\xa8\xff\xb5\xfe\x00\x00\xfb\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd8\xff\xd7\xff\xd6\xff\xcf\xff\xce\xff\xcd\xff\xd5\xff\xd4\xff\xd3\xff\xd2\xff\xd1\xff\xd0\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xac\xff\xab\xff\xbf\xfe\xbf\xfe\x12\xff\x00\x00\x23\xff\x00\x00\x23\xff\x00\x00\x81\xff\x5a\xff\x79\xff\x00\x00\x7c\xff\x82\xff\x72\xff\x00\x00\x00\x00\x00\x00\xfd\xfe\xe0\xfe\x81\xfe\xf7\xfe\xf6\xfe\xf5\xfe\xf4\xfe\xf3\xfe\xf2\xfe\xf8\xfe\xf1\xfe\xf0\xfe\xef\xfe\xee\xfe\xed\xfe\xe8\xfe\xe7\xfe\xec\xfe\xeb\xfe\xea\xfe\xe9\xfe\xb3\xfe\xb1\xfe\xb0\xfe\xae\xfe\xaf\xfe\xad\xfe\xac\xfe\xab\xfe\xa8\xfe\xa7\xfe\xaa\xfe\xa9\xfe\x00\x00\x00\x00\x00\x00\xc4\xfe\x00\x00\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\xff\x00\x00\x00\x00\x00\x00\x00\x00\x53\xff\x52\xff\x54\xff\x83\xff\x00\x00\x29\xff\x2a\xff\x7d\xff\x28\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\xff\x00\x00\x2b\xff\x00\x00\x00\x00\x33\xff\x32\xff\x34\xff\x20\xff\x00\x00\x00\x00\x1f\xff\x00\x00\x00\x00\x3c\xff\x38\xff\x3d\xff\x00\x00\x00\x00\x00\x00\x41\xff\x75\xff\x37\xff\x45\xff\x5d\xff\x9d\xff\x44\xff\x5f\xff\x00\x00\x43\xff\x6c\xff\x00\x00\x00\x00\x00\x00\x42\xff\x00\x00\x3a\xff\x39\xff\x3b\xff\x3f\xff\x3e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\x70\xff\xa4\xff\x00\x00\x00\x00\x4b\xff\x49\xff\x4a\xff\x48\xff\x46\xff\x47\xff\x71\xff\x1d\xff\x1e\xff\x00\x00\x00\x00\x58\xff\x00\x00\x73\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xfe\x00\x00\x9f\xff\x00\x00\x00\x00\xd0\xfe\xd1\xfe\xd2\xfe\x00\x00\xa2\xff\x00\x00\x00\x00\xd3\xfe\x00\x00\x23\xff\x23\xff\x23\xff\x23\xff\x23\xff\xb7\xfe\x00\x00\xce\xfe\x00\x00\xcf\xfe\x00\x00\x85\xfe\xc3\xfe\xa6\xff\xa7\xff\xfb\xfe\x00\x00\x00\x00\xff\xfe\x00\x00\x80\xff\xa6\xfe\x25\xff\x00\x00\x24\xff\x00\x00\xc1\xfe\x18\xff\x16\xff\x13\xff\x14\xff\x00\x00\x00\x00\x00\x00\x12\xff\xbe\xfe\x12\xff\xc2\xfe\x17\xff\xa3\xff\x00\x00\x07\xff\x15\xff\x12\xff\x83\xfe\xb4\xfe\x00\x00\xfc\xfe\x03\xff\x00\x00\xe2\xfe\xe1\xfe\xe3\xfe\x00\x00\x00\x00\x82\xfe\x9b\xff\x99\xff\x00\x00\x95\xfe\x00\x00\x00\x00\x00\x00\x98\xfe\x00\x00\x23\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\xff\x97\xff\x00\x00\x92\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\xff\xd6\xfe\xd5\xfe\xd4\xfe\x00\x00\xc9\xfe\xc7\xfe\x00\x00\xc5\xfe\x00\x00\xa0\xff\x01\xff\x6e\xff\xff\xfe\x00\x00\x7f\xff\x81\xff\x81\xff\x81\xff\x00\x00\x81\xff\x9d\xfe\x00\x00\x9b\xfe\x00\x00\x00\x00\x50\xff\x51\xff\x57\xff\x31\xff\x30\xff\x2f\xff\x2e\xff\x2c\xff\x2d\xff\x1b\xff\x1c\xff\x19\xff\x1a\xff\x5e\xff\x6b\xff\x00\x00\x9c\xfe\x9e\xfe\x00\x00\x81\xff\x00\x00\x00\x00\x00\x00\x9f\xfe\x02\xff\x00\xff\xcc\xfe\x00\x00\xc8\xfe\x00\x00\x85\xff\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x94\xfe\x00\x00\x00\x00\x98\xff\x89\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xfe\x00\x00\x00\x00\x97\xfe\x00\x00\x00\x00\x9a\xff\x00\x00\xfa\xfe\xfe\xfe\x84\xfe\xc0\xfe\x09\xff\x05\xff\x00\x00\x06\xff\x00\x00\x00\x00\x00\x00\x00\x00\x0d\xff\x00\x00\xa3\xff\x00\x00\x00\x00\xa3\xff\x0f\xff\x0b\xff\x10\xff\x08\xff\x11\xff\x00\x00\x00\x00\xe5\xfe\x96\xfe\xe6\xfe\x99\xfe\x00\x00\xb8\xfe\xbf\xfe\x12\xff\xb9\xfe\xdb\xfe\x90\xfe\xdd\xfe\x00\x00\x00\x00\xdc\xfe\xd8\xfe\xd9\xfe\x00\x00\xe4\xfe\x93\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x95\xff\x93\xff\xcd\xfe\xcb\xfe\x00\x00\xa0\xfe\xa1\xfe\xa3\xfe\x00\x00\xa4\xfe\xa5\xfe\xa2\xfe\x00\x00\xca\xfe\x94\xff\x96\xff\x8f\xff\x91\xff\x8b\xff\x8d\xff\x8f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x87\xfe\x86\xfe\x00\x00\x00\x00\x91\xfe\x00\x00\xbb\xfe\xbc\xfe\x00\x00\x12\xff\xf9\xfe\x04\xff\x0e\xff\x0c\xff\x0a\xff\xba\xfe\x00\x00\xdf\xfe\xde\xfe\xda\xfe\xd7\xfe\x8c\xfe\x8b\xfe\xc3\xfe\x8e\xfe\xc3\xfe\x8e\xff\x8c\xff\x92\xff\x90\xff\x00\x00\xc6\xfe\x00\x00\x00\x00\x00\x00\xbd\xfe\x88\xfe\x8a\xfe\xc3\xfe\x8d\xfe\x00\x00\x89\xfe"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x05\x00\x05\x00\x0b\x00\x41\x00\x09\x00\x09\x00\x0a\x00\x0f\x00\x03\x00\x09\x00\x0f\x00\x03\x00\x7d\x00\x37\x00\x4c\x00\x0f\x00\x10\x00\x39\x00\x09\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x04\x00\x46\x00\x0c\x00\x09\x00\x0e\x00\x4c\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x3a\x00\x00\x00\x22\x00\x23\x00\x39\x00\x0f\x00\x10\x00\x41\x00\x03\x00\x3d\x00\x76\x00\x09\x00\x40\x00\x03\x00\x04\x00\x08\x00\x7c\x00\x46\x00\x4c\x00\x41\x00\x0f\x00\x39\x00\x0f\x00\x09\x00\x46\x00\x3a\x00\x47\x00\x4c\x00\x4a\x00\x0f\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\x1e\x00\x1f\x00\x20\x00\x5a\x00\x5e\x00\x5f\x00\x5d\x00\x49\x00\x62\x00\x63\x00\x48\x00\x03\x00\x61\x00\x67\x00\x47\x00\x69\x00\x0f\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x05\x00\x48\x00\x77\x00\x0b\x00\x09\x00\x4c\x00\x5e\x00\x5f\x00\x7e\x00\x4a\x00\x0f\x00\x81\x00\x5d\x00\x65\x00\x66\x00\x61\x00\x68\x00\x64\x00\x6a\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x3b\x00\x7b\x00\x09\x00\x79\x00\x5e\x00\x5f\x00\x77\x00\x09\x00\x0f\x00\x39\x00\x60\x00\x65\x00\x66\x00\x0f\x00\x68\x00\x00\x00\x6a\x00\x4c\x00\x39\x00\x03\x00\x09\x00\x4c\x00\x4d\x00\x1e\x00\x1f\x00\x20\x00\x0f\x00\x10\x00\x1e\x00\x1f\x00\x20\x00\x46\x00\x41\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x46\x00\x0c\x00\x09\x00\x0e\x00\x4a\x00\x0f\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x11\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x5e\x00\x5f\x00\x09\x00\x09\x00\x62\x00\x63\x00\x0c\x00\x0d\x00\x09\x00\x67\x00\x38\x00\x69\x00\x39\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x07\x00\x48\x00\x49\x00\x60\x00\x07\x00\x0f\x00\x38\x00\x5d\x00\x60\x00\x47\x00\x81\x00\x36\x00\x37\x00\x49\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x49\x00\x43\x00\x09\x00\x45\x00\x3e\x00\x3f\x00\x40\x00\x3e\x00\x0f\x00\x40\x00\x4c\x00\x3b\x00\x3a\x00\x3e\x00\x60\x00\x40\x00\x0b\x00\x3f\x00\x48\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x05\x00\x06\x00\x4c\x00\x3b\x00\x3c\x00\x3d\x00\x41\x00\x3b\x00\x3c\x00\x3d\x00\x09\x00\x46\x00\x2d\x00\x2e\x00\x2f\x00\x4a\x00\x0f\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\x1e\x00\x1f\x00\x20\x00\x39\x00\x5e\x00\x5f\x00\x09\x00\x7f\x00\x62\x00\x63\x00\x09\x00\x09\x00\x01\x00\x67\x00\x44\x00\x69\x00\x46\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x12\x00\x21\x00\x22\x00\x23\x00\x09\x00\x0f\x00\x21\x00\x22\x00\x23\x00\x38\x00\x81\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x46\x00\x07\x00\x09\x00\x49\x00\x09\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x11\x00\x09\x00\x35\x00\x36\x00\x37\x00\x5e\x00\x5f\x00\x0f\x00\x3b\x00\x3c\x00\x09\x00\x3e\x00\x65\x00\x66\x00\x41\x00\x09\x00\x43\x00\x44\x00\x45\x00\x46\x00\x7d\x00\x0f\x00\x41\x00\x1f\x00\x76\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x0b\x00\x7c\x00\x4a\x00\x15\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x1f\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x09\x00\x44\x00\x5d\x00\x46\x00\x5e\x00\x5f\x00\x0f\x00\x10\x00\x62\x00\x63\x00\x09\x00\x16\x00\x01\x00\x67\x00\x15\x00\x69\x00\x0f\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x12\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x0f\x00\x38\x00\x39\x00\x3a\x00\x15\x00\x81\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x15\x00\x09\x00\x0c\x00\x0d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x11\x00\x12\x00\x35\x00\x36\x00\x37\x00\x3a\x00\x08\x00\x15\x00\x3b\x00\x3c\x00\x3f\x00\x3e\x00\x09\x00\x0f\x00\x41\x00\x09\x00\x43\x00\x44\x00\x45\x00\x46\x00\x11\x00\x12\x00\x41\x00\x11\x00\x12\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x05\x00\x06\x00\x4a\x00\x3a\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x3f\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x09\x00\x44\x00\x43\x00\x46\x00\x5e\x00\x5f\x00\x0f\x00\x10\x00\x62\x00\x63\x00\x09\x00\x42\x00\x01\x00\x67\x00\x09\x00\x69\x00\x0f\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x12\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x0f\x00\x5b\x00\x5c\x00\x5d\x00\x09\x00\x81\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x7f\x00\x09\x00\x0c\x00\x0d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x11\x00\x12\x00\x09\x00\x36\x00\x37\x00\x0c\x00\x09\x00\x0e\x00\x3b\x00\x3c\x00\x3a\x00\x3e\x00\x0f\x00\x10\x00\x41\x00\x0b\x00\x43\x00\x44\x00\x45\x00\x46\x00\x43\x00\x43\x00\x41\x00\x45\x00\x45\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x09\x00\x4c\x00\x4a\x00\x44\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x16\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x43\x00\x76\x00\x45\x00\x16\x00\x5e\x00\x5f\x00\x16\x00\x7c\x00\x62\x00\x63\x00\x09\x00\x16\x00\x01\x00\x67\x00\x0b\x00\x69\x00\x0f\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x09\x00\x12\x00\x76\x00\x1e\x00\x1f\x00\x20\x00\x0f\x00\x16\x00\x7c\x00\x05\x00\x06\x00\x81\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x05\x00\x06\x00\x09\x00\x36\x00\x37\x00\x0c\x00\x0d\x00\x3b\x00\x3b\x00\x3c\x00\x16\x00\x3e\x00\x16\x00\x41\x00\x41\x00\x43\x00\x43\x00\x45\x00\x45\x00\x46\x00\x05\x00\x06\x00\x41\x00\x0b\x00\x4c\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x05\x00\x06\x00\x4a\x00\x0b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x0b\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x06\x00\x36\x00\x37\x00\x06\x00\x5e\x00\x5f\x00\x05\x00\x06\x00\x62\x00\x63\x00\x7f\x00\x80\x00\x41\x00\x67\x00\x43\x00\x69\x00\x45\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x00\x00\x01\x00\x0a\x00\x0b\x00\x0c\x00\x0b\x00\x06\x00\x07\x00\x08\x00\x09\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\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\x0b\x00\x20\x00\x21\x00\x3b\x00\x09\x00\x09\x00\x7f\x00\x80\x00\x0c\x00\x41\x00\x0e\x00\x43\x00\x42\x00\x45\x00\x08\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x4c\x00\x41\x00\x35\x00\x43\x00\x37\x00\x45\x00\x7f\x00\x09\x00\x3b\x00\x3c\x00\x0c\x00\x3e\x00\x0e\x00\x08\x00\x41\x00\x7f\x00\x43\x00\x09\x00\x45\x00\x7f\x00\x0c\x00\x48\x00\x0e\x00\x4a\x00\x08\x00\x4c\x00\x4d\x00\x09\x00\x4f\x00\x00\x00\x01\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x42\x00\x09\x00\x44\x00\x09\x00\x46\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x09\x00\x0a\x00\x11\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x09\x00\x20\x00\x21\x00\x0c\x00\x09\x00\x0e\x00\x7a\x00\x0c\x00\x09\x00\x0e\x00\x76\x00\x0c\x00\x27\x00\x0e\x00\x78\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x09\x00\x0a\x00\x35\x00\x32\x00\x37\x00\x34\x00\x35\x00\x4b\x00\x3b\x00\x3c\x00\x15\x00\x3e\x00\x0b\x00\x41\x00\x41\x00\x43\x00\x43\x00\x45\x00\x45\x00\x5c\x00\x5d\x00\x48\x00\x44\x00\x4a\x00\x15\x00\x4c\x00\x4d\x00\x0b\x00\x4f\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\x01\x00\x05\x00\x06\x00\x05\x00\x06\x00\x06\x00\x07\x00\x08\x00\x02\x00\x05\x00\x06\x00\x09\x00\x09\x00\x7f\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x01\x00\x11\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x42\x00\x20\x00\x21\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x47\x00\x0a\x00\x0b\x00\x0c\x00\x27\x00\x0e\x00\x47\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x7f\x00\x80\x00\x35\x00\x32\x00\x37\x00\x34\x00\x35\x00\x4c\x00\x3b\x00\x3c\x00\x4c\x00\x3e\x00\x09\x00\x0a\x00\x41\x00\x01\x00\x43\x00\x4b\x00\x45\x00\x3d\x00\x06\x00\x07\x00\x08\x00\x4a\x00\x03\x00\x4c\x00\x4d\x00\x4c\x00\x4f\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x09\x00\x0a\x00\x46\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x46\x00\x20\x00\x21\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x03\x00\x05\x00\x06\x00\x03\x00\x09\x00\x26\x00\x27\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x11\x00\x47\x00\x35\x00\x01\x00\x37\x00\x00\x00\x01\x00\x0f\x00\x3b\x00\x3c\x00\x4c\x00\x3e\x00\x4c\x00\x4d\x00\x41\x00\x4c\x00\x43\x00\x0d\x00\x45\x00\x38\x00\x12\x00\x09\x00\x27\x00\x4a\x00\x42\x00\x4c\x00\x4d\x00\x0f\x00\x4f\x00\x39\x00\x3a\x00\x1d\x00\x1e\x00\x1f\x00\x33\x00\x34\x00\x35\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x42\x00\x01\x00\x4c\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x4c\x00\x4d\x00\x42\x00\x36\x00\x37\x00\x03\x00\x38\x00\x4e\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x3a\x00\x4c\x00\x41\x00\x42\x00\x43\x00\x47\x00\x45\x00\x47\x00\x4c\x00\x1d\x00\x1e\x00\x1f\x00\x47\x00\x4c\x00\x4d\x00\x46\x00\x4f\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x4c\x00\x4b\x00\x01\x00\x4b\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x4b\x00\x4b\x00\x4b\x00\x36\x00\x37\x00\x4b\x00\x4e\x00\x4e\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x4b\x00\x4e\x00\x41\x00\x4b\x00\x43\x00\x4e\x00\x45\x00\x46\x00\x04\x00\x1d\x00\x1e\x00\x1f\x00\x40\x00\x4c\x00\x4d\x00\x3e\x00\x4f\x00\x39\x00\x03\x00\x39\x00\x4c\x00\x39\x00\x4c\x00\x47\x00\x01\x00\x0f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x41\x00\x41\x00\x41\x00\x36\x00\x37\x00\x0c\x00\x04\x00\x4b\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x47\x00\x3a\x00\x41\x00\x42\x00\x43\x00\x05\x00\x45\x00\x4c\x00\x4c\x00\x1d\x00\x1e\x00\x1f\x00\x4e\x00\x4c\x00\x4d\x00\x4b\x00\x4f\x00\x4e\x00\x46\x00\x4e\x00\x4e\x00\x4c\x00\x46\x00\x3d\x00\x01\x00\x3d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x3d\x00\x3d\x00\x46\x00\x36\x00\x37\x00\x3d\x00\x3d\x00\x46\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x42\x00\x42\x00\x41\x00\x3a\x00\x43\x00\x38\x00\x45\x00\x46\x00\x40\x00\x1d\x00\x1e\x00\x1f\x00\x46\x00\x4c\x00\x4d\x00\x4c\x00\x4f\x00\x4c\x00\x46\x00\x4f\x00\x05\x00\x47\x00\x47\x00\x47\x00\x01\x00\x47\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x4c\x00\x40\x00\x03\x00\x36\x00\x37\x00\x4e\x00\x4b\x00\x4e\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\x02\x00\x09\x00\x41\x00\x42\x00\x43\x00\x4c\x00\x45\x00\x0f\x00\x45\x00\x1d\x00\x1e\x00\x1f\x00\x3d\x00\x4c\x00\x4d\x00\x01\x00\x4f\x00\x02\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x3d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x42\x00\x12\x00\x42\x00\x36\x00\x37\x00\x46\x00\x50\x00\x46\x00\x3b\x00\x3c\x00\x46\x00\x3e\x00\x1d\x00\x1e\x00\x41\x00\x39\x00\x43\x00\x47\x00\x45\x00\x4c\x00\x3d\x00\x22\x00\x50\x00\x3f\x00\x09\x00\x4c\x00\x4d\x00\x01\x00\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x50\x00\xff\xff\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x12\x00\x3e\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\xff\xff\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\x1d\x00\x1e\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x12\x00\x3e\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\xff\xff\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\x1d\x00\x1e\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\x01\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\xff\xff\x40\x00\x41\x00\x09\x00\x43\x00\xff\xff\x45\x00\x12\x00\xff\xff\x09\x00\xff\xff\x11\x00\xff\xff\x4c\x00\x4d\x00\x0f\x00\x4f\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x27\x00\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\xff\xff\x36\x00\x37\x00\x33\x00\x34\x00\x35\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x1d\x00\x1e\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x09\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x12\x00\x3e\x00\xff\xff\x11\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x46\x00\xff\xff\x1d\x00\x1e\x00\x09\x00\xff\xff\x4c\x00\x4d\x00\x01\x00\x4f\x00\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\x31\x00\x32\x00\x37\x00\x34\x00\x35\x00\xff\xff\x3b\x00\x3c\x00\x27\x00\x3e\x00\x1d\x00\x1e\x00\x41\x00\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x4c\x00\x4d\x00\x01\x00\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\x36\x00\x37\x00\x37\x00\xff\xff\xff\xff\x3b\x00\x3b\x00\x3c\x00\x12\x00\x3e\x00\xff\xff\x41\x00\x41\x00\x43\x00\x43\x00\x45\x00\x45\x00\x46\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x4c\x00\x4c\x00\x4d\x00\x01\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x12\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\x1d\x00\x1e\x00\x41\x00\x42\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x12\x00\xff\xff\x4c\x00\x4d\x00\x37\x00\x4f\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x12\x00\xff\xff\x4c\x00\x4d\x00\x37\x00\x4f\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x12\x00\xff\xff\x4c\x00\x4d\x00\x37\x00\x4f\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\x1d\x00\x1e\x00\x09\x00\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\xff\xff\x11\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x12\x00\xff\xff\x4c\x00\x4d\x00\x37\x00\x4f\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x27\x00\x1d\x00\x1e\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x4c\x00\x4d\x00\xff\xff\x4f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\xff\xff\xff\xff\x09\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\x3b\x00\x3c\x00\x11\x00\x09\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x11\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x4d\x00\xff\xff\x4f\x00\x11\x00\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\x2a\x00\x2b\x00\x2c\x00\xff\xff\x09\x00\xff\xff\x27\x00\x09\x00\xff\xff\xff\xff\x34\x00\x35\x00\x11\x00\x09\x00\xff\xff\x11\x00\x27\x00\xff\xff\x33\x00\x34\x00\x35\x00\x11\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x11\x00\x09\x00\xff\xff\x27\x00\xff\xff\xff\xff\x27\x00\x2b\x00\xff\xff\x11\x00\x2b\x00\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\x34\x00\x35\x00\xff\xff\x34\x00\x35\x00\x09\x00\x27\x00\xff\xff\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x11\x00\xff\xff\x27\x00\x09\x00\xff\xff\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\x11\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x27\x00\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x27\x00\xff\xff\x34\x00\x35\x00\x2b\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x09\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x2e\x00\xff\xff\x30\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x2d\x00\x2e\x00\x2f\x00\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\x09\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x28\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x09\x00\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x36\x00\x37\x00\xff\xff\x36\x00\x37\x00\x3b\x00\xff\xff\x3d\x00\x3b\x00\xff\xff\x3d\x00\x41\x00\xff\xff\x43\x00\x41\x00\x45\x00\x43\x00\xff\xff\x45\x00\x36\x00\x37\x00\xff\xff\x4c\x00\xff\xff\x3b\x00\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x36\x00\x37\x00\xff\xff\x36\x00\x37\x00\x3b\x00\x4c\x00\xff\xff\x3b\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\x41\x00\x45\x00\x43\x00\xff\xff\x45\x00\x36\x00\x37\x00\xff\xff\x4c\x00\xff\xff\x3b\x00\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x36\x00\x37\x00\xff\xff\x36\x00\x37\x00\x3b\x00\x4c\x00\xff\xff\x3b\x00\xff\xff\xff\xff\x41\x00\xff\xff\x43\x00\x41\x00\x45\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x4c\x00\xff\xff\xff\xff\x4c\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\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"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\x6f\x02\x78\x02\x97\x02\xdb\x01\x10\x00\x77\x01\xc1\x01\x33\x02\x19\x02\x79\x00\x11\x00\x1f\x02\x87\x02\xc1\x01\xdc\x01\x7a\x00\x49\x02\x49\x01\x17\x01\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\xbb\x01\x7d\x00\xf8\x01\xcb\x01\xbb\x01\xcc\x01\x33\x00\xbc\x01\xbd\x01\x77\x01\xc1\x01\x86\x01\x79\x00\x0b\x02\x91\x01\xee\x01\x1a\x01\x49\x01\x7a\x00\x49\x02\xdb\x01\xb9\x01\x76\x00\x4d\x02\x88\x02\x77\x00\x05\x00\x06\x00\x0e\x00\x85\x02\xfa\x01\xdc\x01\xe3\x00\xba\x01\x1a\x02\x0f\x00\x10\x00\xe4\x00\x20\x02\xc2\x01\x33\x00\xe5\x00\x11\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x70\x02\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x19\x00\x1a\x00\xd1\x00\x5d\x02\x07\x00\xf3\x00\x5e\x02\xcd\x01\xf4\x00\xf5\x00\xbe\x01\x1b\x02\x7d\x02\xf6\x00\xc2\x01\xf7\x00\x8a\x01\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x2c\x02\x92\x01\xc3\x01\x6b\x02\x10\x00\x33\x00\x07\x00\x08\x00\x71\x02\x10\x00\x11\x00\x72\x02\x92\x02\x09\x00\x0a\x00\x4a\x02\x0b\x00\x87\x01\x0c\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x52\x00\xce\x01\x10\x00\xbf\x01\x07\x00\x08\x00\xc3\x01\x10\x00\x11\x00\x1c\x02\x7b\x02\x09\x00\x0a\x00\x11\x00\x0b\x00\x91\x01\x0c\x00\x33\x00\x82\xff\x1d\x02\x79\x00\x33\x00\x34\x00\x19\x00\x1a\x00\xd1\x00\x7a\x00\x7c\x00\x19\x00\x1a\x00\xd1\x00\x82\xff\xe3\x00\x77\x01\xc1\x01\xbb\x01\x10\x00\xe4\x00\xcb\x01\x46\x00\xcc\x01\xe5\x00\x11\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x31\x01\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x19\x00\x1a\x00\xd1\x00\x2e\x02\x07\x00\xf3\x00\x2e\x02\xbb\x01\xf4\x00\xf5\x00\xbc\x01\xbd\x01\x2e\x02\xf6\x00\x58\x01\xf7\x00\x1e\x02\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x34\x02\x92\x01\x5a\x01\xa6\x01\x34\x02\x11\x00\x58\x01\x68\x02\xa7\x01\x46\x02\x03\x01\xd0\x01\xd1\x01\x56\x02\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x5a\x01\xd2\x01\x10\x00\xd3\x01\x2f\x02\x30\x02\x31\x02\x2f\x02\x11\x00\x7f\x02\x33\x00\x89\x01\x69\x01\x2f\x02\xd2\x00\x33\x02\x6d\x02\x78\x00\x44\x02\xf1\x01\x16\x00\x17\x00\x2a\x01\x19\x00\x1a\x00\x1b\x00\x9d\x02\x8f\x01\x33\x00\x80\x02\x36\x02\x37\x02\xe3\x00\x35\x02\x36\x02\x37\x02\x10\x00\xe4\x00\xf2\x01\xf3\x01\xf4\x01\xe5\x00\x11\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x95\x02\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x19\x00\x1a\x00\xd9\x00\x49\x01\x07\x00\xf3\x00\x17\x01\x7e\x02\xf4\x00\xf5\x00\x81\x02\x17\x01\x21\x00\xf6\x00\x42\x00\xf7\x00\x43\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x22\x00\x65\x01\x19\x01\x1a\x01\x82\x02\x11\x00\x18\x01\x19\x01\x1a\x01\x58\x01\x96\x02\x23\x00\x24\x00\x25\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x59\x01\x39\x02\x46\x00\x5a\x01\x3d\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x34\x01\x10\x00\x85\x02\x2b\x00\x2c\x00\x07\x00\x08\x00\x11\x00\x2d\x00\x2e\x00\x3f\x02\x2f\x00\x7e\x00\x0a\x00\x30\x00\x10\x00\x31\x00\x42\x00\x32\x00\x43\x00\x53\x02\x11\x00\xe3\x00\x83\x01\x4d\x02\x33\x00\x34\x00\xe4\x00\x35\x00\x5b\x02\x86\x02\xe5\x00\x63\x02\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x66\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x79\x00\x42\x00\x5f\x02\x43\x00\x07\x00\xf3\x00\x7a\x00\xd0\x00\xf4\x00\xf5\x00\x10\x00\xfc\x01\x21\x00\xf6\x00\xff\x01\xf7\x00\x11\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x22\x00\x73\x00\x19\x00\x1a\x00\xdf\x01\x11\x00\xa9\x01\xa0\x01\xa1\x01\x01\x02\x9c\x02\x23\x00\x24\x00\x25\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\xbb\x01\x02\x02\x46\x00\xbc\x01\x0c\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xd3\x01\x0b\x02\x9d\x01\x2b\x00\x2c\x00\x46\x01\x0e\x00\x03\x02\x2d\x00\x2e\x00\x78\x00\x2f\x00\x46\x00\x0f\x00\x30\x00\x46\x00\x31\x00\x42\x00\x32\x00\x43\x00\xd3\x01\xd4\x01\xe3\x00\xd3\x01\xd5\x01\x33\x00\x34\x00\xe4\x00\x35\x00\x98\x02\x8f\x01\xe5\x00\x4a\x01\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x78\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x79\x00\x42\x00\x05\x02\x43\x00\x07\x00\xf3\x00\x7a\x00\x7b\x00\xf4\x00\xf5\x00\x10\x00\x06\x02\x21\x00\xf6\x00\x0e\x02\xf7\x00\x11\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x22\x00\xde\x01\x19\x00\x1a\x00\xdf\x01\x11\x00\xd7\x01\xd8\x01\xd9\x01\x29\x02\x94\x02\x23\x00\x24\x00\x25\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\xbb\x01\x2a\x02\x46\x00\xbc\x01\x0d\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xd3\x01\xd6\x01\xbb\x01\x2b\x00\x2c\x00\xcb\x01\x79\x00\x8e\x02\x2d\x00\x2e\x00\xad\x01\x2f\x00\x7a\x00\x7c\x00\x30\x00\xae\x01\x31\x00\x42\x00\x32\x00\x43\x00\xb3\x01\x10\x02\xe3\x00\x11\x02\xb7\x01\x33\x00\x34\x00\xe4\x00\x35\x00\xc4\x01\x33\x00\xe5\x00\xe0\x01\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xe1\x01\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x12\x02\x4d\x02\x13\x02\xe3\x01\x07\x00\xf3\x00\xe4\x01\x4e\x02\xf4\x00\xf5\x00\x10\x00\xe5\x01\x21\x00\xf6\x00\xf6\x01\xf7\x00\x11\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x10\x00\x22\x00\x4d\x02\x19\x00\x1a\x00\x55\x00\x11\x00\xe6\x01\x51\x02\x99\x02\x9a\x02\x03\x01\x23\x00\x24\x00\x25\x00\xe2\x00\x14\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x83\x02\x9e\x01\x9f\x01\xa0\x01\xa1\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9b\x02\x8f\x01\xbb\x01\x2b\x00\x2c\x00\xbc\x01\x28\x02\x52\x00\x2d\x00\x2e\x00\xe7\x01\x2f\x00\xe9\x01\xe0\x00\x30\x00\x33\x01\x31\x00\x34\x01\x32\x00\x3d\x00\x89\x02\x8f\x01\xe3\x00\xf8\x01\x33\x00\x33\x00\x34\x00\xba\x01\x35\x00\x8a\x02\x8b\x02\xe5\x00\xfa\x01\xe6\x00\xe7\x00\xe8\x00\xe9\x00\x5d\x01\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x56\x01\x2b\x00\x6e\x00\x5a\x01\x07\x00\xf3\x00\x8c\x02\x8d\x02\xf4\x00\xf5\x00\xaf\x01\x48\x02\x64\x00\xf6\x00\x6f\x00\xf7\x00\x70\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x91\x01\x21\x00\xa3\x01\xa4\x01\xa5\x01\x60\x01\x05\x01\x06\x01\x07\x01\xc3\xfe\x7a\x02\x9e\x01\x9f\x01\xa0\x01\xa1\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x74\x02\x75\x02\x76\x02\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x23\x00\x24\x00\x63\x01\x13\x01\x14\x01\x52\x00\x79\x01\xbb\x01\xaf\x01\x4b\x02\xcb\x01\x5b\x00\x8f\x02\x36\x01\x75\x01\x37\x01\x7d\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\xe0\x00\x15\x01\xe1\x00\x57\x00\xe2\x00\x7a\x01\xbb\x01\x2d\x00\x2e\x00\xcb\x01\x2f\x00\x90\x02\x7f\x01\x68\x00\x7b\x01\x69\x00\xbb\x01\x75\x00\x7c\x01\xcb\x01\x92\x01\x91\x02\x16\x01\x80\x01\x33\x00\x34\x00\x84\x01\x35\x00\x91\x01\x21\x00\x77\x01\x57\x02\x77\x01\x58\x02\x05\x01\x06\x01\x07\x01\xc3\xfe\x78\xff\x85\x01\x78\xff\x46\x00\x78\xff\x08\x01\x09\x01\x0a\x01\x0b\x01\x77\x01\x59\x02\x47\x00\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x23\x00\x24\x00\xbb\x01\x13\x01\x14\x01\xcb\x01\xbb\x01\x69\x02\x81\x01\xcb\x01\xbb\x01\x6a\x02\x8a\x01\xcb\x01\x5e\x00\x16\x02\x8c\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x77\x01\x5a\x02\x15\x01\x1e\x01\x57\x00\x61\x00\x62\x00\x92\x01\x2d\x00\x2e\x00\x97\x01\x2f\x00\x43\x01\x5b\x00\x68\x00\x5c\x00\x69\x00\x5d\x00\x75\x00\x09\x02\xd9\x01\x92\x01\x95\x01\x16\x01\xd7\x00\x33\x00\x34\x00\x44\x01\x35\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\x21\x00\x13\x02\x14\x02\x22\x02\x23\x02\x05\x01\x06\x01\x07\x01\x80\x00\x25\x02\x26\x02\x5d\x00\x46\x00\x6a\x00\x08\x01\x09\x01\x0a\x01\x0b\x01\x74\x02\x04\x00\x47\x00\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x23\x00\x24\x00\x94\x02\x13\x01\x14\x01\x2d\x02\x9e\x01\x9f\x01\xa0\x01\xa1\x01\x50\x02\xa3\x01\xa4\x01\xa5\x01\x5e\x00\xa6\x01\x55\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xaf\x01\xb0\x01\x15\x01\x21\x01\x57\x00\x61\x00\x62\x00\x33\x00\x2d\x00\x2e\x00\xdc\x01\x2f\x00\x77\x01\xdd\x01\x68\x00\x21\x00\x69\x00\x67\x02\x75\x00\x68\x02\x05\x01\x06\x01\x07\x01\x16\x01\x77\x02\x33\x00\x34\x00\xdc\x01\x35\x00\x08\x01\x09\x01\x0a\x01\x0b\x01\x77\x01\x78\x01\x6d\x02\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x23\x00\x24\x00\x6f\x02\x13\x01\x14\x01\xa8\x01\x9e\x01\x9f\x01\xa0\x01\xa1\x01\x78\x02\x8e\x01\x8f\x01\x7a\x02\x46\x00\x6c\x00\x1f\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x6c\x00\x15\x01\x21\x00\x57\x00\x35\x00\x04\x00\x39\x02\x2d\x00\x2e\x00\x33\x00\x2f\x00\x33\x00\x34\x00\x68\x00\x33\x00\x69\x00\x3b\x02\x75\x00\x3c\x02\x22\x00\x10\x00\xd4\x00\x16\x01\x3d\x02\x33\x00\x34\x00\x11\x00\x35\x00\x94\x01\x95\x01\x23\x00\x24\x00\x25\x00\x21\x02\xd6\x00\x62\x00\xda\x00\x15\x00\x16\x00\x17\x00\xdb\x00\x19\x00\x1a\x00\x1b\x00\x3f\x02\x21\x00\x33\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x34\x00\x41\x02\x2b\x00\x2c\x00\x43\x02\x42\x02\xd9\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x48\x02\x33\x00\x30\x00\x46\x00\x31\x00\xb2\x01\x32\x00\x50\x02\x33\x00\x23\x00\x24\x00\x25\x00\x55\x02\x33\x00\x34\x00\x5d\x02\x35\x00\x9d\x01\x9e\x01\x9f\x01\xa0\x01\xa1\x01\xdc\x01\x61\x02\x21\x00\x62\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x63\x02\x65\x02\x66\x02\x2b\x00\x2c\x00\xfe\x01\xe3\x01\xd9\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\xff\x01\x01\x02\x30\x00\x05\x02\x31\x00\xd9\x00\x32\x00\x3d\x00\xb5\x01\x23\x00\x24\x00\x25\x00\x77\x01\x33\x00\x34\x00\x09\x02\x35\x00\x16\x02\x21\x02\x25\x02\x33\x00\x28\x02\x33\x00\x6c\x00\x21\x00\x39\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xab\x01\xac\x01\xad\x01\x2b\x00\x2c\x00\xa5\x01\xb5\x01\xe9\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\xb2\x01\xdd\x01\x30\x00\x46\x00\x31\x00\x97\x01\x32\x00\x33\x00\x33\x00\x23\x00\x24\x00\x25\x00\xe3\x01\x33\x00\x34\x00\xeb\x01\x35\x00\xe3\x01\xf0\x01\xec\x01\xed\x01\x33\x00\xfc\x01\x3e\xff\x21\x00\x3f\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x3b\xff\x39\xff\x5f\x01\x2b\x00\x2c\x00\x3a\xff\x5c\x01\x62\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\x5d\x01\x60\x01\x30\x00\x69\x01\x31\x00\x67\x01\x32\x00\x3d\x00\x77\x01\x23\x00\x24\x00\x25\x00\x65\x01\x33\x00\x34\x00\x33\x00\x35\x00\x33\x00\x68\x01\x7f\x01\x97\x01\x6c\x00\x83\x01\x8c\x01\x21\x00\x8e\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x77\x00\x9b\x01\x2b\x00\x2c\x00\xd9\x00\x99\x01\xd9\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x17\x01\x10\x00\x30\x00\x46\x00\x31\x00\x33\x00\x32\x00\x11\x00\x1c\x01\x23\x00\x24\x00\x25\x00\x20\x01\x33\x00\x34\x00\x21\x00\x35\x00\x23\x01\x72\x00\x16\x00\x17\x00\x73\x00\x19\x00\x1a\x00\x1b\x00\x3e\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x41\x01\x22\x00\x42\x01\x2b\x00\x2c\x00\x43\x01\xff\xff\x47\x01\x2d\x00\x2e\x00\x48\x01\x2f\x00\x23\x00\x24\x00\x30\x00\x49\x01\x31\x00\x6c\x00\x32\x00\x33\x00\x71\x00\x79\x00\xff\xff\x78\x00\x80\x00\x33\x00\x34\x00\x21\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x42\x00\x75\x00\x43\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x23\x00\x24\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x42\x00\x75\x00\x43\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x23\x00\x24\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x21\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x6e\xff\x2f\x00\x00\x00\x6e\xff\x68\x00\x46\x00\x69\x00\x00\x00\x75\x00\x22\x00\x00\x00\x10\x00\x00\x00\x47\x00\x00\x00\x33\x00\x34\x00\x11\x00\x35\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x72\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\xd4\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x00\x00\x2b\x00\x2c\x00\xc5\x01\xd6\x00\x62\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x23\x00\x24\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x46\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x47\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x4e\x01\x00\x00\x23\x00\x24\x00\x46\x00\x00\x00\x33\x00\x34\x00\x21\x00\x35\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x5f\x00\x60\x00\x57\x00\x61\x00\x62\x00\x00\x00\x2d\x00\x2e\x00\xd4\x00\x2f\x00\x23\x00\x24\x00\x68\x00\x50\x01\x69\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\xc6\x01\xd6\x00\x62\x00\x33\x00\x34\x00\x21\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x50\x00\x51\x00\x57\x00\x00\x00\x00\x00\x52\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x64\x00\x68\x00\x65\x00\x69\x00\x66\x00\x75\x00\x2f\x01\x00\x00\x23\x00\x24\x00\x00\x00\x33\x00\x33\x00\x34\x00\x21\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x22\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x23\x00\x24\x00\x68\x00\x31\x01\x69\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x33\x00\x34\x00\x00\x00\x35\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x23\x00\x24\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x00\x00\x00\x33\x00\x34\x00\x57\x00\x35\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x23\x00\x24\x00\x00\x00\x68\x00\x00\x00\x7d\x02\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x23\x00\x24\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x00\x00\x00\x33\x00\x34\x00\x57\x00\x35\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x23\x00\x24\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x23\x00\x24\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x00\x00\x00\x33\x00\x34\x00\x57\x00\x35\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x23\x00\x24\x00\x00\x00\x68\x00\x00\x00\xd4\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x23\x00\x24\x00\x46\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x47\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x22\x00\x00\x00\x33\x00\x34\x00\x57\x00\x35\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\xd4\x00\x23\x00\x24\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\xc7\x01\xd6\x00\x62\x00\x33\x00\x34\x00\x00\x00\x35\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x46\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x47\x00\x46\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x47\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x47\x00\x00\x00\x00\x00\x48\x00\x00\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x00\x00\x46\x00\x00\x00\xd4\x00\x46\x00\x00\x00\x00\x00\x4d\x00\x4e\x00\x47\x00\x46\x00\x00\x00\x47\x00\xd4\x00\x00\x00\xc8\x01\xd6\x00\x62\x00\x47\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x01\xd6\x00\x62\x00\x47\x00\x46\x00\x00\x00\x37\x01\x00\x00\x00\x00\x37\x01\x50\x01\x00\x00\x47\x00\x51\x01\x00\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x39\x01\x62\x00\x00\x00\x39\x01\x62\x00\x46\x00\xd4\x00\x00\x00\x99\x01\xd6\x00\x62\x00\x00\x00\x00\x00\x47\x00\x00\x00\xd4\x00\x46\x00\x00\x00\x9b\x01\xd6\x00\x62\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\xd5\x00\xd6\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x37\x01\x00\x00\x00\x00\x00\x00\x38\x01\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x1c\x01\x37\x01\x00\x00\x39\x01\x62\x00\x3f\x01\x29\x01\x16\x00\x17\x00\x2a\x01\x19\x00\x1a\x00\x1b\x00\x10\x00\x39\x01\x62\x00\x00\x00\x00\x00\x00\x00\x11\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x01\x2c\x01\x00\x00\x2d\x01\x00\x00\xf1\x01\x16\x00\x17\x00\x2a\x01\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x11\x00\xf2\x01\xf3\x01\xf5\x01\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x27\x01\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x40\x00\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x10\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x26\x01\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x28\x01\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x10\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x3b\x00\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x13\x00\x14\x00\x3a\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x17\x02\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x44\x00\x11\x00\x00\x00\x00\x00\x00\x00\x37\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x65\x01\x19\x01\x1a\x01\x10\x00\x00\x00\x4e\x01\x00\x00\x3b\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x1d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x00\x00\x11\x00\x40\x00\x00\x00\x00\x00\x1d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x40\x00\x00\x00\x00\x00\x37\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x44\x00\x00\x00\x00\x00\x52\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x23\x01\x00\x00\x00\x00\x53\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x24\x01\x00\x00\x00\x00\x54\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x26\x01\x00\x00\x00\x00\x55\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x27\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x26\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x27\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x28\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x40\x00\x00\x00\x00\x00\x37\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x3b\x00\x00\x00\x00\x00\x1d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x40\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x44\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x23\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x24\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x25\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x16\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xde\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x11\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x02\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x36\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x10\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x22\xff\x22\xff\x00\x00\x50\x00\x51\x00\x22\xff\x00\x00\x22\xff\x52\x00\x00\x00\x3c\xff\x22\xff\x00\x00\x22\xff\x3b\x01\x22\xff\x3c\x01\x00\x00\x3d\x01\x50\x00\x51\x00\x00\x00\x22\xff\x00\x00\x52\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\xcb\x01\x50\x00\x51\x00\x00\x00\x50\x00\x51\x00\x52\x00\x33\x00\x00\x00\x52\x00\x00\x00\x00\x00\x3b\x01\x00\x00\x3c\x01\x64\x00\x3d\x01\x65\x00\x00\x00\x66\x00\x50\x00\x51\x00\x00\x00\x33\x00\x00\x00\x52\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x01\x00\x00\x3c\x01\x00\x00\x3d\x01\x50\x00\x51\x00\x00\x00\x50\x00\x51\x00\x52\x00\x33\x00\x00\x00\x52\x00\x00\x00\x00\x00\x53\x00\x00\x00\x54\x00\x64\x00\x55\x00\x65\x00\x00\x00\x66\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x33\x00\x6b\x01\x6c\x01\x6d\x01\x6e\x01\x6f\x01\x70\x01\x71\x01\x72\x01\x73\x01\x74\x01\x75\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 (3, 382) [
+	(3 , happyReduce_3),
+	(4 , happyReduce_4),
+	(5 , happyReduce_5),
+	(6 , happyReduce_6),
+	(7 , happyReduce_7),
+	(8 , happyReduce_8),
+	(9 , happyReduce_9),
+	(10 , happyReduce_10),
+	(11 , happyReduce_11),
+	(12 , happyReduce_12),
+	(13 , happyReduce_13),
+	(14 , happyReduce_14),
+	(15 , happyReduce_15),
+	(16 , happyReduce_16),
+	(17 , happyReduce_17),
+	(18 , happyReduce_18),
+	(19 , happyReduce_19),
+	(20 , happyReduce_20),
+	(21 , happyReduce_21),
+	(22 , happyReduce_22),
+	(23 , happyReduce_23),
+	(24 , happyReduce_24),
+	(25 , happyReduce_25),
+	(26 , happyReduce_26),
+	(27 , happyReduce_27),
+	(28 , happyReduce_28),
+	(29 , happyReduce_29),
+	(30 , happyReduce_30),
+	(31 , happyReduce_31),
+	(32 , happyReduce_32),
+	(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),
+	(142 , happyReduce_142),
+	(143 , happyReduce_143),
+	(144 , happyReduce_144),
+	(145 , happyReduce_145),
+	(146 , happyReduce_146),
+	(147 , happyReduce_147),
+	(148 , happyReduce_148),
+	(149 , happyReduce_149),
+	(150 , happyReduce_150),
+	(151 , happyReduce_151),
+	(152 , happyReduce_152),
+	(153 , happyReduce_153),
+	(154 , happyReduce_154),
+	(155 , happyReduce_155),
+	(156 , happyReduce_156),
+	(157 , happyReduce_157),
+	(158 , happyReduce_158),
+	(159 , happyReduce_159),
+	(160 , happyReduce_160),
+	(161 , happyReduce_161),
+	(162 , happyReduce_162),
+	(163 , happyReduce_163),
+	(164 , happyReduce_164),
+	(165 , happyReduce_165),
+	(166 , happyReduce_166),
+	(167 , happyReduce_167),
+	(168 , happyReduce_168),
+	(169 , happyReduce_169),
+	(170 , happyReduce_170),
+	(171 , happyReduce_171),
+	(172 , happyReduce_172),
+	(173 , happyReduce_173),
+	(174 , happyReduce_174),
+	(175 , happyReduce_175),
+	(176 , happyReduce_176),
+	(177 , happyReduce_177),
+	(178 , happyReduce_178),
+	(179 , happyReduce_179),
+	(180 , happyReduce_180),
+	(181 , happyReduce_181),
+	(182 , happyReduce_182),
+	(183 , happyReduce_183),
+	(184 , happyReduce_184),
+	(185 , happyReduce_185),
+	(186 , happyReduce_186),
+	(187 , happyReduce_187),
+	(188 , happyReduce_188),
+	(189 , happyReduce_189),
+	(190 , happyReduce_190),
+	(191 , happyReduce_191),
+	(192 , happyReduce_192),
+	(193 , happyReduce_193),
+	(194 , happyReduce_194),
+	(195 , happyReduce_195),
+	(196 , happyReduce_196),
+	(197 , happyReduce_197),
+	(198 , happyReduce_198),
+	(199 , happyReduce_199),
+	(200 , happyReduce_200),
+	(201 , happyReduce_201),
+	(202 , happyReduce_202),
+	(203 , happyReduce_203),
+	(204 , happyReduce_204),
+	(205 , happyReduce_205),
+	(206 , happyReduce_206),
+	(207 , happyReduce_207),
+	(208 , happyReduce_208),
+	(209 , happyReduce_209),
+	(210 , happyReduce_210),
+	(211 , happyReduce_211),
+	(212 , happyReduce_212),
+	(213 , happyReduce_213),
+	(214 , happyReduce_214),
+	(215 , happyReduce_215),
+	(216 , happyReduce_216),
+	(217 , happyReduce_217),
+	(218 , happyReduce_218),
+	(219 , happyReduce_219),
+	(220 , happyReduce_220),
+	(221 , happyReduce_221),
+	(222 , happyReduce_222),
+	(223 , happyReduce_223),
+	(224 , happyReduce_224),
+	(225 , happyReduce_225),
+	(226 , happyReduce_226),
+	(227 , happyReduce_227),
+	(228 , happyReduce_228),
+	(229 , happyReduce_229),
+	(230 , happyReduce_230),
+	(231 , happyReduce_231),
+	(232 , happyReduce_232),
+	(233 , happyReduce_233),
+	(234 , happyReduce_234),
+	(235 , happyReduce_235),
+	(236 , happyReduce_236),
+	(237 , happyReduce_237),
+	(238 , happyReduce_238),
+	(239 , happyReduce_239),
+	(240 , happyReduce_240),
+	(241 , happyReduce_241),
+	(242 , happyReduce_242),
+	(243 , happyReduce_243),
+	(244 , happyReduce_244),
+	(245 , happyReduce_245),
+	(246 , happyReduce_246),
+	(247 , happyReduce_247),
+	(248 , happyReduce_248),
+	(249 , happyReduce_249),
+	(250 , happyReduce_250),
+	(251 , happyReduce_251),
+	(252 , happyReduce_252),
+	(253 , happyReduce_253),
+	(254 , happyReduce_254),
+	(255 , happyReduce_255),
+	(256 , happyReduce_256),
+	(257 , happyReduce_257),
+	(258 , happyReduce_258),
+	(259 , happyReduce_259),
+	(260 , happyReduce_260),
+	(261 , happyReduce_261),
+	(262 , happyReduce_262),
+	(263 , happyReduce_263),
+	(264 , happyReduce_264),
+	(265 , happyReduce_265),
+	(266 , happyReduce_266),
+	(267 , happyReduce_267),
+	(268 , happyReduce_268),
+	(269 , happyReduce_269),
+	(270 , happyReduce_270),
+	(271 , happyReduce_271),
+	(272 , happyReduce_272),
+	(273 , happyReduce_273),
+	(274 , happyReduce_274),
+	(275 , happyReduce_275),
+	(276 , happyReduce_276),
+	(277 , happyReduce_277),
+	(278 , happyReduce_278),
+	(279 , happyReduce_279),
+	(280 , happyReduce_280),
+	(281 , happyReduce_281),
+	(282 , happyReduce_282),
+	(283 , happyReduce_283),
+	(284 , happyReduce_284),
+	(285 , happyReduce_285),
+	(286 , happyReduce_286),
+	(287 , happyReduce_287),
+	(288 , happyReduce_288),
+	(289 , happyReduce_289),
+	(290 , happyReduce_290),
+	(291 , happyReduce_291),
+	(292 , happyReduce_292),
+	(293 , happyReduce_293),
+	(294 , happyReduce_294),
+	(295 , happyReduce_295),
+	(296 , happyReduce_296),
+	(297 , happyReduce_297),
+	(298 , happyReduce_298),
+	(299 , happyReduce_299),
+	(300 , happyReduce_300),
+	(301 , happyReduce_301),
+	(302 , happyReduce_302),
+	(303 , happyReduce_303),
+	(304 , happyReduce_304),
+	(305 , happyReduce_305),
+	(306 , happyReduce_306),
+	(307 , happyReduce_307),
+	(308 , happyReduce_308),
+	(309 , happyReduce_309),
+	(310 , happyReduce_310),
+	(311 , happyReduce_311),
+	(312 , happyReduce_312),
+	(313 , happyReduce_313),
+	(314 , happyReduce_314),
+	(315 , happyReduce_315),
+	(316 , happyReduce_316),
+	(317 , happyReduce_317),
+	(318 , happyReduce_318),
+	(319 , happyReduce_319),
+	(320 , happyReduce_320),
+	(321 , happyReduce_321),
+	(322 , happyReduce_322),
+	(323 , happyReduce_323),
+	(324 , happyReduce_324),
+	(325 , happyReduce_325),
+	(326 , happyReduce_326),
+	(327 , happyReduce_327),
+	(328 , happyReduce_328),
+	(329 , happyReduce_329),
+	(330 , happyReduce_330),
+	(331 , happyReduce_331),
+	(332 , happyReduce_332),
+	(333 , happyReduce_333),
+	(334 , happyReduce_334),
+	(335 , happyReduce_335),
+	(336 , happyReduce_336),
+	(337 , happyReduce_337),
+	(338 , happyReduce_338),
+	(339 , happyReduce_339),
+	(340 , happyReduce_340),
+	(341 , happyReduce_341),
+	(342 , happyReduce_342),
+	(343 , happyReduce_343),
+	(344 , happyReduce_344),
+	(345 , happyReduce_345),
+	(346 , happyReduce_346),
+	(347 , happyReduce_347),
+	(348 , happyReduce_348),
+	(349 , happyReduce_349),
+	(350 , happyReduce_350),
+	(351 , happyReduce_351),
+	(352 , happyReduce_352),
+	(353 , happyReduce_353),
+	(354 , happyReduce_354),
+	(355 , happyReduce_355),
+	(356 , happyReduce_356),
+	(357 , happyReduce_357),
+	(358 , happyReduce_358),
+	(359 , happyReduce_359),
+	(360 , happyReduce_360),
+	(361 , happyReduce_361),
+	(362 , happyReduce_362),
+	(363 , happyReduce_363),
+	(364 , happyReduce_364),
+	(365 , happyReduce_365),
+	(366 , happyReduce_366),
+	(367 , happyReduce_367),
+	(368 , happyReduce_368),
+	(369 , happyReduce_369),
+	(370 , happyReduce_370),
+	(371 , happyReduce_371),
+	(372 , happyReduce_372),
+	(373 , happyReduce_373),
+	(374 , happyReduce_374),
+	(375 , happyReduce_375),
+	(376 , happyReduce_376),
+	(377 , happyReduce_377),
+	(378 , happyReduce_378),
+	(379 , happyReduce_379),
+	(380 , happyReduce_380),
+	(381 , happyReduce_381),
+	(382 , happyReduce_382)
+	]
+
+happy_n_terms = 81 :: Int
+happy_n_nonterms = 130 :: Int
+
+happyReduce_3 = happySpecReduce_1  0# happyReduction_3
+happyReduction_3 happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	happyIn6
+		 (reverse happy_var_1
+	)}
+
+happyReduce_4 = happySpecReduce_2  1# happyReduction_4
+happyReduction_4 happy_x_2
+	happy_x_1
+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
+	case happyOut8 happy_x_2 of { happy_var_2 -> 
+	happyIn7
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_5 = happySpecReduce_0  1# happyReduction_5
+happyReduction_5  =  happyIn7
+		 ([]
+	)
+
+happyReduce_6 = happySpecReduce_1  2# happyReduction_6
+happyReduction_6 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwLet happy_var_1
+	)}
+
+happyReduce_7 = happySpecReduce_1  2# happyReduction_7
+happyReduction_7 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwIn happy_var_1
+	)}
+
+happyReduce_8 = happySpecReduce_1  2# happyReduction_8
+happyReduction_8 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwWhere happy_var_1
+	)}
+
+happyReduce_9 = happySpecReduce_1  2# happyReduction_9
+happyReduction_9 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwWith happy_var_1
+	)}
+
+happyReduce_10 = happySpecReduce_1  2# happyReduction_10
+happyReduction_10 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwRewrite happy_var_1
+	)}
+
+happyReduce_11 = happySpecReduce_1  2# happyReduction_11
+happyReduction_11 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPostulate happy_var_1
+	)}
+
+happyReduce_12 = happySpecReduce_1  2# happyReduction_12
+happyReduction_12 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPrimitive happy_var_1
+	)}
+
+happyReduce_13 = happySpecReduce_1  2# happyReduction_13
+happyReduction_13 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwOpen happy_var_1
+	)}
+
+happyReduce_14 = happySpecReduce_1  2# happyReduction_14
+happyReduction_14 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwImport happy_var_1
+	)}
+
+happyReduce_15 = happySpecReduce_1  2# happyReduction_15
+happyReduction_15 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwUsing happy_var_1
+	)}
+
+happyReduce_16 = happySpecReduce_1  2# happyReduction_16
+happyReduction_16 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwHiding happy_var_1
+	)}
+
+happyReduce_17 = happySpecReduce_1  2# happyReduction_17
+happyReduction_17 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwRenaming happy_var_1
+	)}
+
+happyReduce_18 = happySpecReduce_1  2# happyReduction_18
+happyReduction_18 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwTo happy_var_1
+	)}
+
+happyReduce_19 = happySpecReduce_1  2# happyReduction_19
+happyReduction_19 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPublic happy_var_1
+	)}
+
+happyReduce_20 = happySpecReduce_1  2# happyReduction_20
+happyReduction_20 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwModule happy_var_1
+	)}
+
+happyReduce_21 = happySpecReduce_1  2# happyReduction_21
+happyReduction_21 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwData happy_var_1
+	)}
+
+happyReduce_22 = happySpecReduce_1  2# happyReduction_22
+happyReduction_22 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCoData happy_var_1
+	)}
+
+happyReduce_23 = happySpecReduce_1  2# happyReduction_23
+happyReduction_23 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwRecord happy_var_1
+	)}
+
+happyReduce_24 = happySpecReduce_1  2# happyReduction_24
+happyReduction_24 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwConstructor happy_var_1
+	)}
+
+happyReduce_25 = happySpecReduce_1  2# happyReduction_25
+happyReduction_25 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwInductive happy_var_1
+	)}
+
+happyReduce_26 = happySpecReduce_1  2# happyReduction_26
+happyReduction_26 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCoInductive happy_var_1
+	)}
+
+happyReduce_27 = happySpecReduce_1  2# happyReduction_27
+happyReduction_27 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwField happy_var_1
+	)}
+
+happyReduce_28 = happySpecReduce_1  2# happyReduction_28
+happyReduction_28 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwInfix happy_var_1
+	)}
+
+happyReduce_29 = happySpecReduce_1  2# happyReduction_29
+happyReduction_29 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwInfixL happy_var_1
+	)}
+
+happyReduce_30 = happySpecReduce_1  2# happyReduction_30
+happyReduction_30 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwInfixR happy_var_1
+	)}
+
+happyReduce_31 = happySpecReduce_1  2# happyReduction_31
+happyReduction_31 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwMutual happy_var_1
+	)}
+
+happyReduce_32 = happySpecReduce_1  2# happyReduction_32
+happyReduction_32 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwAbstract happy_var_1
+	)}
+
+happyReduce_33 = happySpecReduce_1  2# happyReduction_33
+happyReduction_33 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPrivate happy_var_1
+	)}
+
+happyReduce_34 = happySpecReduce_1  2# happyReduction_34
+happyReduction_34 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwProp happy_var_1
+	)}
+
+happyReduce_35 = happySpecReduce_1  2# happyReduction_35
+happyReduction_35 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwSet happy_var_1
+	)}
+
+happyReduce_36 = happySpecReduce_1  2# happyReduction_36
+happyReduction_36 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwForall happy_var_1
+	)}
+
+happyReduce_37 = happySpecReduce_1  2# happyReduction_37
+happyReduction_37 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwSyntax happy_var_1
+	)}
+
+happyReduce_38 = happySpecReduce_1  2# happyReduction_38
+happyReduction_38 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwPatternSyn happy_var_1
+	)}
+
+happyReduce_39 = happySpecReduce_1  2# happyReduction_39
+happyReduction_39 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwOPTIONS happy_var_1
+	)}
+
+happyReduce_40 = happySpecReduce_1  2# happyReduction_40
+happyReduction_40 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwBUILTIN happy_var_1
+	)}
+
+happyReduce_41 = happySpecReduce_1  2# happyReduction_41
+happyReduction_41 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwIMPORT happy_var_1
+	)}
+
+happyReduce_42 = happySpecReduce_1  2# happyReduction_42
+happyReduction_42 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCOMPILED happy_var_1
+	)}
+
+happyReduce_43 = happySpecReduce_1  2# happyReduction_43
+happyReduction_43 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCOMPILED_DATA happy_var_1
+	)}
+
+happyReduce_44 = happySpecReduce_1  2# happyReduction_44
+happyReduction_44 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCOMPILED_TYPE happy_var_1
+	)}
+
+happyReduce_45 = happySpecReduce_1  2# happyReduction_45
+happyReduction_45 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCOMPILED_EPIC happy_var_1
+	)}
+
+happyReduce_46 = happySpecReduce_1  2# happyReduction_46
+happyReduction_46 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwCOMPILED_JS happy_var_1
+	)}
+
+happyReduce_47 = happySpecReduce_1  2# happyReduction_47
+happyReduction_47 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwSTATIC happy_var_1
+	)}
+
+happyReduce_48 = happySpecReduce_1  2# happyReduction_48
+happyReduction_48 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwIMPOSSIBLE happy_var_1
+	)}
+
+happyReduce_49 = happySpecReduce_1  2# happyReduction_49
+happyReduction_49 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwETA happy_var_1
+	)}
+
+happyReduce_50 = happySpecReduce_1  2# happyReduction_50
+happyReduction_50 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwNO_TERMINATION_CHECK happy_var_1
+	)}
+
+happyReduce_51 = happySpecReduce_1  2# happyReduction_51
+happyReduction_51 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwQuoteGoal happy_var_1
+	)}
+
+happyReduce_52 = happySpecReduce_1  2# happyReduction_52
+happyReduction_52 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwQuote happy_var_1
+	)}
+
+happyReduce_53 = happySpecReduce_1  2# happyReduction_53
+happyReduction_53 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwQuoteTerm happy_var_1
+	)}
+
+happyReduce_54 = happySpecReduce_1  2# happyReduction_54
+happyReduction_54 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> 
+	happyIn8
+		 (TokKeyword KwUnquote happy_var_1
+	)}
+
+happyReduce_55 = happySpecReduce_1  2# happyReduction_55
+happyReduction_55 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
+	happyIn8
+		 (TokSetN happy_var_1
+	)}
+
+happyReduce_56 = happySpecReduce_1  2# happyReduction_56
+happyReduction_56 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> 
+	happyIn8
+		 (TokTeX happy_var_1
+	)}
+
+happyReduce_57 = happySpecReduce_1  2# happyReduction_57
+happyReduction_57 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> 
+	happyIn8
+		 (TokComment happy_var_1
+	)}
+
+happyReduce_58 = happySpecReduce_1  2# happyReduction_58
+happyReduction_58 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymEllipsis happy_var_1
+	)}
+
+happyReduce_59 = happySpecReduce_1  2# happyReduction_59
+happyReduction_59 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymDotDot happy_var_1
+	)}
+
+happyReduce_60 = happySpecReduce_1  2# happyReduction_60
+happyReduction_60 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymDot happy_var_1
+	)}
+
+happyReduce_61 = happySpecReduce_1  2# happyReduction_61
+happyReduction_61 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymSemi happy_var_1
+	)}
+
+happyReduce_62 = happySpecReduce_1  2# happyReduction_62
+happyReduction_62 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymColon happy_var_1
+	)}
+
+happyReduce_63 = happySpecReduce_1  2# happyReduction_63
+happyReduction_63 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymEqual happy_var_1
+	)}
+
+happyReduce_64 = happySpecReduce_1  2# happyReduction_64
+happyReduction_64 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymUnderscore happy_var_1
+	)}
+
+happyReduce_65 = happySpecReduce_1  2# happyReduction_65
+happyReduction_65 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymQuestionMark happy_var_1
+	)}
+
+happyReduce_66 = happySpecReduce_1  2# happyReduction_66
+happyReduction_66 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymArrow happy_var_1
+	)}
+
+happyReduce_67 = happySpecReduce_1  2# happyReduction_67
+happyReduction_67 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymLambda happy_var_1
+	)}
+
+happyReduce_68 = happySpecReduce_1  2# happyReduction_68
+happyReduction_68 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymAs happy_var_1
+	)}
+
+happyReduce_69 = happySpecReduce_1  2# happyReduction_69
+happyReduction_69 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymBar happy_var_1
+	)}
+
+happyReduce_70 = happySpecReduce_1  2# happyReduction_70
+happyReduction_70 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymOpenParen happy_var_1
+	)}
+
+happyReduce_71 = happySpecReduce_1  2# happyReduction_71
+happyReduction_71 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymCloseParen happy_var_1
+	)}
+
+happyReduce_72 = happySpecReduce_1  2# happyReduction_72
+happyReduction_72 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymDoubleOpenBrace happy_var_1
+	)}
+
+happyReduce_73 = happySpecReduce_1  2# happyReduction_73
+happyReduction_73 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymDoubleCloseBrace happy_var_1
+	)}
+
+happyReduce_74 = happySpecReduce_1  2# happyReduction_74
+happyReduction_74 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymOpenBrace happy_var_1
+	)}
+
+happyReduce_75 = happySpecReduce_1  2# happyReduction_75
+happyReduction_75 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymCloseBrace happy_var_1
+	)}
+
+happyReduce_76 = happySpecReduce_1  2# happyReduction_76
+happyReduction_76 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymOpenVirtualBrace happy_var_1
+	)}
+
+happyReduce_77 = happySpecReduce_1  2# happyReduction_77
+happyReduction_77 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymCloseVirtualBrace happy_var_1
+	)}
+
+happyReduce_78 = happySpecReduce_1  2# happyReduction_78
+happyReduction_78 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymVirtualSemi happy_var_1
+	)}
+
+happyReduce_79 = happySpecReduce_1  2# happyReduction_79
+happyReduction_79 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymOpenPragma happy_var_1
+	)}
+
+happyReduce_80 = happySpecReduce_1  2# happyReduction_80
+happyReduction_80 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> 
+	happyIn8
+		 (TokSymbol SymClosePragma happy_var_1
+	)}
+
+happyReduce_81 = happySpecReduce_1  2# happyReduction_81
+happyReduction_81 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	happyIn8
+		 (TokId happy_var_1
+	)}
+
+happyReduce_82 = happySpecReduce_1  2# happyReduction_82
+happyReduction_82 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
+	happyIn8
+		 (TokQId happy_var_1
+	)}
+
+happyReduce_83 = happySpecReduce_1  2# happyReduction_83
+happyReduction_83 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	happyIn8
+		 (TokString happy_var_1
+	)}
+
+happyReduce_84 = happySpecReduce_1  2# happyReduction_84
+happyReduction_84 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	happyIn8
+		 (TokLiteral happy_var_1
+	)}
+
+happyReduce_85 = happySpecReduce_1  3# happyReduction_85
+happyReduction_85 happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	happyIn9
+		 (happy_var_1
+	)}
+
+happyReduce_86 = happySpecReduce_1  4# happyReduction_86
+happyReduction_86 happy_x_1
+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> 
+	happyIn10
+		 (([], happy_var_1)
+	)}
+
+happyReduce_87 = happySpecReduce_2  4# happyReduction_87
+happyReduction_87 happy_x_2
+	happy_x_1
+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn10
+		 (let (ps,m) = happy_var_2 in (happy_var_1 : ps, m)
+	)}}
+
+happyReduce_88 = happySpecReduce_1  5# happyReduction_88
+happyReduction_88 happy_x_1
+	 =  happyIn11
+		 (()
+	)
+
+happyReduce_89 = happyMonadReduce 1# 5# happyReduction_89
+happyReduction_89 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (( popContext)
+	) (\r -> happyReturn (happyIn11 r))
+
+happyReduce_90 = happySpecReduce_1  6# happyReduction_90
+happyReduction_90 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
+	happyIn12
+		 (happy_var_1
+	)}
+
+happyReduce_91 = happySpecReduce_1  6# happyReduction_91
+happyReduction_91 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> 
+	happyIn12
+		 (happy_var_1
+	)}
+
+happyReduce_92 = happyMonadReduce 0# 7# happyReduction_92
+happyReduction_92 (happyRest) tk
+	 = happyThen (( pushLexState imp_dir)
+	) (\r -> happyReturn (happyIn13 r))
+
+happyReduce_93 = happyMonadReduce 1# 8# happyReduction_93
+happyReduction_93 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	( case happy_var_1 of {
+		     LitInt _ n	-> return n;
+		     _		-> fail $ "Expected integer"
+		   })}
+	) (\r -> happyReturn (happyIn14 r))
+
+happyReduce_94 = happyMonadReduce 1# 9# happyReduction_94
+happyReduction_94 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	( mkName happy_var_1)}
+	) (\r -> happyReturn (happyIn15 r))
+
+happyReduce_95 = happySpecReduce_2  10# happyReduction_95
+happyReduction_95 happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_96 = happySpecReduce_1  10# happyReduction_96
+happyReduction_96 happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	happyIn16
+		 ([happy_var_1]
+	)}
+
+happyReduce_97 = happySpecReduce_1  11# happyReduction_97
+happyReduction_97 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> 
+	happyIn17
+		 (getRange happy_var_1
+	)}
+
+happyReduce_98 = happyMonadReduce 2# 11# happyReduction_98
+happyReduction_98 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> 
+	(
+      if posPos (fromJust (rEnd (getRange happy_var_2))) -
+	 posPos (fromJust (rStart (getRange happy_var_1))) > 2
+      then parseErrorAt (fromJust (rStart (getRange happy_var_2)))
+	 "Expecting '}}', found separated '}'s."
+      else return $ getRange (happy_var_1, happy_var_2))}}
+	) (\r -> happyReturn (happyIn17 r))
+
+happyReduce_99 = happySpecReduce_2  12# happyReduction_99
+happyReduction_99 happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
+	happyIn18
+		 (Arg NotHidden Irrelevant happy_var_2
+	)}
+
+happyReduce_100 = happySpecReduce_1  12# happyReduction_100
+happyReduction_100 happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	happyIn18
+		 (defaultArg happy_var_1
+	)}
+
+happyReduce_101 = happySpecReduce_2  13# happyReduction_101
+happyReduction_101 happy_x_2
+	happy_x_1
+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
+	case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn19
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_102 = happySpecReduce_1  13# happyReduction_102
+happyReduction_102 happy_x_1
+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
+	happyIn19
+		 ([happy_var_1]
+	)}
+
+happyReduce_103 = happySpecReduce_2  14# happyReduction_103
+happyReduction_103 happy_x_2
+	happy_x_1
+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
+	case happyOut20 happy_x_2 of { happy_var_2 -> 
+	happyIn20
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_104 = happySpecReduce_1  14# happyReduction_104
+happyReduction_104 happy_x_1
+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
+	happyIn20
+		 ([happy_var_1]
+	)}
+
+happyReduce_105 = happyReduce 4# 14# happyReduction_105
+happyReduction_105 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut20 happy_x_4 of { happy_var_4 -> 
+	happyIn20
+		 (map makeInstance happy_var_2 ++ happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_106 = happySpecReduce_3  14# happyReduction_106
+happyReduction_106 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn20
+		 (map makeInstance happy_var_2
+	)}
+
+happyReduce_107 = happyReduce 4# 14# happyReduction_107
+happyReduction_107 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut20 happy_x_4 of { happy_var_4 -> 
+	happyIn20
+		 (map hide happy_var_2 ++ happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_108 = happySpecReduce_3  14# happyReduction_108
+happyReduction_108 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn20
+		 (map hide happy_var_2
+	)}
+
+happyReduce_109 = happyReduce 5# 14# happyReduction_109
+happyReduction_109 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
+	case happyOut20 happy_x_5 of { happy_var_5 -> 
+	happyIn20
+		 (map (Arg Hidden Irrelevant) happy_var_3 ++ happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_110 = happyReduce 4# 14# happyReduction_110
+happyReduction_110 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
+	happyIn20
+		 (map (Arg Hidden Irrelevant) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_111 = happyReduce 5# 14# happyReduction_111
+happyReduction_111 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
+	case happyOut20 happy_x_5 of { happy_var_5 -> 
+	happyIn20
+		 (map (Arg Instance Irrelevant) happy_var_3 ++ happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_112 = happyReduce 4# 14# happyReduction_112
+happyReduction_112 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
+	happyIn20
+		 (map (Arg Instance Irrelevant) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_113 = happyReduce 5# 14# happyReduction_113
+happyReduction_113 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
+	case happyOut20 happy_x_5 of { happy_var_5 -> 
+	happyIn20
+		 (map (Arg Hidden NonStrict) happy_var_3 ++ happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_114 = happyReduce 4# 14# happyReduction_114
+happyReduction_114 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
+	happyIn20
+		 (map (Arg Hidden NonStrict) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_115 = happyReduce 5# 14# happyReduction_115
+happyReduction_115 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
+	case happyOut20 happy_x_5 of { happy_var_5 -> 
+	happyIn20
+		 (map (Arg Instance NonStrict) happy_var_3 ++ happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_116 = happyReduce 4# 14# happyReduction_116
+happyReduction_116 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut16 happy_x_3 of { happy_var_3 -> 
+	happyIn20
+		 (map (Arg Instance NonStrict) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_117 = happyMonadReduce 1# 15# happyReduction_117
+happyReduction_117 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
+	( mkQName happy_var_1)}
+	) (\r -> happyReturn (happyIn21 r))
+
+happyReduce_118 = happySpecReduce_1  15# happyReduction_118
+happyReduction_118 happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	happyIn21
+		 (QName happy_var_1
+	)}
+
+happyReduce_119 = happySpecReduce_1  16# happyReduction_119
+happyReduction_119 happy_x_1
+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
+	happyIn22
+		 (happy_var_1
+	)}
+
+happyReduce_120 = happySpecReduce_1  17# happyReduction_120
+happyReduction_120 happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	happyIn23
+		 (happy_var_1
+	)}
+
+happyReduce_121 = happySpecReduce_1  17# happyReduction_121
+happyReduction_121 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn23
+		 (Name (getRange happy_var_1) [Hole]
+	)}
+
+happyReduce_122 = happySpecReduce_2  18# happyReduction_122
+happyReduction_122 happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
+	case happyOut24 happy_x_2 of { happy_var_2 -> 
+	happyIn24
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_123 = happySpecReduce_1  18# happyReduction_123
+happyReduction_123 happy_x_1
+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
+	happyIn24
+		 ([happy_var_1]
+	)}
+
+happyReduce_124 = happySpecReduce_1  19# happyReduction_124
+happyReduction_124 happy_x_1
+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
+	happyIn25
+		 (case happy_var_1 of
+      Left ns -> ns
+      Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"
+	)}
+
+happyReduce_125 = happyMonadReduce 1# 20# happyReduction_125
+happyReduction_125 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> 
+	(
+    let getName (Ident (QName x)) = Just x
+	getName (Underscore r _)  = Just (Name r [Hole])
+	getName _		  = Nothing
+
+        containsAbsurd (Absurd _) = True
+        containsAbsurd (HiddenArg _ (Named _ e)) = containsAbsurd e
+        containsAbsurd (InstanceArg _ (Named _ e)) = containsAbsurd e
+        containsAbsurd (Paren _ expr)    = containsAbsurd expr
+        containsAbsurd (RawApp _ exprs)    = any containsAbsurd exprs
+        containsAbsurd _          = False
+    in
+    if isJust $ find containsAbsurd happy_var_1 then return $ Right happy_var_1 else
+    case partition isJust $ map getName happy_var_1 of
+	(good, []) -> return $ Left $ map fromJust good
+	_	   -> fail $ "expected sequence of bound identifiers")}
+	) (\r -> happyReturn (happyIn26 r))
+
+happyReduce_126 = happySpecReduce_0  21# happyReduction_126
+happyReduction_126  =  happyIn27
+		 ([]
+	)
+
+happyReduce_127 = happySpecReduce_2  21# happyReduction_127
+happyReduction_127 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	case happyOut27 happy_x_2 of { happy_var_2 -> 
+	happyIn27
+		 (snd happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_128 = happyMonadReduce 1# 22# happyReduction_128
+happyReduction_128 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	( fmap QName (mkName happy_var_1))}
+	) (\r -> happyReturn (happyIn28 r))
+
+happyReduce_129 = happySpecReduce_2  23# happyReduction_129
+happyReduction_129 happy_x_2
+	happy_x_1
+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
+	case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn29
+		 (Pi happy_var_1 happy_var_2
+	)}}
+
+happyReduce_130 = happySpecReduce_3  23# happyReduction_130
+happyReduction_130 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut55 happy_x_2 of { happy_var_2 -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn29
+		 (forallPi happy_var_2 happy_var_3
+	)}}
+
+happyReduce_131 = happySpecReduce_3  23# happyReduction_131
+happyReduction_131 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymArrow happy_var_2) -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn29
+		 (Fun (getRange (happy_var_1,happy_var_2,happy_var_3))
+                                              (RawApp (getRange happy_var_1) happy_var_1)
+                                              happy_var_3
+	)}}}
+
+happyReduce_132 = happySpecReduce_1  23# happyReduction_132
+happyReduction_132 happy_x_1
+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
+	happyIn29
+		 (happy_var_1
+	)}
+
+happyReduce_133 = happyMonadReduce 1# 24# happyReduction_133
+happyReduction_133 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut31 happy_x_1 of { happy_var_1 -> 
+	( case happy_var_1 of
+		      { [e]    -> return e
+		      ; e : es -> return $ WithApp (fuseRange e es) e es
+		      ; []     -> fail "impossible: empty with expressions"
+		      })}
+	) (\r -> happyReturn (happyIn30 r))
+
+happyReduce_134 = happySpecReduce_3  25# happyReduction_134
+happyReduction_134 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOut31 happy_x_3 of { happy_var_3 -> 
+	happyIn31
+		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3
+	)}}
+
+happyReduce_135 = happySpecReduce_1  25# happyReduction_135
+happyReduction_135 happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	happyIn31
+		 ([RawApp (getRange happy_var_1) happy_var_1]
+	)}
+
+happyReduce_136 = happySpecReduce_1  26# happyReduction_136
+happyReduction_136 happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 ([happy_var_1]
+	)}
+
+happyReduce_137 = happySpecReduce_2  26# happyReduction_137
+happyReduction_137 happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOut32 happy_x_2 of { happy_var_2 -> 
+	happyIn32
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_138 = happySpecReduce_3  27# happyReduction_138
+happyReduction_138 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	case happyOut47 happy_x_2 of { happy_var_2 -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn33
+		 (Lam (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2 happy_var_3
+	)}}}
+
+happyReduce_139 = happySpecReduce_1  27# happyReduction_139
+happyReduction_139 happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	happyIn33
+		 (happy_var_1
+	)}
+
+happyReduce_140 = happyReduce 4# 27# happyReduction_140
+happyReduction_140 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
+	case happyOut133 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> 
+	case happyOut29 happy_x_4 of { happy_var_4 -> 
+	happyIn33
+		 (Let (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_141 = happySpecReduce_1  27# happyReduction_141
+happyReduction_141 happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	happyIn33
+		 (happy_var_1
+	)}
+
+happyReduce_142 = happyReduce 4# 27# happyReduction_142
+happyReduction_142 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> 
+	case happyOut29 happy_x_4 of { happy_var_4 -> 
+	happyIn33
+		 (QuoteGoal (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_143 = happyReduce 4# 28# happyReduction_143
+happyReduction_143 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> 
+	case happyOut54 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn34
+		 (ExtendedLam (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) (reverse happy_var_3)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_144 = happyMonadReduce 2# 28# happyReduction_144
+happyReduction_144 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	case happyOut48 happy_x_2 of { happy_var_2 -> 
+	( case happy_var_2 of
+                                       Left (bs, h) -> if null bs then return $ AbsurdLam r h else
+                                                       return $ Lam r bs (AbsurdLam r h)
+                                                         where r = fuseRange happy_var_1 bs
+    				       Right es -> do -- it is of the form @\ { p1 ... () }@
+                                                     p <- exprToLHS (RawApp (getRange es) es);
+                                                     return $ ExtendedLam (fuseRange happy_var_1 es)
+                                                                     [(p [] [], AbsurdRHS, NoWhere)])}}
+	) (\r -> happyReturn (happyIn34 r))
+
+happyReduce_145 = happySpecReduce_1  29# happyReduction_145
+happyReduction_145 happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	happyIn35
+		 ([happy_var_1]
+	)}
+
+happyReduce_146 = happySpecReduce_2  29# happyReduction_146
+happyReduction_146 happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOut35 happy_x_2 of { happy_var_2 -> 
+	happyIn35
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_147 = happySpecReduce_3  30# happyReduction_147
+happyReduction_147 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOut29 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
+	happyIn36
+		 (HiddenArg (getRange (happy_var_1,happy_var_2,happy_var_3)) (unnamed happy_var_2)
+	)}}}
+
+happyReduce_148 = happyReduce 5# 30# happyReduction_148
+happyReduction_148 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymEqual happy_var_3) -> 
+	case happyOut29 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> 
+	happyIn36
+		 (HiddenArg (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5))
+                                            (named (show happy_var_2) happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_149 = happySpecReduce_2  30# happyReduction_149
+happyReduction_149 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> 
+	happyIn36
+		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r
+	)}}
+
+happyReduce_150 = happySpecReduce_1  31# happyReduction_150
+happyReduction_150 happy_x_1
+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
+	happyIn37
+		 (Ident happy_var_1
+	)}
+
+happyReduce_151 = happySpecReduce_1  31# happyReduction_151
+happyReduction_151 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	happyIn37
+		 (Lit happy_var_1
+	)}
+
+happyReduce_152 = happySpecReduce_1  31# happyReduction_152
+happyReduction_152 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
+	happyIn37
+		 (QuestionMark (getRange happy_var_1) Nothing
+	)}
+
+happyReduce_153 = happySpecReduce_1  31# happyReduction_153
+happyReduction_153 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn37
+		 (Underscore (getRange happy_var_1) Nothing
+	)}
+
+happyReduce_154 = happySpecReduce_1  31# happyReduction_154
+happyReduction_154 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
+	happyIn37
+		 (Prop (getRange happy_var_1)
+	)}
+
+happyReduce_155 = happySpecReduce_1  31# happyReduction_155
+happyReduction_155 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
+	happyIn37
+		 (Set (getRange happy_var_1)
+	)}
+
+happyReduce_156 = happySpecReduce_1  31# happyReduction_156
+happyReduction_156 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> 
+	happyIn37
+		 (Quote (getRange happy_var_1)
+	)}
+
+happyReduce_157 = happySpecReduce_1  31# happyReduction_157
+happyReduction_157 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> 
+	happyIn37
+		 (QuoteTerm (getRange happy_var_1)
+	)}
+
+happyReduce_158 = happySpecReduce_1  31# happyReduction_158
+happyReduction_158 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> 
+	happyIn37
+		 (Unquote (getRange happy_var_1)
+	)}
+
+happyReduce_159 = happySpecReduce_1  31# happyReduction_159
+happyReduction_159 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
+	happyIn37
+		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)
+	)}
+
+happyReduce_160 = happySpecReduce_3  31# happyReduction_160
+happyReduction_160 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	case happyOut29 happy_x_2 of { happy_var_2 -> 
+	case happyOut17 happy_x_3 of { happy_var_3 -> 
+	happyIn37
+		 (InstanceArg (getRange (happy_var_1,happy_var_2,happy_var_3))
+                                                          (unnamed happy_var_2)
+	)}}}
+
+happyReduce_161 = happyReduce 5# 31# happyReduction_161
+happyReduction_161 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymEqual happy_var_3) -> 
+	case happyOut29 happy_x_4 of { happy_var_4 -> 
+	case happyOut17 happy_x_5 of { happy_var_5 -> 
+	happyIn37
+		 (InstanceArg (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5))
+                                                          (named (show happy_var_2) happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_162 = happySpecReduce_3  31# happyReduction_162
+happyReduction_162 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOut29 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
+	happyIn37
+		 (Paren (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2
+	)}}}
+
+happyReduce_163 = happySpecReduce_2  31# happyReduction_163
+happyReduction_163 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> 
+	happyIn37
+		 (Absurd (fuseRange happy_var_1 happy_var_2)
+	)}}
+
+happyReduce_164 = happySpecReduce_2  31# happyReduction_164
+happyReduction_164 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	case happyOut17 happy_x_2 of { happy_var_2 -> 
+	happyIn37
+		 (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r
+	)}}
+
+happyReduce_165 = happySpecReduce_3  31# happyReduction_165
+happyReduction_165 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymAs happy_var_2) -> 
+	case happyOut38 happy_x_3 of { happy_var_3 -> 
+	happyIn37
+		 (As (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_166 = happySpecReduce_2  31# happyReduction_166
+happyReduction_166 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
+	case happyOut38 happy_x_2 of { happy_var_2 -> 
+	happyIn37
+		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_167 = happyReduce 4# 31# happyReduction_167
+happyReduction_167 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn37
+		 (Rec (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_168 = happyReduce 5# 31# happyReduction_168
+happyReduction_168 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	case happyOut37 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymOpenBrace happy_var_3) -> 
+	case happyOut39 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> 
+	happyIn37
+		 (RecUpdate (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_169 = happySpecReduce_1  32# happyReduction_169
+happyReduction_169 happy_x_1
+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> 
+	happyIn38
+		 (happy_var_1
+	)}
+
+happyReduce_170 = happySpecReduce_1  32# happyReduction_170
+happyReduction_170 happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn38
+		 (happy_var_1
+	)}
+
+happyReduce_171 = happySpecReduce_0  33# happyReduction_171
+happyReduction_171  =  happyIn39
+		 ([]
+	)
+
+happyReduce_172 = happySpecReduce_1  33# happyReduction_172
+happyReduction_172 happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	happyIn39
+		 (happy_var_1
+	)}
+
+happyReduce_173 = happySpecReduce_1  34# happyReduction_173
+happyReduction_173 happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	happyIn40
+		 ([happy_var_1]
+	)}
+
+happyReduce_174 = happySpecReduce_3  34# happyReduction_174
+happyReduction_174 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	case happyOut40 happy_x_3 of { happy_var_3 -> 
+	happyIn40
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_175 = happySpecReduce_3  35# happyReduction_175
+happyReduction_175 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn41
+		 ((happy_var_1, happy_var_3)
+	)}}
+
+happyReduce_176 = happySpecReduce_2  36# happyReduction_176
+happyReduction_176 happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
+	happyIn42
+		 (happy_var_1
+	)}
+
+happyReduce_177 = happySpecReduce_1  37# happyReduction_177
+happyReduction_177 happy_x_1
+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
+	happyIn43
+		 ({-TeleBind-} happy_var_1
+	)}
+
+happyReduce_178 = happySpecReduce_2  38# happyReduction_178
+happyReduction_178 happy_x_2
+	happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	case happyOut44 happy_x_2 of { happy_var_2 -> 
+	happyIn44
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_179 = happySpecReduce_1  38# happyReduction_179
+happyReduction_179 happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 ([happy_var_1]
+	)}
+
+happyReduce_180 = happyReduce 4# 39# happyReduction_180
+happyReduction_180 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg NotHidden         Irrelevant happy_var_3)
+	) `HappyStk` happyRest}}}
+
+happyReduce_181 = happyReduce 4# 39# happyReduction_181
+happyReduction_181 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg Hidden            Irrelevant happy_var_3)
+	) `HappyStk` happyRest}}}
+
+happyReduce_182 = happyReduce 4# 39# happyReduction_182
+happyReduction_182 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOut17 happy_x_4 of { happy_var_4 -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4))
+                                         (Arg Instance Irrelevant happy_var_3)
+	) `HappyStk` happyRest}}}
+
+happyReduce_183 = happyReduce 4# 39# happyReduction_183
+happyReduction_183 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg NotHidden         NonStrict happy_var_3)
+	) `HappyStk` happyRest}}}
+
+happyReduce_184 = happyReduce 4# 39# happyReduction_184
+happyReduction_184 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg Hidden            NonStrict happy_var_3)
+	) `HappyStk` happyRest}}}
+
+happyReduce_185 = happyReduce 4# 39# happyReduction_185
+happyReduction_185 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> 
+	case happyOut46 happy_x_3 of { happy_var_3 -> 
+	case happyOut17 happy_x_4 of { happy_var_4 -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_2,happy_var_3,happy_var_4)) (Arg Instance NonStrict happy_var_3)
+	) `HappyStk` happyRest}}}
+
+happyReduce_186 = happySpecReduce_3  39# happyReduction_186
+happyReduction_186 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_1,happy_var_2,happy_var_3)) (Arg NotHidden         Relevant happy_var_2)
+	)}}}
+
+happyReduce_187 = happySpecReduce_3  39# happyReduction_187
+happyReduction_187 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	case happyOut17 happy_x_3 of { happy_var_3 -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_1,happy_var_2,happy_var_3)) (Arg Instance Relevant happy_var_2)
+	)}}}
+
+happyReduce_188 = happySpecReduce_3  39# happyReduction_188
+happyReduction_188 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
+	happyIn45
+		 (TypedBindings (getRange (happy_var_1,happy_var_2,happy_var_3)) (Arg Hidden            Relevant happy_var_2)
+	)}}}
+
+happyReduce_189 = happySpecReduce_3  40# happyReduction_189
+happyReduction_189 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn46
+		 (TBind (getRange (happy_var_1,happy_var_2,happy_var_3)) (map mkBoundName_ happy_var_1) happy_var_3
+	)}}}
+
+happyReduce_190 = happyMonadReduce 2# 41# happyReduction_190
+happyReduction_190 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut49 happy_x_1 of { happy_var_1 -> 
+	(
+      case reverse happy_var_1 of
+        Left _ : _ -> parseError "Absurd lambda cannot have a body."
+	_ : _      -> return [ b | Right b <- happy_var_1 ]
+        []         -> parsePanic "Empty LamBinds")}
+	) (\r -> happyReturn (happyIn47 r))
+
+happyReduce_191 = happyMonadReduce 1# 42# happyReduction_191
+happyReduction_191 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut50 happy_x_1 of { happy_var_1 -> 
+	(
+    case happy_var_1 of
+      Left lb -> case reverse lb of
+                   Right _ : _ -> parseError "Missing body for lambda"
+                   Left h  : _ -> return $ Left ([ b | Right b <- init lb], h)
+                   _           -> parsePanic "Empty LamBindsAbsurd"
+      Right es -> return $ Right es)}
+	) (\r -> happyReturn (happyIn48 r))
+
+happyReduce_192 = happySpecReduce_2  43# happyReduction_192
+happyReduction_192 happy_x_2
+	happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	case happyOut49 happy_x_2 of { happy_var_2 -> 
+	happyIn49
+		 (map Right happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_193 = happySpecReduce_2  43# happyReduction_193
+happyReduction_193 happy_x_2
+	happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	case happyOut49 happy_x_2 of { happy_var_2 -> 
+	happyIn49
+		 (Right (DomainFull happy_var_1) : happy_var_2
+	)}}
+
+happyReduce_194 = happySpecReduce_1  43# happyReduction_194
+happyReduction_194 happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	happyIn49
+		 (map Right happy_var_1
+	)}
+
+happyReduce_195 = happySpecReduce_1  43# happyReduction_195
+happyReduction_195 happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	happyIn49
+		 ([Right $ DomainFull happy_var_1]
+	)}
+
+happyReduce_196 = happySpecReduce_2  43# happyReduction_196
+happyReduction_196 happy_x_2
+	happy_x_1
+	 =  happyIn49
+		 ([Left NotHidden]
+	)
+
+happyReduce_197 = happySpecReduce_2  43# happyReduction_197
+happyReduction_197 happy_x_2
+	happy_x_1
+	 =  happyIn49
+		 ([Left Hidden]
+	)
+
+happyReduce_198 = happySpecReduce_2  43# happyReduction_198
+happyReduction_198 happy_x_2
+	happy_x_1
+	 =  happyIn49
+		 ([Left Instance]
+	)
+
+happyReduce_199 = happySpecReduce_2  44# happyReduction_199
+happyReduction_199 happy_x_2
+	happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	case happyOut49 happy_x_2 of { happy_var_2 -> 
+	happyIn50
+		 (Left $ map Right happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_200 = happySpecReduce_2  44# happyReduction_200
+happyReduction_200 happy_x_2
+	happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	case happyOut49 happy_x_2 of { happy_var_2 -> 
+	happyIn50
+		 (Left $ Right (DomainFull happy_var_1) : happy_var_2
+	)}}
+
+happyReduce_201 = happySpecReduce_1  44# happyReduction_201
+happyReduction_201 happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (case happy_var_1 of
+                                    Left lb -> Left $ map Right lb
+                                    Right es -> Right es
+	)}
+
+happyReduce_202 = happySpecReduce_1  44# happyReduction_202
+happyReduction_202 happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (Left [Right $ DomainFull happy_var_1]
+	)}
+
+happyReduce_203 = happySpecReduce_2  44# happyReduction_203
+happyReduction_203 happy_x_2
+	happy_x_1
+	 =  happyIn50
+		 (Left [Left NotHidden]
+	)
+
+happyReduce_204 = happySpecReduce_2  44# happyReduction_204
+happyReduction_204 happy_x_2
+	happy_x_1
+	 =  happyIn50
+		 (Left [Left Hidden]
+	)
+
+happyReduce_205 = happySpecReduce_2  44# happyReduction_205
+happyReduction_205 happy_x_2
+	happy_x_1
+	 =  happyIn50
+		 (Left [Left Instance]
+	)
+
+happyReduce_206 = happyMonadReduce 3# 45# happyReduction_206
+happyReduction_206 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	( do
+      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;
+      return (p [] [], RHS happy_var_3, NoWhere))}}
+	) (\r -> happyReturn (happyIn51 r))
+
+happyReduce_207 = happyMonadReduce 1# 46# happyReduction_207
+happyReduction_207 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> 
+	( do
+      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);
+      return (p [] [], AbsurdRHS, NoWhere))}
+	) (\r -> happyReturn (happyIn52 r))
+
+happyReduce_208 = happySpecReduce_1  47# happyReduction_208
+happyReduction_208 happy_x_1
+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> 
+	happyIn53
+		 (happy_var_1
+	)}
+
+happyReduce_209 = happySpecReduce_1  47# happyReduction_209
+happyReduction_209 happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	happyIn53
+		 (happy_var_1
+	)}
+
+happyReduce_210 = happySpecReduce_3  48# happyReduction_210
+happyReduction_210 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
+	case happyOut53 happy_x_3 of { happy_var_3 -> 
+	happyIn54
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_211 = happySpecReduce_3  48# happyReduction_211
+happyReduction_211 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	case happyOut53 happy_x_3 of { happy_var_3 -> 
+	happyIn54
+		 ([happy_var_3, happy_var_1]
+	)}}
+
+happyReduce_212 = happySpecReduce_1  48# happyReduction_212
+happyReduction_212 happy_x_1
+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 ([happy_var_1]
+	)}
+
+happyReduce_213 = happySpecReduce_2  49# happyReduction_213
+happyReduction_213 happy_x_2
+	happy_x_1
+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
+	happyIn55
+		 (happy_var_1
+	)}
+
+happyReduce_214 = happySpecReduce_2  50# happyReduction_214
+happyReduction_214 happy_x_2
+	happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	case happyOut56 happy_x_2 of { happy_var_2 -> 
+	happyIn56
+		 (happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_215 = happySpecReduce_2  50# happyReduction_215
+happyReduction_215 happy_x_2
+	happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	case happyOut56 happy_x_2 of { happy_var_2 -> 
+	happyIn56
+		 (DomainFull happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_216 = happySpecReduce_1  50# happyReduction_216
+happyReduction_216 happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	happyIn56
+		 (happy_var_1
+	)}
+
+happyReduce_217 = happySpecReduce_1  50# happyReduction_217
+happyReduction_217 happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	happyIn56
+		 ([DomainFull happy_var_1]
+	)}
+
+happyReduce_218 = happySpecReduce_2  51# happyReduction_218
+happyReduction_218 happy_x_2
+	happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	case happyOut57 happy_x_2 of { happy_var_2 -> 
+	happyIn57
+		 (happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_219 = happySpecReduce_2  51# happyReduction_219
+happyReduction_219 happy_x_2
+	happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	case happyOut57 happy_x_2 of { happy_var_2 -> 
+	happyIn57
+		 (DomainFull happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_220 = happySpecReduce_0  51# happyReduction_220
+happyReduction_220  =  happyIn57
+		 ([]
+	)
+
+happyReduce_221 = happySpecReduce_1  52# happyReduction_221
+happyReduction_221 happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	happyIn58
+		 (case happy_var_1 of
+                             Left lbs -> lbs
+                             Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"
+	)}
+
+happyReduce_222 = happySpecReduce_1  53# happyReduction_222
+happyReduction_222 happy_x_1
+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
+	happyIn59
+		 (Left [DomainFree NotHidden Relevant $ mkBoundName_ happy_var_1]
+	)}
+
+happyReduce_223 = happySpecReduce_2  53# happyReduction_223
+happyReduction_223 happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> 
+	happyIn59
+		 (Left [DomainFree NotHidden Irrelevant $ mkBoundName_ happy_var_2]
+	)}
+
+happyReduce_224 = happySpecReduce_2  53# happyReduction_224
+happyReduction_224 happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> 
+	happyIn59
+		 (Left [DomainFree NotHidden NonStrict $ mkBoundName_ happy_var_2]
+	)}
+
+happyReduce_225 = happySpecReduce_3  53# happyReduction_225
+happyReduction_225 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> 
+	happyIn59
+		 (either (Left . map (DomainFree Hidden Relevant . mkBoundName_)) Right happy_var_2
+	)}
+
+happyReduce_226 = happySpecReduce_3  53# happyReduction_226
+happyReduction_226 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut25 happy_x_2 of { happy_var_2 -> 
+	happyIn59
+		 (Left $ map (DomainFree Instance Relevant . mkBoundName_) happy_var_2
+	)}
+
+happyReduce_227 = happyReduce 4# 53# happyReduction_227
+happyReduction_227 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut25 happy_x_3 of { happy_var_3 -> 
+	happyIn59
+		 (Left $ map (DomainFree Hidden Irrelevant . mkBoundName_) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_228 = happyReduce 4# 53# happyReduction_228
+happyReduction_228 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut25 happy_x_3 of { happy_var_3 -> 
+	happyIn59
+		 (Left $ map (DomainFree Instance Irrelevant . mkBoundName_) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_229 = happyReduce 4# 53# happyReduction_229
+happyReduction_229 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut25 happy_x_3 of { happy_var_3 -> 
+	happyIn59
+		 (Left $ map (DomainFree Hidden NonStrict . mkBoundName_) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_230 = happyReduce 4# 53# happyReduction_230
+happyReduction_230 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut25 happy_x_3 of { happy_var_3 -> 
+	happyIn59
+		 (Left $ map (DomainFree Instance NonStrict . mkBoundName_) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_231 = happyMonadReduce 1# 54# happyReduction_231
+happyReduction_231 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut61 happy_x_1 of { happy_var_1 -> 
+	( verifyImportDirective happy_var_1)}
+	) (\r -> happyReturn (happyIn60 r))
+
+happyReduce_232 = happySpecReduce_2  55# happyReduction_232
+happyReduction_232 happy_x_2
+	happy_x_1
+	 =  case happyOut62 happy_x_2 of { happy_var_2 -> 
+	happyIn61
+		 (happy_var_2 { publicOpen = True }
+	)}
+
+happyReduce_233 = happySpecReduce_1  55# happyReduction_233
+happyReduction_233 happy_x_1
+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> 
+	happyIn61
+		 (happy_var_1
+	)}
+
+happyReduce_234 = happySpecReduce_2  56# happyReduction_234
+happyReduction_234 happy_x_2
+	happy_x_1
+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
+	case happyOut64 happy_x_2 of { happy_var_2 -> 
+	happyIn62
+		 (ImportDirective (fuseRange (snd happy_var_1) (snd happy_var_2)) (fst happy_var_1) (fst happy_var_2) False
+	)}}
+
+happyReduce_235 = happySpecReduce_1  56# happyReduction_235
+happyReduction_235 happy_x_1
+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> 
+	happyIn62
+		 (ImportDirective (getRange (snd happy_var_1)) (Hiding []) (fst happy_var_1) False
+	)}
+
+happyReduce_236 = happySpecReduce_1  56# happyReduction_236
+happyReduction_236 happy_x_1
+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
+	happyIn62
+		 (ImportDirective (getRange (snd happy_var_1)) (fst happy_var_1) [] False
+	)}
+
+happyReduce_237 = happySpecReduce_0  56# happyReduction_237
+happyReduction_237  =  happyIn62
+		 (defaultImportDir
+	)
+
+happyReduce_238 = happyReduce 4# 57# happyReduction_238
+happyReduction_238 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
+	case happyOut69 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn63
+		 ((Using happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))
+	) `HappyStk` happyRest}}}}
+
+happyReduce_239 = happyReduce 4# 57# happyReduction_239
+happyReduction_239 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
+	case happyOut70 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn63
+		 ((Hiding happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))
+	) `HappyStk` happyRest}}}}
+
+happyReduce_240 = happyReduce 4# 58# happyReduction_240
+happyReduction_240 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
+	case happyOut65 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn64
+		 ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))
+	) `HappyStk` happyRest}}}}
+
+happyReduce_241 = happySpecReduce_3  59# happyReduction_241
+happyReduction_241 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> 
+	case happyOut65 happy_x_3 of { happy_var_3 -> 
+	happyIn65
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_242 = happySpecReduce_1  59# happyReduction_242
+happyReduction_242 happy_x_1
+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 ([happy_var_1]
+	)}
+
+happyReduce_243 = happySpecReduce_3  60# happyReduction_243
+happyReduction_243 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> 
+	case happyOut15 happy_x_3 of { happy_var_3 -> 
+	happyIn66
+		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)
+	)}}}
+
+happyReduce_244 = happySpecReduce_2  61# happyReduction_244
+happyReduction_244 happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
+	happyIn67
+		 (ImportedName happy_var_2
+	)}
+
+happyReduce_245 = happySpecReduce_3  61# happyReduction_245
+happyReduction_245 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_3 of { happy_var_3 -> 
+	happyIn67
+		 (ImportedModule happy_var_3
+	)}
+
+happyReduce_246 = happySpecReduce_1  62# happyReduction_246
+happyReduction_246 happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	happyIn68
+		 (ImportedName happy_var_1
+	)}
+
+happyReduce_247 = happySpecReduce_2  62# happyReduction_247
+happyReduction_247 happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
+	happyIn68
+		 (ImportedModule happy_var_2
+	)}
+
+happyReduce_248 = happySpecReduce_0  63# happyReduction_248
+happyReduction_248  =  happyIn69
+		 ([]
+	)
+
+happyReduce_249 = happySpecReduce_1  63# happyReduction_249
+happyReduction_249 happy_x_1
+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> 
+	happyIn69
+		 (happy_var_1
+	)}
+
+happyReduce_250 = happySpecReduce_1  64# happyReduction_250
+happyReduction_250 happy_x_1
+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
+	happyIn70
+		 ([happy_var_1]
+	)}
+
+happyReduce_251 = happySpecReduce_3  64# happyReduction_251
+happyReduction_251 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
+	case happyOut70 happy_x_3 of { happy_var_3 -> 
+	happyIn70
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_252 = happyMonadReduce 3# 65# happyReduction_252
+happyReduction_252 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> 
+	case happyOut74 happy_x_2 of { happy_var_2 -> 
+	case happyOut73 happy_x_3 of { happy_var_3 -> 
+	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}
+	) (\r -> happyReturn (happyIn71 r))
+
+happyReduce_253 = happyReduce 4# 65# happyReduction_253
+happyReduction_253 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
+	case happyOut72 happy_x_2 of { happy_var_2 -> 
+	case happyOut74 happy_x_3 of { happy_var_3 -> 
+	case happyOut73 happy_x_4 of { happy_var_4 -> 
+	happyIn71
+		 (Ellipsis (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_254 = happySpecReduce_0  66# happyReduction_254
+happyReduction_254  =  happyIn72
+		 ([]
+	)
+
+happyReduce_255 = happyMonadReduce 3# 66# happyReduction_255
+happyReduction_255 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOut72 happy_x_3 of { happy_var_3 -> 
+	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->
+		   return (p : happy_var_3))}}
+	) (\r -> happyReturn (happyIn72 r))
+
+happyReduce_256 = happySpecReduce_0  67# happyReduction_256
+happyReduction_256  =  happyIn73
+		 ([]
+	)
+
+happyReduce_257 = happySpecReduce_2  67# happyReduction_257
+happyReduction_257 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn73
+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
+	)}
+
+happyReduce_258 = happySpecReduce_0  68# happyReduction_258
+happyReduction_258  =  happyIn74
+		 ([]
+	)
+
+happyReduce_259 = happySpecReduce_2  68# happyReduction_259
+happyReduction_259 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn74
+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
+	)}
+
+happyReduce_260 = happySpecReduce_0  69# happyReduction_260
+happyReduction_260  =  happyIn75
+		 (NoWhere
+	)
+
+happyReduce_261 = happySpecReduce_2  69# happyReduction_261
+happyReduction_261 happy_x_2
+	happy_x_1
+	 =  case happyOut133 happy_x_2 of { happy_var_2 -> 
+	happyIn75
+		 (AnyWhere happy_var_2
+	)}
+
+happyReduce_262 = happyReduce 4# 69# happyReduction_262
+happyReduction_262 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut133 happy_x_4 of { happy_var_4 -> 
+	happyIn75
+		 (SomeWhere happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_263 = happySpecReduce_1  70# happyReduction_263
+happyReduction_263 happy_x_1
+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 (happy_var_1
+	)}
+
+happyReduce_264 = happySpecReduce_1  70# happyReduction_264
+happyReduction_264 happy_x_1
+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 (happy_var_1
+	)}
+
+happyReduce_265 = happySpecReduce_1  70# happyReduction_265
+happyReduction_265 happy_x_1
+	 =  case happyOut82 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_266 = happySpecReduce_1  70# happyReduction_266
+happyReduction_266 happy_x_1
+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_267 = happySpecReduce_1  70# happyReduction_267
+happyReduction_267 happy_x_1
+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_268 = happySpecReduce_1  70# happyReduction_268
+happyReduction_268 happy_x_1
+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_269 = happySpecReduce_1  70# happyReduction_269
+happyReduction_269 happy_x_1
+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_270 = happySpecReduce_1  70# happyReduction_270
+happyReduction_270 happy_x_1
+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_271 = happySpecReduce_1  70# happyReduction_271
+happyReduction_271 happy_x_1
+	 =  case happyOut90 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_272 = happySpecReduce_1  70# happyReduction_272
+happyReduction_272 happy_x_1
+	 =  case happyOut91 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_273 = happySpecReduce_1  70# happyReduction_273
+happyReduction_273 happy_x_1
+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_274 = happySpecReduce_1  70# happyReduction_274
+happyReduction_274 happy_x_1
+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_275 = happySpecReduce_1  70# happyReduction_275
+happyReduction_275 happy_x_1
+	 =  case happyOut101 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 (happy_var_1
+	)}
+
+happyReduce_276 = happySpecReduce_1  70# happyReduction_276
+happyReduction_276 happy_x_1
+	 =  case happyOut104 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_277 = happySpecReduce_1  70# happyReduction_277
+happyReduction_277 happy_x_1
+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_278 = happySpecReduce_1  70# happyReduction_278
+happyReduction_278 happy_x_1
+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_279 = happySpecReduce_1  70# happyReduction_279
+happyReduction_279 happy_x_1
+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_280 = happySpecReduce_1  70# happyReduction_280
+happyReduction_280 happy_x_1
+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 ([happy_var_1]
+	)}
+
+happyReduce_281 = happySpecReduce_3  71# happyReduction_281
+happyReduction_281 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn77
+		 (map (flip (TypeSig Relevant) happy_var_3) happy_var_1
+	)}}
+
+happyReduce_282 = happySpecReduce_3  72# happyReduction_282
+happyReduction_282 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn78
+		 (map (\ (Arg _ rel x) -> TypeSig rel x happy_var_3) happy_var_1
+	)}}
+
+happyReduce_283 = happySpecReduce_3  73# happyReduction_283
+happyReduction_283 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut20 happy_x_1 of { happy_var_1 -> 
+	case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn79
+		 (map (fmap (flip (TypeSig Relevant) happy_var_3)) happy_var_1
+	)}}
+
+happyReduce_284 = happyMonadReduce 3# 74# happyReduction_284
+happyReduction_284 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut71 happy_x_1 of { happy_var_1 -> 
+	case happyOut81 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	( funClauseOrTypeSigs happy_var_1 happy_var_2 happy_var_3)}}}
+	) (\r -> happyReturn (happyIn80 r))
+
+happyReduce_285 = happySpecReduce_2  75# happyReduction_285
+happyReduction_285 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn81
+		 (JustRHS (RHS happy_var_2)
+	)}
+
+happyReduce_286 = happySpecReduce_2  75# happyReduction_286
+happyReduction_286 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn81
+		 (TypeSigsRHS happy_var_2
+	)}
+
+happyReduce_287 = happySpecReduce_0  75# happyReduction_287
+happyReduction_287  =  happyIn81
+		 (JustRHS AbsurdRHS
+	)
+
+happyReduce_288 = happyReduce 7# 76# happyReduction_288
+happyReduction_288 (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 happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut29 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut130 happy_x_7 of { happy_var_7 -> 
+	happyIn82
+		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) Inductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7
+	) `HappyStk` happyRest}}}}}}}
+
+happyReduce_289 = happyReduce 7# 76# happyReduction_289
+happyReduction_289 (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 happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut29 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut130 happy_x_7 of { happy_var_7 -> 
+	happyIn82
+		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) CoInductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7
+	) `HappyStk` happyRest}}}}}}}
+
+happyReduce_290 = happyReduce 5# 76# happyReduction_290
+happyReduction_290 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut130 happy_x_5 of { happy_var_5 -> 
+	happyIn82
+		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 Nothing happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_291 = happyReduce 5# 76# happyReduction_291
+happyReduction_291 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut130 happy_x_5 of { happy_var_5 -> 
+	happyIn82
+		 (Data (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) CoInductive happy_var_2 happy_var_3 Nothing happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_292 = happyReduce 5# 77# happyReduction_292
+happyReduction_292 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut29 happy_x_5 of { happy_var_5 -> 
+	happyIn83
+		 (DataSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) Inductive happy_var_2 happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_293 = happyMonadReduce 7# 78# happyReduction_293
+happyReduction_293 (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) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	case happyOut37 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut29 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut131 happy_x_7 of { happy_var_7 -> 
+	( exprToName happy_var_2 >>= \ n -> return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5,happy_var_6,happy_var_7)) n (fst3 happy_var_7) (snd3 happy_var_7) happy_var_3 (Just happy_var_5) (thd3 happy_var_7))}}}}}}}
+	) (\r -> happyReturn (happyIn84 r))
+
+happyReduce_294 = happyMonadReduce 5# 78# happyReduction_294
+happyReduction_294 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	case happyOut37 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut131 happy_x_5 of { happy_var_5 -> 
+	( exprToName happy_var_2 >>= \ n -> return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n (fst3 happy_var_5) (snd3 happy_var_5) happy_var_3 Nothing (thd3 happy_var_5))}}}}}
+	) (\r -> happyReturn (happyIn84 r))
+
+happyReduce_295 = happyMonadReduce 5# 79# happyReduction_295
+happyReduction_295 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	case happyOut37 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut29 happy_x_5 of { happy_var_5 -> 
+	( exprToName happy_var_2 >>= \ n -> return $ RecordSig (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n happy_var_3 happy_var_5)}}}}}
+	) (\r -> happyReturn (happyIn85 r))
+
+happyReduce_296 = happySpecReduce_2  80# happyReduction_296
+happyReduction_296 happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
+	happyIn86
+		 (happy_var_2
+	)}
+
+happyReduce_297 = happySpecReduce_3  81# happyReduction_297
+happyReduction_297 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
+	case happyOut14 happy_x_2 of { happy_var_2 -> 
+	case happyOut24 happy_x_3 of { happy_var_3 -> 
+	happyIn87
+		 (Infix (NonAssoc (getRange (happy_var_1,happy_var_3)) happy_var_2) happy_var_3
+	)}}}
+
+happyReduce_298 = happySpecReduce_3  81# happyReduction_298
+happyReduction_298 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
+	case happyOut14 happy_x_2 of { happy_var_2 -> 
+	case happyOut24 happy_x_3 of { happy_var_3 -> 
+	happyIn87
+		 (Infix (LeftAssoc (getRange (happy_var_1,happy_var_3)) happy_var_2) happy_var_3
+	)}}}
+
+happyReduce_299 = happySpecReduce_3  81# happyReduction_299
+happyReduction_299 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
+	case happyOut14 happy_x_2 of { happy_var_2 -> 
+	case happyOut24 happy_x_3 of { happy_var_3 -> 
+	happyIn87
+		 (Infix (RightAssoc (getRange (happy_var_1,happy_var_3)) happy_var_2) happy_var_3
+	)}}}
+
+happyReduce_300 = happySpecReduce_2  82# happyReduction_300
+happyReduction_300 happy_x_2
+	happy_x_1
+	 =  case happyOut128 happy_x_2 of { happy_var_2 -> 
+	happyIn88
+		 (let toField (Arg h rel (TypeSig _ x t)) = Field x (Arg h rel t) in map toField happy_var_2
+	)}
+
+happyReduce_301 = happySpecReduce_2  83# happyReduction_301
+happyReduction_301 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
+	case happyOut133 happy_x_2 of { happy_var_2 -> 
+	happyIn89
+		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_302 = happySpecReduce_2  84# happyReduction_302
+happyReduction_302 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
+	case happyOut133 happy_x_2 of { happy_var_2 -> 
+	happyIn90
+		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_303 = happySpecReduce_2  85# happyReduction_303
+happyReduction_303 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
+	case happyOut133 happy_x_2 of { happy_var_2 -> 
+	happyIn91
+		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_304 = happySpecReduce_2  86# happyReduction_304
+happyReduction_304 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
+	case happyOut126 happy_x_2 of { happy_var_2 -> 
+	happyIn92
+		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_305 = happySpecReduce_2  87# happyReduction_305
+happyReduction_305 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
+	case happyOut124 happy_x_2 of { happy_var_2 -> 
+	happyIn93
+		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_306 = happyMonadReduce 5# 88# happyReduction_306
+happyReduction_306 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut97 happy_x_3 of { happy_var_3 -> 
+	case happyOut96 happy_x_5 of { happy_var_5 -> 
+	(
+  case happy_var_2 of
+    Name _ [_] -> case mkNotation happy_var_3 happy_var_5 of
+      Left err -> parseError $ "malformed syntax declaration: " ++ err
+      Right n -> return $ Syntax happy_var_2 n
+    _ -> parseError "syntax declarations are allowed only for simple names (without holes)")}}}
+	) (\r -> happyReturn (happyIn94 r))
+
+happyReduce_307 = happyMonadReduce 4# 89# happyReduction_307
+happyReduction_307 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> 
+	case happyOut16 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymEqual happy_var_3) -> 
+	case happyOut29 happy_x_4 of { happy_var_4 -> 
+	( do
+  p <- exprToPattern happy_var_4
+  return (PatternSyn (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) (head happy_var_2) (tail happy_var_2) p))}}}}
+	) (\r -> happyReturn (happyIn95 r))
+
+happyReduce_308 = happySpecReduce_1  90# happyReduction_308
+happyReduction_308 happy_x_1
+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 ([happy_var_1]
+	)}
+
+happyReduce_309 = happySpecReduce_2  90# happyReduction_309
+happyReduction_309 happy_x_2
+	happy_x_1
+	 =  case happyOut96 happy_x_1 of { happy_var_1 -> 
+	case happyOut99 happy_x_2 of { happy_var_2 -> 
+	happyIn96
+		 (happy_var_1 ++ [happy_var_2]
+	)}}
+
+happyReduce_310 = happySpecReduce_1  91# happyReduction_310
+happyReduction_310 happy_x_1
+	 =  case happyOut98 happy_x_1 of { happy_var_1 -> 
+	happyIn97
+		 ([happy_var_1]
+	)}
+
+happyReduce_311 = happySpecReduce_2  91# happyReduction_311
+happyReduction_311 happy_x_2
+	happy_x_1
+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> 
+	case happyOut98 happy_x_2 of { happy_var_2 -> 
+	happyIn97
+		 (happy_var_1 ++ [happy_var_2]
+	)}}
+
+happyReduce_312 = happySpecReduce_1  92# happyReduction_312
+happyReduction_312 happy_x_1
+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> 
+	happyIn98
+		 (ExprHole happy_var_1
+	)}
+
+happyReduce_313 = happyReduce 6# 92# happyReduction_313
+happyReduction_313 (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 happyOut99 happy_x_3 of { happy_var_3 -> 
+	case happyOut99 happy_x_5 of { happy_var_5 -> 
+	happyIn98
+		 (LambdaHole happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_314 = happySpecReduce_1  93# happyReduction_314
+happyReduction_314 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	happyIn99
+		 (snd happy_var_1
+	)}
+
+happyReduce_315 = happySpecReduce_1  94# happyReduction_315
+happyReduction_315 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	happyIn100
+		 (Just (getRange happy_var_1)
+	)}
+
+happyReduce_316 = happySpecReduce_0  94# happyReduction_316
+happyReduction_316  =  happyIn100
+		 (Nothing
+	)
+
+happyReduce_317 = happyMonadReduce 5# 95# happyReduction_317
+happyReduction_317 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOut100 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwImport happy_var_2) -> 
+	case happyOut22 happy_x_3 of { happy_var_3 -> 
+	case happyOut102 happy_x_4 of { happy_var_4 -> 
+	case happyOut60 happy_x_5 of { happy_var_5 -> 
+	(
+    let
+    { doOpen = maybe DontOpen (const DoOpen) happy_var_1
+    ; m   = happy_var_3
+    ; es  = happy_var_4
+    ; dir = happy_var_5
+    ; r   = getRange (m, es, dir)
+    ; mr  = getRange m
+    ; unique = hash $ show $ fmap (const (Nothing :: Maybe ())) r
+         -- turn range into unique id, but delete file path
+         -- which is absolute and messes up suite of failing tests
+         -- (different hashs on different installations)
+         -- TODO: Don't use (insecure) hashes in this way.
+    ; fresh = Name mr [ Id $ ".#" ++ show m ++ "-" ++ show unique ]
+    ; impStm asR = Import mr m (Just (AsName fresh asR)) DontOpen defaultImportDir
+    ; appStm m' es =
+        let r = getRange (m, es) in
+        Private r
+          [ ModuleMacro r m'
+             (SectionApp (getRange es) []
+               (RawApp (getRange es) (Ident (QName fresh) : es)))
+             doOpen dir
+          ]
+    ; (initArgs, last2Args) = splitAt (length es - 2) es
+    ; parseAsClause = case last2Args of
+      { [ Ident (QName (Name asR [Id x]))
+        , Ident (QName m')
+        ] | x == "as" -> Just (asR, m')
+      ; _ -> Nothing
+      }
+    } in
+    case es of
+      { [] -> return [Import mr m Nothing doOpen dir]
+      ; _ | Just (asR, m') <- parseAsClause ->
+              if null initArgs then return
+                 [ Import (getRange (m, asR, m', dir)) m
+                     (Just (AsName m' asR)) doOpen dir
+                 ]
+              else return [ impStm asR, appStm m' initArgs ]
+          | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart $ getRange happy_var_2) "An import statement with module instantiation does not actually import the module.  This statement achieves nothing.  Either add the `open' keyword or bind the instantiated module with an `as' clause."
+          | otherwise -> return
+              [ impStm noRange
+              , appStm (noName $ beginningOf $ getRange m) es
+              ]
+      })}}}}}
+	) (\r -> happyReturn (happyIn101 r))
+
+happyReduce_318 = happyReduce 4# 95# happyReduction_318
+happyReduction_318 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut22 happy_x_2 of { happy_var_2 -> 
+	case happyOut102 happy_x_3 of { happy_var_3 -> 
+	case happyOut60 happy_x_4 of { happy_var_4 -> 
+	happyIn101
+		 (let
+    { m   = happy_var_2
+    ; es  = happy_var_3
+    ; dir = happy_var_4
+    ; r   = getRange (m, es, dir)
+    } in
+    [ case es of
+      { []  -> Open r m dir
+      ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange m)
+			     (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))
+			     DoOpen dir
+                         ]
+      }
+    ]
+	) `HappyStk` happyRest}}}
+
+happyReduce_319 = happyReduce 6# 95# happyReduction_319
+happyReduction_319 (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 happyOut22 happy_x_2 of { happy_var_2 -> 
+	case happyOut60 happy_x_6 of { happy_var_6 -> 
+	happyIn101
+		 (let r = getRange happy_var_2 in
+    [ Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)
+    	      	(RecordModuleIFS r happy_var_2) DoOpen happy_var_6
+                ]
+    ]
+	) `HappyStk` happyRest}}
+
+happyReduce_320 = happySpecReduce_0  96# happyReduction_320
+happyReduction_320  =  happyIn102
+		 ([]
+	)
+
+happyReduce_321 = happySpecReduce_2  96# happyReduction_321
+happyReduction_321 happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOut102 happy_x_2 of { happy_var_2 -> 
+	happyIn102
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_322 = happyReduce 4# 97# happyReduction_322
+happyReduction_322 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut22 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymDoubleOpenBrace happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymEllipsis happy_var_3) -> 
+	case happyOut17 happy_x_4 of { happy_var_4 -> 
+	happyIn103
+		 ((\ts ->
+		    if null ts then return $ RecordModuleIFS (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_1
+		    else parseError "No bindings allowed for record module with non-canonical implicits" )
+	) `HappyStk` happyRest}}}}
+
+happyReduce_323 = happySpecReduce_2  97# happyReduction_323
+happyReduction_323 happy_x_2
+	happy_x_1
+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
+	case happyOut102 happy_x_2 of { happy_var_2 -> 
+	happyIn103
+		 ((\ts -> return $ SectionApp (getRange (happy_var_1, happy_var_2)) ts (RawApp (fuseRange happy_var_1 happy_var_2) (Ident happy_var_1 : happy_var_2)) )
+	)}}
+
+happyReduce_324 = happyMonadReduce 6# 98# happyReduction_324
+happyReduction_324 (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) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOut103 happy_x_5 of { happy_var_5 -> 
+	case happyOut60 happy_x_6 of { happy_var_6 -> 
+	( do {ma <- happy_var_5 (map addType happy_var_3); return $ ModuleMacro (getRange (happy_var_1, happy_var_2, ma, happy_var_6)) happy_var_2 ma DontOpen happy_var_6 })}}}}}
+	) (\r -> happyReturn (happyIn104 r))
+
+happyReduce_325 = happyMonadReduce 7# 98# happyReduction_325
+happyReduction_325 (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) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwModule happy_var_2) -> 
+	case happyOut15 happy_x_3 of { happy_var_3 -> 
+	case happyOut57 happy_x_4 of { happy_var_4 -> 
+	case happyOut103 happy_x_6 of { happy_var_6 -> 
+	case happyOut60 happy_x_7 of { happy_var_7 -> 
+	( do {ma <- happy_var_6 (map addType happy_var_4); return $ ModuleMacro (getRange (happy_var_1, happy_var_2, happy_var_3, ma, happy_var_7)) happy_var_3 ma DoOpen happy_var_7 })}}}}}}
+	) (\r -> happyReturn (happyIn104 r))
+
+happyReduce_326 = happyReduce 5# 99# happyReduction_326
+happyReduction_326 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	case happyOut15 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut134 happy_x_5 of { happy_var_5 -> 
+	happyIn105
+		 (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_327 = happyReduce 5# 99# happyReduction_327
+happyReduction_327 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	case happyOut106 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut134 happy_x_5 of { happy_var_5 -> 
+	happyIn105
+		 (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_328 = happySpecReduce_1  100# happyReduction_328
+happyReduction_328 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn106
+		 (noName (getRange happy_var_1)
+	)}
+
+happyReduce_329 = happySpecReduce_1  101# happyReduction_329
+happyReduction_329 happy_x_1
+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> 
+	happyIn107
+		 ([happy_var_1]
+	)}
+
+happyReduce_330 = happySpecReduce_2  101# happyReduction_330
+happyReduction_330 happy_x_2
+	happy_x_1
+	 =  case happyOut101 happy_x_1 of { happy_var_1 -> 
+	case happyOut107 happy_x_2 of { happy_var_2 -> 
+	happyIn107
+		 (happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_331 = happyReduce 5# 102# happyReduction_331
+happyReduction_331 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	case happyOut22 happy_x_2 of { happy_var_2 -> 
+	case happyOut57 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut134 happy_x_5 of { happy_var_5 -> 
+	happyIn108
+		 (Module (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_332 = happySpecReduce_1  103# happyReduction_332
+happyReduction_332 happy_x_1
+	 =  case happyOut111 happy_x_1 of { happy_var_1 -> 
+	happyIn109
+		 (Pragma happy_var_1
+	)}
+
+happyReduce_333 = happySpecReduce_1  104# happyReduction_333
+happyReduction_333 happy_x_1
+	 =  case happyOut112 happy_x_1 of { happy_var_1 -> 
+	happyIn110
+		 (happy_var_1
+	)}
+
+happyReduce_334 = happySpecReduce_1  105# happyReduction_334
+happyReduction_334 happy_x_1
+	 =  case happyOut113 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_335 = happySpecReduce_1  105# happyReduction_335
+happyReduction_335 happy_x_1
+	 =  case happyOut114 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_336 = happySpecReduce_1  105# happyReduction_336
+happyReduction_336 happy_x_1
+	 =  case happyOut116 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_337 = happySpecReduce_1  105# happyReduction_337
+happyReduction_337 happy_x_1
+	 =  case happyOut115 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_338 = happySpecReduce_1  105# happyReduction_338
+happyReduction_338 happy_x_1
+	 =  case happyOut117 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_339 = happySpecReduce_1  105# happyReduction_339
+happyReduction_339 happy_x_1
+	 =  case happyOut118 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_340 = happySpecReduce_1  105# happyReduction_340
+happyReduction_340 happy_x_1
+	 =  case happyOut119 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_341 = happySpecReduce_1  105# happyReduction_341
+happyReduction_341 happy_x_1
+	 =  case happyOut122 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_342 = happySpecReduce_1  105# happyReduction_342
+happyReduction_342 happy_x_1
+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_343 = happySpecReduce_1  105# happyReduction_343
+happyReduction_343 happy_x_1
+	 =  case happyOut120 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_344 = happySpecReduce_1  105# happyReduction_344
+happyReduction_344 happy_x_1
+	 =  case happyOut121 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (happy_var_1
+	)}
+
+happyReduce_345 = happyReduce 4# 106# happyReduction_345
+happyReduction_345 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwOPTIONS happy_var_2) -> 
+	case happyOut27 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn112
+		 (OptionsPragma (getRange (happy_var_1,happy_var_2,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_346 = happyReduce 5# 107# happyReduction_346
+happyReduction_346 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwBUILTIN happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
+	case happyOut28 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn113
+		 (BuiltinPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4,happy_var_5)) (snd happy_var_3) (Ident happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_347 = happyReduce 5# 108# happyReduction_347
+happyReduction_347 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED happy_var_2) -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	case happyOut27 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn114
+		 (CompiledPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_348 = happyReduce 5# 109# happyReduction_348
+happyReduction_348 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_TYPE happy_var_2) -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	case happyOut27 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn115
+		 (CompiledTypePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_349 = happyReduce 6# 110# happyReduction_349
+happyReduction_349 (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 happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_DATA happy_var_2) -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> 
+	case happyOut27 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> 
+	happyIn116
+		 (CompiledDataPragma (getRange (happy_var_1,happy_var_2,happy_var_3,fst happy_var_4,happy_var_6)) happy_var_3 (snd happy_var_4) happy_var_5
+	) `HappyStk` happyRest}}}}}}
+
+happyReduce_350 = happyReduce 5# 111# happyReduction_350
+happyReduction_350 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_EPIC happy_var_2) -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	case happyOut27 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn117
+		 (CompiledEpicPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_351 = happyReduce 5# 112# happyReduction_351
+happyReduction_351 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwCOMPILED_JS happy_var_2) -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	case happyOut27 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn118
+		 (CompiledJSPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_352 = happyReduce 4# 113# happyReduction_352
+happyReduction_352 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwSTATIC happy_var_2) -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn119
+		 (StaticPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_353 = happyReduce 4# 114# happyReduction_353
+happyReduction_353 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwETA happy_var_2) -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn120
+		 (EtaPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_354 = happySpecReduce_3  115# happyReduction_354
+happyReduction_354 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
+	happyIn121
+		 (NoTerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3))
+	)}}}
+
+happyReduce_355 = happyMonadReduce 4# 116# happyReduction_355
+happyReduction_355 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwIMPORT happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	( let s = snd happy_var_3 in
+       if validHaskellModuleName s
+       then return $ ImportPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4)) s
+       else parseError $ "Malformed module name: " ++ s ++ ".")}}}}
+	) (\r -> happyReturn (happyIn122 r))
+
+happyReduce_356 = happySpecReduce_3  117# happyReduction_356
+happyReduction_356 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwIMPOSSIBLE happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
+	happyIn123
+		 (ImpossiblePragma (getRange (happy_var_1,happy_var_2,happy_var_3))
+	)}}}
+
+happyReduce_357 = happySpecReduce_3  118# happyReduction_357
+happyReduction_357 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut125 happy_x_2 of { happy_var_2 -> 
+	happyIn124
+		 (reverse happy_var_2
+	)}
+
+happyReduce_358 = happySpecReduce_3  119# happyReduction_358
+happyReduction_358 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> 
+	case happyOut77 happy_x_3 of { happy_var_3 -> 
+	happyIn125
+		 (reverse happy_var_3 ++ happy_var_1
+	)}}
+
+happyReduce_359 = happySpecReduce_1  119# happyReduction_359
+happyReduction_359 happy_x_1
+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> 
+	happyIn125
+		 (reverse happy_var_1
+	)}
+
+happyReduce_360 = happySpecReduce_3  120# happyReduction_360
+happyReduction_360 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut127 happy_x_2 of { happy_var_2 -> 
+	happyIn126
+		 (reverse happy_var_2
+	)}
+
+happyReduce_361 = happySpecReduce_3  121# happyReduction_361
+happyReduction_361 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> 
+	case happyOut78 happy_x_3 of { happy_var_3 -> 
+	happyIn127
+		 (reverse happy_var_3 ++ happy_var_1
+	)}}
+
+happyReduce_362 = happySpecReduce_1  121# happyReduction_362
+happyReduction_362 happy_x_1
+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> 
+	happyIn127
+		 (reverse happy_var_1
+	)}
+
+happyReduce_363 = happySpecReduce_3  122# happyReduction_363
+happyReduction_363 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut129 happy_x_2 of { happy_var_2 -> 
+	happyIn128
+		 (reverse happy_var_2
+	)}
+
+happyReduce_364 = happySpecReduce_3  123# happyReduction_364
+happyReduction_364 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> 
+	case happyOut79 happy_x_3 of { happy_var_3 -> 
+	happyIn129
+		 (reverse happy_var_3 ++ happy_var_1
+	)}}
+
+happyReduce_365 = happySpecReduce_1  123# happyReduction_365
+happyReduction_365 happy_x_1
+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
+	happyIn129
+		 (reverse happy_var_1
+	)}
+
+happyReduce_366 = happySpecReduce_2  124# happyReduction_366
+happyReduction_366 happy_x_2
+	happy_x_1
+	 =  happyIn130
+		 ([]
+	)
+
+happyReduce_367 = happySpecReduce_1  124# happyReduction_367
+happyReduction_367 happy_x_1
+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> 
+	happyIn130
+		 (happy_var_1
+	)}
+
+happyReduce_368 = happySpecReduce_2  125# happyReduction_368
+happyReduction_368 happy_x_2
+	happy_x_1
+	 =  happyIn131
+		 ((Nothing, Nothing, [])
+	)
+
+happyReduce_369 = happySpecReduce_3  125# happyReduction_369
+happyReduction_369 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut86 happy_x_2 of { happy_var_2 -> 
+	happyIn131
+		 ((Nothing, Just happy_var_2, [])
+	)}
+
+happyReduce_370 = happyReduce 5# 125# happyReduction_370
+happyReduction_370 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut86 happy_x_2 of { happy_var_2 -> 
+	case happyOut135 happy_x_4 of { happy_var_4 -> 
+	happyIn131
+		 ((Nothing, Just happy_var_2, reverse happy_var_4)
+	) `HappyStk` happyRest}}
+
+happyReduce_371 = happySpecReduce_3  125# happyReduction_371
+happyReduction_371 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut135 happy_x_2 of { happy_var_2 -> 
+	happyIn131
+		 ((Nothing, Nothing, reverse happy_var_2)
+	)}
+
+happyReduce_372 = happySpecReduce_3  125# happyReduction_372
+happyReduction_372 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut132 happy_x_2 of { happy_var_2 -> 
+	happyIn131
+		 ((Just happy_var_2, Nothing, [])
+	)}
+
+happyReduce_373 = happyReduce 5# 125# happyReduction_373
+happyReduction_373 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut132 happy_x_2 of { happy_var_2 -> 
+	case happyOut86 happy_x_4 of { happy_var_4 -> 
+	happyIn131
+		 ((Just happy_var_2, Just happy_var_4, [])
+	) `HappyStk` happyRest}}
+
+happyReduce_374 = happyReduce 7# 125# happyReduction_374
+happyReduction_374 (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 happyOut132 happy_x_2 of { happy_var_2 -> 
+	case happyOut86 happy_x_4 of { happy_var_4 -> 
+	case happyOut135 happy_x_6 of { happy_var_6 -> 
+	happyIn131
+		 ((Just happy_var_2, Just happy_var_4, reverse happy_var_6)
+	) `HappyStk` happyRest}}}
+
+happyReduce_375 = happyReduce 5# 125# happyReduction_375
+happyReduction_375 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut132 happy_x_2 of { happy_var_2 -> 
+	case happyOut135 happy_x_4 of { happy_var_4 -> 
+	happyIn131
+		 ((Just happy_var_2, Nothing, reverse happy_var_4)
+	) `HappyStk` happyRest}}
+
+happyReduce_376 = happySpecReduce_1  126# happyReduction_376
+happyReduction_376 happy_x_1
+	 =  happyIn132
+		 (Inductive
+	)
+
+happyReduce_377 = happySpecReduce_1  126# happyReduction_377
+happyReduction_377 happy_x_1
+	 =  happyIn132
+		 (CoInductive
+	)
+
+happyReduce_378 = happySpecReduce_3  127# happyReduction_378
+happyReduction_378 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut135 happy_x_2 of { happy_var_2 -> 
+	happyIn133
+		 (reverse happy_var_2
+	)}
+
+happyReduce_379 = happySpecReduce_2  128# happyReduction_379
+happyReduction_379 happy_x_2
+	happy_x_1
+	 =  happyIn134
+		 ([]
+	)
+
+happyReduce_380 = happySpecReduce_1  128# happyReduction_380
+happyReduction_380 happy_x_1
+	 =  case happyOut133 happy_x_1 of { happy_var_1 -> 
+	happyIn134
+		 (happy_var_1
+	)}
+
+happyReduce_381 = happySpecReduce_3  129# happyReduction_381
+happyReduction_381 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut135 happy_x_1 of { happy_var_1 -> 
+	case happyOut76 happy_x_3 of { happy_var_3 -> 
+	happyIn135
+		 (reverse happy_var_3 ++ happy_var_1
+	)}}
+
+happyReduce_382 = happySpecReduce_1  129# happyReduction_382
+happyReduction_382 happy_x_1
+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
+	happyIn135
+		 (reverse happy_var_1
+	)}
+
+happyNewToken action sts stk
+	= lexer(\tk -> 
+	let cont i = happyDoAction i tk action sts stk in
+	case tk of {
+	TokEOF -> happyDoAction 80# tk action sts stk;
+	TokKeyword KwLet happy_dollar_dollar -> cont 1#;
+	TokKeyword KwIn happy_dollar_dollar -> cont 2#;
+	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;
+	TokKeyword KwWith happy_dollar_dollar -> cont 4#;
+	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;
+	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;
+	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;
+	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;
+	TokKeyword KwImport happy_dollar_dollar -> cont 9#;
+	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;
+	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;
+	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;
+	TokKeyword KwTo happy_dollar_dollar -> cont 13#;
+	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;
+	TokKeyword KwModule happy_dollar_dollar -> cont 15#;
+	TokKeyword KwData happy_dollar_dollar -> cont 16#;
+	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;
+	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;
+	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;
+	TokKeyword KwInductive happy_dollar_dollar -> cont 20#;
+	TokKeyword KwCoInductive happy_dollar_dollar -> cont 21#;
+	TokKeyword KwField happy_dollar_dollar -> cont 22#;
+	TokKeyword KwInfix happy_dollar_dollar -> cont 23#;
+	TokKeyword KwInfixL happy_dollar_dollar -> cont 24#;
+	TokKeyword KwInfixR happy_dollar_dollar -> cont 25#;
+	TokKeyword KwMutual happy_dollar_dollar -> cont 26#;
+	TokKeyword KwAbstract happy_dollar_dollar -> cont 27#;
+	TokKeyword KwPrivate happy_dollar_dollar -> cont 28#;
+	TokKeyword KwProp happy_dollar_dollar -> cont 29#;
+	TokKeyword KwSet happy_dollar_dollar -> cont 30#;
+	TokKeyword KwForall happy_dollar_dollar -> cont 31#;
+	TokKeyword KwSyntax happy_dollar_dollar -> cont 32#;
+	TokKeyword KwPatternSyn happy_dollar_dollar -> cont 33#;
+	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 34#;
+	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 35#;
+	TokKeyword KwIMPORT happy_dollar_dollar -> cont 36#;
+	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 37#;
+	TokKeyword KwETA happy_dollar_dollar -> cont 38#;
+	TokKeyword KwNO_TERMINATION_CHECK happy_dollar_dollar -> cont 39#;
+	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 40#;
+	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 41#;
+	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 42#;
+	TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 43#;
+	TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 44#;
+	TokKeyword KwSTATIC happy_dollar_dollar -> cont 45#;
+	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 46#;
+	TokKeyword KwQuote happy_dollar_dollar -> cont 47#;
+	TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 48#;
+	TokKeyword KwUnquote happy_dollar_dollar -> cont 49#;
+	TokSetN happy_dollar_dollar -> cont 50#;
+	TokTeX happy_dollar_dollar -> cont 51#;
+	TokComment happy_dollar_dollar -> cont 52#;
+	TokSymbol SymEllipsis happy_dollar_dollar -> cont 53#;
+	TokSymbol SymDotDot happy_dollar_dollar -> cont 54#;
+	TokSymbol SymDot happy_dollar_dollar -> cont 55#;
+	TokSymbol SymSemi happy_dollar_dollar -> cont 56#;
+	TokSymbol SymColon happy_dollar_dollar -> cont 57#;
+	TokSymbol SymEqual happy_dollar_dollar -> cont 58#;
+	TokSymbol SymUnderscore happy_dollar_dollar -> cont 59#;
+	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 60#;
+	TokSymbol SymArrow happy_dollar_dollar -> cont 61#;
+	TokSymbol SymLambda happy_dollar_dollar -> cont 62#;
+	TokSymbol SymAs happy_dollar_dollar -> cont 63#;
+	TokSymbol SymBar happy_dollar_dollar -> cont 64#;
+	TokSymbol SymOpenParen happy_dollar_dollar -> cont 65#;
+	TokSymbol SymCloseParen happy_dollar_dollar -> cont 66#;
+	TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 67#;
+	TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 68#;
+	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 69#;
+	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 70#;
+	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 71#;
+	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 72#;
+	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 73#;
+	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 74#;
+	TokSymbol SymClosePragma happy_dollar_dollar -> cont 75#;
+	TokId happy_dollar_dollar -> cont 76#;
+	TokQId happy_dollar_dollar -> cont 77#;
+	TokString happy_dollar_dollar -> cont 78#;
+	TokLiteral happy_dollar_dollar -> cont 79#;
+	_ -> happyError' tk
+	})
+
+happyError_ 80# tk = happyError' tk
+happyError_ _ tk = happyError' tk
+
+happyThen :: () => Parser a -> (a -> Parser b) -> Parser b
+happyThen = (>>=)
+happyReturn :: () => a -> Parser a
+happyReturn = (return)
+happyThen1 = happyThen
+happyReturn1 :: () => a -> Parser a
+happyReturn1 = happyReturn
+happyError' :: () => (Token) -> Parser a
+happyError' tk = (\token -> happyError) tk
+
+tokensParser = happySomeParser where
+  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))
+
+exprParser = happySomeParser where
+  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut29 x))
+
+moduleParser = happySomeParser where
+  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut9 x))
+
+happySeq = happyDontSeq
+
+
+{--------------------------------------------------------------------------
+    Parsers
+ --------------------------------------------------------------------------}
+
+-- | Parse the token stream. Used by the TeX compiler.
+tokensParser :: Parser [Token]
+
+-- | Parse an expression. Could be used in interactions.
+exprParser :: Parser Expr
+
+-- | Parse a module.
+moduleParser :: Parser Module
+
+
+{--------------------------------------------------------------------------
+    Happy stuff
+ --------------------------------------------------------------------------}
+
+-- | Required by Happy.
+happyError :: Parser a
+happyError = parseError "Parse error"
+
+
+{--------------------------------------------------------------------------
+    Utility functions
+ --------------------------------------------------------------------------}
+
+-- | Create a name from a string.
+
+mkName :: (Interval, String) -> Parser Name
+mkName (i, s) = do
+    let xs = parts s
+    mapM_ isValidId xs
+    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"
+    return $ Name (getRange i) xs
+    where
+        parts :: String -> [NamePart]
+        parts ""        = []
+        parts ('_' : s) = Hole : parts s
+        parts s         = Id x : parts s'
+          where (x, s') = break (== '_') s
+
+	isValidId Hole   = return ()
+	isValidId (Id x) = case parse defaultParseFlags [0] (lexer return) x of
+	    ParseOk _ (TokId _) -> return ()
+	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"
+
+	-- we know that there are no two Ids in a row
+	alternating (Hole : Hole : _) = False
+	alternating (_ : xs)	      = alternating xs
+	alternating []		      = True
+
+-- | Create a qualified name from a list of strings
+mkQName :: [(Interval, String)] -> Parser QName
+mkQName ss = do
+    xs <- mapM mkName ss
+    return $ foldr Qual (QName $ last xs) (init xs)
+
+-- | Match a particular name.
+isName :: String -> (Interval, String) -> Parser ()
+isName s (_,s')
+    | s == s'	= return ()
+    | otherwise	= fail $ "expected " ++ s ++ ", found " ++ s'
+
+-- | Build a forall pi (forall x y z -> ...)
+forallPi :: [LamBinding] -> Expr -> Expr
+forallPi bs e = Pi (map addType bs) e
+
+-- | Converts lambda bindings to typed bindings.
+addType :: LamBinding -> TypedBindings
+addType (DomainFull b)	 = b
+addType (DomainFree h rel x) = TypedBindings r $ Arg h rel $ TBind r [x] $ Underscore r Nothing
+  where r = getRange x
+
+-- | Check that an import directive doesn't contain repeated names
+verifyImportDirective :: ImportDirective -> Parser ImportDirective
+verifyImportDirective i =
+    case filter ((>1) . length)
+	 $ group
+	 $ sort xs
+    of
+	[]  -> return i
+	yss -> let Just pos = rStart $ getRange $ head $ concat yss in
+               parseErrorAt pos $
+		"repeated name" ++ s ++ " in import directive: " ++
+		concat (intersperse ", " $ map (show . head) yss)
+	    where
+		s = case yss of
+			[_] -> ""
+			_   -> "s"
+    where
+	xs = names (usingOrHiding i) ++ map renFrom (renaming i)
+	names (Using xs)    = xs
+	names (Hiding xs)   = xs
+
+-- | Breaks up a string into substrings. Returns every maximal
+-- subsequence of zero or more characters distinct from @'.'@.
+--
+-- > splitOnDots ""         == [""]
+-- > splitOnDots "foo.bar"  == ["foo", "bar"]
+-- > splitOnDots ".foo.bar" == ["", "foo", "bar"]
+-- > splitOnDots "foo.bar." == ["foo", "bar", ""]
+-- > splitOnDots "foo..bar" == ["foo", "", "bar"]
+splitOnDots :: String -> [String]
+splitOnDots ""        = [""]
+splitOnDots ('.' : s) = [] : splitOnDots s
+splitOnDots (c   : s) = case splitOnDots s of
+  p : ps -> (c : p) : ps
+
+prop_splitOnDots = and
+  [ splitOnDots ""         == [""]
+  , splitOnDots "foo.bar"  == ["foo", "bar"]
+  , splitOnDots ".foo.bar" == ["", "foo", "bar"]
+  , splitOnDots "foo.bar." == ["foo", "bar", ""]
+  , splitOnDots "foo..bar" == ["foo", "", "bar"]
+  ]
+
+-- | Returns 'True' iff the name is a valid Haskell (hierarchical)
+-- module name.
+validHaskellModuleName :: String -> Bool
+validHaskellModuleName = all ok . splitOnDots
+  where
+  -- Checks if a dot-less module name is well-formed.
+  ok :: String -> Bool
+  ok []      = False
+  ok (c : s) =
+    isUpper c &&
+    all (\c -> isLower c || c == '_' ||
+               isUpper c ||
+               generalCategory c == DecimalNumber ||
+               c == '\'')
+        s
+
+{--------------------------------------------------------------------------
+    Patterns
+ --------------------------------------------------------------------------}
+
+-- | Turn an expression into a left hand side.
+exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)
+exprToLHS e = case e of
+  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es
+  _		 -> LHS <$> exprToPattern e <*> return []
+
+-- | Turn an expression into a pattern. Fails if the expression is not a
+--   valid pattern.
+exprToPattern :: Expr -> Parser Pattern
+exprToPattern e =
+    case e of
+	Ident x			-> return $ IdentP x
+	App _ e1 e2		-> AppP <$> exprToPattern e1
+					<*> T.mapM (T.mapM exprToPattern) e2
+	Paren r e		-> ParenP r
+					<$> exprToPattern e
+	Underscore r _		-> return $ WildP r
+	Absurd r		-> return $ AbsurdP r
+	As r x e		-> AsP r x <$> exprToPattern e
+	Dot r (HiddenArg _ e)	-> return $ HiddenP r $ fmap (DotP r) e
+	Dot r e			-> return $ DotP r e
+	Lit l			-> return $ LitP l
+	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e
+	InstanceArg r e		-> InstanceP r <$> T.mapM exprToPattern e
+	RawApp r es		-> RawAppP r <$> mapM exprToPattern es
+	OpApp r x es		-> OpAppP r x <$> mapM opAppExprToPattern es
+	_			->
+          let Just pos = rStart $ getRange e in
+          parseErrorAt pos $ "Not a valid pattern: " ++ show e
+
+opAppExprToPattern :: OpApp Expr -> Parser Pattern
+opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "syntax binding lambda cannot appear in a pattern"
+opAppExprToPattern (Ordinary e) = exprToPattern e
+
+-- | Turn an expression into a name. Fails if the expression is not a
+--   valid identifier.
+exprToName :: Expr -> Parser Name
+exprToName (Ident (QName x)) = return x
+exprToName e =
+  let Just pos = rStart $ getRange e in
+  parseErrorAt pos $ "Not a valid identifier: " ++ show e
+
+parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."
+
+{- RHS or type signature -}
+
+data RHSOrTypeSigs = JustRHS RHS
+                   | TypeSigsRHS Expr
+
+namesOfPattern :: Pattern -> Maybe [(Relevance, Name)]
+namesOfPattern (IdentP (QName i))         = Just [(Relevant, i)]
+namesOfPattern (DotP _ (Ident (QName i))) = Just [(Irrelevant, i)]
+namesOfPattern (RawAppP _ ps)             = fmap concat $ mapM namesOfPattern ps
+namesOfPattern _                          = Nothing
+
+funClauseOrTypeSigs :: LHS -> RHSOrTypeSigs -> WhereClause -> Parser [Declaration]
+funClauseOrTypeSigs lhs (JustRHS   rhs) wh = return [FunClause lhs rhs wh]
+funClauseOrTypeSigs lhs (TypeSigsRHS e) wh
+  | NoWhere <- wh,
+    LHS p [] [] [] <- lhs,
+    Just names <- namesOfPattern p = return $ map (\(x,y) -> TypeSig x y e) names
+  | otherwise                      = parseError "Illegal function clause or type signature"
+
+{--------------------------------------------------------------------------
+    Tests
+ --------------------------------------------------------------------------}
+
+-- | Test suite.
+tests :: IO Bool
+tests = runTests "Agda.Syntax.Parser.Parser"
+  [ quickCheck' prop_splitOnDots
+  ]
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command line>" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
 
diff --git a/doc/release-notes/2-3-2.txt b/doc/release-notes/2-3-2.txt
new file mode 100644
--- /dev/null
+++ b/doc/release-notes/2-3-2.txt
@@ -0,0 +1,699 @@
+------------------------------------------------------------------------
+-- Release notes for Agda 2 version 2.3.2
+------------------------------------------------------------------------
+
+Important changes since 2.3.0:
+
+Installation
+============
+
+* The Agda-executable package has been removed.
+
+  The executable is now provided as part of the Agda package.
+
+* The Emacs mode no longer depends on haskell-mode or GHCi.
+
+* Compilation of Emacs mode Lisp files.
+
+  You can now compile the Emacs mode Lisp files by running "agda-mode
+  compile". This command is run by "make install".
+
+  Compilation can, in some cases, give a noticeable speedup.
+
+  WARNING: If you reinstall the Agda mode without recompiling the
+  Emacs Lisp files, then Emacs may continue using the old, compiled
+  files.
+
+Pragmas and Options
+===================
+
+* The --without-K check now reconstructs constructor parameters.
+
+  New specification of --without-K:
+
+  If the flag is activated, then Agda only accepts certain
+  case-splits. If the type of the variable to be split is D pars ixs,
+  where D is a data (or record) type, pars stands for the parameters,
+  and ixs the indices, then the following requirements must be
+  satisfied:
+
+  * The indices ixs must be applications of constructors (or literals)
+    to distinct variables. Constructors are usually not applied to
+    parameters, but for the purposes of this check constructor
+    parameters are treated as other arguments.
+
+  * These distinct variables must not be free in pars.
+
+* Irrelevant arguments are printed as _ by default now.  To turn on
+  printing of irrelevant arguments, use option
+
+    --show-irrelevant
+
+* New: Pragma NO_TERMINATION_CHECK to switch off termination checker
+  for individual function definitions and mutual blocks.
+
+  The pragma must precede a function definition or a mutual block.
+  Examples (see test/succeed/NoTerminationCheck.agda):
+
+  1. Skipping a single definition: before type signature.
+
+       {-# NO_TERMINATION_CHECK #-}
+       a : A
+       a = a
+
+  2. Skipping a single definition: before first clause.
+
+       b : A
+       {-# NO_TERMINATION_CHECK #-}
+       b = b
+
+  3. Skipping an old-style mutual block: Before 'mutual' keyword.
+
+       {-# NO_TERMINATION_CHECK #-}
+       mutual
+         c : A
+         c = d
+
+         d : A
+         d = c
+
+  4. Skipping a new-style mutual block: Anywhere before a type
+     signature or first function clause in the block
+
+       i : A
+       j : A
+
+       i = j
+       {-# NO_TERMINATION_CHECK #-}
+       j = i
+
+  The pragma cannot be used in --safe mode.
+
+Language
+========
+
+* Let binding record patterns
+
+    record _×_ (A B : Set) : Set where
+      constructor _,_
+      field
+        fst : A
+        snd : B
+    open _×_
+
+    let (x , (y , z)) = t
+    in  u
+
+  will now be interpreted as
+
+    let x = fst t
+        y = fst (snd t)
+        z = snd (snd t)
+    in  u
+
+  Note that the type of t needs to be inferable.  If you need to provide
+  a type signature, you can write the following:
+
+    let a : ...
+        a = t
+        (x , (y , z)) = a
+    in  u
+
+* Pattern synonyms
+
+  A pattern synonym is a declaration that can be used on the left hand
+  side (when pattern matching) as well as the right hand side (in
+  expressions). For example:
+
+  pattern z    = zero
+  pattern ss x = suc (suc x)
+
+  f : ℕ -> ℕ
+  f z       = z
+  f (suc z) = ss z
+  f (ss n)  = n
+
+  Pattern synonyms are implemented by substitution on the abstract
+  syntax, so definitions are scope-checked but not type-checked. They
+  are particularly useful for universe constructions.
+
+* Qualified mixfix operators
+
+  It is now possible to use a qualified mixfix operator by qualifying the first
+  part of the name. For instance
+
+    import Data.Nat as Nat
+    import Data.Bool as Bool
+
+    two = Bool.if true then 1 Nat.+ 1 else 0
+
+* Sections [Issue 735].  Agda now parses anonymous modules as sections:
+
+    module _ {a} (A : Set a) where
+
+      data List : Set a where
+        []  : List
+        _∷_ : (x : A) (xs : List) → List
+
+    module _ {a} {A : Set a} where
+
+      _++_ : List A → List A → List A
+      []       ++ ys = ys
+      (x ∷ xs) ++ ys = x ∷ (xs ++ ys)
+
+    test : List Nat
+    test = (5 ∷ []) ++ (3 ∷ [])
+
+  In general, now the syntax
+
+    module _ parameters where
+      declarations
+
+  is accepted and has the same effect as
+
+    private
+      module M parameters where
+        declarations
+    open M public
+
+  for a fresh name M.
+
+* Instantiating a module in an open import statement [Issue 481].  Now accepted:
+
+    open import Path.Module args [using/hiding/renaming (...)]
+
+  This only brings the imported identifiers from Path.Module into scope,
+  not the module itself!  Consequently, the following is pointless, and raises
+  an error:
+
+    import Path.Module args [using/hiding/renaming (...)]
+
+  You can give a private name M to the instantiated module via
+
+    import Path.Module args as M [using/hiding/renaming (...)]
+    open import Path.Module args as M [using/hiding/renaming (...)]
+
+  Try to avoid 'as' as part of the arguments.  'as' is not a keyword;
+  the following can be legal, although slightly obfuscated Agda code:
+
+    open import as as as as as as
+
+* Implicit module parameters can be given by name. E.g.
+
+    open M {namedArg = bla}
+
+  This feature has been introduced in Agda 2.3.0 already.
+
+* Multiple type signatures sharing a same type can now be written as a single
+  type signature.
+
+    one two : ℕ
+    one = suc zero
+    two = suc one
+
+Goal and error display
+======================
+
+* Meta-variables that were introduced by hidden argument `arg' are now
+  printed as _arg_number instead of just _number.  [Issue 526]
+
+* Agda expands identifiers in anonymous modules when printing.
+  Should make some goals nicer to read. [Issue 721]
+
+* When a module identifier is ambiguous, Agda tells you if one
+  of them is a data type module.  [Issues 318, 705]
+
+Type checking
+=============
+
+* Improved coverage checker.  The coverage checker splits on
+  arguments that have constructor or literal pattern, committing
+  to the left-most split that makes progress.
+  Consider the lookup function for vectors:
+
+    data Fin : Nat → Set where
+      zero : {n : Nat} → Fin (suc n)
+      suc  : {n : Nat} → Fin n → Fin (suc n)
+
+    data Vec (A : Set) : Nat → Set where
+      []  : Vec A zero
+      _∷_ : {n : Nat} → A → Vec A n → Vec A (suc n)
+
+    _!!_ : {A : Set}{n : Nat} → Vec A n → Fin n → A
+    (x ∷ xs) !! zero  = x
+    (x ∷ xs) !! suc i = xs !! i
+
+  In Agda up to 2.3.0, this definition is rejected unless we add
+  an absurd clause
+
+    [] !! ()
+
+  This is because the coverage checker committed on splitting
+  on the vector argument, even though this inevitably lead to
+  failed coverage, because a case for the empty vector [] is missing.
+
+  The improvement to the coverage checker consists on committing
+  only on splits that have a chance of covering, since all possible
+  constructor patterns are present.  Thus, Agda will now split
+  first on the Fin argument, since cases for both zero and suc are
+  present.  Then, it can split on the Vec argument, since the
+  empty vector is already ruled out by instantiating n to a suc _.
+
+* Instance arguments resolution will now consider candidates which
+  still expect hidden arguments. For example:
+
+    record Eq (A : Set) : Set where
+      field eq : A → A → Bool
+
+    open Eq {{...}}
+
+    eqFin : {n : ℕ} → Eq (Fin n)
+    eqFin = record { eq = primEqFin }
+
+    testFin : Bool
+    testFin = eq fin1 fin2
+
+  The type-checker will now resolve the instance argument of the eq
+  function to eqFin {_}. This is only done for hidden arguments, not
+  instance arguments, so that the instance search stays non-recursive.
+
+* Constraint solving: Upgraded Miller patterns to record patterns. [Issue 456]
+
+  Agda now solves meta-variables that are applied to record patterns.
+  A typical (but here, artificial) case is:
+
+    record Sigma (A : Set)(B : A -> Set) : Set where
+      constructor _,_
+      field
+        fst : A
+        snd : B fst
+
+    test : (A : Set)(B : A -> Set) ->
+      let X : Sigma A B -> Sigma A B
+          X = _
+      in  (x : A)(y : B x) -> X (x , y) ≡ (x , y)
+    test A B x y = refl
+
+  This yields a constraint of the form
+
+    _X A B (x , y) := t[x,y]
+
+  (with t[x,y] = (x, y)) which is not a Miller pattern.
+  However, Agda now solves this as
+
+    _X A B z := t[fst z,snd z].
+
+* Changed: solving recursive constraints.  [Issue 585]
+
+  Until 2.3.0, Agda sometimes inferred values that did not pass the
+  termination checker later, or would even make Agda loop.  To prevent this,
+  the occurs check now also looks into the definitions of the current mutual
+  block, to avoid constructing recursive solutions.  As a consequence, also
+  terminating recursive solutions are no longer found automatically.
+
+  This effects a programming pattern where the recursively computed
+  type of a recursive function is left to Agda to solve.
+
+    mutual
+
+      T : D -> Set
+      T pattern1 = _
+      T pattern2 = _
+
+      f : (d : D) -> T d
+      f pattern1 = rhs1
+      f pattern2 = rhs2
+
+  This might no longer work from now on.
+  See examples test/fail/Issue585*.agda
+
+* Less eager introduction of implicit parameters.  [Issue 679]
+
+  Until Agda 2.3.0, trailing hidden parameters were introduced eagerly
+  on the left hand side of a definition.  For instance, one could not
+  write
+
+    test : {A : Set} -> Set
+    test = \ {A} -> A
+
+  because internally, the hidden argument {A : Set} was added to the
+  left-hand side, yielding
+
+    test {_} = \ {A} -> A
+
+  which raised a type error.  Now, Agda only introduces the trailing
+  implicit parameters it has to, in order to maintain uniform function
+  arity.  For instance, in
+
+    test : Bool -> {A B C : Set} -> Set
+    test true {A}      = A
+    test false {B = B} = B
+
+  Agda will introduce parameters A and B in all clauses, but not C,
+  resulting in
+
+    test : Bool -> {A B C : Set} -> Set
+    test true  {A} {_}     = A
+    test false {_} {B = B} = B
+
+  Note that for checking where-clauses, still all hidden trailing
+  parameters are in scope.  For instance:
+
+    id : {i : Level}{A : Set i} -> A -> A
+    id = myId
+      where myId : forall {A} -> A -> A
+            myId x = x
+
+  To be able to fill in the meta variable _1 in
+
+    myId : {A : Set _1} -> A -> A
+
+  the hidden parameter {i : Level} needs to be in scope.
+
+  As a result of this more lazy introduction of implicit parameters,
+  the following code now passes.
+
+    data Unit : Set where
+      unit : Unit
+
+    T : Unit → Set
+    T unit = {u : Unit} → Unit
+
+    test : (u : Unit) → T u
+    test unit with unit
+    ... | _ = λ {v} → v
+
+  Before, Agda would eagerly introduce the hidden parameter {v} as
+  unnamed left-hand side parameter, leaving no way to refer to it.
+
+  The related issue 655 has also been addressed.  It is now possible
+  to make `synonym' definitions
+
+    name = expression
+
+  even when the type of expression begins with a hidden quantifier.
+  Simple example:
+
+    id2 = id
+
+  That resulted in unsolved metas until 2.3.0.
+
+* Agda detects unused arguments and ignores them during equality
+  checking. [Issue 691, solves also issue 44.]
+
+  Agda's polarity checker now assigns 'Nonvariant' to arguments
+  that are not actually used (except for absurd matches).  If
+  f's first argument is Nonvariant, then f x is definitionally equal
+  to f y regardless of x and y.  It is similar to irrelevance, but
+  does not require user annotation.
+
+  For instance, unused module parameters do no longer get in the way:
+
+    module M (x : Bool) where
+
+      not : Bool → Bool
+      not true  = false
+      not false = true
+
+    open M true
+    open M false renaming (not to not′)
+
+    test : (y : Bool) → not y ≡ not′ y
+    test y = refl
+
+  Matching against record or absurd patterns does not count as `use',
+  so we get some form of proof irrelevance:
+
+    data ⊥ : Set where
+    record ⊤ : Set where
+      constructor trivial
+
+    data Bool : Set where
+      true false : Bool
+
+    True : Bool → Set
+    True true  = ⊤
+    True false = ⊥
+
+    fun : (b : Bool) → True b → Bool
+    fun true  trivial = true
+    fun false ()
+
+    test : (b : Bool) → (x y : True b) → fun b x ≡ fun b y
+    test b x y = refl
+
+  More examples in test/succeed/NonvariantPolarity.agda.
+
+  Phantom arguments:  Parameters of record and data types are considered
+  `used' even if they are not actually used.  Consider:
+
+    False : Nat → Set
+    False zero    = ⊥
+    False (suc n) = False n
+
+    module Invariant where
+      record Bla (n : Nat)(p : False n) : Set where
+
+    module Nonvariant where
+      Bla : (n : Nat) → False n → Set
+      Bla n p = ⊤
+
+  Even though record `Bla' does not use its parameters n and p, they
+  are considered as used, allowing "phantom type" techniques.
+
+  In contrast, the arguments of function `Bla' are recognized as unused.
+  The following code type-checks if we open Invariant but leaves unsolved
+  metas if we open Nonvariant.
+
+    drop-suc : {n : Nat}{p : False n} → Bla (suc n) p → Bla n p
+    drop-suc _ = _
+
+    bla : (n : Nat) → {p : False n} → Bla n p → ⊥
+    bla zero {()} b
+    bla (suc n) b = bla n (drop-suc b)
+
+  If `Bla' is considered invariant, the hidden argument in the recursive
+  call can be inferred to be `p'.  If it is considered non-variant, then
+  `Bla n X = Bla n p' does not entail `X = p' and the hidden argument
+  remains unsolved.  Since `bla' does not actually use its hidden argument,
+  its value is not important and it could be searched for.
+  Unfortunately, polarity analysis of `bla' happens only after type
+  checking, thus, the information that `bla' is non-variant in `p' is
+  not available yet when meta-variables are solved.
+  (See test/fail/BrokenInferenceDueToNonvariantPolarity.agda)
+
+* Agda now expands simple definitions (one clause, terminating)
+  to check whether a function is constructor headed. [Issue 747]
+  For instance, the following now also works:
+
+    MyPair : Set -> Set -> Set
+    MyPair A B = Pair A B
+
+    Vec : Set -> Nat -> Set
+    Vec A zero    = Unit
+    Vec A (suc n) = MyPair A (Vec A n)
+
+  Here, Unit and Pair are data or record types.
+
+Compiler backends
+=================
+
+* -Werror is now overridable.
+
+  To enable compilation of Haskell modules containing warnings, the
+  -Werror flag for the MAlonzo backend has been made overridable. If,
+  for example, --ghc-flag=-Wwarn is passed when compiling, one can get
+  away with things like:
+
+    data PartialBool : Set where
+      true : PartialBool
+
+    {-# COMPILED_DATA PartialBool Bool True #-}
+
+  The default behavior remains as it used to be and rejects the above
+  program.
+
+Tools
+=====
+
+Emacs mode
+----------
+
+* Asynchronous Emacs mode.
+
+  One can now use Emacs while a buffer is type-checked. If the buffer
+  is edited while the type-checker runs, then syntax highlighting will
+  not be updated when type-checking is complete.
+
+* Interactive syntax highlighting.
+
+  The syntax highlighting is updated while a buffer is type-checked:
+
+  • At first the buffer is highlighted in a somewhat crude way
+    (without go-to-definition information for overloaded
+    constructors).
+
+  • If the highlighting level is "interactive", then the piece of code
+    that is currently being type-checked is highlighted as such. (The
+    default is "non-interactive".)
+
+  • When a mutual block has been type-checked it is highlighted
+    properly (this highlighting includes warnings for potential
+    non-termination).
+
+  The highlighting level can be controlled via the new configuration
+  variable agda2-highlight-level.
+
+* Multiple case-splits can now be performed in one go.
+
+  Consider the following example:
+
+    _==_ : Bool → Bool → Bool
+    b₁ == b₂ = {!!}
+
+  If you split on "b₁ b₂", then you get the following code:
+
+    _==_ : Bool → Bool → Bool
+    true == true = {!!}
+    true == false = {!!}
+    false == true = {!!}
+    false == false = {!!}
+
+  The order of the variables matters. Consider the following code:
+
+    lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A
+    lookup xs i = {!!}
+
+  If you split on "xs i", then you get the following code:
+
+    lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A
+    lookup [] ()
+    lookup (x ∷ xs) zero = {!!}
+    lookup (x ∷ xs) (suc i) = {!!}
+
+  However, if you split on "i xs", then you get the following code
+  instead:
+
+    lookup : ∀ {a n} {A : Set a} → Vec A n → Fin n → A
+    lookup (x ∷ xs) zero = ?
+    lookup (x ∷ xs) (suc i) = ?
+
+  This code is rejected by Agda 2.3.0, but accepted by 2.3.2 thanks
+  to improved coverage checking (see above).
+
+* The Emacs mode now presents information about which module is
+  currently being type-checked.
+
+* New global menu entry: Information about the character at point.
+
+  If this entry is selected, then information about the character at
+  point is displayed, including (in many cases) information about how
+  to type the character.
+
+* Commenting/uncommenting the rest of the buffer.
+
+  One can now comment or uncomment the rest of the buffer by typing
+  C-c C-x M-; or by selecting the menu entry "Comment/uncomment the
+  rest of the buffer".
+
+* The Emacs mode now uses the Agda executable instead of GHCi.
+
+  The *ghci* buffer has been renamed to *agda2*.
+
+  A new configuration variable has been introduced:
+  agda2-program-name, the name of the Agda executable (by default
+  agda).
+
+  The variable agda2-ghci-options has been replaced by
+  agda2-program-args: extra arguments given to the Agda executable (by
+  default none).
+
+  If you want to limit Agda's memory consumption you can add some
+  arguments to agda2-program-args, for instance +RTS -M1.5G -RTS.
+
+* The Emacs mode no longer depends on haskell-mode.
+
+  Users who have customised certain haskell-mode variables (such as
+  haskell-ghci-program-args) may want to update their configuration.
+
+LaTeX-backend
+-------------
+
+An experimental LaTeX-backend which does precise highlighting a la the
+HTML-backend and code alignment a la lhs2TeX has been added.
+
+Here is a sample input literate Agda file:
+
+  \documentclass{article}
+
+  \usepackage{agda}
+
+  \begin{document}
+
+  The following module declaration will be hidden in the output.
+
+  \AgdaHide{
+  \begin{code}
+  module M where
+  \end{code}
+  }
+
+  Two or more spaces can be used to make the backend align stuff.
+
+  \begin{code}
+  data ℕ : Set where
+    zero  : ℕ
+    suc   : ℕ → ℕ
+
+  _+_ : ℕ → ℕ → ℕ
+  zero   + n = n
+  suc m  + n = suc (m + n)
+  \end{code}
+
+  \end{document}
+
+To produce an output PDF issue the following commands:
+
+  agda --latex -i . <file>.lagda
+  pdflatex latex/<file>.tex
+
+Only the top-most module is processed, like with lhs2tex and unlike with
+the HTML-backend. If you want to process imported modules you have to
+call agda --latex manually on each of those modules.
+
+There are still issues related to formatting, see the bug tracker for
+more information:
+
+  https://code.google.com/p/agda/issues/detail?id=697
+
+The default agda.sty might therefore change in backwards-incompatible
+ways, as work proceeds in trying to resolve those problems.
+
+
+Implemented features:
+
+  * Two or more spaces can be used to force alignment of things, like
+    with lhs2tex. See example above.
+
+  * The highlighting information produced by the type checker is used to
+    generate the output. For example, the data declaration in the example
+    above, produces:
+
+      \AgdaKeyword{data} \AgdaDatatype{ℕ} \AgdaSymbol{:}
+          \AgdaPrimitiveType{Set} \AgdaKeyword{where}
+
+    These latex commands are defined in agda.sty (which is imported by
+    \usepackage{agda}) and cause the highlighting.
+
+  * The latex-backend checks if agda.sty is found by the latex
+    environment, if it isn't a default agda.sty is copied from Agda's
+    data-dir into the working directory (and thus made available to the
+    latex environment).
+
+    If the default agda.sty isn't satisfactory (colors, fonts, spacing,
+    etc) then the user can modify it and make put it somewhere where the
+    latex environment can find it. Hopefully most aspects should be
+    modifiable via agda.sty rather than having to tweak the
+    implementation.
+
+  * --latex-dir can be used to change the default output directory.
diff --git a/src/agda-mode/Main.hs b/src/agda-mode/Main.hs
--- a/src/agda-mode/Main.hs
+++ b/src/agda-mode/Main.hs
@@ -1,11 +1,10 @@
-{-# LANGUAGE CPP #-}
-
 -- | A program which either tries to add setup code for Agda's Emacs
 -- mode to the users .emacs file, or provides information to Emacs
 -- about where the Emacs mode is installed.
 
 module Main (main) where
 
+import Control.Applicative
 import Control.Exception
 import Control.Monad
 import Data.Char
@@ -17,9 +16,6 @@
 import System.Exit
 import System.FilePath
 import System.IO
-#if !(MIN_VERSION_base(4,2,0))
-import qualified System.IO.UTF8 as UTF8
-#endif
 import System.Process
 
 import Paths_Agda (getDataDir, version)
@@ -37,37 +33,42 @@
              setupDotEmacs (Files { thisProgram = prog
                                   , dotEmacs    = dotEmacs
                                   })
+          | arg == compileFlag ->
+             compileElispFiles
     _  -> do inform usage
              exitFailure
 
 -- Command line options.
 
-setupFlag  = "setup"
-locateFlag = "locate"
+setupFlag   = "setup"
+locateFlag  = "locate"
+compileFlag = "compile"
 
 -- | Usage information.
 
 usage :: String
 usage = unlines
   [ "This program, which is part of Agda version " ++ ver ++ ", can be run"
-  , "in two modes, depending on which option it is invoked with:"
+  , "in three modes, depending on which option it is invoked with:"
   , ""
   , setupFlag
   , ""
   , "  The program tries to add setup code for Agda's Emacs mode to the"
   , "  current user's .emacs file. It is assumed that the .emacs file"
-#if MIN_VERSION_base(4,2,0)
   , "  uses the character encoding specified by the locale."
-#else
-  , "  uses ASCII or some other character encoding which ASCII is"
-  , "  compatible with (like Latin-1 or UTF-8)."
-#endif
   , ""
   , locateFlag
   , ""
   , "  The path to the Emacs mode's main file is printed on standard"
   , "  output (using the UTF-8 character encoding and no trailing"
   , "  newline)."
+  , ""
+  , compileFlag
+  , ""
+  , "  The program tries to compile Agda's Emacs mode's source files."
+  , ""
+  , "  WARNING: If you reinstall the Agda mode without recompiling the Emacs"
+  , "  Lisp files, then Emacs may continue using the old, compiled files."
   ]
 
 -- | The current version of Agda.
@@ -86,12 +87,8 @@
 printEmacsModeFile = do
   dataDir <- getDataDir
   let path = dataDir </> "emacs-mode" </> "agda2.el"
-#if MIN_VERSION_base(4,2,0)
   hSetEncoding stdout utf8
   putStr path
-#else
-  UTF8.putStr path
-#endif
 
 ------------------------------------------------------------------------
 -- Setting up the .emacs file
@@ -191,6 +188,41 @@
   esc c | c `elem` ['\\', '"']   = '\\' : [c]
         | isAscii c && isPrint c = [c]
         | otherwise              = "\\x" ++ showHex (fromEnum c) "\\ "
+
+------------------------------------------------------------------------
+-- Compiling Emacs Lisp files
+
+-- | The Agda mode's Emacs Lisp files, given in the order in which
+-- they should be compiled.
+
+emacsLispFiles :: [FilePath]
+emacsLispFiles =
+  [ "agda2-abbrevs.el"
+  , "annotation.el"
+  , "agda2-queue.el"
+  , "eri.el"
+  , "agda2.el"
+  , "agda-input.el"
+  , "agda2-highlight.el"
+  , "agda2-mode.el"
+  ]
+
+-- | Tries to compile the Agda mode's Emacs Lisp files.
+
+compileElispFiles :: IO ()
+compileElispFiles = do
+  dataDir <- (</> "emacs-mode") <$> getDataDir
+  let elFiles = map (dataDir </>) emacsLispFiles
+  elFiles <- filterM doesFileExist elFiles
+  exit <- rawSystem "emacs" $
+                    [ "--no-init-file", "--no-site-file"
+                    , "--directory", dataDir
+                    , "--batch"
+                    , "--funcall", "batch-byte-compile"
+                    ] ++ elFiles
+  unless (exit == ExitSuccess) $ do
+    informLn "Unable to compile Emacs Lisp files."
+    exitFailure
 
 ------------------------------------------------------------------------
 -- Helper functions
diff --git a/src/data/Agda.css b/src/data/Agda.css
--- a/src/data/Agda.css
+++ b/src/data/Agda.css
@@ -22,9 +22,11 @@
 /* OtherAspects. */
 .DottedPattern      {}
 .UnsolvedMeta       { color: black; background: yellow         }
+.UnsolvedConstraint { color: black; background: yellow         }
 .TerminationProblem { color: black; background: #FFA07A        }
 .IncompletePattern  { color: black; background: #F5DEB3        }
 .Error              { color: red;   text-decoration: underline }
+.TypeChecks         { color: black; background: #ADD8E6        }
 
 /* Standard attributes. */
 a { text-decoration: none }
diff --git a/src/data/EpicInclude/AgdaPrelude.e b/src/data/EpicInclude/AgdaPrelude.e
--- a/src/data/EpicInclude/AgdaPrelude.e
+++ b/src/data/EpicInclude/AgdaPrelude.e
@@ -29,59 +29,38 @@
 
 -- data String = Con 0 | Con 1 (Char*) String
 
-freadStr (stream : Ptr) -> Data =
+freadStr (stream : Ptr) -> String =
     let isEof : Bool = foreign Int "feof" (stream : Ptr)
      in if isEof then Con 0 ()
                  else let str : String = %effect(foreign String "freadStrChunk" (stream : Ptr))
-                       in Con 1 ( str , freadStr (stream))
+                       in primStringAppend( str , freadStr (stream))
 
-readStr (u : Unit) -> Data =
+readStr (u : Unit) -> String =
     let isEof : Bool = foreign Int "eofstdin" ()
      in if isEof then Con 0 ()
                  else let str : String = %effect(foreign String "readStrChunk" ())
-                       in Con 1 ( str , readStr (u))
+                       in primStringAppend ( str , readStr (u))
 
-primStringAppend (xs : Data, ys : Data) -> Data = case xs of
-  { Con 0 ()                        -> ys
-  | Con 1 (x : String, rest : Data) -> Con 1 (x, primStringAppend (rest, ys))
-  }
+primStringAppend (xs : String, ys : String) -> String = 
+    foreign String "append" (xs : String, ys : String)
 
-length (xs : Data) -> Int = case xs of
-  { Con 0 () -> 0
-  | Con 1 (x : String, rest : Data) -> strlen(x) + length(rest)
-  }
 
-charAt (xs : Data, i : Int) -> Int = case xs of
-  { Con 0 () -> error "index: out of bounds!"
-  | Con 1 (x : String, rest : Data) -> 
-    let len : Int = strlen(x)
-     in (if i < len then foreign Int "strIndex" (x : String, i : Int)
-                    else charAt (rest, i - len))
-  }
-
-mkString (xs : Data) -> String = case xs of
-  { Con 0 () -> ""
-  | Con 1 (s : String , rest : Data) -> 
-    let rs : String = mkString (rest) in
-    {-let rsLen : Int = strlen (rs) in
-    if rsLen == 0 then s else-} foreign String "append" (s : String, rs : String)
-  }
+%inline length (xs : String) -> Int = strlen (xs)
 
-frString( xs : String) -> Data = Con 1 (xs , Con 0 ())
+charAt (xs : String, i : Int) -> Int = 
+    foreign Int "strIndex" (xs : String , i : Int)
 
-primStringEquality (xs : Data, ys : Data) -> Bool =
-    foreign Int "eqString" (mkString(xs) : String, mkString(ys) : String)
+primStringEquality (xs : String, ys : String) -> Bool =
+    foreign Int "eqString" (xs : String, ys : String)
 
-charToString (c : Int) -> Data = 
-    Con 1 (charToStr(c), Con 0 ())
-charToStr (c : Int) -> String = 
+charToString (c : Int) -> String  =
     foreign String "charToStr" (c : Int)
 
 strlen (s : String) -> Int = foreign Int "strlen" (s : String)
 
 -- TODO: toList/fromList could be made slightly more efficient.
 
-primStringToListS (xs : String) -> Data = %effect(
+primStringToList (xs : String) -> Data = %effect(
     let result : Data = primNil ()     in
     let i      : Int  = strlen (xs) - 1 in
     %while (i >= 0,
@@ -90,18 +69,17 @@
        unit) ;
     result)
 
-primStringToList (xs : Data) -> Data = case xs of
-  { Con 0 () -> primNil ()
-  | Con 1 (str : String, rest : Data) -> primListAppend(primStringToListS(str), primStringToList(rest))
-  }
 
 map (f : Any, l : Any) -> Any = case l of
   { Con 0 () -> Con 0 ()
   | Con 1 (x : Any, xs : Any) -> Con 1 (f (x), map (f, xs))
   }
 
-primStringFromList (l : Data) -> String = map (charToStr, l)
-
+primStringFromList (l : Data) -> String = 
+   case l of {
+      Con 0 () -> ""
+    | Con 1 (c : Char, cs : Data) -> strCons (c , primStringFromList(cs))
+   }
 
 strCons(i : Int , s : String) -> String =
    foreign String "strCons" (i : Int, s : String)
@@ -135,10 +113,10 @@
 printBig (x:BigInt) -> Unit =
    foreign Unit "printBig" (x:BigInt)
 
-bigToStr (x:BigInt) -> Data =
-    frString(foreign String "bigToStr" (x:BigInt))
+bigToStr (x:BigInt) -> String =
+    foreign String "bigToStr" (x:BigInt)
 
-strToBig (x : Data) -> Any = foreign BigInt "strToBig" (mkString(x) : String)
+strToBig (x : String) -> Any = foreign BigInt "strToBig" (x : String)
 
 -- strToBig (x:String) -> Any =
 --    foreign Any "strToBig" (x:String)
@@ -162,8 +140,8 @@
 
 
 
-primZero() -> Any = foreign BigInt "bigZero" ()
-primOne() -> Any  = foreign BigInt "bigOne" ()
+primZero() -> Any = 0L -- foreign BigInt "bigZero" ()
+primOne() -> Any  = 1L -- foreign BigInt "bigOne" ()
 
 primSuc (n : Any) -> Any = primNatPlus(n, primOne())
 
diff --git a/src/data/agda.sty b/src/data/agda.sty
new file mode 100644
--- /dev/null
+++ b/src/data/agda.sty
@@ -0,0 +1,152 @@
+% ----------------------------------------------------------------------
+% Some useful commands when doing highlightning of Agda code in LaTeX.
+% ----------------------------------------------------------------------
+
+\ProvidesPackage{agda}
+
+\usepackage{ifxetex, xcolor, polytable}
+
+% XeLaTeX
+\ifxetex
+    \usepackage{polyglossia}
+    \usepackage{fontspec}
+    \usepackage[]{unicode-math}
+
+% pdfLaTeX
+\else
+    \usepackage{ucs, amsfonts, amssymb}
+    \usepackage[safe]{tipa} % See page 12 of the tipa manual for what
+                            % safe does.
+
+    % FIX: This doesn't seem to help solve the pipe problem?
+    % http://tex.stackexchange.com/questions/1774/how-to-insert-pipe-symbol-in-latex
+    \usepackage[T1]{fontenc}
+    \usepackage[utf8x]{inputenc}
+
+    % FIX: Complete the list and send it upstream to the ucs package devs.
+    \DeclareUnicodeCharacter{9657}{$\triangleright$}
+    \DeclareUnicodeCharacter{8759}{::}
+    \DeclareUnicodeCharacter{8263}{$?\!?$}
+    \DeclareUnicodeCharacter{737} {$^l$}  % FIX: Ugly, apparently ^r is
+                                          % defined, I can't find the
+                                          % definition though.
+    \DeclareUnicodeCharacter{8718}{$\blacksquare$}
+    \DeclareUnicodeCharacter{8255}{$\_$} % FIX: Couldn't find \undertie.
+    \DeclareUnicodeCharacter{9667}{$\triangleleft$}
+    \DeclareUnicodeCharacter{10218}{$\langle\!\langle$}
+    \DeclareUnicodeCharacter{10219}{$\rangle\!\rangle$}
+\fi
+
+% ----------------------------------------------------------------------
+% Font styles.
+
+% Default font style.
+\newcommand{\AgdaFontStyle}[1]{\textsf{#1}}
+
+% String font style.
+\newcommand{\AgdaStringFontStyle}[1]{\texttt{#1}}
+
+% Comment font style.
+\newcommand{\AgdaCommentFontStyle}[1]{\texttt{#1}}
+
+% Bounded variables font style.
+\newcommand{\AgdaBoundFontStyle}[1]{\textit{#1}}
+
+% ----------------------------------------------------------------------
+% Colours.
+
+% Aspect colours.
+\definecolor{AgdaComment}      {HTML}{B22222}
+\definecolor{AgdaKeyword}      {HTML}{CD6600}
+\definecolor{AgdaString}       {HTML}{B22222}
+\definecolor{AgdaNumber}       {HTML}{A020F0}
+\definecolor{AgdaSymbol}       {HTML}{404040}
+\definecolor{AgdaPrimitiveType}{HTML}{0000CD}
+\definecolor{AgdaOperator}     {HTML}{000000}
+
+% NameKind colours.
+\definecolor{AgdaBound}                 {HTML}{000000}
+\definecolor{AgdaInductiveConstructor}  {HTML}{008B00}
+\definecolor{AgdaCoinductiveConstructor}{HTML}{8B7500}
+\definecolor{AgdaDatatype}              {HTML}{0000CD}
+\definecolor{AgdaField}                 {HTML}{EE1289}
+\definecolor{AgdaFunction}              {HTML}{0000CD}
+\definecolor{AgdaModule}                {HTML}{A020F0}
+\definecolor{AgdaPostulate}             {HTML}{0000CD}
+\definecolor{AgdaPrimitive}             {HTML}{0000CD}
+\definecolor{AgdaRecord}                {HTML}{0000CD}
+
+% Other aspect colours.
+\definecolor{AgdaDottedPattern}     {HTML}{000000}
+\definecolor{AgdaUnsolvedMeta}      {HTML}{FFFF00}
+\definecolor{AgdaTerminationProblem}{HTML}{FFA07A}
+\definecolor{AgdaIncompletePattern} {HTML}{F5DEB3}
+\definecolor{AgdaError}             {HTML}{FF0000}
+
+% Misc.
+\definecolor{AgdaHole}              {HTML}{9DFF9D}
+
+% ----------------------------------------------------------------------
+% Commands.
+
+% Aspect commands.
+\newcommand{\AgdaComment}     [1]
+    {\AgdaCommentFontStyle{\textcolor{AgdaComment}{#1}}}
+\newcommand{\AgdaKeyword}     [1]
+    {\AgdaFontStyle{\textcolor{AgdaKeyword}{#1}}}
+\newcommand{\AgdaString}      [1]{\AgdaStringFontStyle{\textcolor{AgdaString}{#1}}}
+\newcommand{\AgdaNumber}      [1]{\textcolor{AgdaNumber}{#1}}
+\newcommand{\AgdaSymbol}      [1]{\textcolor{AgdaSymbol}{#1}}
+\newcommand{\AgdaPrimitiveType}[1]
+    {\AgdaFontStyle{\textcolor{AgdaPrimitiveType}{#1}}}
+\newcommand{\AgdaOperator}    [1]{\textcolor{AgdaOperator}{#1}}
+
+% NameKind commands.
+\newcommand{\AgdaBound}    [1]{\AgdaBoundFontStyle{\textcolor{AgdaBound}{#1}}}
+\newcommand{\AgdaInductiveConstructor}[1]
+    {\AgdaFontStyle{\textcolor{AgdaInductiveConstructor}{#1}}}
+\newcommand{\AgdaCoinductiveConstructor}[1]
+    {\AgdaFontStyle{\textcolor{AgdaCoinductiveConstructor}{#1}}}
+\newcommand{\AgdaDatatype} [1]{\AgdaFontStyle{\textcolor{AgdaDatatype}{#1}}}
+\newcommand{\AgdaField}    [1]{\AgdaFontStyle{\textcolor{AgdaField}{#1}}}
+\newcommand{\AgdaFunction} [1]{\AgdaFontStyle{\textcolor{AgdaFunction}{#1}}}
+\newcommand{\AgdaModule}   [1]{\AgdaFontStyle{\textcolor{AgdaModule}{#1}}}
+\newcommand{\AgdaPostulate}[1]{\AgdaFontStyle{\textcolor{AgdaPostulate}{#1}}}
+\newcommand{\AgdaPrimitive}[1]{\AgdaFontStyle{\textcolor{AgdaPrimitive}{#1}}}
+\newcommand{\AgdaRecord}   [1]{\AgdaFontStyle{\textcolor{AgdaRecord}{#1}}}
+
+% Other aspect commands.
+\newcommand{\AgdaDottedPattern}     [1]{\textcolor{AgdaDottedPattern}{#1}}
+\newcommand{\AgdaUnsolvedMeta}      [1]
+    {\AgdaFontStyle{\colorbox{AgdaUnsolvedMeta}{#1}}}
+\newcommand{\AgdaTerminationProblem}[1]
+    {\AgdaFontStyle{\colorbox{AgdaTerminationProblem}{#1}}}
+\newcommand{\AgdaIncompletePattern} [1]{\colorbox{AgdaIncompletePattern}{#1}}
+\newcommand{\AgdaError}             [1]
+    {\AgdaFontStyle{\textcolor{AgdaError}{\underline{#1}}}}
+
+% Misc.
+\newcommand{\AgdaHole}[1]{\colorbox{AgdaHole}{#1}}
+\long\def\AgdaHide#1{} % Used to hide code from LaTeX.
+
+\newcommand{\AgdaIndent}[1]{\quad}
+
+% ----------------------------------------------------------------------
+% The code environment.
+
+\newcommand{\AgdaCodeStyle}{}
+% \newcommand{\AgdaCodeStyle}{\tiny}
+
+\ifdefined\mathindent
+  {}
+\else
+  \newdimen\mathindent\mathindent\leftmargini
+\fi
+
+\newenvironment{code}%
+{\noindent\ignorespaces\advance\leftskip\mathindent\AgdaCodeStyle\pboxed}%
+{\endpboxed\par\noindent%
+\ignorespacesafterend}
+
+% Default column for polytable.
+\defaultcolumn{l}
diff --git a/src/data/emacs-mode/agda-input.el b/src/data/emacs-mode/agda-input.el
--- a/src/data/emacs-mode/agda-input.el
+++ b/src/data/emacs-mode/agda-input.el
@@ -20,7 +20,6 @@
 
 (require 'quail)
 (require 'cl)
-
 ;; Quail is quite stateful, so be careful when editing this code.  Note
 ;; that with-temp-buffer is used below whenever buffer-local state is
 ;; modified.
@@ -570,7 +569,7 @@
   ("Ge"  . ("ε"))  ("GE"  . ("Ε"))
   ("Gz"  . ("ζ"))  ("GZ"  . ("Ζ"))
   ;; \eta \Eta
-  ("Gth" . ("θ"))  ("GTH" . ("θ"))
+  ("Gth" . ("θ"))  ("GTH" . ("Θ"))
   ("Gi"  . ("ι"))  ("GI"  . ("Ι"))
   ("Gk"  . ("κ"))  ("GK"  . ("Κ"))
   ("Gl"  . ("λ"))  ("GL"  . ("Λ"))  ("Gl-" . ("ƛ"))
diff --git a/src/data/emacs-mode/agda2-highlight.el b/src/data/emacs-mode/agda2-highlight.el
--- a/src/data/emacs-mode/agda2-highlight.el
+++ b/src/data/emacs-mode/agda2-highlight.el
@@ -15,6 +15,23 @@
   "Syntax highlighting for Agda."
   :group 'agda2)
 
+(defcustom agda2-highlight-level 'non-interactive
+  "How much syntax highlighting should be produced?
+Interactive highlighting includes highlighting of the expression
+that is currently being type-checked."
+  :type '(choice
+          (const :tag "None"            none)
+          (const :tag "Non-interactive" non-interactive)
+          (const :tag "Interactive"     interactive))
+  :group 'agda2-highlight)
+
+(defun agda2-highlight-level nil
+  "Formats the highlighting level in a Haskelly way."
+  (cond ((equal agda2-highlight-level 'none)            "None")
+        ((equal agda2-highlight-level 'non-interactive) "NonInteractive")
+        ((equal agda2-highlight-level 'interactive)     "Interactive")
+        (t                                              "None")))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Functions for setting faces
 
@@ -101,12 +118,18 @@
             (agda2-highlight-unsolved-meta-face
              :foreground "black"
              :background "gold")
+            (agda2-highlight-unsolved-constraint-face
+             :foreground "black"
+             :background "gold")
             (agda2-highlight-termination-problem-face
              :foreground "black"
              :background "red")
             (agda2-highlight-incomplete-pattern-face
              :foreground "black"
-             :background "purple")))
+             :background "purple")
+            (agda2-highlight-typechecks-face
+             :foreground "black"
+             :background "light steel blue")))
 	 ((equal group 'default-faces)
           (list (cons 'agda2-highlight-keyword-face
 		      (agda2-highlight-face-attributes
@@ -161,41 +184,52 @@
 		       font-lock-function-name-face))
 		(cons 'agda2-highlight-error-face
 		      (agda2-highlight-face-attributes
-		       font-lock-warning-face)))))))
+		       font-lock-warning-face))
+                (cons 'agda2-highlight-typechecks-face
+                      (agda2-highlight-face-attributes
+                       font-lock-type-face))
+                (cons 'agda2-highlight-typechecking-face
+                      (agda2-highlight-face-attributes
+                       font-lock-preprocessor-face)))))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Faces
 
 (defcustom agda2-highlight-face-groups nil
   "Colour scheme used in Agda buffers.
-Note that changing this option does not remove the customisations
-below; you can get them back by resetting this option and
-restarting Emacs. If you are using the default-faces option and
-change your colour theme the changes may not take effect in Agda
-buffers until you have restarted Emacs."
+Changes to this variable may not take full effect until you have
+restarted Emacs. Note also that if you are using the
+default-faces option and change your colour theme, then the
+changes may not take effect in Agda buffers until you have
+restarted Emacs."
   :type '(choice
-            (const :tag "Use the settings below." nil)
-            (const :tag "Use an approximation of Conor McBride's colour scheme."
-                   conor)
-	    (const :tag "Use simplified highlighting and default font-lock faces."
-                   default-faces))
+          (const :tag "Use the settings in the \"Agda2 Highlight Faces\" subgroup." nil)
+          (const :tag "Use an approximation of Conor McBride's colour scheme."
+                 conor)
+          (const :tag "Use simplified highlighting and default font-lock faces."
+                 default-faces))
   :group 'agda2-highlight
   :set 'agda2-highlight-set-faces)
 
+(defgroup agda2-highlight-faces nil
+  "Faces used to highlight Agda code.
+If `agda2-highlight-face-groups' is nil."
+  :group 'agda2-highlight)
+
 (defface agda2-highlight-keyword-face
   '((t (:foreground "DarkOrange3")))
   "The face used for keywords."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-string-face
   '((t (:foreground "firebrick")))
   "The face used for strings."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-number-face
   '((t (:foreground "purple")))
   "The face used for numbers."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-symbol-face
   '((((background light))
@@ -203,96 +237,108 @@
     (((background dark))
      (:foreground "gray75")))
   "The face used for symbols like forall, =, ->, etc."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-primitive-type-face
   '((t (:foreground "medium blue")))
   "The face used for primitive types (like Set and Prop)."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-bound-variable-face
   '((t nil))
   "The face used for bound variables."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-inductive-constructor-face
   '((t (:foreground "green4")))
   "The face used for inductive constructors."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-coinductive-constructor-face
   '((t (:foreground "gold4")))
   "The face used for coinductive constructors."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-datatype-face
   '((t (:foreground "medium blue")))
   "The face used for datatypes."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-field-face
   '((t (:foreground "DeepPink2")))
   "The face used for record fields."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-function-face
   '((t (:foreground "medium blue")))
   "The face used for functions."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-module-face
   '((t (:foreground "purple")))
   "The face used for module names."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-postulate-face
   '((t (:foreground "medium blue")))
   "The face used for postulates."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-primitive-face
   '((t (:foreground "medium blue")))
   "The face used for primitive functions."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-record-face
   '((t (:foreground "medium blue")))
   "The face used for record types."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-dotted-face
   '((t nil))
   "The face used for dotted patterns."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-operator-face
   '((t nil))
   "The face used for operators."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-error-face
   '((t (:foreground "red" :underline t)))
   "The face used for errors."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-unsolved-meta-face
   '((t (:background "yellow"
         :foreground "black")))
   "The face used for unsolved meta variables."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
+(defface agda2-highlight-unsolved-constraint-face
+  '((t (:background "yellow"
+        :foreground "black")))
+  "The face used for unsolved constraints which are not connected to metas."
+  :group 'agda2-highlight-faces)
+
 (defface agda2-highlight-termination-problem-face
   '((t (:background "light salmon"
         :foreground "black")))
   "The face used for termination problems."
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
 (defface agda2-highlight-incomplete-pattern-face
   '((t (:background "wheat"
         :foreground "black")))
   "The face used for incomplete patterns. (Currently unused.)"
-  :group 'agda2-highlight)
+  :group 'agda2-highlight-faces)
 
+(defface agda2-highlight-typechecks-face
+  '((t (:background "light blue"
+        :foreground "black")))
+  "The face used for code which is being type-checked."
+  :group 'agda2-highlight-faces)
+
 (defvar agda2-highlight-faces
   '((keyword                . agda2-highlight-keyword-face)
     (string                 . agda2-highlight-string-face)
@@ -313,8 +359,10 @@
     (operator               . agda2-highlight-operator-face)
     (error                  . agda2-highlight-error-face)
     (unsolvedmeta           . agda2-highlight-unsolved-meta-face)
+    (unsolvedconstraint     . agda2-highlight-unsolved-constraint-face)
     (terminationproblem     . agda2-highlight-termination-problem-face)
-    (incompletepattern      . agda2-highlight-incomplete-pattern-face))
+    (incompletepattern      . agda2-highlight-incomplete-pattern-face)
+    (typechecks             . agda2-highlight-typechecks-face))
   "Alist mapping code aspects to the face used when displaying them.
 
 The aspects currently recognised are the following:
@@ -339,6 +387,9 @@
 `string'                 Strings.
 `symbol'                 Symbols like forall, =, ->, etc.
 `terminationproblem'     Termination problems.
+`typechecks'             Code which is being type-checked.
+`unsolvedconstraint'     Unsolved constraints, not connected to meta
+                           variables.
 `unsolvedmeta'           Unsolved meta variables.
 
 The following aspect is ignored:
@@ -349,22 +400,54 @@
 table). The face `font-lock-comment-face' is used for comments.")
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Variables
+
+(defvar agda2-highlight-in-progress nil
+  "If nil, then highlighting annotations are not applied.")
+(make-variable-buffer-local 'agda2-highlight-in-progress)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Functions
 
 (defun agda2-highlight-setup nil
   "Set up the `annotation' library for use with `agda2-mode'."
-  (font-lock-mode 0)
   (setq annotation-bindings agda2-highlight-faces))
 
-(defun agda2-highlight-load (file &optional keep)
+(defun agda2-highlight-apply (&rest cmds)
+  "Adds the syntax highlighting information in the annotation list CMDS.
+
+Old syntax highlighting information is not removed."
+  (let (;; Ignore read-only status, otherwise this function may fail.
+        (inhibit-read-only t))
+    (apply 'annotation-load
+           "Click mouse-2 to jump to definition"
+           cmds)))
+
+(defun agda2-highlight-add-annotations (&rest cmds)
+  "Like `agda2-highlight-apply'.
+But only if `agda2-highlight-in-progress' is non-nil."
+  (if agda2-highlight-in-progress
+      (apply 'agda2-highlight-apply cmds)))
+
+(defun agda2-highlight-load (file)
   "Load syntax highlighting information from FILE.
-Old syntax highlighting information is first removed, unless KEEP
+
+Old syntax highlighting information is not removed."
+  (let* ((coding-system-for-read 'utf-8)
+         (cmds (with-temp-buffer
+                 (insert-file-contents file)
+                 (goto-char (point-min))
+                 (read (current-buffer)))))
+      (apply 'agda2-highlight-apply cmds)))
+
+(defun agda2-highlight-load-and-delete-action (file)
+  "Like `agda2-highlight-load', but deletes FILE when done.
+And highlighting is only updated if `agda2-highlight-in-progress'
 is non-nil."
-  (let ((coding-system-for-read 'utf-8)
-        ;; Ignore read-only status, otherwise this function may fail.
-        (inhibit-read-only t))
-    (annotation-load-file file (lambda (anns) (not keep))
-                          "Click mouse-2 to jump to definition")))
+  (unwind-protect
+      (if agda2-highlight-in-progress
+          (agda2-highlight-load file))
+    (delete-file file)))
 
 (defun agda2-highlight-clear nil
   "Remove all syntax highlighting added by `agda2-highlight-reload'."
diff --git a/src/data/emacs-mode/agda2-mode.el b/src/data/emacs-mode/agda2-mode.el
--- a/src/data/emacs-mode/agda2-mode.el
+++ b/src/data/emacs-mode/agda2-mode.el
@@ -10,52 +10,51 @@
 
 ;;; Code:
 
-(defvar agda2-version "2.3.0"
+(defvar agda2-version "2.3.2"
   "The version of the Agda mode.
-Note that, by default, the same version of the underlying Haskell
-library is used (see `agda2-ghci-options').")
+Note that the same version of the Agda executable must be used.")
 
 (require 'cl)
 (set (make-local-variable 'lisp-indent-function)
      'common-lisp-indent-function)
-(require 'comint)
+(require 'compile)
 (require 'pp)
+(require 'time-date)
 (require 'eri)
 (require 'annotation)
 (require 'agda-input)
 (require 'agda2-highlight)
 (require 'agda2-abbrevs)
-(require 'haskell-ghci)
-;; due to a bug in haskell-mode-2.1
-(setq haskell-ghci-mode-map (copy-keymap comint-mode-map))
-;; Load filladapt, if it is installed.
-(condition-case nil
-    (require 'filladapt)
-  (error nil))
-(unless (fboundp 'overlays-in) (load "overlay")) ; for Xemacs
-(unless (fboundp 'propertize)                    ; for Xemacs 21.4
- (defun propertize (string &rest properties)
-  "Return a copy of STRING with text properties added.
+(require 'agda2-queue)
+(eval-and-compile
+  ;; Load filladapt, if it is installed.
+  (condition-case nil
+      (require 'filladapt)
+    (error nil))
+  (unless (fboundp 'overlays-in) (load "overlay")) ; for Xemacs
+  (unless (fboundp 'propertize)                    ; for Xemacs 21.4
+    (defun propertize (string &rest properties)
+      "Return a copy of STRING with text properties added.
 First argument is the string to copy.
 Remaining arguments form a sequence of PROPERTY VALUE pairs for text
 properties to add to the result."
-  (let ((str (copy-sequence string)))
-    (add-text-properties 0 (length str) properties str)
-    str)))
-(unless (fboundp 'run-mode-hooks)
-  (fset 'run-mode-hooks 'run-hooks))  ; For Emacs versions < 21.
+      (let ((str (copy-sequence string)))
+        (add-text-properties 0 (length str) properties str)
+        str)))
+  (unless (fboundp 'run-mode-hooks)
+    (fset 'run-mode-hooks 'run-hooks))  ; For Emacs versions < 21.
+  (unless (fboundp 'cl-labels)
+    (fset 'cl-labels 'labels))  ; For Emacs versions < 24.2.
+  (unless (fboundp 'cl-flet)
+    (fset 'cl-flet 'flet)))  ; For Emacs versions < 24.2.
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Utilities
 
-(defmacro agda2-protect (form &optional default)
-  "Expands to (condition-case nil FORM (error DEFAULT))."
-  `(condition-case nil ,form (error ,default)))
-(put 'agda2-protect 'lisp-indent-function 0)
-
 (defmacro agda2-let (varbind funcbind &rest body)
-  "Expands to (let* VARBIND (labels FUNCBIND BODY...))."
-  `(let* ,varbind (labels ,funcbind ,@body)))
+  "Expands to (let* VARBIND (cl-labels FUNCBIND BODY...)).
+Or possibly (let* VARBIND (labels FUNCBIND BODY...))."
+  `(let* ,varbind (cl-labels ,funcbind ,@body)))
 (put 'agda2-let 'lisp-indent-function 2)
 
 (defun agda2-chunkify (n xs)
@@ -85,6 +84,21 @@
   :type '(repeat directory)
   :group 'agda2)
 
+(defcustom agda2-program-name "agda"
+  "The name of the Agda executable."
+  :type 'string
+  :group 'agda2)
+
+(defcustom agda2-program-args nil
+  "Command-line arguments given to the Agda executable (one per string).
+
+Note: Do not give several arguments in the same string.
+
+The flag \"--interaction\" is always included as the first
+argument, and does not need to be listed here."
+  :type '(repeat string)
+  :group 'agda2)
+
 (defcustom agda2-backend
   "MAlonzo"
   "The backend which is used to compile Agda programs."
@@ -93,25 +107,13 @@
                  (const "JS"))
   :group 'agda2)
 
-(defcustom agda2-ghci-options
-  (list (concat "-package Agda-" agda2-version))
-  "Options set in GHCi before loading `agda2-toplevel-module'.
-Note that only dynamic options can be set using this variable."
-  :type '(repeat string)
-  :group 'agda2)
-
 (defcustom agda2-toplevel-module "Agda.Interaction.GhciTop"
   "The name of the Agda toplevel module."
   :type 'string :group 'agda2)
 
-(defcustom agda2-mode-hook
-  '(agda2-fix-ghci-for-windows)
-  "Hooks for `agda2-mode'."
-  :type 'hook :group 'agda2)
-
 (defcustom agda2-information-window-max-height
   0.35
-  "*The maximum height of the information window.
+  "The maximum height of the information window.
 A multiple of the frame height."
   :type 'number
   :group 'agda2)
@@ -181,11 +183,6 @@
 (if (and (equal agda2-fontset-name "fontset-agda2") window-system)
     (create-fontset-from-fontset-spec agda2-fontset-spec-of-fontset-agda2 t t))
 
-(defun agda2-fix-ghci-for-windows ()
-  (if (string-match "windows" system-configuration)
-      (setq haskell-ghci-program-name "ghc"
-            haskell-ghci-program-args '("--interactive"))))
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Global and buffer-local vars, initialization
 
@@ -223,29 +220,31 @@
 
 (defconst agda2-command-table
   `(
-    (agda2-load                              "\C-c\C-l"         (global)       "Load")
+    (agda2-load                              "\C-c\C-l"           (global)       "Load")
     (agda2-load                              "\C-c\C-x\C-l")
-    (agda2-compile                           "\C-c\C-x\C-c"     (global)       "Compile")
-    (agda2-quit                              "\C-c\C-x\C-q"     (global)       "Quit")
-    (agda2-restart                           "\C-c\C-x\C-r"     (global)       "Restart")
-    (agda2-remove-annotations                "\C-c\C-x\C-d"     (global)       "Remove goals and highlighting (\"deactivate\")")
-    (agda2-display-implicit-arguments        "\C-c\C-x\C-h"     (global)       "Toggle display of hidden arguments")
-    (agda2-show-constraints                  ,(kbd "C-c C-=")   (global)       "Show constraints")
-    (agda2-solveAll                          ,(kbd "C-c C-s")   (global)       "Solve constraints")
-    (agda2-show-goals                        ,(kbd "C-c C-?")   (global)       "Show goals")
-    (agda2-next-goal                         "\C-c\C-f"         (global)       "Next goal") ; Forward.
-    (agda2-previous-goal                     "\C-c\C-b"         (global)       "Previous goal") ; Back.
-    (agda2-give                              ,(kbd "C-c C-SPC") (local)        "Give")
-    (agda2-refine                            "\C-c\C-r"         (local)        "Refine")
-    (agda2-auto                              "\C-c\C-a"         (local)        "Auto")
-    (agda2-make-case                         "\C-c\C-c"         (local)        "Case")
-    (agda2-goal-type                         "\C-c\C-t"         (local)        "Goal type")
-    (agda2-show-context                      "\C-c\C-e"         (local)        "Context (environment)")
-    (agda2-infer-type-maybe-toplevel         "\C-c\C-d"         (local global) "Infer (deduce) type")
-    (agda2-goal-and-context                  ,(kbd "C-c C-,")   (local)        "Goal type and context")
-    (agda2-goal-and-context-and-inferred     ,(kbd "C-c C-.")   (local)        "Goal type, context and inferred type")
-    (agda2-module-contents-maybe-toplevel    ,(kbd "C-c C-o")   (local global) "Module contents")
-    (agda2-compute-normalised-maybe-toplevel "\C-c\C-n"         (local global) "Evaluate term to normal form")
+    (agda2-compile                           "\C-c\C-x\C-c"       (global)       "Compile")
+    (agda2-quit                              "\C-c\C-x\C-q"       (global)       "Quit")
+    (agda2-restart                           "\C-c\C-x\C-r"       (global)       "Kill and restart Agda")
+    (agda2-remove-annotations                "\C-c\C-x\C-d"       (global)       "Remove goals and highlighting (\"deactivate\")")
+    (agda2-display-implicit-arguments        "\C-c\C-x\C-h"       (global)       "Toggle display of hidden arguments")
+    (agda2-show-constraints                  ,(kbd "C-c C-=")     (global)       "Show constraints")
+    (agda2-solveAll                          ,(kbd "C-c C-s")     (global)       "Solve constraints")
+    (agda2-show-goals                        ,(kbd "C-c C-?")     (global)       "Show goals")
+    (agda2-next-goal                         "\C-c\C-f"           (global)       "Next goal") ; Forward.
+    (agda2-previous-goal                     "\C-c\C-b"           (global)       "Previous goal") ; Back.
+    (agda2-give                              ,(kbd "C-c C-SPC")   (local)        "Give")
+    (agda2-refine                            "\C-c\C-r"           (local)        "Refine")
+    (agda2-auto                              "\C-c\C-a"           (local)        "Auto")
+    (agda2-make-case                         "\C-c\C-c"           (local)        "Case")
+    (agda2-goal-type                         "\C-c\C-t"           (local)        "Goal type")
+    (agda2-show-context                      "\C-c\C-e"           (local)        "Context (environment)")
+    (agda2-infer-type-maybe-toplevel         "\C-c\C-d"           (local global) "Infer (deduce) type")
+    (agda2-goal-and-context                  ,(kbd "C-c C-,")     (local)        "Goal type and context")
+    (agda2-goal-and-context-and-inferred     ,(kbd "C-c C-.")     (local)        "Goal type, context and inferred type")
+    (agda2-module-contents-maybe-toplevel    ,(kbd "C-c C-o")     (local global) "Module contents")
+    (agda2-compute-normalised-maybe-toplevel "\C-c\C-n"           (local global) "Evaluate term to normal form")
+    (describe-char                           nil                  (global)       "Information about the character at point")
+    (agda2-comment-dwim-rest-of-buffer       ,(kbd "C-c C-x M-;") (global)       "Comment/uncomment the rest of the buffer")
     (eri-indent                  ,(kbd "TAB"))
     (eri-indent-reverse          [S-iso-lefttab])
     (eri-indent-reverse          [S-lefttab])
@@ -286,14 +285,28 @@
     map)
   "Keymap for agda2 goal menu.")
 
-(defvar agda2-buffer  nil "Agda subprocess buffer.  Set in `agda2-restart'.")
-(defvar agda2-process nil "Agda subprocess.  Set in `agda2-restart'.")
+(defvar agda2-info-buffer nil
+  "Agda information buffer.")
 
+(defvar agda2-process-buffer nil
+  "Agda subprocess buffer.
+Set in `agda2-restart'.")
+
+(defvar agda2-process nil
+  "Agda subprocess.
+Set in `agda2-restart'.")
+
+(defvar agda2-in-progress nil
+  "Is the Agda process currently busy?")
+
 ;; Some buffer locals
 (defvar agda2-buffer-external-status ""
   "External status of an `agda2-mode' buffer (dictated by the Haskell side).")
 (make-variable-buffer-local 'agda2-buffer-external-status)
 
+(defvar agda2-output-prompt "Agda2> "
+  "The Agda2 buffer's prompt.")
+
 (defconst agda2-help-address
   ""
   "Address accepting submissions of bug reports and questions.")
@@ -320,6 +333,39 @@
 ;; reference. If the agda2-*-brace definitions were inlined, then
 ;; goals would be displayed as "{{ }}n" instead of "{ }n".
 
+(defvar agda2-measure-data nil
+  "Used by `agda2-measure-load-time'.
+This value is either nil or a pair containing a continuation (or
+nil) and the time at which the measurement was started.")
+(make-variable-buffer-local 'agda2-measure-data)
+
+;; The following variables are used by the filter process,
+;; `agda2-output-filter'. Their values are only modified by the filter
+;; process, `agda2-go', `agda2-restart', and
+;; `agda2-abort-highlighting'.
+
+(defvar agda2-responses-expected nil
+  "Is the Agda process expected to produce at least one response?")
+(make-variable-buffer-local 'agda2-responses-expected)
+
+(defvar agda2-responses 0
+  "The number of encountered response commands.")
+(make-variable-buffer-local 'agda2-responses)
+
+(defvar agda2-output-chunk-incomplete (agda2-queue-empty)
+  "Buffer for incomplete lines.
+\(See `agda2-output-filter'.)")
+(make-variable-buffer-local 'agda2-output-chunk-incomplete)
+
+(defvar agda2-last-responses nil
+  "Response commands which should be run after other commands.
+The command which arrived last is stored first in the list.")
+(make-variable-buffer-local 'agda2-last-responses)
+
+(defvar agda2-file-buffer nil
+  "The Agda buffer.
+Note that this variable is not buffer-local.")
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; agda2-mode
 
@@ -328,10 +374,12 @@
 ;;;###autoload
 (modify-coding-system-alist 'file "\\.l?agda\\'" 'utf-8)
 ;;;###autoload
-(define-derived-mode agda2-mode nil "Agda"
- "Major mode for Agda files.
+(eval `(define-derived-mode agda2-mode
+  ,(if (fboundp 'prog-mode) 'prog-mode)
+  "Agda"
+  "Major mode for Agda files.
 
-The following paragraph does not apply to Emacs 23.
+The following paragraph does not apply to Emacs 23 or newer.
 
   Note that when this mode is activated the default font of the
   current frame is changed to the fontset `agda2-fontset-name'.
@@ -343,6 +391,19 @@
 
 Special commands:
 \\{agda2-mode-map}"
+
+ ;; Check that the right version of Agda is used.
+ (let* ((coding-system-for-read 'utf-8)
+        (output (with-output-to-string
+                  (call-process agda2-program-name
+                                nil standard-output nil "--version")))
+        (version (and (string-match "^Agda version \\([0-9.]+\\)$" output)
+                      (match-string 1 output))))
+   (unless (equal version agda2-version)
+     (error "The Agda mode's version (%s) does not match that of %s (%s)."
+            agda2-version
+            agda2-program-name (or version "unknown"))))
+
  (setq local-abbrev-table agda2-mode-abbrev-table
        indent-tabs-mode   nil
        mode-line-process
@@ -355,141 +416,265 @@
      (condition-case nil
          (set-frame-font agda2-fontset-name)
        (error (error "Unable to change the font; change agda2-fontset-name or tweak agda2-fontset-spec-of-fontset-agda2"))))
- ;; If GHCi is not running syntax highlighting does not work properly.
+ ;; Deactivate highlighting if the buffer is edited before
+ ;; typechecking is complete.
+ (add-hook 'first-change-hook 'agda2-abort-highlighting nil 'local)
+ ;; If Agda is not running syntax highlighting does not work properly.
  (unless (eq 'run (agda2-process-status))
    (agda2-restart))
  (agda2-highlight-setup)
- (agda2-highlight-reload)
+ (condition-case err
+     (agda2-highlight-reload)
+   (error (message "Highlighting not loaded: %s"
+                   (error-message-string err))))
  (agda2-comments-and-paragraphs-setup)
  (force-mode-line-update)
  ;; Protect global value of default-input-method from set-input-method.
  (make-local-variable 'default-input-method)
  (set-input-method "Agda")
- ;; Highlighting is removed when we switch from the Agda mode. Use
- ;; case: When a file M.lagda with a local variables list including
- ;; "mode: latex" is loaded chances are that the Agda mode is
- ;; activated before the LaTeX mode, and the LaTeX mode does not seem
- ;; to remove the text properties set by the Agda mode.
- (add-hook (make-local-variable 'change-major-mode-hook)
-           'agda2-remove-annotations))
+ ;; Highlighting etc. is removed when we switch from the Agda mode.
+ ;; Use case: When a file M.lagda with a local variables list
+ ;; including "mode: latex" is loaded chances are that the Agda mode
+ ;; is activated before the LaTeX mode, and the LaTeX mode does not
+ ;; seem to remove the text properties set by the Agda mode.
+ (add-hook 'change-major-mode-hook 'agda2-quit nil 'local)))
 
 (defun agda2-restart ()
-  "Kill and restart the *ghci* buffer and load `agda2-toplevel-module'."
+  "Kill and restart the *agda2* buffer and load `agda2-toplevel-module'."
   (interactive)
-  (save-excursion (let ((agda2-bufname "*ghci*")
-                        (ignore-dot-ghci "-ignore-dot-ghci"))
-                    (agda2-protect
-                      (progn
-                        ;; GHCi doesn't always die when its buffer is
-                        ;; killed, so GHCi is killed before the buffer
-                        ;; is.
-                        (set-buffer agda2-bufname)
-                        (agda2-protect (comint-kill-subjob))
-                        (kill-buffer agda2-bufname)))
-                    ;; Make sure that the user's .ghci is not read.
-                    ;; Users can override this by adding
-                    ;; "-read-dot-ghci" to
-                    ;; `haskell-ghci-program-args'.
-                    (unless (equal (car-safe haskell-ghci-program-args)
-                                   ignore-dot-ghci)
-                      (set (make-local-variable 'haskell-ghci-program-args)
-                           (cons ignore-dot-ghci haskell-ghci-program-args)))
-                    (haskell-ghci-start-process nil)
-                    (setq agda2-process  haskell-ghci-process
-                          agda2-buffer   haskell-ghci-process-buffer
-                          mode-name "Agda GHCi")
-                    (set (make-local-variable 'comint-input-sender)
-                         'agda2-send)
-                    (set-buffer-file-coding-system 'utf-8)
-                    (set-buffer-process-coding-system 'utf-8 'utf-8)
-                    (rename-buffer agda2-bufname)
-                    (set-process-query-on-exit-flag agda2-process nil)))
-  (apply 'agda2-call-ghci ":set" agda2-ghci-options)
-  (agda2-call-ghci ":mod +" agda2-toplevel-module)
+  (save-excursion (let ((agda2-bufname "*agda2*"))
+                    (condition-case nil
+                      (agda2-term)
+                      (error nil))
+
+                    ;; Start the Agda2 process in a new buffer.
+                    (message "Starting agda process `%s'." agda2-program-name)
+                    (let ((process-connection-type nil)) ; pipes are faster than PTYs
+                      (apply 'start-process "Agda2" agda2-bufname
+                             agda2-program-name
+                             (cons "--interaction" agda2-program-args)))
+
+                    ;; Select agda buffer temporarily.
+                    (with-current-buffer agda2-bufname
+                      (setq process-adaptive-read-buffering t)
+
+                      ;; Clear message area.
+                      (message "")
+
+                      (setq agda2-process        (get-buffer-process agda2-bufname)
+                            agda2-process-buffer (process-buffer agda2-process)
+                            agda2-in-progress    nil
+                            mode-name            "Agda executable"
+                            agda2-last-responses nil)
+                      (set-buffer-file-coding-system 'utf-8)
+                      (set-buffer-process-coding-system 'utf-8 'utf-8)
+                      (set-process-query-on-exit-flag agda2-process nil))))
+  (setq agda2-file-buffer (current-buffer))
+  (set-process-filter agda2-process 'agda2-output-filter)
   (agda2-remove-annotations))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Communicating with Agda
 
-(defun agda2-raise-ghci-error ()
+(defun agda2-raise-error ()
   "Raises an error.
-The error message directs the user to the *ghci* buffer."
-  (error "Problem encountered. The *ghci* buffer can perhaps explain why."))
+The error message directs the user to the *agda2* buffer."
+  (error "Problem encountered. The *agda2* buffer can perhaps explain why."))
 
-(defun agda2-send (proc s)
-  "Sends the string S to PROC.
-Splits up S into small chunks and sends them one after the other,
-because when GHCi is used in shell buffers it chokes on overly
-long strings (some versions of GHCi, on some systems)."
-  (let* ((chunk-size 200))
-    (dolist (chunk (agda2-chunkify chunk-size s))
-      (comint-send-string proc chunk)))
-  (comint-send-string proc "\n"))
+(defun agda2-running-p nil
+  "Does the *agda2* buffer exist, and is the Agda2 process running?"
+  (and (buffer-live-p agda2-process-buffer)
+       (eq (agda2-process-status) 'run)))
 
-(defun agda2-call-ghci (&rest args)
-  "Executes commands in GHCi.
-Sends the list of strings ARGS to GHCi, waits for output and
-returns the responses."
-  (unless (eq 'run (agda2-process-status))
+(defun agda2-send-command (restart &rest args)
+  "Send a command to the Agda2 asyncronous process.  Saves the buffer
+and sends the list of strings ARGS to Agda2.  If RESTART is non-nil
+and the Agda2 process is not running, or the *agda2* buffer does not
+exist, then an attempt is made to restart the process."
+  (save-buffer)
+  (when (and restart (not (agda2-running-p)))
     ;; Try restarting automatically, but only once, in case there is
     ;; some major problem.
     (agda2-restart)
-    (unless (eq 'run (agda2-process-status))
-      (agda2-raise-ghci-error)))
-  (save-excursion
-    ;; By setting local-enable-local-variables to nil the call to
-    ;; hack-local-variables in haskell-ghci-go becomes more or less a
-    ;; no-op. (Note that hack-local-variables can interfere with the
-    ;; setup of a mode, because it can potentially perform the setup
-    ;; of another mode...)
-    (let ((local-enable-local-variables nil))
-      (haskell-ghci-go (apply 'concat (agda2-intersperse " " args))
-                       nil)))
-  (let (response)
-    (with-current-buffer haskell-ghci-process-buffer
-      (haskell-ghci-wait-for-output)
-      (let ((tempfile (make-temp-file "agda2-mode")))
-        (unwind-protect
-            (let ((coding-system-for-read 'utf-8)
-                  (coding-system-for-write 'utf-8))
-              (comint-write-output tempfile)
-              (with-temp-buffer
-                (insert-file-contents tempfile)
-                (setq response (buffer-substring-no-properties
-                                (point-min) (point-max)))))
-          (delete-file tempfile))))
-    response))
+    (unless (agda2-running-p)
+      (agda2-raise-error)))
+  (let ((command (apply 'concat (agda2-intersperse " " args))))
+    (with-current-buffer agda2-process-buffer
+      (goto-char (point-max))
+      (insert command)
+      (insert "\n")
+      (process-send-string agda2-process (concat command "\n")))))
 
+(defun agda2-abort-if-in-progress ()
+  "Raise an error if the Agda process is (thought to be) busy."
+  (when agda2-in-progress
+    (error "Another command is currently in progress
+\(if a command has been aborted you may want to restart Agda)")))
+
 (defun agda2-go (responses-expected highlight &rest args)
-  "Executes commands in GHCi.
-Sends the list of strings ARGS to GHCi, waits for output and
-executes the responses, if any. If no responses are received, and
-RESPONSES-EXPECTED is non-nil, then an error is raised; otherwise
-the syntax highlighting information is reloaded (unless HIGHLIGHT
-is nil; if HIGHLIGHT is a string, then highlighting info is read
-from the corresponding file)."
-  (let* ((highlighting-temp (and highlight (not (stringp highlight))))
-         (highlighting (cond ((stringp highlight) highlight)
-                             (highlighting-temp (make-temp-file "agda2-mode")))))
-        (unwind-protect
-            (let ((responses
-                   (agda2-read-responses
-                    (apply 'agda2-call-ghci
-                           "ioTCM"
-                           (agda2-string-quote (buffer-file-name))
-                           (if highlighting-temp
-                               (concat "(Just "
-                                       (agda2-string-quote highlighting)
-                                       ")")
-                             "Nothing")
-                           "("
-                           (append args '(")"))))))
-                (when (and responses-expected (null responses))
-                  (agda2-raise-ghci-error))
-                (if highlight (agda2-highlight-load highlighting))
-                (agda2-exec-responses responses))
-          (if highlighting-temp (delete-file highlighting)))))
+  "Executes commands in the Agda2 interpreter.
+Sends the list of strings ARGS to the Agda2 interpreter, waits for
+output and executes the responses, if any. If no responses are
+received, and RESPONSES-EXPECTED is non-nil, then an error is
+raised. If HIGHLIGHT is non-nil, then the buffer's syntax
+highlighting may be updated."
 
+  (agda2-abort-if-in-progress)
+
+  (setq agda2-in-progress             t
+        agda2-highlight-in-progress   highlight
+        agda2-responses-expected      responses-expected
+        agda2-responses               0
+        agda2-output-chunk-incomplete (agda2-queue-empty)
+        agda2-file-buffer             (current-buffer))
+
+  (apply 'agda2-send-command
+         'restart
+         "IOTCM"
+         (agda2-string-quote (buffer-file-name))
+         (if highlight (agda2-highlight-level) "None")
+         "Indirect"
+         "("
+         (append args '(")"))))
+
+
+(defun agda2-output-filter (proc chunk)
+  "Evaluate the Agda process's commands.
+This filter function assumes that every line contains either some
+kind of error message (which cannot be parsed as a list), or
+exactly one command. Incomplete lines are stored in a
+buffer (`agda2-output-chunk-incomplete').
+
+Every command is run by this function, unless it has the form
+\"(('last . priority) . cmd)\", in which case it is run by
+`agda2-run-last-commands' at the end, after the Agda2 prompt
+has reappeared, after all non-last commands, and after all
+interactive highlighting is complete. The last commands can have
+different integer priorities; those with the lowest priority are
+executed first.
+
+Non-last commands should not call the Agda process.
+
+All commands are echoed to the *agda2* buffer, with the exception
+of commands of the form \"(agda2-highlight-... ...)\".
+
+The non-last commands are run in the order in which they appear.
+
+When the prompt has been reached an error is raised if
+`agda2-responses-expected' is non-nil and no commands have
+arrived. Otherwise highlighting annotations are
+reloaded from `agda2-highlighting-file', unless
+`agda2-highlighting-in-progress' is nil."
+
+
+  (let (;; The input lines in the current chunk.
+        (lines (split-string chunk "\n"))
+
+        ;; Non-last commands found in the current chunk (reversed).
+        (non-last-commands ())
+
+        ;; Last incomplete line, if any.
+        (output-chunk-incomplete ""))
+    (with-current-buffer agda2-file-buffer
+      (when (consp lines)
+        (agda2-queue-enqueue agda2-output-chunk-incomplete (pop lines))
+        (when (consp lines)
+          ;; The previous uncomplete chunk is now complete.
+          (push (agda2-queue-to-string agda2-output-chunk-incomplete)
+                lines)
+
+          ;; Stash away the last incomplete line, if any. (Note that
+          ;; (split-string "...\n" "\n") evaluates to (... "").)
+          (setq output-chunk-incomplete (car (last lines))
+                agda2-output-chunk-incomplete
+                (agda2-queue-from-string output-chunk-incomplete))
+
+          ;; Handle every complete line.
+          (dolist (line (butlast lines))
+            (let* (;; The command. Lines which cannot be parsed as a single
+                   ;; list, without any junk, are ignored.
+                   (cmd (condition-case nil
+                            (let ((result (read-from-string line)))
+                              (if (and (listp (car result))
+                                       (= (cdr result) (length line)))
+                                  (car result)))
+                          (error nil))))
+
+              (when cmd
+                (unless (and (symbolp (car cmd))
+                             (let ((case-fold-search nil))
+                             (string-match "^agda2-highlight-"
+                                           (symbol-name (car cmd)))))
+                    ;; Do not echo highlighting commands.
+                  (with-current-buffer agda2-process-buffer
+                    (insert line)
+                    (insert "\n"))
+                  (incf agda2-responses))
+                (if (equal 'last (car-safe (car cmd)))
+                    (push (cons (cdr (car cmd)) (cdr cmd))
+                          agda2-last-responses)
+                  (push cmd non-last-commands)))))
+
+          ;; Run non-last commands.
+          (mapc 'agda2-exec-response (nreverse non-last-commands)))
+
+        ;; Check if the prompt has been reached. This function assumes
+        ;; that the prompt does not include any newline characters.
+        (when (agda2-queue-is-prefix-of agda2-output-prompt
+                                        agda2-output-chunk-incomplete)
+          (with-current-buffer agda2-process-buffer
+            (insert output-chunk-incomplete))
+          (setq agda2-output-chunk-incomplete (agda2-queue-empty)
+                agda2-in-progress nil
+                agda2-last-responses (nreverse agda2-last-responses))
+
+          (when (and agda2-responses-expected
+                     (equal agda2-responses 0))
+            (agda2-raise-error))
+
+          (agda2-run-last-commands)
+
+          (when agda2-measure-data
+            (let ((elapsed
+                   (format "%.2fs"
+                           (float-time (time-since
+                                        (cdr agda2-measure-data)))))
+                  (continuation (car agda2-measure-data)))
+              (setq agda2-measure-data nil)
+              (message "Load time: %s." elapsed)
+              (when continuation
+                (funcall continuation elapsed)))))))))
+
+(defun agda2-run-last-commands nil
+  "Execute the last commands in the right order.
+\(After the prompt has reappeared.) See `agda2-output-filter'."
+
+  ;; with-current-buffer is used repeatedly below, because some last
+  ;; commands may switch the focus to another buffer.
+
+  (while (with-current-buffer agda2-file-buffer
+           (and (not agda2-in-progress) (consp agda2-last-responses)))
+    (with-current-buffer agda2-file-buffer
+      ;; The list is sorted repeatedly because this function may be
+      ;; called recursively (via `agda2-exec-response').
+      (setq agda2-last-responses (sort agda2-last-responses
+                                       (lambda (x y) (<= (car x) (car y)))))
+      (let ((r (pop agda2-last-responses)))
+        (agda2-exec-response (cdr r)))))
+
+  ;; Unset agda2-highlight-in-progress when all the asynchronous
+  ;; commands have terminated.
+  (unless agda2-in-progress
+      (setq agda2-highlight-in-progress nil)))
+
+(defun agda2-abort-highlighting nil
+  "Abort any interactive highlighting.
+This function should be used in `first-change-hook'."
+  (when agda2-highlight-in-progress
+    (setq agda2-highlight-in-progress nil)
+    (message "\"%s\" has been modified. Interrupting highlighting."
+             (buffer-name (current-buffer)))))
+
 (defun agda2-goal-cmd (cmd &optional want ask &rest args)
   "Reads input from goal or minibuffer and sends command to Agda.
 
@@ -529,33 +714,16 @@
              (if input-from-goal (agda2-goal-Range o) "noRange")
              (agda2-string-quote txt) args))))
 
-(defun agda2-read-responses (response)
-  "Returns a list containing the responses in the response string.
-Responses of the form (last . actual-response) are placed last in
-the returned list, with last stripped."
-  (let ((responses)
-        (former)
-        (latter))
-    (while (string-match "agda2_mode_code" response)
-      (setq response (substring response (match-end 0)))
-      (push (read response) responses))
-    (dolist (r responses (append former latter))
-      (if (and (consp r) (equal (car r) 'last))
-          (push (cdr r) latter)
-        (push r former)))))
-
 ;; Note that the following function is a security risk, since it
 ;; evaluates code without first inspecting it. The code (supposedly)
 ;; comes from the Agda backend, but there could be bugs in the backend
 ;; which can be exploited by an attacker which manages to trick
 ;; someone into type-checking compromised Agda code.
 
-(defun agda2-exec-responses (responses)
-  "Interprets responses."
-  (mapc (lambda (r)
-          (let ((inhibit-read-only t))
-            (eval r)))
-          responses))
+(defun agda2-exec-response (response)
+  "Interprets response."
+  (let ((inhibit-read-only t))
+    (eval response)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; User commands and response processing
@@ -563,17 +731,39 @@
 (defun agda2-load ()
   "Load current buffer."
   (interactive)
-  (agda2-go t t "cmd_load"
+  (agda2-go t t "Cmd_load"
             (agda2-string-quote (buffer-file-name))
             (agda2-list-quote agda2-include-dirs)
             ))
 
+(defun agda2-measure-load-time
+  (&optional highlighting-level dont-touch continuation)
+  "Load the current buffer and print how much time it takes.
+\(Wall-clock time.)
+
+The given HIGHLIGHTING-LEVEL is used (if non-nil).
+
+The file is first saved and \"touched\", unless DONT-TOUCH is
+non-nil.
+
+If CONTINUATION is non-nil, then CONTINUATION is applied to the
+resulting time (represented as a string)."
+  (interactive)
+  (agda2-abort-if-in-progress)
+  (unless dont-touch
+    (save-buffer)
+    (shell-command (concat "touch \"" (buffer-file-name) "\"")))
+  (let* ((agda2-highlight-level
+          (or highlighting-level agda2-highlight-level)))
+    (setq agda2-measure-data (cons continuation (current-time)))
+    (agda2-load)))
+
 (defun agda2-compile ()
   "Compile the current module.
 
 The variable `agda2-backend' determines which backend is used."
   (interactive)
-  (agda2-go t t "cmd_compile"
+  (agda2-go t t "Cmd_compile"
             agda2-backend
             (agda2-string-quote (buffer-file-name))
             (agda2-list-quote agda2-include-dirs)
@@ -581,34 +771,40 @@
 
 (defun agda2-give()
   "Give to the goal at point the expression in it" (interactive)
-  (agda2-goal-cmd "cmd_give" "expression to give"))
+  (agda2-goal-cmd "Cmd_give" "expression to give"))
 
 (defun agda2-give-action (old-g paren)
   "Update the goal OLD-G with the expression in it."
   (agda2-update old-g paren))
 
-(defun agda2-refine ()
+(defun agda2-refine (pmlambda)
   "Refine the goal at point.
 If the goal contains an expression e, and some \"suffix\" of the
 type of e unifies with the goal type, then the goal is replaced
 by e applied to a suitable number of new goals.
 
+PMLAMBDA is only used if the goal has a functional type.
+When the prefix argument is given a pattern maching lambda will
+be inserted, otherwise a standard lambda will be used.
+
 If the goal is empty, the goal type is a data type, and there is
 exactly one constructor which unifies with this type, then the
 goal is replaced by the constructor applied to a suitable number
 of new goals."
-  (interactive)
-  (agda2-goal-cmd "cmd_refine_or_intro" 'goal))
+  (interactive "P")
+  (if pmlambda
+      (agda2-goal-cmd "Cmd_refine_or_intro True" 'goal)
+    (agda2-goal-cmd "Cmd_refine_or_intro False" 'goal)))
 
 (defun agda2-auto ()
  "Simple proof search" (interactive)
- (agda2-goal-cmd "cmd_auto" 'goal))
+ (agda2-goal-cmd "Cmd_auto" 'goal))
 
 (defun agda2-make-case ()
-  "Refine the pattern var given in the goal.
-Assumes that <clause> = {!<var>!} is on one line."
+  "Refine the pattern variables given in the goal.
+Assumes that <clause> = {!<variables>!} is on one line."
   (interactive)
-  (agda2-goal-cmd "cmd_make_case" "pattern var to case"))
+  (agda2-goal-cmd "Cmd_make_case" "pattern variables to case"))
 
 (defun agda2-make-case-action (newcls)
   "Replace the line at point with new clauses NEWCLS and reload."
@@ -630,17 +826,22 @@
 (defun agda2-make-case-action-extendlam (newcls)
   "Replace definition of extended lambda with new clauses NEWCLS and reload."
   (agda2-forget-all-goals);; we reload later anyway.
-  (let* ((p (+ (re-search-backward "\\({[^!]\\)\\|;") 1))
-         cl)
-    (goto-char p)
-    (delete-region p (- (re-search-forward "\\([^!]}\\)\\|;") 1))
-    (goto-char p)
-    (insert "  ")
-    (goto-char (+ p 1))
-    (while (setq cl (pop newcls))
-      (insert cl)
-      (if newcls (insert " ; ")))
-    (goto-char p))
+  (let* ((pmax (- (re-search-forward "\\([^!]}\\)\\|;") 1))
+	 (bracketCount 0)
+	 cl)
+    (re-search-backward "{!")
+      (while (and (not (equal (preceding-char) ?;)) (>= bracketCount 0))
+	(backward-char)
+	(if (equal (preceding-char) ?}) (incf bracketCount))
+	(if (equal (preceding-char) ?{) (decf bracketCount)))
+    (let ((p (point)))
+      (delete-region (point) pmax)
+      (insert " ")
+      (while (setq cl (pop newcls))
+	(insert cl)
+	(if newcls (insert " ; ")))
+      (insert " ")
+      (goto-char p)))
   (agda2-load))
 
 (defun agda2-status-action (status)
@@ -649,49 +850,70 @@
 major mode)."
   (setq agda2-buffer-external-status status))
 
-(defun agda2-info-action (name text)
-  "Insert TEXT into the Agda info buffer, display it, and display NAME
-in the buffer's mode line."
-  (interactive)
-  (with-current-buffer (get-buffer-create "*Agda information*")
-    (erase-buffer)
-    (insert text)
-    (set-syntax-table agda2-mode-syntax-table)
-    (set-input-method "Agda")
+(defun agda2-info-buffer nil
+  "Creates the Agda info buffer, if it does not already exist.
+The buffer is returned."
+  (unless (buffer-live-p agda2-info-buffer)
+    (setq agda2-info-buffer
+          (generate-new-buffer "*Agda information*"))
 
-    ;; Support for jumping to positions mentioned in the text.
-    (set (make-local-variable 'compilation-error-regexp-alist)
-         '(("\\([\\\\/][^[:space:]]*\\):\\([0-9]+\\),\\([0-9]+\\)-\\(\\([0-9]+\\),\\)?\\([0-9]+\\)"
-            1 (2 . 5) (3 . 6))))
-    ;; No support for recompilation. An attempt to recompile via the
-    ;; info buffer (using "g") will (most likely) lead to a (dynamic)
-    ;; type error. (The default is to run "make -k".)
-    (set (make-local-variable 'compile-command)
-         'agda2-does-not-support-compilation-via-the-compilation-minor-mode)
-    (compilation-minor-mode 1)
+    (with-current-buffer agda2-info-buffer
+      (compilation-mode "AgdaInfo")
+      ;; Support for jumping to positions mentioned in the text.
+      (set (make-local-variable 'compilation-error-regexp-alist)
+           '(("\\([\\\\/][^[:space:]]*\\):\\([0-9]+\\),\\([0-9]+\\)-\\(\\([0-9]+\\),\\)?\\([0-9]+\\)"
+              1 (2 . 5) (3 . 6))))
+      ;; No support for recompilation. The key binding is removed, and
+      ;; attempts to run `recompile' will (hopefully) result in an
+      ;; error.
+      (let ((map (copy-keymap (current-local-map))))
+        (define-key map (kbd "g") 'undefined)
+        (use-local-map map))
+      (set (make-local-variable 'compile-command)
+           'agda2-does-not-support-compilation-via-the-compilation-mode)
 
-    ;; The info buffer is read-only. Compilation minor mode introduces
-    ;; the keybindings "g" (recompile) and "q" (bury the buffer), and
-    ;; these keybindings can make it rather awkward to edit the info
-    ;; buffer. To avoid surprises we make the buffer read-only.
-    (setq buffer-read-only t)
+      (set-syntax-table agda2-mode-syntax-table)
+      (set-input-method "Agda")))
 
-    (goto-char (point-min))
+  agda2-info-buffer)
+
+(defun agda2-info-action (name text &optional append)
+  "Insert TEXT into the Agda info buffer and display it.
+NAME is displayed in the buffer's mode line.
+
+If APPEND is non-nil, then TEXT is appended at the end of the
+buffer, and point placed after this text.
+
+If APPEND is nil, then any previous text is removed before TEXT
+is inserted, and point is placed before this text."
+  (interactive)
+  (with-current-buffer (agda2-info-buffer)
+    (unless append (erase-buffer))
+    (save-excursion
+      (goto-char (point-max))
+      (insert text))
     (put-text-property 0 (length name) 'face '(:weight bold) name)
     (setq mode-line-buffer-identification name)
     (save-selected-window
-      (pop-to-buffer (current-buffer) 'not-this-window 'norecord)
-      (fit-window-to-buffer
-       nil (truncate
-            (* (frame-height) agda2-information-window-max-height))))))
+      (let (;; If there is only one window, then the info window
+            ;; should be created above or below the code window, not
+            ;; to the left or right.
+            (split-width-threshold nil))
+        (pop-to-buffer (current-buffer) nil 'norecord)
+        (fit-window-to-buffer
+         nil (truncate
+              (* (frame-height) agda2-information-window-max-height)))
+        (if append
+            (goto-char (point-max))
+          (goto-char (point-min)))))))
 
 (defun agda2-show-goals()
   "Show all goals." (interactive)
-  (agda2-go t t "cmd_metas"))
+  (agda2-go t t "Cmd_metas"))
 
 (defun agda2-show-constraints()
   "Show constraints." (interactive)
-  (agda2-go t t "cmd_constraints"))
+  (agda2-go t t "Cmd_constraints"))
 
 (defun agda2-remove-annotations ()
   "Removes buffer annotations (overlays and text properties)."
@@ -717,9 +939,19 @@
 (defun agda2-quit ()
   "Quit and clean up after agda2."
   (interactive)
-  (agda2-protect (progn (kill-buffer agda2-buffer)
-                        (kill-buffer (current-buffer)))))
+  (remove-hook 'first-change-hook 'agda2-abort-highlighting 'local)
+  (agda2-remove-annotations)
+  (agda2-term))
 
+(defun agda2-term ()
+  "Send a SIGTERM signal to the Agda2 process, then kill its buffer."
+  (interactive)
+  (with-current-buffer agda2-process-buffer
+    (condition-case nil
+        (signal-process agda2-process 'SIGTERM)
+      (error nil))
+    (kill-buffer)))
+
 (defmacro agda2-maybe-normalised (name comment cmd want)
   "This macro constructs a function NAME which runs CMD.
 COMMENT is used to build the function's comment. The function
@@ -734,7 +966,7 @@
 With a prefix argument the result is not explicitly normalised.")
      (interactive "P")
      (let ((,eval (if not-normalise "Instantiated" "Normalised")))
-       (agda2-goal-cmd (concat ,cmd " Agda.Interaction.BasicOps." ,eval)
+       (agda2-goal-cmd (concat ,cmd " " ,eval)
                        ,want)))))
 
 (defmacro agda2-maybe-normalised-toplevel (name comment cmd prompt)
@@ -752,19 +984,19 @@
        (interactive ,(concat "P\nM" prompt ": "))
        (let ((,eval (if not-normalise "Instantiated" "Normalised")))
          (agda2-go t nil
-                   (concat ,cmd " Agda.Interaction.BasicOps." ,eval " "
+                   (concat ,cmd " " ,eval " "
                            (agda2-string-quote expr)))))))
 
 (agda2-maybe-normalised
  agda2-goal-type
  "Show the type of the goal at point"
- "cmd_goal_type"
+ "Cmd_goal_type"
  nil)
 
 (agda2-maybe-normalised
  agda2-infer-type
  "Infer the type of the goal at point"
- "cmd_infer"
+ "Cmd_infer"
  "expression to type")
 
 (agda2-maybe-normalised-toplevel
@@ -772,7 +1004,7 @@
    "Infers the type of the given expression. The scope used for
 the expression is that of the last point inside the current
 top-level module"
-   "cmd_infer_toplevel"
+   "Cmd_infer_toplevel"
    "Expression")
 
 (defun agda2-infer-type-maybe-toplevel ()
@@ -787,33 +1019,33 @@
 (agda2-maybe-normalised
  agda2-goal-and-context
  "Shows the type of the goal at point and the currect context"
- "cmd_goal_type_context"
+ "Cmd_goal_type_context"
  nil)
 
 (agda2-maybe-normalised
  agda2-goal-and-context-and-inferred
  "Shows the context, the goal and the given expression's inferred type"
- "cmd_goal_type_context_infer"
+ "Cmd_goal_type_context_infer"
  "expression to type")
 
 (agda2-maybe-normalised
  agda2-show-context
  "Show the context of the goal at point"
- "cmd_context"
+ "Cmd_context"
  nil)
 
 (defun agda2-module-contents ()
   "Shows all the top-level names in the given module.
 Along with their types."
   (interactive)
-  (agda2-goal-cmd "cmd_show_module_contents" "Module name"))
+  (agda2-goal-cmd "Cmd_show_module_contents" "Module name"))
 
 (defun agda2-module-contents-toplevel (module)
   "Shows all the top-level names in the given module.
 Along with their types."
   (interactive "MModule name: ")
   (agda2-go t nil
-            "cmd_show_module_contents_toplevel"
+            "Cmd_show_module_contents_toplevel"
             (agda2-string-quote module)))
 
 (defun agda2-module-contents-maybe-toplevel ()
@@ -830,21 +1062,27 @@
 (defun agda2-solveAll ()
   "Solves all goals that are already instantiated internally."
   (interactive)
-  (agda2-go t t "cmd_solveAll"))
+  (agda2-go t t "Cmd_solveAll"))
 
 (defun agda2-solveAll-action (iss)
+  (while iss
+    (let* ((g (pop iss)) (txt (pop iss))
+           (cmd (cons 'agda2-solve-action (cons g (cons txt nil)))))
+      (if (null agda2-last-responses)
+          (push (cons 1 cmd) agda2-last-responses)
+        (nconc agda2-last-responses (cons (cons 3 cmd) nil))))))
+
+(defun agda2-solve-action (g txt)
   (save-excursion
-    (while iss
-      (let* ((g (pop iss)) (txt (pop iss)))
-        (agda2-replace-goal g txt)
-        (agda2-goto-goal g)
-        (agda2-give)))))
+    (agda2-replace-goal g txt)
+    (agda2-goto-goal g)
+    (agda2-give)))
 
 (defun agda2-compute-normalised (&optional arg)
   "Compute the normal form of the expression in the goal at point.
 With a prefix argument \"abstract\" is ignored during the computation."
   (interactive "P")
-  (let ((cmd (concat "cmd_compute"
+  (let ((cmd (concat "Cmd_compute"
                      (if arg " True" " False"))))
     (agda2-goal-cmd cmd "expression to normalise")))
 
@@ -854,7 +1092,7 @@
 top-level module.
 With a prefix argument \"abstract\" is ignored during the computation."
   (interactive "MExpression: \nP")
-  (let ((cmd (concat "cmd_compute_toplevel"
+  (let ((cmd (concat "Cmd_compute_toplevel"
                      (if arg " True" " False")
                      " ")))
     (agda2-go t nil (concat cmd (agda2-string-quote expr)))))
@@ -875,14 +1113,9 @@
 (defun agda2-highlight-reload nil
   "Loads precomputed syntax highlighting info for the current buffer.
 If there is any to load."
-  (let ((highlighting (make-temp-file "agda2-mode")))
-    (unwind-protect
-        (progn
-          (agda2-go nil highlighting
-                    "cmd_write_highlighting_info"
-                    (agda2-string-quote (buffer-file-name))
-                    (agda2-string-quote highlighting)))
-      (delete-file highlighting))))
+  (agda2-go nil t
+            "Cmd_load_highlighting_info"
+            (agda2-string-quote (buffer-file-name))))
 
 (defun agda2-literate-p ()
   "Is the current buffer a literate Agda buffer?"
@@ -899,26 +1132,34 @@
   (agda2-let
       ((literate (agda2-literate-p))
        stk
-       top)
+       top
+       ;; Don't run modification hooks: we don't want this function to
+       ;; trigger agda2-abort-highlighting.
+       (inhibit-modification-hooks t))
       ((delims() (re-search-forward "[?]\\|[{][-!]\\|[-!][}]\\|--\\|\\\\begin{code}\\|\\\\end{code}" nil t))
        (is-lone-questionmark ()
           (save-excursion
             (save-match-data
                 (backward-char 3)
                 (looking-at
-                 "\\(.[{(]\\|.\\s \\)[?]\\(\\s \\|[)};]\\|$\\)"))))
+                 "\\(.[{(]\\|\\(.\\|\n\\)\\s \\)[?]\\(\\s \\|[)};]\\|$\\)"))))
        (make(p)  (agda2-make-goal p (point) (pop goals)))
        (inside-comment() (and stk (null     (car stk))))
        (inside-goal()    (and stk (integerp (car stk))))
        (outside-code()   (and stk (eq (car stk) 'outside)))
-       (inside-code()    (not (outside-code))))
+       (inside-code()    (not (outside-code)))
+       ;; inside a multi-line comment ignore everything but the multi-line comment markers
+       (safe-delims()
+          (if (inside-comment)
+               (re-search-forward "{-\\|-}" nil t)
+            (delims))))
     (save-excursion
       ;; In literate mode we should start out in the "outside of code"
       ;; state.
       (if literate (push 'outside stk))
       (goto-char (point-min))
-      (while (and goals (delims))
-        (labels ((c (s) (equal s (match-string 0))))
+      (while (and goals (safe-delims))
+        (cl-labels ((c (s) (equal s (match-string 0))))
           (cond
            ((c "\\begin{code}") (when (outside-code)               (pop stk)))
            ((c "\\end{code}")   (when (not stk)                    (push 'outside stk)))
@@ -940,7 +1181,7 @@
 (defun agda2-make-goal (p q n)
   "Make a goal with number N at <P>{!...!}<Q>.  Assume the region is clean."
   (annotation-preserve-mod-p-and-undo
-   (flet ((atp (x ps) (add-text-properties x (1+ x) ps)))
+   (cl-flet ((atp (x ps) (add-text-properties x (1+ x) ps)))
      (atp p       '(category agda2-delim1))
      (atp (1+ p)  '(category agda2-delim2))
      (atp (- q 2) '(category agda2-delim3))
@@ -997,8 +1238,10 @@
 ;;;; Misc
 
 (defun agda2-process-status ()
-  "Status of `agda2-buffer', or \"no process\"."
-  (agda2-protect (process-status agda2-process) "no process"))
+  "Status of `agda2-process-buffer', or \"no process\"."
+  (condition-case nil
+      (process-status agda2-process)
+    (error "no process")))
 
 (defun agda2-intersperse (sep xs)
   (let(ys)(while xs (push (pop xs) ys)(push sep ys))(pop ys)(nreverse ys)))
@@ -1117,6 +1360,18 @@
   (interactive)
   (goto-char (agda2-decl-beginning)))
 
+(defvar agda2-debug-buffer-name "*Agda debug*"
+  "The name of the buffer used for Agda debug messages.")
+
+(defun agda2-verbose (msg)
+  "Appends the string MSG to the `agda2-debug-buffer-name' buffer.
+Note that this buffer's contents is not erased automatically when
+a file is loaded."
+  (with-current-buffer (get-buffer-create agda2-debug-buffer-name)
+    (save-excursion
+      (goto-char (point-max))
+      (insert msg))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Comments and paragraphs
 
@@ -1129,6 +1384,10 @@
   ;; the syntax table).
   (set (make-local-variable 'font-lock-defaults)
        '(nil nil nil nil nil))
+  ;; If the following s-expression is removed, then highlighting of
+  ;; comments stops working.
+  (when font-lock-mode
+    (font-lock-mode t))
 
   ;; Empty lines (all white space according to Emacs) delimit
   ;; paragraphs.
@@ -1149,9 +1408,27 @@
     (add-to-list (make-local-variable 'filladapt-token-conversion-table)
                  '(agda2-comment . exact))))
 
+(defun agda2-comment-dwim-rest-of-buffer ()
+  "Comment or uncomment the rest of the buffer.
+From the beginning of the current line to the end of the buffer."
+  (interactive)
+  (save-excursion
+    (forward-line 0)
+    (push-mark (point) 'no-message 'activate-mark)
+    (unwind-protect
+        (progn
+          (goto-char (point-max))
+          (comment-dwim nil))
+      (pop-mark))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Go to definition site
 
+(defun agda2-goto (filepos &optional other-window)
+  "Like `annotation-goto', unless `agda2-highlight-in-progress' is nil."
+  (if agda2-highlight-in-progress
+      (annotation-goto filepos other-window)))
+
 (defun agda2-goto-definition-keyboard (&optional other-window)
   "Go to the definition site of the name under point (if any).
 If this function is invoked with a prefix argument then another window is used
@@ -1159,16 +1436,16 @@
   (interactive "P")
   (annotation-goto-indirect (point) other-window))
 
-(defun agda2-goto-definition-mouse (ev prefix)
+(defun agda2-goto-definition-mouse (ev)
   "Go to the definition site of the name clicked on, if any.
-Otherwise, yank (see `mouse-yank-at-click')."
-  (interactive "e\nP")
+Otherwise, yank (see `mouse-yank-primary')."
+  (interactive "e")
   (let ((pos (posn-point (event-end ev))))
     (if (annotation-goto-possible pos)
         (annotation-goto-indirect pos)
       ;; FIXME: Shouldn't we use something like
       ;; (call-interactively (key-binding ev))?  --Stef
-      (mouse-yank-at-click ev prefix))))
+      (mouse-yank-primary ev))))
 
 (defun agda2-go-back nil
   "Go back to the previous position in which
@@ -1185,10 +1462,10 @@
 With prefix argument, turn on display of implicit arguments if
 the argument is a positive number, otherwise turn it off."
   (interactive "P")
-  (cond ((eq arg nil)       (agda2-go t t "toggleImplicitArgs"))
+  (cond ((eq arg nil)       (agda2-go t t "ToggleImplicitArgs"))
         ((and (numberp arg)
-              (> arg 0))    (agda2-go t t "showImplicitArgs" "True"))
-        (t                  (agda2-go t t "showImplicitArgs" "False"))))
+              (> arg 0))    (agda2-go t t "ShowImplicitArgs" "True"))
+        (t                  (agda2-go t t "ShowImplicitArgs" "False"))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;
diff --git a/src/data/emacs-mode/agda2-queue.el b/src/data/emacs-mode/agda2-queue.el
new file mode 100644
--- /dev/null
+++ b/src/data/emacs-mode/agda2-queue.el
@@ -0,0 +1,43 @@
+;;; agda2-queue.el --- Simple FIFO character queues.
+
+(defun agda2-queue-empty ()
+  "Creates a new empty FIFO character queue.
+Queues are represented as pairs. The car contains the queue. If
+the queue is empty, then the cdr contains the symbol nil, and
+otherwise it points to the queue's last cons-cell."
+  (cons nil nil))
+
+(defun agda2-queue-is-prefix-of (prefix queue)
+  "Returns a non-nil result iff the string PREFIX is a prefix of QUEUE.
+Linear in the length of PREFIX."
+  (let ((queue  (car queue))
+        (prefix (append prefix nil)))
+    (while (and (consp queue) (consp prefix)
+                (equal (car queue) (car prefix)))
+      (pop queue)
+      (pop prefix))
+    (null prefix)))
+
+(defun agda2-queue-enqueue (queue string)
+  "Adds the characters in STRING to the end of QUEUE.
+This function updates QUEUE destructively, and is linear in the
+length of STRING."
+  (let ((chars (append string nil)))
+    (when (consp chars)
+      (if (null (cdr queue))
+          (setcar queue chars)
+        (setcdr (cdr queue) chars))
+      (setcdr queue (last chars))))
+  queue)
+
+(defun agda2-queue-from-string (string)
+  "Creates a new FIFO containing the characters in STRING.
+Linear in the length of STRING."
+  (agda2-queue-enqueue (agda2-queue-empty) string))
+
+(defun agda2-queue-to-string (queue)
+  "Constructs a string containing all the characters in QUEUE.
+Linear in the length of QUEUE."
+  (concat "" (car queue)))
+
+(provide 'agda2-queue)
diff --git a/src/data/emacs-mode/annotation.el b/src/data/emacs-mode/annotation.el
--- a/src/data/emacs-mode/annotation.el
+++ b/src/data/emacs-mode/annotation.el
@@ -57,10 +57,19 @@
 
 (defun annotation-annotate (start end anns &optional info goto)
   "Annotate text between START and END in the current buffer.
-ANNS are the annotations to apply. All the symbols in ANNS are
-looked up in `annotation-bindings', and the font-lock-face text
-property for the given character range is set to the resulting
-list of faces. If the string INFO is non-nil, the mouse-face
+
+Nothing happens if either START or END are out of bounds for the
+current (possibly narrowed) buffer, or END <= START.
+
+If ANNS is nil, then those text properties between START and END
+that have been set by this function are deleted. Otherwise the
+following happens.
+
+All the symbols in ANNS are looked up in `annotation-bindings',
+and the font-lock-face text property for the given character
+range is set to the resulting list of faces.
+
+If the string INFO is non-nil, the mouse-face
 property is set to highlight, and INFO is used as the help-echo
 string. If GOTO has the form (FILENAME . POSITION), then the
 mouse-face property is set to highlight, and the given
@@ -75,93 +84,94 @@
 annotation-annotations is set to a list with all the properties
 that have been set; this ensures that the text properties can
 later be removed (if the annotation-* properties are not tampered
-with).
-
-Note finally that nothing happens if either START or END are out of
-bounds for the current (possibly narrowed) buffer, or END < START."
+with)."
   (incf start annotations-offset)
   (incf end annotations-offset)
   (when (and (<= (point-min) start)
              (< start end)
              (<= end (point-max)))
-    (let ((faces (delq nil
-                       (mapcar (lambda (ann)
-                                 (cdr (assoc ann annotation-bindings)))
-                               anns)))
-          (props nil))
-      (when faces
-        (put-text-property start end 'font-lock-face faces)
-        (add-to-list 'props 'font-lock-face))
-      (when (consp goto)
-        (add-text-properties start end
-                             `(annotation-goto ,goto
-                               mouse-face highlight))
-        (add-to-list 'props 'annotation-goto)
-        (add-to-list 'props 'mouse-face))
-      (when info
-        (add-text-properties start end
-                             `(mouse-face highlight help-echo ,info))
-        (add-to-list 'props 'mouse-face)
-        (add-to-list 'props 'help-echo))
-      (when props
-        (let ((pos start)
-              mid)
-          (while (< pos end)
-            (setq mid (next-single-property-change pos
-                         'annotation-annotations nil end))
-            (let* ((old-props (get-text-property pos 'annotation-annotations))
-                   (all-props (union old-props props)))
-              (add-text-properties pos mid
-                 `(annotation-annotated t annotation-annotations ,all-props))
-              (setq pos mid))))))))
+    (if (null anns)
+        (annotation-remove-annotations start end)
+      (let ((faces (delq nil
+                         (mapcar (lambda (ann)
+                                   (cdr (assoc ann annotation-bindings)))
+                                 anns)))
+            (props nil))
+        (when faces
+          (put-text-property start end 'font-lock-face faces)
+          (add-to-list 'props 'font-lock-face))
+        (when (consp goto)
+          (add-text-properties start end
+                               `(annotation-goto ,goto
+                                 mouse-face highlight))
+          (add-to-list 'props 'annotation-goto)
+          (add-to-list 'props 'mouse-face))
+        (when info
+          (add-text-properties start end
+                               `(mouse-face highlight help-echo ,info))
+          (add-to-list 'props 'mouse-face)
+          (add-to-list 'props 'help-echo))
+        (when props
+          (let ((pos start)
+                mid)
+            (while (< pos end)
+              (setq mid (next-single-property-change pos
+                           'annotation-annotations nil end))
+              (let* ((old-props (get-text-property pos 'annotation-annotations))
+                     (all-props (union old-props props)))
+                (add-text-properties pos mid
+                   `(annotation-annotated t annotation-annotations ,all-props))
+                (setq pos mid)))))))))
 
 (defmacro annotation-preserve-mod-p-and-undo (&rest code)
-  "Run CODE preserving both the undo data and the modification bit."
+  "Run CODE preserving both the undo data and the modification bit.
+Modification hooks are also disabled."
   (let ((modp (make-symbol "modp")))
   `(let ((,modp (buffer-modified-p))
          ;; Don't check if the file is being modified by some other process.
          (buffer-file-name nil)
          ;; Don't record those changes on the undo-log.
-         (buffer-undo-list t))
+         (buffer-undo-list t)
+         ;; Don't run modification hooks.
+         (inhibit-modification-hooks t))
      (unwind-protect
          (progn ,@code)
        (restore-buffer-modified-p ,modp)))))
 
-(defun annotation-remove-annotations ()
-  "Remove all text properties set by `annotation-annotate' in the current buffer.
-This function preserves the file modification stamp of the current buffer
-and does not modify the undo list.
+(defun annotation-remove-annotations (&optional start end)
+  "Remove all text properties set by `annotation-annotate'.
 
-Note: This function may fail if there is read-only text in the buffer."
+In the current buffer. If START and END are given, then
+properties are only removed between these positions.
 
+This function preserves the file modification stamp of the
+current buffer, does not modify the undo list, and temporarily
+disables all modification hooks.
+
+Note: This function may fail if there is read-only text in the
+buffer."
+
   ;; remove-text-properties fails for read-only text.
 
   (annotation-preserve-mod-p-and-undo
-   (let ((pos (point-min))
+   (let ((pos (or start (point-min)))
          pos2)
      (while pos
-       (setq pos2 (next-single-property-change pos 'annotation-annotated))
+       (setq pos2 (next-single-property-change pos 'annotation-annotated
+                                               nil end))
        (let ((props (get-text-property pos 'annotation-annotations)))
          (when props
            (remove-text-properties pos (or pos2 (point-max))
               (mapcan (lambda (prop) (list prop nil))
                       (append '(annotation-annotated annotation-annotations)
                               props)))))
-       (setq pos pos2)))))
-
-(defun annotation-load-file (file removep &optional goto-help)
-  "Apply the annotations in FILE.
-If FILE is empty, then this function does nothing; otherwise the
-following comments apply.
+       (setq pos (unless (equal pos2 end) pos2))))))
 
-If (`funcall' REMOVEP anns) is non-nil, then all existing text
-properties set by `annotation-annotate' in the current buffer are
-first removed. Here anns is a list containing all the
-annotations (third argument to `annotation-annotate') to be
-applied (in some order, with duplicates removed).
+(defun annotation-load (goto-help &rest cmds)
+  "Apply highlighting annotations in CMDS in the current buffer.
 
-FILE, if non-empty, should contain a list of lists (start end
-anns &optional info goto). Text between start and end will be
+The argument CMDS should be a list of lists (start end anns
+&optional info goto). Text between start and end will be
 annotated with the annotations in the list anns (using
 `annotation-annotate'). If info and/or goto are present they will
 be used as the corresponding arguments to `annotation-annotate'.
@@ -172,28 +182,19 @@
 inform the user about the \"goto\" facility.
 
 This function preserves the file modification stamp of the
-current buffer and does not modify the undo list.
+current buffer, does not modify the undo list, and temporarily
+disables all modification hooks.
 
-Note: This function may fail if there is read-only text in the buffer."
+Note: This function may fail if there is read-only text in the
+buffer."
   (annotation-preserve-mod-p-and-undo
-   (when (file-readable-p file)
-     (let ((cmds (with-temp-buffer
-                    (insert-file-contents file)
-                    (if (eq (point-min) (point-max))
-                        'empty-file
-                      (goto-char (point-min))
-                      (read (current-buffer))))))
-       (when (listp cmds)
-         (let ((anns (delete-dups
-                      (apply 'append (mapcar (lambda (x) (nth 2 x)) cmds)))))
-           (if (funcall removep anns)
-               (annotation-remove-annotations))
-           (dolist (cmd cmds)
-             (destructuring-bind (start end anns &optional info goto) cmd
-               (let ((info (if (and (not info) (consp goto))
-                               goto-help
-                             info)))
-                 (annotation-annotate start end anns info goto))))))))))
+    (when (listp cmds)
+      (dolist (cmd cmds)
+        (destructuring-bind (start end anns &optional info goto) cmd
+          (let ((info (if (and (not info) (consp goto))
+                          goto-help
+                        info)))
+            (annotation-annotate start end anns info goto)))))))
 
 (provide 'annotation)
 ;;; annotation.el ends here
diff --git a/src/full/Agda/Auto/Auto.hs b/src/full/Agda/Auto/Auto.hs
--- a/src/full/Agda/Auto/Auto.hs
+++ b/src/full/Agda/Auto/Auto.hs
@@ -39,6 +39,7 @@
 import qualified Agda.Syntax.Abstract.Name as AN
 import qualified Agda.TypeChecking.Monad.Base as MB
 import Agda.TypeChecking.EtaContract (etaContract)
+import qualified Agda.Utils.HashMap as HMap
 
 import Agda.Auto.Convert
 import Agda.Auto.NarrowingSearch
@@ -163,7 +164,7 @@
                   [] -> case Map.elems tccons of
                    (m, mytype, mylocalVars, _) : [] -> do
                        defdfv <- case thisdefinfo of
-                                  Just (def, _, _) -> fromIntegral `liftM` getdfv mi def
+                                  Just (def, _, _) -> getdfv mi def
                                   Nothing -> return 0
                        ee <- liftIO $ newIORef $ ConstDef {cdname = "T", cdorigin = __IMPOSSIBLE__, cdtype = NotM $ Sort (Set 0), cdcont = Postulate, cddeffreevars = 0}
                        let modargs = drop (length mylocalVars - defdfv) mylocalVars
@@ -196,9 +197,9 @@
                    Just (def, clause, _) -> do
                     let [rectyp'] = mymrectyp
                     defdfv <- getdfv mi def
-                    myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = fromIntegral defdfv}
+                    myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = defdfv}
                     (_, pats) <- constructPats cmap mi clause
-                    defdfv <- fromIntegral `liftM` getdfv mi def
+                    defdfv <- getdfv mi def
                     return $ if contains_constructor pats then
                       (Just (pats, myrecdef), defdfv)
                      else
@@ -285,7 +286,7 @@
                  ticks <- liftIO $ newIORef 0
                  let [rectyp'] = mymrectyp
                  defdfv <- getdfv mi def
-                 myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = fromIntegral defdfv}
+                 myrecdef <- liftIO $ newIORef $ ConstDef {cdname = "", cdorigin = (Nothing, def), cdtype = rectyp', cdcont = Postulate, cddeffreevars = defdfv}
                  sols <- liftIO $ System.Timeout.timeout (timeout * 1000000) (
                     let r d = do
                          sols <- liftIO $ caseSplitSearch ticks __IMPOSSIBLE__ myhints meqr __IMPOSSIBLE__ d myrecdef ctx mytype pats
@@ -304,7 +305,7 @@
                         -- Normalise the dot patterns
                         ps <- addCtxTel tel $ normalise ps
                         body <- etaContractBody body
-                        liftM modifyAbstractClause $ inContext [] $ reify $ NamedClause def $ I.Clause noRange tel perm ps body
+                        liftM modifyAbstractClause $ inContext [] $ reify $ AN.QNamed def $ I.Clause noRange tel perm ps body
                       ) cls'
                      pcs <- withInteractionId ii $ mapM prettyA cls''
                      ticks <- liftIO $ readIORef ticks
@@ -319,11 +320,11 @@
 
             MRefine listmode -> do
              mv <- lookupMeta mi
-             let HasType _ tt = mvJudgement mv
+             let tt = jMetaType $ mvJudgement mv
                  minfo = getMetaInfo mv
              targettyp <- withMetaInfo minfo $ do
               vs <- getContextArgs
-              let targettype = tt `piApply` permute (takeP (fromIntegral $ length vs) $ mvPermutation mv) vs
+              let targettype = tt `piApply` permute (takeP (length vs) $ mvPermutation mv) vs
               normalise targettype
              let tctx = length $ envContext $ clEnv minfo
 
@@ -331,7 +332,7 @@
                st <- liftTCM $ join $ pureTCM $ \st _ -> return st
                let defs = sigDefinitions $ stSignature st
                    idefs = sigDefinitions $ stImports st
-                   alldefs = Map.keys defs ++ Map.keys idefs
+                   alldefs = HMap.keys defs ++ HMap.keys idefs
                liftM catMaybes $ mapM (\n ->
                  case thisdefinfo of
                   Just (def, _, _) | def == n -> return Nothing
@@ -343,7 +344,7 @@
                      c <- getConstInfo n
                      ctyp <- normalise $ defType c
                      cdfv <- withMetaInfo minfo $ getDefFreeVars n
-                     return $ case matchType cdfv (fromIntegral tctx) ctyp targettyp of
+                     return $ case matchType cdfv tctx ctyp targettyp of
                       Nothing -> Nothing
                       Just score -> Just (show cn, score)
                 ) alldefs
@@ -359,7 +360,7 @@
                  c <- getConstInfo n
                  ctyp <- normalise $ defType c
                  cdfv <- withMetaInfo minfo $ getDefFreeVars n
-                 return $ case matchType cdfv (fromIntegral tctx) ctyp targettyp of
+                 return $ case matchType cdfv tctx ctyp targettyp of
                   Nothing -> Nothing
                   Just score -> Just (show cn, score)
                 ) modnames
diff --git a/src/full/Agda/Auto/Convert.hs b/src/full/Agda/Auto/Convert.hs
--- a/src/full/Agda/Auto/Convert.hs
+++ b/src/full/Agda/Auto/Convert.hs
@@ -23,7 +23,7 @@
 import Agda.Utils.Permutation (Permutation(Perm), idP, permute, takeP)
 import Agda.Interaction.BasicOps (rewrite, Rewrite(..))
 import Agda.TypeChecking.Level (reallyUnLevelView)
-import Agda.TypeChecking.Monad.Base (mvJudgement, mvPermutation, getMetaInfo, ctxEntry, envContext, clEnv, Judgement(HasType))
+import Agda.TypeChecking.Monad.Base (mvJudgement, mvPermutation, getMetaInfo, ctxEntry, envContext, clEnv)
 import Agda.TypeChecking.Monad.MetaVars (lookupMeta, withMetaInfo)
 import Agda.TypeChecking.Monad.Context (getContextArgs)
 import Agda.TypeChecking.Monad.Constraints (getAllConstraints)
@@ -33,6 +33,7 @@
 import Agda.TypeChecking.EtaContract (etaContract)
 import Agda.TypeChecking.Primitive (constructorForm)
 import Agda.TypeChecking.Free (freeIn)
+import qualified Agda.Utils.HashMap as HMap
 
 import Agda.Auto.NarrowingSearch
 import Agda.Auto.Syntax
@@ -98,7 +99,8 @@
        cons2 <- mapM (\con -> getConst True con TMAll) cons
        return (Datatype cons2 [], [])
       MB.Record {MB.recFields = fields, MB.recTel = tel} -> do -- the value of recPars seems unreliable or don't know what it signifies
-       let pars n (I.El _ (I.Pi it typ)) = C.Arg (C.argHiding it) (C.argRelevance it) (I.Var n []) : pars (n - 1) (I.unAbs typ)
+       let pars n (I.El _ (I.Pi it typ)) = C.Arg (C.domHiding it) (C.domRelevance it) (I.var n) : pars (n - 1) (I.unAbs typ)
+           pars n (I.El s (I.Shared p))  = pars n (I.El s (I.derefPtr p))
            pars _ (I.El _ _) = []
            contyp npar I.EmptyTel = I.El (I.mkType 0 {- arbitrary -}) (I.Def cn (pars (npar - 1) typ))
            contyp npar (I.ExtendTel it (I.Abs v tel)) = I.El (I.mkType 0 {- arbitrary -}) (I.Pi it (I.Abs v (contyp (npar + 1) tel)))
@@ -143,12 +145,12 @@
          m <- getMeta mi
          sol' <- tomyExp sol
          modify $ \s -> s {sEqs = (Map.insert (Map.size (fst $ sEqs s)) (Just (False, Meta m, sol')) (fst $ sEqs s), snd $ sEqs s)}
-       let HasType _ tt = mvJudgement mv
+       let tt = MB.jMetaType $ mvJudgement mv
            minfo = getMetaInfo mv
-           localVars = map (snd . C.unArg . ctxEntry) . envContext . clEnv $ minfo
+           localVars = map (snd . C.unDom . ctxEntry) . envContext . clEnv $ minfo
        (targettype, localVars) <- lift $ withMetaInfo minfo $ do
         vs <- getContextArgs
-        let targettype = tt `piApply` permute (takeP (fromIntegral $ length vs) $ mvPermutation mv) vs
+        let targettype = tt `piApply` permute (takeP (length vs) $ mvPermutation mv) vs
         targettype <- norm targettype
         localVars <- mapM norm localVars
         return (targettype, localVars)
@@ -204,9 +206,9 @@
     Nothing -> do
      mainm <- gets sMainMeta
      dfv <- lift $ getdfv mainm name
-     let nomi = fromIntegral $ I.arity (MB.defType def)
-     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = show name ++ ".CONS", cdorigin = (Just nomi, conname), cdtype = __IMPOSSIBLE__, cdcont = Constructor (nomi - fromIntegral dfv), cddeffreevars = fromIntegral dfv}) -- ?? correct value of deffreevars for records?
-     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Nothing, name), cdtype = __IMPOSSIBLE__, cdcont = Datatype [ccon] [], cddeffreevars = fromIntegral dfv}) -- ?? correct value of deffreevars for records?
+     let nomi = I.arity (MB.defType def)
+     ccon <- lift $ liftIO $ newIORef (ConstDef {cdname = show name ++ ".CONS", cdorigin = (Just nomi, conname), cdtype = __IMPOSSIBLE__, cdcont = Constructor (nomi - dfv), cddeffreevars = dfv}) -- ?? correct value of deffreevars for records?
+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = show name, cdorigin = (Nothing, name), cdtype = __IMPOSSIBLE__, cdcont = Datatype [ccon] [], cddeffreevars = dfv}) -- ?? correct value of deffreevars for records?
      modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})
      return $ if iscon then ccon else c
   _ -> do
@@ -217,12 +219,12 @@
     Nothing -> do
      (miscon, sname) <- if iscon then do
        let MB.Constructor {MB.conPars = npar, MB.conData = dname} = MB.theDef def
-       return (Just (fromIntegral npar), show dname ++ "." ++ show (I.qnameName name))
+       return (Just npar, show dname ++ "." ++ show (I.qnameName name))
       else
        return (Nothing, show name)
      mainm <- gets sMainMeta
      dfv <- lift $ getdfv mainm name
-     c <- lift $ liftIO $ newIORef (ConstDef {cdname = sname, cdorigin = (miscon, name), cdtype = __IMPOSSIBLE__, cdcont = __IMPOSSIBLE__, cddeffreevars = fromIntegral dfv})
+     c <- lift $ liftIO $ newIORef (ConstDef {cdname = sname, cdorigin = (miscon, name), cdtype = __IMPOSSIBLE__, cdcont = __IMPOSSIBLE__, cddeffreevars = dfv})
      modify (\s -> s {sConsts = (Map.insert name (mode, c) cmap, name : snd (sConsts s))})
      return c
 
@@ -346,7 +348,7 @@
 tomyExp :: I.Term -> TOM (MExp O)
 tomyExp (I.Var v as) = do
  as' <- tomyExps as
- return $ NotM $ App Nothing (NotM OKVal) (Var $ fromIntegral v) as'
+ return $ NotM $ App Nothing (NotM OKVal) (Var v) as'
 tomyExp (I.Lam hid b) = do
  b' <- tomyExp (I.absBody b)
  return $ NotM $ Lam (cnvh hid) (Abs (Id $ I.absName b) b')
@@ -367,7 +369,7 @@
  cc <- lift $ liftIO $ readIORef c
  let Just npar = fst $ cdorigin cc
  return $ NotM $ App Nothing (NotM OKVal) (Const c) (foldl (\x _ -> NotM $ ALConPar x) as' [1..npar])
-tomyExp (I.Pi (C.Arg hid _ x) b) = do
+tomyExp (I.Pi (C.Dom hid _ x) b) = do
  let y    = I.absBody b
      name = I.absName b
  x' <- tomyType x
@@ -388,6 +390,7 @@
    return $ Meta m
   _ -> tomyExp t
 tomyExp (I.DontCare _) = return $ NotM $ dontCare
+tomyExp (I.Shared p) = tomyExp $ I.derefPtr p
 
 tomyExps [] = return $ NotM ALNil
 tomyExps (C.Arg hid _ a : as) = do
@@ -410,10 +413,11 @@
 fmExp m (I.Level (I.Max as)) = any (fmLevel m) as
 fmExp m (I.Def _ as) = fmExps m as
 fmExp m (I.Con _ as) = fmExps m as
-fmExp m (I.Pi x y)  = fmType m (C.unArg x) || fmType m (I.unAbs y)
+fmExp m (I.Pi x y)  = fmType m (C.unDom x) || fmType m (I.unAbs y)
 fmExp m (I.Sort _) = False
 fmExp m (I.MetaV mid _) = mid == m
 fmExp m (I.DontCare _) = False
+fmExp m (I.Shared p) = fmExp m $ I.derefPtr p
 
 fmExps m [] = False
 fmExps m (a : as) = fmExp m (C.unArg a) || fmExps m as
@@ -453,7 +457,7 @@
 frommyExp (NotM e) =
  case e of
   App _ _ (Var v) as ->
-   frommyExps 0 as (I.Var (fromIntegral v) [])
+   frommyExps 0 as (I.Var v [])
   App _ _ (Const c) as -> do
    cdef <- lift $ readIORef c
    let (iscon, name) = cdorigin cdef
@@ -465,7 +469,7 @@
   Pi _ hid _ x (Abs mid y) -> do
    x' <- frommyType x
    y' <- frommyType y
-   return $ I.Pi (C.Arg (icnvh hid) C.Relevant x') (I.Abs (case mid of {NoId -> "x"; Id id -> id}) y')
+   return $ I.Pi (C.Dom (icnvh hid) C.Relevant x') (I.Abs (case mid of {NoId -> "x"; Id id -> id}) y')
    -- maybe have case for Pi where possdep is False which produces Fun (and has to unweaken y), return $ I.Fun (C.Arg (icnvh hid) x') y'
   Sort (Set l) ->
    return $ I.Sort (I.mkType (fromIntegral l))
@@ -506,6 +510,7 @@
   addend x (I.Var h xs) = I.Var h (xs ++ [x])
   addend x (I.Con h xs) = I.Con h (xs ++ [x])
   addend x (I.Def h xs) = I.Def h (xs ++ [x])
+  addend x (I.Shared p) = addend x (I.derefPtr p)
   addend _ _ = __IMPOSSIBLE__
 
 -- --------------------------------
@@ -562,7 +567,7 @@
       let Id id = mid
       tel <- ctel ctx
       t' <- frommyType t
-      return $ I.ExtendTel (C.Arg (icnvh hid) C.Relevant t') (I.Abs id tel)
+      return $ I.ExtendTel (C.Dom (icnvh hid) C.Relevant t') (I.Abs id tel)
  tel <- ctel $ reverse ids
  let getperms 0 [] perm nv = return (perm, nv)
      getperms n [] _ _ = __IMPOSSIBLE__
@@ -677,7 +682,7 @@
 findClauseDeep m = do
   sig <- getImportedSignature
   let res = do
-        def <- Map.elems $ MB.sigDefinitions sig
+        def <- HMap.elems $ MB.sigDefinitions sig
         MB.Function{MB.funClauses = cs} <- [MB.theDef def]
         c <- cs
         unless (peelbinds False findMeta $ I.clauseBody c) []
@@ -692,43 +697,44 @@
                   I.NoBody -> d
                   I.Body e -> f e
     findMeta e =
-     case e of
+     case I.ignoreSharing e of
       I.Var _ as -> findMetas as
       I.Lam _ b -> findMeta (I.absBody b)
       I.Lit{} -> False
       I.Level (I.Max as) -> any (fmLevel m) as
       I.Def _ as -> findMetas as
       I.Con _ as -> findMetas as
-      I.Pi it ot -> findMetat (C.unArg it) || findMetat (I.unAbs ot)
+      I.Pi it ot -> findMetat (C.unDom it) || findMetat (I.unAbs ot)
       I.Sort{} -> False
       I.MetaV m' _  -> m == m'
       I.DontCare _ -> False
+      I.Shared{} -> __IMPOSSIBLE__
     findMetas = any (findMeta . C.unArg)
     findMetat (I.El _ e) = findMeta e
     toplevel e =
-     case e of
+     case I.ignoreSharing e of
       I.MetaV{} -> True
       _ -> False
 
 -- ---------------------------------------
 
-matchType :: Integer -> Integer -> I.Type -> I.Type -> Maybe (Nat, Nat) -- Nat is deffreevars of const, Nat is ctx length of target type, left arg is const type, right is target type
+matchType :: Int -> Int -> I.Type -> I.Type -> Maybe (Nat, Nat) -- Nat is deffreevars of const, Nat is ctx length of target type, left arg is const type, right is target type
 matchType cdfv tctx ctyp ttyp = trmodps cdfv ctyp
  where
   trmodps 0 ctyp = tr 0 0 ctyp
-  trmodps n ctyp = case ctyp of
-   I.El _ (I.Pi _ ot) -> trmodps (n - 1) (I.absBody ot)
+  trmodps n ctyp = case I.ignoreSharing $ I.unEl ctyp of
+   I.Pi _ ot -> trmodps (n - 1) (I.absBody ot)
    _ -> __IMPOSSIBLE__
   tr narg na ctyp =
    case ft 0 0 Just ctyp ttyp of
     Just n -> Just (n, narg)
-    Nothing -> case ctyp of
-     I.El _ (I.Pi _ (I.Abs _ ot)) -> tr (narg + 1) (na + 1) ot
-     I.El _ (I.Pi _ (I.NoAbs _ ot)) -> tr (narg + 1) na ot
+    Nothing -> case I.ignoreSharing $ I.unEl ctyp of
+     I.Pi _ (I.Abs _ ot) -> tr (narg + 1) (na + 1) ot
+     I.Pi _ (I.NoAbs _ ot) -> tr (narg + 1) na ot
      _ -> Nothing
    where
     ft nl n c (I.El _ e1) (I.El _ e2) = f nl n c e1 e2
-    f nl n c e1 e2 = case e1 of
+    f nl n c e1 e2 = case I.ignoreSharing e1 of
      I.Var v1 as1 | v1 < nl -> case e2 of
       I.Var v2 as2 | v1 == v2 -> fs nl (n + 1) c as1 as2
       _ -> Nothing
@@ -736,14 +742,14 @@
      I.Var v1 as1 -> case e2 of
       I.Var v2 as2 | cdfv + na + nl - v1 == tctx + nl - v2 -> fs nl (n + 1) c as1 as2
       _ -> Nothing
-     _ -> case (e1, e2) of
+     _ -> case (I.ignoreSharing e1, I.ignoreSharing e2) of
       (I.MetaV{}, _) -> c n
       (_, I.MetaV{}) -> c n
       (I.Lam hid1 b1, I.Lam hid2 b2) | hid1 == hid2 -> f (nl + 1) n c (I.absBody b1) (I.absBody b2)
       (I.Lit lit1, I.Lit lit2) | lit1 == lit2 -> c (n + 1)
       (I.Def n1 as1, I.Def n2 as2) | n1 == n2 -> fs nl (n + 1) c as1 as2
       (I.Con n1 as1, I.Con n2 as2) | n1 == n2 -> fs nl (n + 1) c as1 as2
-      (I.Pi (C.Arg hid1 rel1 it1) ot1, I.Pi (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (I.absBody ot2)) it1 it2
+      (I.Pi (C.Dom hid1 rel1 it1) ot1, I.Pi (C.Dom hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (I.absBody ot2)) it1 it2
       (I.Sort{}, I.Sort{}) -> c n -- sloppy
       _ -> Nothing
     fs nl n c es1 es2 = case (es1, es2) of
diff --git a/src/full/Agda/Compiler/CallCompiler.hs b/src/full/Agda/Compiler/CallCompiler.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Compiler/CallCompiler.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE CPP #-}
+
+------------------------------------------------------------------------
+-- | A command which calls a compiler
+------------------------------------------------------------------------
+
+module Agda.Compiler.CallCompiler where
+
+import qualified Control.Exception as E
+import Control.Monad.Trans
+import Data.List as L
+import System.Exit
+import System.IO
+import System.Process
+
+import Agda.TypeChecking.Monad
+
+import Agda.Utils.Impossible
+#include "../undefined.h"
+
+-- | Calls a compiler:
+--
+-- * Checks the exit code to see if the compiler exits successfully.
+--   If not, then an exception is raised, containing the text the
+--   compiler printed to stderr (if any).
+--
+-- * Uses the debug printout machinery to relay any progress
+--   information the compiler prints to stdout.
+
+callCompiler
+  :: FilePath
+     -- ^ The path to the compiler
+  -> [String]
+     -- ^ Command-line arguments.
+  -> TCM ()
+callCompiler cmd args = do
+  merrors <- callCompiler' cmd args
+  case merrors of
+    Nothing     -> return ()
+    Just errors -> typeError (CompilationError errors)
+
+-- | Generalisation of @callCompiler@ where the raised exception is
+-- returned.
+callCompiler'
+  :: FilePath
+     -- ^ The path to the compiler
+  -> [String]
+     -- ^ Command-line arguments.
+  -> TCM (Maybe String)
+callCompiler' cmd args = do
+  reportSLn "" 1 $ "Calling: " ++ intercalate " " (cmd : args)
+  (_, out, err, p) <-
+    liftIO $ createProcess
+               (proc cmd args) { std_err = CreatePipe
+                               , std_out = CreatePipe
+                               }
+
+  -- In -v0 mode we throw away any progress information printed to
+  -- stdout.
+  case out of
+    Nothing  -> __IMPOSSIBLE__
+    Just out -> forkTCM $ do
+      -- The handle should be in text mode.
+      liftIO $ hSetBinaryMode out False
+      progressInfo <- liftIO $ hGetContents out
+      mapM_ (reportSLn "" 1) $ lines progressInfo
+
+  errors <- liftIO $ case err of
+    Nothing  -> __IMPOSSIBLE__
+    Just err -> do
+      -- The handle should be in text mode.
+      hSetBinaryMode err False
+      hGetContents err
+
+  exitcode <- liftIO $ do
+    -- Ensure that the output has been read before waiting for the
+    -- process.
+    E.evaluate (length errors)
+    waitForProcess p
+
+  case exitcode of
+    ExitFailure _ -> return $ Just errors
+    _             -> return Nothing
diff --git a/src/full/Agda/Compiler/Epic/CompileState.hs b/src/full/Agda/Compiler/Epic/CompileState.hs
--- a/src/full/Agda/Compiler/Epic/CompileState.hs
+++ b/src/full/Agda/Compiler/Epic/CompileState.hs
@@ -27,6 +27,7 @@
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 import Agda.Utils.Monad
+import qualified Agda.Utils.HashMap as HM
 
 
 -- | Stuff we need in our compiler
@@ -67,7 +68,7 @@
 getType :: QName -> Compile TCM Type
 getType q = do
     map <- lift (gets (sigDefinitions . stImports))
-    return $ maybe __IMPOSSIBLE__ defType (M.lookup q map)
+    return $ maybe __IMPOSSIBLE__ defType (HM.lookup q map)
 
 -- | Create a name which can be used in Epic code from a QName.
 unqname :: QName -> Var
@@ -109,7 +110,7 @@
 getConData :: QName -> Compile TCM QName
 getConData con = do
     lmap <- lift (gets (TM.sigDefinitions . TM.stImports))
-    case M.lookup con lmap of
+    case HM.lookup con lmap of
         Just def -> case theDef def of
             c@(TM.Constructor{}) -> return $ TM.conData c
             _                 -> __IMPOSSIBLE__
@@ -118,7 +119,7 @@
 getDataCon :: QName -> Compile TCM [QName]
 getDataCon con = do
     lmap <- lift (gets (TM.sigDefinitions . TM.stImports))
-    case M.lookup con lmap of
+    case HM.lookup con lmap of
         Just def -> case theDef def of
             d@(TM.Datatype{}) -> return $ TM.dataCons d
             r@(TM.Record{})   -> return [ TM.recCon r]
diff --git a/src/full/Agda/Compiler/Epic/Compiler.hs b/src/full/Agda/Compiler/Epic/Compiler.hs
--- a/src/full/Agda/Compiler/Epic/Compiler.hs
+++ b/src/full/Agda/Compiler/Epic/Compiler.hs
@@ -13,23 +13,28 @@
 import Data.Maybe
 import Data.Monoid
 import qualified Language.Haskell.Exts.Syntax as Haskell
-import System.Directory
+import System.Directory ( canonicalizePath, createDirectoryIfMissing
+                        , getCurrentDirectory, setCurrentDirectory
+                        )
 import System.Exit
 import System.FilePath hiding (normalise)
 import System.Process hiding (env)
 
 import Paths_Agda
+import Agda.Compiler.CallCompiler
 import Agda.Compiler.MAlonzo.Pretty -- TODO: Move shared code to Compiler.*
 import Agda.Compiler.MAlonzo.Primitives (checkTypeOfMain)
 import Agda.Interaction.FindFile
 import Agda.Interaction.Options
 import Agda.Interaction.Imports
+import Agda.Syntax.Common (Delayed(..))
 import qualified Agda.Syntax.Concrete.Name as CN
 import Agda.Syntax.Internal hiding (Term(..))
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Serialise
 import Agda.Utils.FileName
+import qualified Agda.Utils.HashMap as HMap
 
 import qualified Agda.TypeChecking.Pretty as P
 
@@ -120,7 +125,7 @@
                         "Compiling: " ++ show (iModuleName i)
                     resetNameSupply
                     initialAnalysis i
-                    let defns = M.toList $ sigDefinitions $ iSignature i
+                    let defns = HMap.toList $ sigDefinitions $ iSignature i
                     -- Epic cannot parse files with no definitions
                     if (not $ null defns) then do
                         code <- compileDefns defns
@@ -142,7 +147,7 @@
 initialAnalysis inter = do
   Prim.initialPrims
   modify $ \s -> s {curModule = mempty}
-  let defs = M.toList $ sigDefinitions $ iSignature inter
+  let defs = HMap.toList $ sigDefinitions $ iSignature inter
   forM_ defs $ \(q, def) -> do
     addDefName q
     case theDef def of
@@ -154,7 +159,7 @@
                 putConstrTag suc (PrimTag "primSuc")
             _ -> return ()
       Constructor {conPars = np} -> do
-        putForcedArgs q . drop (fromIntegral np) . ForceC.makeForcedArgs $ defType def
+        putForcedArgs q . drop np . ForceC.makeForcedArgs $ defType def
         putConArity q =<< lift (constructorArity q)
       f@(Function{}) -> do
         when ("main" == show (qnameName q)) $ do
@@ -256,10 +261,5 @@
           -- , "-trace"
           , "-i", dataDir </> "stdagda" <.> "c"
           ] ++ flags epicFlags
-    lift $ reportSLn "" 1 $
-      "calling: " ++ unwords (epic : epicCommand)
-    res <- liftIO $ system (unwords (epic : epicCommand))
-                  -- rawSystem epic epicCommand
-    case res of
-        ExitSuccess   -> return ()
-        ExitFailure i -> epicError $ "Epic returned " ++ show res ++ ", which should not happen. Please report this as a bug."
+
+    lift $ callCompiler epic epicCommand
diff --git a/src/full/Agda/Compiler/Epic/Epic.hs b/src/full/Agda/Compiler/Epic/Epic.hs
--- a/src/full/Agda/Compiler/Epic/Epic.hs
+++ b/src/full/Agda/Compiler/Epic/Epic.hs
@@ -103,7 +103,7 @@
 prettyEpicLit l = case l of
     LInt n    -> show n ++ "L"
     LChar c   -> show (ord c)
-    LString s -> "Con 1" <+> many [show s, "Con 0 ()"]
+    LString s -> show s
     LFloat f  -> show f
 
 typVar :: Var -> String
diff --git a/src/full/Agda/Compiler/Epic/Erasure.hs b/src/full/Agda/Compiler/Epic/Erasure.hs
--- a/src/full/Agda/Compiler/Epic/Erasure.hs
+++ b/src/full/Agda/Compiler/Epic/Erasure.hs
@@ -137,9 +137,9 @@
         SI.Pi  a b -> mkRel a : initialRels (SI.unAbs b) rel
         _       -> []
   where
-    mkRel :: SC.Arg SI.Type -> Relevance
-    mkRel a | ignoreForced (SC.argRelevance a) = Irr
-    mkRel a = case SI.unEl (SC.unArg a) of
+    mkRel :: SC.Dom SI.Type -> Relevance
+    mkRel a | ignoreForced (SC.domRelevance a) = Irr
+    mkRel a = case SI.unEl (SC.unDom a) of
        SI.Sort _ -> Irr
        _         -> rel
 
diff --git a/src/full/Agda/Compiler/Epic/ForceConstrs.hs b/src/full/Agda/Compiler/Epic/ForceConstrs.hs
--- a/src/full/Agda/Compiler/Epic/ForceConstrs.hs
+++ b/src/full/Agda/Compiler/Epic/ForceConstrs.hs
@@ -23,10 +23,11 @@
     T.Pi  arg ab  -> isRel arg : makeForcedArgs (T.unAbs ab)
     _ -> []
   where
-    isRel :: S.Arg T.Type -> Forced
-    isRel arg = case S.argRelevance arg of
+    isRel :: S.Dom T.Type -> Forced
+    isRel arg = case S.domRelevance arg of
       S.Relevant   -> NotForced
       S.Irrelevant -> Forced
+      S.UnusedArg  -> Forced
       S.NonStrict  -> Forced -- can never be executed
       S.Forced     -> Forced -- It can be inferred
 
diff --git a/src/full/Agda/Compiler/Epic/Forcing.hs b/src/full/Agda/Compiler/Epic/Forcing.hs
--- a/src/full/Agda/Compiler/Epic/Forcing.hs
+++ b/src/full/Agda/Compiler/Epic/Forcing.hs
@@ -20,7 +20,8 @@
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Rules.LHS.Unify
 import Agda.TypeChecking.Rules.LHS.Instantiate
-import Agda.TypeChecking.Substitute (raiseFrom, raise, substs, apply, TelV(..))
+import Agda.TypeChecking.Substitute
+  (raiseFrom, raise, applySubst, apply, wkS, raiseS, dropS, (++#), TelV(..))
 import qualified Agda.TypeChecking.Substitute as S
 import Agda.TypeChecking.Pretty as P
 import Agda.TypeChecking.Reduce
@@ -29,6 +30,7 @@
 import Agda.Utils.Monad
 import Agda.Utils.Permutation
 import Agda.Utils.Size
+import qualified Agda.Utils.HashMap as HM
 
 import Agda.Compiler.Epic.AuxAST
 import Agda.Compiler.Epic.CompileState
@@ -48,7 +50,7 @@
 dataParametersTCM :: QName -> TCM Nat
 dataParametersTCM name = do
     m <- (gets (sigDefinitions . stImports))
-    return $ maybe __IMPOSSIBLE__ (defnPars . theDef) (M.lookup name m)
+    return $ maybe __IMPOSSIBLE__ (defnPars . theDef) (HM.lookup name m)
   where
     defnPars :: Defn -> Nat
     defnPars (Datatype {dataPars = p}) = p
@@ -100,7 +102,7 @@
       , text "term:" <+> prettyTCM term
       , text "to:"   <+> prettyTCM (unAbs to)
       ]
-    (st, arg) <- case SI.unEl . unArg $ t' of
+    (st, arg) <- case SI.unEl . unDom $ t' of
             SI.Def st arg -> return (st, arg)
             s          -> do
               report 10 $ vcat
@@ -113,15 +115,18 @@
     -- Because: parameters occurs in the type of constructors but are not bound by it.
     pars <- dataParameters st
     report 10 $ text "apply in insertTele"
-    TelV ctele ctyp <- lift $ telView =<< maybe (return $ unArg t')
-                            (`piApplyM'` take (fromIntegral pars) arg) ins
-
+    TelV ctele ctyp <- lift $ telView =<< maybe (return $ unDom t')
+                            (`piApplyM'` genericTake pars arg) ins
+--                            (`piApplyM'` take (fromIntegral pars) arg) ins
+{- OLD CODE:
     () <- if length (take (fromIntegral pars) arg) == fromIntegral pars
         then return ()
         else __IMPOSSIBLE__
+-}
+    when (genericLength arg < pars) __IMPOSSIBLE__
     -- we deal with absBody to directly since we remove t
     return ( ctele +:+  (S.subst term $ S.raiseFrom 1 (size ctele) (unAbs to))
-           , (ctele, S.raise (size ctele) $ unArg t , ctyp)
+           , (ctele, S.raise (size ctele) $ unDom t , ctyp)
            )
   where
     -- Append the telescope, we raise since we add a new binding and all the previous
@@ -149,7 +154,7 @@
 remForced fs = do
     defs <- lift (gets (sigDefinitions . stImports))
     forM fs $ \f -> case f of
-        Fun{} -> case funQName f >>= flip M.lookup defs of
+        Fun{} -> case funQName f >>= flip HM.lookup defs of
             Nothing -> __IMPOSSIBLE__
             Just def -> do
                 TelV tele _ <- lift $ telView (defType def)
@@ -201,32 +206,26 @@
                     -- unify the telescope type with the return type of the constructor
                     unif <- case (unEl ntyp, unEl ctyp) of
                         (SI.Def st a1, SI.Def st' a2) | st == st' -> do
-                            typPars <- fromIntegral <$> dataParameters st
+                            typPars <- dataParameters st
                             setType <- getType st
                             report 10 $ vcat
                               [ text "ntyp:" <+> prettyTCM ntyp
                               , text "ctyp:" <+> prettyTCM ctyp
                               ]
                             unifyI (takeTele (n + length as) tele'')
-                                   (map fromIntegral $ [0 .. n + length as])
+                                   [0 .. n + length as]
                                    (setType `apply` take typPars a1)
                                    (drop typPars a1)
                                    (drop typPars a2)
                         _ -> __IMPOSSIBLE__
                     let
-                        lower = map (raise (-1)) . drop 1
-                        isOk t = case t of
-                          SI.Var n xs | n >= 0 -> all (isOk . unArg) xs
-                          SI.Con _ xs -> all (isOk . unArg) xs
-                          SI.Def f xs -> all (isOk . unArg) xs
-                          _ -> error $ show t
+                        lower = wkS (-1) . dropS 1
                         subT 0 tel = let ss = [fromMaybe (SI.Var n []) t
-                                              | (n , t) <- zip [0..] (unif ++ repeat Nothing)]
-                                      in (S.substs ss tel, lower ss)
+                                                | (n , t) <- zip [0..] unif] ++#
+                                              raiseS (length unif)
+                                      in (applySubst ss tel, lower ss)
                         subT n (ExtendTel a t) = let
                                (tb' , ss) = subT (n - 1) (unAbs t)
-                               a' | all isOk (take 100 ss) = S.substs ss a
-                                  | True    = __IMPOSSIBLE__
                             in (ExtendTel a $ Abs (absName t) tb', lower ss)
                         subT _ _ = __IMPOSSIBLE__
                         (tele'''', _) = subT (n + length as) tele''
@@ -251,7 +250,7 @@
 replaceForced (vars,_) tele [] _ e = forcedExpr vars tele e
 replaceForced (vars,uvars) tele (fvar : fvars) unif e = do
     let n = fromMaybe __IMPOSSIBLE__ $ elemIndex fvar uvars
-    mpos <- findPosition (fromIntegral n) unif
+    mpos <- findPosition n unif
     case mpos of
         Nothing -> case unif !! n of
             Nothing | fvar `notElem` fv e ->
@@ -271,7 +270,7 @@
                 subst fvar v <$> replaceForced (vars, uvars)
                                                tele fvars unif (Let v te e)
         Just (pos , term) -> do
-            (build, v) <- buildTerm (uvars !! fromInteger pos) (fromIntegral n) term
+            (build, v) <- buildTerm (uvars !! pos) n term
             build . subst fvar v <$> replaceForced (vars, uvars) tele fvars unif
                                      e
   where
@@ -284,7 +283,7 @@
 buildTerm var idx (SI.Con c args) = do
     vs <- replicateM (length args) newName
     (pos , arg) <- fromMaybe __IMPOSSIBLE__ <$> findPosition idx (map (Just . unArg) args)
-    (fun' , v) <- buildTerm (vs !! fromInteger pos) idx arg
+    (fun' , v) <- buildTerm (vs !! pos) idx arg
     tag <- getConstrTag c
     let fun e = casee (Var var) [Branch tag c vs e]
     return (fun . fun' , v)
diff --git a/src/full/Agda/Compiler/Epic/FromAgda.hs b/src/full/Agda/Compiler/Epic/FromAgda.hs
--- a/src/full/Agda/Compiler/Epic/FromAgda.hs
+++ b/src/full/Agda/Compiler/Epic/FromAgda.hs
@@ -43,13 +43,13 @@
       epDef = compiledEpic $ defCompiledRep defini
   in case theDef defini of
     d@(Datatype {}) -> do -- become functions returning unit
-        vars <- replicateM (fromIntegral $ dataPars d + dataIxs d) newName
+        vars <- replicateM (dataPars d + dataIxs d) newName
         return . return $ Fun True n' (Just n) ("datatype: " ++ show n) vars UNIT
     f@(Function{}) -> do
         let projArgs = maybe 0 (pred . snd) (funProjection f)
         ccs  <- reverseCCBody projArgs <$> normaliseStatic (funCompiled f)
         let len   = (+ projArgs) . length . clausePats . head .  funClauses $ f
-            toEta = fromIntegral (arity (defType defini)) - len
+            toEta = arity (defType defini) - len
         -- forcing <- lift $ gets (optForcing . stPersistentOptions)
         lift $ reportSDoc "epic.fromagda" 5 $ text "compiling fun:" <+> prettyTCM n
         lift $ reportSDoc "epic.fromagda" 5 $ text "len:" <+> (text . show) len
@@ -71,7 +71,7 @@
           Just (T.Def sharp []) | sharp == n -> return <$> mkFun n n' "primSharp" 3
           _    -> return <$> mkCon n tag arit
     r@(Record{}) -> do
-        vars <- replicateM (fromIntegral $ recPars r) newName
+        vars <- replicateM (recPars r) newName
         return . return $ Fun True n' (Just n) ("record: " ++ show n) vars UNIT
     a@(Axiom{}) -> do -- Axioms get their code from COMPILED_EPIC pragmas
         case epDef of
@@ -80,7 +80,7 @@
             Just x  -> return . return $ EpicFun n' (Just n) ("COMPILED_EPIC: " ++ show n) x
     p@(Primitive{}) -> do -- Primitives use primitive functions from AgdaPrelude.e of the same name.
                           -- Hopefully they are defined!
-      let ar = fromIntegral $ arity $ defType defini
+      let ar = arity $ defType defini
       return <$> mkFun n n' (primName p) ar
   where
     mkFun q = mkFunGen q apps ("primitive: " ++)
@@ -129,11 +129,13 @@
 reverseCCBody :: Int -> CC.CompiledClauses -> CC.CompiledClauses
 reverseCCBody c cc = case cc of
     CC.Case n (CC.Branches cbr lbr cabr) -> CC.Case (c+n)
-        $ CC.Branches (M.map (reverseCCBody c) cbr)
+        $ CC.Branches (M.map (fmap $ reverseCCBody c) cbr)
           (M.map (reverseCCBody c) lbr)
           (fmap  (reverseCCBody c) cabr)
-    CC.Done i t -> CC.Done i (S.substs (map (flip T.Var [])
-                               (reverse $ take (length i) [fromIntegral c..])) t)
+    CC.Done i t -> CC.Done i (S.applySubst
+                                (S.parallelS $ map (flip T.Var []) $
+                                   reverse $ take (length i) [c..])
+                                t)
     CC.Fail     -> CC.Fail
 
 -- | Translate from Agda's desugared pattern matching (CompiledClauses) to our AuxAST.
@@ -200,8 +202,8 @@
                    -- TODO: Handle other literals
                    _ -> epicError $ "case on literal not supported: " ++ show l
            -- Con branch
-           else forM (M.toList (CC.conBranches nc)) $ \(b, cc) -> do
-               arit  <- getConArity b
+           else forM (M.toList (CC.conBranches nc)) $ \(b, CC.WithArity ar cc) -> do
+               arit  <- getConArity b -- Andreas, 2012-10-12: is the constructor arity @ar@ from Agda the same as the one from the Epic backen?
                tag  <- getConstrTag b
                vars <- replicateM arit newName
                cc'  <- compileClauses' (replaceAt casedvar env vars) omniDefault cc
@@ -217,9 +219,9 @@
 --   names in the position.
 substTerm :: [Var] -> T.Term -> Compile TCM Expr
 substTerm env term = case term of
-    T.Var ind args -> case length env <= fromIntegral ind of
+    T.Var ind args -> case length env <= ind of
         True  -> __IMPOSSIBLE__
-        False -> apps (env !! fromIntegral ind) <$> mapM (substTerm env . unArg) args
+        False -> apps (env !! ind) <$> mapM (substTerm env . unArg) args
     T.Lam _ (Abs _ te) -> do
        name <- newName
        Lam name <$> substTerm (name : env) te
@@ -242,6 +244,7 @@
     T.Con q args -> do
         let con = unqname q
         apps con <$> mapM (substTerm env . unArg) args
+    T.Shared p -> substTerm env $ derefPtr p
     T.Pi _ _ -> return UNIT
     T.Sort _  -> return UNIT
     T.MetaV _ _ -> return UNIT
diff --git a/src/full/Agda/Compiler/Epic/Injection.hs b/src/full/Agda/Compiler/Epic/Injection.hs
--- a/src/full/Agda/Compiler/Epic/Injection.hs
+++ b/src/full/Agda/Compiler/Epic/Injection.hs
@@ -24,6 +24,7 @@
 import Agda.TypeChecking.Telescope
 import Agda.Utils.Monad
 import Agda.Utils.Size
+import qualified Agda.Utils.HashMap as HM
 
 import Agda.Compiler.Epic.CompileState
 import qualified Agda.Compiler.Epic.FromAgda as FA
@@ -43,12 +44,12 @@
     injFuns <- solve newNames (catMaybes funs)
     defs' <- forM defs $ \(q, def) -> case q `isIn` injFuns of
         Nothing -> return (q, def)
-        Just inj@(InjectiveFun var arity) -> case theDef def of
+        Just inj@(InjectiveFun nvar arity) -> case theDef def of
             f@(Function{})   -> do
                 modifyEI $ \s -> s { injectiveFuns = M.insert q inj (injectiveFuns s) }
-                let ns = replicate (fromIntegral arity) (Arg NotHidden Relevant "")
-                return $ (,) q $ def {theDef = f { funCompiled = Done ns
-                                                                      (Var (arity - var - 1) []) } }
+                let ns = replicate arity (Arg NotHidden Relevant "")
+                return $ (,) q $ def { theDef = f { funCompiled = Done ns $
+                                                      var $ arity - nvar - 1 } }
             _                -> __IMPOSSIBLE__
 
     lift $ reportSLn "epic.injection" 10 $ "injfuns: " ++ show injFuns
@@ -61,8 +62,8 @@
 replaceFunCC :: QName -> CompiledClauses -> Compile TCM ()
 replaceFunCC name cc = do
     lift $ modify $ \s ->
-        s { stSignature = (stSignature s) { sigDefinitions = M.adjust replaceDef name (sigDefinitions (stSignature s)) }
-          , stImports   = (stImports   s) { sigDefinitions = M.adjust replaceDef name (sigDefinitions (stImports   s)) }
+        s { stSignature = (stSignature s) { sigDefinitions = HM.adjust replaceDef name (sigDefinitions (stSignature s)) }
+          , stImports   = (stImports   s) { sigDefinitions = HM.adjust replaceDef name (sigDefinitions (stImports   s)) }
           }
   where
     replaceDef :: Definition -> Definition
@@ -87,7 +88,7 @@
         cli <- forM cls $ \ cl -> isInjectiveHere nam i  cl
         let cli' = catMaybes cli
         return $ if length cli == length cli'
-             then Just ((nam, InjectiveFun (fromIntegral i) (fromIntegral total)), concat cli')
+             then Just ((nam, InjectiveFun i total), concat cli')
              else Nothing
 
 remAbs :: ClauseBody -> Term
@@ -104,7 +105,7 @@
 
 patternToTerm :: Nat -> Pattern -> Term
 patternToTerm n p = case p of
-    VarP v          -> Var n []
+    VarP v          -> var n
     DotP t          -> t
     ConP c typ args -> Con c $ zipWith (\ arg t -> arg {unArg = t}) args
                              $ snd
@@ -121,11 +122,11 @@
     LitP l          -> 0
 
 substForDot :: [Arg Pattern] -> Substitution
-substForDot ps = map (flip Var []) (makeSubst 0 0 $ reverse $ calcDots ps)
+substForDot = makeSubst 0 0 . reverse . calcDots
   where
-    makeSubst i accum [] = [i + accum ..]
+    makeSubst i accum [] = raiseS (i + accum)
     makeSubst i accum (True  : ps) = makeSubst i (accum +1) ps
-    makeSubst i accum (False : ps) = i + accum : makeSubst (i+1) accum ps
+    makeSubst i accum (False : ps) = var (i + accum) :# makeSubst (i+1) accum ps
 
     calcDots = concatMap calcDots' . map unArg
     calcDots' p = case p of
@@ -141,13 +142,13 @@
 isInjectiveHere nam idx Clause {clauseBody = body} | isNoBody body = return emptyC
 isInjectiveHere nam idx clause = do
     let t    = patternToTerm idxR $ unArg $ clausePats clause !! idx
-        t'   = substs (substForDot $ clausePats clause) t
+        t'   = applySubst (substForDot $ clausePats clause) t
         idxR = sum . map (nrBinds . unArg) . genericDrop (idx + 1) $ clausePats clause
         body = remAbs $ clauseBody clause
     body' <- lift $ reduce body
     injFs <- gets (injectiveFuns . importedModules)
-    res <- (t' <: body') (M.insert nam (InjectiveFun (fromIntegral idx)
-                                                     (genericLength (clausePats clause))) injFs)
+    res <- (t' <: body') (M.insert nam (InjectiveFun idx
+                                                     (length (clausePats clause))) injFs)
     lift $ reportSDoc "epic.injection" 20 $ vcat
       [ text "isInjective:" <+> text (show nam)
       , text "at Index   :" <+> text (show idx)
@@ -176,8 +177,8 @@
 litCon _          = False
 
 insertAt :: (Nat,Term) -> Term -> Term
-insertAt (index, ins) = substs [if i == index then ins else Var i [] | i <- [0 .. ]]
-
+insertAt (index, ins) =
+  applySubst ([var i | i <- [0 .. index - 1]] ++# ins :# raiseS (index + 1))
 
 solve :: [QName] -> [((QName, InjectiveFun), [(QName,QName)])] -> Compile TCM [(QName, InjectiveFun)]
 solve newNames xs = do
@@ -248,7 +249,7 @@
     if genericLength args2 /= arit
         then return Nothing
         else do
-            arg <- lift $ reduce $ unArg $ args2 !! fromIntegral argn
+            arg <- lift $ reduce $ unArg $ args2 !! argn
             (t1 <: arg) injs
 -- (Var n1 []    <: Var n2 [])    nam idx = return $ if n1 == n2 then emptyC else Nothing
 (Var n1 args1 <: Var n2 args2) injs | n1 == n2 && length args1 == length args2 = do
@@ -304,7 +305,7 @@
     let g1s = eqGroups ts !!! n1
         g2s = eqGroups ts !!! n2
         gs  = S.union g1s g2s
-    ifM (not . and <$> sequence [unifiable e1 e2 | e1 <- S.toList g1s, e2 <- S.toList g2s])
+    ifM (not <$> andM [unifiable e1 e2 | e1 <- S.toList g1s, e2 <- S.toList g2s])
         (return Nothing) $
         return $ Just $ ts
             { eqGroups    = M.delete n2 $ M.insert n1 gs (eqGroups ts)
diff --git a/src/full/Agda/Compiler/Epic/NatDetection.hs b/src/full/Agda/Compiler/Epic/NatDetection.hs
--- a/src/full/Agda/Compiler/Epic/NatDetection.hs
+++ b/src/full/Agda/Compiler/Epic/NatDetection.hs
@@ -13,23 +13,25 @@
 import qualified Data.Map as M
 import Data.Maybe
 
-import Agda.TypeChecking.Monad
+import Agda.Syntax.Common
 import Agda.Syntax.Internal
+import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Substitute
-import Agda.Syntax.Common
+import Agda.Utils.Monad (andM)
 
 import Agda.Compiler.Epic.CompileState
 import Agda.Compiler.Epic.Interface
 
 #include "../../undefined.h"
 import Agda.Utils.Impossible
+import qualified Agda.Utils.HashMap as HM
 
 -- | Get a list of all the datatypes that look like nats. The [QName] is on the
 --   form [zeroConstr, sucConstr]
 getNatish :: Compile TCM [(ForcedArgs, [QName])]
 getNatish = do
   sig <- lift (gets (sigDefinitions . stImports))
-  let defs = M.toList sig
+  let defs = HM.toList sig
   fmap catMaybes $ forM defs $ \(q, def) ->
     case theDef def of
       d@(Datatype {}) -> isNatish q d
@@ -40,15 +42,15 @@
 isNatish q d = do -- A datatype ...
     case dataCons d of
         constrs | length constrs == 2 -> do -- with two constructors ...
-            b <- and <$> mapM constrInScope constrs
+            b <- andM $ map constrInScope constrs
             if b
               then do
                 z <- zip constrs <$> mapM getForcedArgs constrs
                 case sortBy (compare `on` nrRel . snd) z of
                   [(cz,fz), (cs,fs)] -> do
                     sig <- lift (gets (sigDefinitions . stImports))
-                    let ts = defType $ sig M.! cs
-                        nr = fromIntegral $ dataPars d
+                    let ts = defType $ sig HM.! cs
+                        nr = dataPars d
                     return $ do
                      guard (nrRel fz == 0) -- where one constructor has zero arguments ...
                      guard (nrRel fs == 1) -- and the other one one argument ...
@@ -65,7 +67,7 @@
 -- | Check if argument n is recursive
 isRec :: Int -> Type -> QName -> Bool
 isRec 0 (El _ t) dat = case t of
-    Pi  arg _ -> argIsDef (unArg arg) dat
+    Pi  arg _ -> argIsDef (unDom arg) dat
     _         -> False
 isRec n (El _ t) dat = case t of
     Pi  _ ab  -> isRec (n - 1) (unAbs ab) dat
diff --git a/src/full/Agda/Compiler/Epic/Primitive.hs b/src/full/Agda/Compiler/Epic/Primitive.hs
--- a/src/full/Agda/Compiler/Epic/Primitive.hs
+++ b/src/full/Agda/Compiler/Epic/Primitive.hs
@@ -15,6 +15,7 @@
 import qualified Agda.Syntax.Internal as T
 import Agda.TypeChecking.Monad hiding (defName)
 import Agda.TypeChecking.Monad.Builtin
+import Agda.Utils.Monad (andM)
 
 import Agda.Compiler.Epic.AuxAST
 import Agda.Compiler.Epic.CompileState
@@ -92,7 +93,7 @@
         if all isJust builtins
            then do
                 let names = map (defName . fromMaybe __IMPOSSIBLE__) builtins
-                b <- and <$>  mapM constrInScope names
+                b <- andM $ map constrInScope names
                 if b then return $ Just (transf names) else return Nothing
            else return Nothing
 
diff --git a/src/full/Agda/Compiler/Epic/Smashing.hs b/src/full/Agda/Compiler/Epic/Smashing.hs
--- a/src/full/Agda/Compiler/Epic/Smashing.hs
+++ b/src/full/Agda/Compiler/Epic/Smashing.hs
@@ -32,6 +32,7 @@
 
 import Agda.Utils.Monad
 import Agda.Utils.Size
+import qualified Agda.Utils.HashMap as HM
 
 #include "../../undefined.h"
 import Agda.Utils.Impossible
@@ -46,7 +47,7 @@
 smash'em funs = do
     defs <- lift (gets (sigDefinitions . stImports))
     funs' <- forM funs $ \f -> case f of
-      AA.Fun{} -> case funQName f >>= flip M.lookup defs of
+      AA.Fun{} -> case funQName f >>= flip HM.lookup defs of
           Nothing -> do
               lift $ reportSDoc "epic.smashing" 10 $ vcat
                 [ (text . show) f <+> text " was not found"]
@@ -79,7 +80,7 @@
 inferable visited dat args = do
   lift $ reportSLn "epic.smashing" 10 $ "  inferring:" ++ (show dat)
   defs <- lift (gets (sigDefinitions . stImports))
-  let def = fromMaybe __IMPOSSIBLE__ $ M.lookup dat defs
+  let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup dat defs
   case theDef def of
       d@Datatype{} -> do
           case dataCons d of
@@ -95,7 +96,7 @@
   where
     inferableArgs c pars = do
         defs <- lift (gets (sigDefinitions . stImports))
-        let def = fromMaybe __IMPOSSIBLE__ $ M.lookup c defs
+        let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup c defs
         forc <- getForcedArgs c
         TelV tel _ <- lift $ telView (defType def `apply` genericTake pars args)
         tag <- getConstrTag c
@@ -104,7 +105,7 @@
           , text "tele" <+> prettyTCM tel
           , text "constr:" <+> prettyTCM c
           ]
-        (AA.Con tag c <$>) <$> sequence <$> forM (notForced forc $ flattenTel tel) (inferableTerm visited' . unEl . unArg)
+        (AA.Con tag c <$>) <$> sequence <$> forM (notForced forc $ flattenTel tel) (inferableTerm visited' . unEl . unDom)
     visited' = S.insert dat visited
 
 inferableTerm visited t = case t of
diff --git a/src/full/Agda/Compiler/Epic/Static.hs b/src/full/Agda/Compiler/Epic/Static.hs
--- a/src/full/Agda/Compiler/Epic/Static.hs
+++ b/src/full/Agda/Compiler/Epic/Static.hs
@@ -19,11 +19,13 @@
 import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Monad.Options
+import Agda.TypeChecking.Monad.Sharing
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Pretty
 
 import Agda.Utils.Monad
+import qualified Agda.Utils.HashMap as HM
 
 import Agda.Compiler.Epic.CompileState
 
@@ -36,7 +38,7 @@
 evaluateCC :: CompiledClauses -> Compile TCM CompiledClauses
 evaluateCC ccs = case ccs of
     Case n brs -> do
-        cbrs <- forM (M.toList $ conBranches brs) $ \(c, cc) -> (,) c <$> evaluateCC cc
+        cbrs <- forM (M.toList $ conBranches brs) $ \(c, WithArity n cc) -> (,) c <$> (WithArity n <$> evaluateCC cc)
         lbrs <- forM (M.toList $ litBranches brs) $ \(l, cc) -> (,) l <$> evaluateCC cc
         cab <- case catchAllBranch brs of
             Nothing -> return Nothing
@@ -52,7 +54,7 @@
 etaExpand :: Term -> Compile TCM Term
 etaExpand def@(Def n ts) = do
     defs <- lift (gets (sigDefinitions . stImports))
-    let f   = maybe __IMPOSSIBLE__ theDef (M.lookup n defs)
+    let f   = maybe __IMPOSSIBLE__ theDef (HM.lookup n defs)
         len = length . clausePats . head .  funClauses $ f
         toEta :: Num a => a
         toEta = fromIntegral $ len - length ts
@@ -86,6 +88,7 @@
     MetaV i args -> return $ MetaV i args
     Level l      -> return $ Level l
     DontCare i   -> return $ DontCare i
+    Shared{}     -> updateSharedTermT evaluateTerm term
   where
     evaluateTerms :: Args -> Compile TCM Args
     evaluateTerms as = forM as $ \x -> do
@@ -95,7 +98,7 @@
     isStatic :: QName -> Compile TCM Bool
     isStatic q = do
       defs <- lift (gets (sigDefinitions . stImports))
-      return $ case fmap theDef $ M.lookup q defs of
+      return $ case fmap theDef $ HM.lookup q defs of
           Nothing -> False
           Just (f@Function{}) -> funStatic f
           Just _              -> False
diff --git a/src/full/Agda/Compiler/HaskellTypes.hs b/src/full/Agda/Compiler/HaskellTypes.hs
--- a/src/full/Agda/Compiler/HaskellTypes.hs
+++ b/src/full/Agda/Compiler/HaskellTypes.hs
@@ -12,9 +12,10 @@
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Rules.Builtin.Coinduction
+-- import Agda.TypeChecking.Rules.Builtin.Coinduction
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Free
 import Agda.Utils.Monad
@@ -85,7 +86,7 @@
   a <- reduce a
   case unEl a of
     Sort _  -> return hsStar
-    Pi a b  -> hsKFun <$> haskellKind (unArg a) <*> underAbstraction a b haskellKind
+    Pi a b  -> hsKFun <$> haskellKind (unDom a) <*> underAbstraction a b haskellKind
     Def d _ -> do
       d <- compiledHaskell . defCompiledRep <$> getConstInfo d
       case d of
@@ -118,15 +119,16 @@
             _      -> err
         Def d args -> hsApp <$> getHsType d <*> fromArgs args
         Pi a b ->
-          if isBinderUsed b
+          if isBinderUsed b  -- Andreas, 2012-04-03.  Q: could we rely on Abs/NoAbs instead of again checking freeness of variable?
           then underAbstraction a b $ \b ->
             hsForall <$> getHsVar 0 <*>
-              (hsFun <$> fromType (unArg a) <*> fromType b)
-          else hsFun <$> fromType (unArg a) <*> fromType (absApp b __IMPOSSIBLE__)
+              (hsFun <$> fromType (unDom a) <*> fromType b)
+          else hsFun <$> fromType (unDom a) <*> fromType (absApp b __IMPOSSIBLE__)
         Con c args -> hsApp <$> getHsType c <*> fromArgs args
         Lam{}      -> err
         Level{}    -> return hsUnit
         Lit{}      -> return hsUnit
         Sort{}     -> return hsUnit
+        Shared p   -> fromTerm $ derefPtr p
         MetaV{}    -> err
         DontCare{} -> err
diff --git a/src/full/Agda/Compiler/JS/Compiler.hs b/src/full/Agda/Compiler/JS/Compiler.hs
--- a/src/full/Agda/Compiler/JS/Compiler.hs
+++ b/src/full/Agda/Compiler/JS/Compiler.hs
@@ -5,9 +5,11 @@
 import Prelude hiding ( null, writeFile )
 import Control.Monad.Reader ( liftIO )
 import Control.Monad.State ( get, put )
-import Data.List ( intercalate, map, filter, isPrefixOf, concat, genericDrop, genericLength )
+import Data.List ( intercalate, map, filter, isPrefixOf, concat, genericDrop, genericLength, partition )
 import Data.Set ( Set, empty, null, insert, difference, delete )
 import Data.Map ( Map, fold, singleton, fromList, toList, toAscList, insertWith, elems )
+import qualified Data.Set as Set
+import qualified Data.Map as Map
 import System.Directory ( createDirectoryIfMissing )
 import System.FilePath ( pathSeparator, splitFileName, (</>) )
 
@@ -23,7 +25,8 @@
   ( Name, Args, Type,
     Clause(Clause), Pattern(VarP,DotP,LitP,ConP), Abs(Abs),
     ClauseBody(Body,NoBody,Bind),
-    Term(Var,Lam,Lit,Level,Def,Con,Pi,Sort,MetaV,DontCare),
+    Term(Var,Lam,Lit,Level,Def,Con,Pi,Sort,MetaV,DontCare,Shared),
+    derefPtr,
     toTopLevelModuleName, clausePats, clauseBody, arity, unEl, unAbs )
 import Agda.TypeChecking.Substitute ( absBody )
 import Agda.Syntax.Literal ( Literal(LitInt,LitFloat,LitString,LitChar,LitQName) )
@@ -42,9 +45,10 @@
 import Agda.TypeChecking.Reduce ( instantiateFull, normalise )
 import Agda.Utils.FileName ( filePath )
 import Agda.Utils.Function ( iterate' )
-import Agda.Utils.Monad ( (<$>), (<*>), bracket, ifM )
+import Agda.Utils.Monad ( (<$>), (<*>), localState, ifM )
 import Agda.Utils.IO.UTF8 ( writeFile )
 import Agda.Utils.Impossible ( Impossible(Impossible), throwImpossible )
+import qualified Agda.Utils.HashMap as HMap
 import Agda.Compiler.MAlonzo.Misc ( curDefs, curIF, curMName, setInterface )
 import Agda.Compiler.MAlonzo.Primitives ( repl )
 
@@ -66,7 +70,7 @@
 compilerMain :: Interface -> TCM ()
 compilerMain mainI =
   -- Preserve the state (the compiler modifies the state).
-  bracket get put $ \_ -> do
+  localState $ do
 
     -- Compute the output directory.
     opts <- commandLineOptions
@@ -154,8 +158,17 @@
 -- Reorder a list of exports to ensure def-before-use.
 -- Note that this can diverge in the case when there is no such reordering.
 
+-- Only top-level values are evaluated before definitions are added to the
+-- module, so we put those last, ordered in dependency order. There can't be
+-- any recursion between top-level values (unless termination checking has been
+-- disabled and someone's written a non-sensical program), so reordering will
+-- terminate.
+
 reorder :: [Export] -> [Export]
-reorder = reorder' empty
+reorder es = datas ++ funs ++ reorder' (Set.fromList $ map expName $ datas ++ funs) vals
+  where
+    (vs, funs)    = partition isTopLevelValue es
+    (datas, vals) = partition isEmptyObject vs
 
 reorder' :: Set [MemberId] -> [Export] -> [Export]
 reorder' defs [] = []
@@ -165,6 +178,16 @@
     True -> e : (reorder' (insert (expName e) defs) es)
     False -> reorder' defs (insertAfter us e es)
 
+isTopLevelValue :: Export -> Bool
+isTopLevelValue (Export _ e) = case e of
+  Lambda{} -> False
+  _        -> True
+
+isEmptyObject :: Export -> Bool
+isEmptyObject (Export _ e) = case e of
+  Object m -> Map.null m
+  _        -> False
+
 insertAfter :: Set [MemberId] -> Export -> [Export] -> [Export]
 insertAfter us e []                 = [e]
 insertAfter us e (f:fs) | null us   = e : f : fs
@@ -178,7 +201,7 @@
 curModule = do
   m <- (jsMod <$> curMName)
   is <- map jsMod <$> (iImportedModules <$> curIF)
-  es <- mapM definition =<< (toList <$> curDefs)
+  es <- mapM definition =<< (HMap.toList <$> curDefs)
   return (Module m (reorder es))
 
 definition :: (QName,Definition) -> TCM Export
@@ -326,6 +349,7 @@
 term (Lam   _ at)         = Lambda 1 <$> term (absBody at)
 term (Lit   l)            = return (literal l)
 term (Level l)            = term =<< reallyUnLevelView l
+term (Shared p)           = term $ derefPtr p
 term (Def q as) = do
   d <- getConstInfo q
   case theDef d of
diff --git a/src/full/Agda/Compiler/JS/Substitution.hs b/src/full/Agda/Compiler/JS/Substitution.hs
--- a/src/full/Agda/Compiler/JS/Substitution.hs
+++ b/src/full/Agda/Compiler/JS/Substitution.hs
@@ -1,7 +1,7 @@
 module Agda.Compiler.JS.Substitution where
 
 import Prelude hiding ( map, lookup )
-import Data.Generics ( Data, Typeable )
+import Data.Typeable ( Typeable )
 import Data.Map ( Map, empty, toList, unionWith, singleton, findWithDefault )
 import qualified Data.Map as M ( map )
 import Data.Map ( Map )
diff --git a/src/full/Agda/Compiler/JS/Syntax.hs b/src/full/Agda/Compiler/JS/Syntax.hs
--- a/src/full/Agda/Compiler/JS/Syntax.hs
+++ b/src/full/Agda/Compiler/JS/Syntax.hs
@@ -2,7 +2,7 @@
   #-}
 module Agda.Compiler.JS.Syntax where
 
-import Data.Generics ( Data, Typeable )
+import Data.Typeable ( Typeable )
 import Data.Map ( Map, fold )
 import Data.Set ( Set, empty, singleton, union )
 
@@ -28,29 +28,29 @@
   BinOp Exp String Exp |
   PreOp String Exp |
   Const String
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 -- Local identifiers are named by De Bruijn indices.
 -- Global identifiers are named by string lists.
 -- Object members are named by strings.
 
 newtype LocalId = LocalId Nat
-  deriving (Typeable, Data, Eq, Ord, Show)
+  deriving (Typeable, Eq, Ord, Show)
 
 newtype GlobalId = GlobalId [String]
-  deriving (Typeable, Data, Eq, Ord, Show)
+  deriving (Typeable, Eq, Ord, Show)
 
 newtype MemberId = MemberId String
-  deriving (Typeable, Data, Eq, Ord, Show)
+  deriving (Typeable, Eq, Ord, Show)
 
 -- The top-level compilation unit is a module, which names
 -- the GId of its exports, and a list of definitions
 
 data Export = Export { expName :: [MemberId], defn :: Exp }
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 data Module = Module { modName :: GlobalId, exports :: [Export] }
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 -- Note that modules are allowed to be recursive, via the Self expression,
 -- which is bound to the exported module.
diff --git a/src/full/Agda/Compiler/MAlonzo/Compiler.hs b/src/full/Agda/Compiler/MAlonzo/Compiler.hs
--- a/src/full/Agda/Compiler/MAlonzo/Compiler.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Compiler.hs
@@ -3,7 +3,7 @@
 module Agda.Compiler.MAlonzo.Compiler where
 
 import Control.Applicative
-import qualified Control.Exception as E
+import Control.Monad ((<=<))
 import Control.Monad.Reader
 import Control.Monad.State
 import Data.Char
@@ -14,13 +14,10 @@
 import qualified Language.Haskell.Exts.Parser as HS
 import qualified Language.Haskell.Exts.Syntax as HS
 import System.Cmd
-import System.Directory
-import System.Exit
-import System.IO
-import System.Time
-import System.Process
-import System.FilePath hiding (normalise, (<.>))
+import System.Directory (createDirectoryIfMissing)
+import System.FilePath hiding (normalise)
 
+import Agda.Compiler.CallCompiler
 import Agda.Compiler.MAlonzo.Misc
 import Agda.Compiler.MAlonzo.Pretty
 import Agda.Compiler.MAlonzo.Primitives
@@ -32,24 +29,26 @@
 import Agda.Syntax.Internal
 import Agda.Syntax.Literal
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Monad.Options
 import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Rules.Builtin.Coinduction
+-- import Agda.TypeChecking.Rules.Builtin.Coinduction
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Level (reallyUnLevelView)
 import Agda.Utils.FileName
 import Agda.Utils.Monad
-import qualified Agda.Utils.IO.Locale as LocIO
 import qualified Agda.Utils.IO.UTF8 as UTF8
 import Agda.Utils.Impossible
+import qualified Agda.Utils.HashMap as HMap
 
 #include "../../undefined.h"
 
 compilerMain :: Interface -> TCM ()
 compilerMain mainI =
   -- Preserve the state (the compiler modifies the state).
-  bracket get put $ \_ -> do
+  localState $ do
 
     -- Compute the output directory.
     opts <- commandLineOptions
@@ -107,9 +106,8 @@
 definitions :: Definitions -> TCM [HS.Decl]
 definitions defs = do
   kit <- coinductionKit
-  M.fold (liftM2 (++) . (definition kit <.> instantiateFull))
-         declsForPrim
-         defs
+  HMap.foldr (liftM2 (++) . (definition kit <=< instantiateFull))
+             declsForPrim defs
 
 -- | Note that the INFINITY, SHARP and FLAT builtins are translated as
 -- follows (if a 'CoinductionKit' is given):
@@ -120,17 +118,20 @@
 --   sharp :: a -> a
 --   sharp x = x
 --
---   flat :: forall a. () -> forall b. () -> b -> b
---   flat _ _ x = x
+--   flat :: a -> a
+--   flat x = x
 -- @
 
 definition :: Maybe CoinductionKit -> Definition -> TCM [HS.Decl]
 -- ignore irrelevant definitions
-definition kit (Defn Forced     _ _  _ _ _ _) = __IMPOSSIBLE__
-definition kit (Defn NonStrict  _ _  _ _ _ _) = __IMPOSSIBLE__
-definition kit (Defn Irrelevant _ _  _ _ _ _) = return []
-definition kit (Defn Relevant   q ty _ _ compiled d) = do
-  checkTypeOfMain q ty
+{- Andreas, 2012-10-02: Invariant no longer holds
+definition kit (Defn Forced     _ _  _ _ _ _ _ _) = __IMPOSSIBLE__
+definition kit (Defn UnusedArg  _ _  _ _ _ _ _ _) = __IMPOSSIBLE__
+definition kit (Defn NonStrict  _ _  _ _ _ _ _ _) = __IMPOSSIBLE__
+-}
+definition kit (Defn Irrelevant _ _  _ _ _ _ _ _) = return []
+definition kit (Defn _          q ty _ _ _ _ compiled d) = do
+  checkTypeOfMain q ty $ do
   (infodecl q :) <$> case d of
 
     _ | Just (HsDefn ty hs) <- compiledHaskell compiled ->
@@ -168,9 +169,9 @@
           x    = ihname "x" 0
       return $
         [ HS.TypeSig dummy [flat] $ fakeType $
-            "forall a. () -> forall b. () -> b -> b"
+            "forall a. a -> a"
         , HS.FunBind [HS.Match dummy flat
-                               [HS.PWildCard, HS.PWildCard, HS.PVar x]
+                               [HS.PVar x]
                                Nothing
                                (HS.UnGuardedRhs (HS.Var (HS.UnQual x)))
                                (HS.BDecls [])]
@@ -242,7 +243,7 @@
 conArityAndPars :: QName -> TCM (Nat, Nat)
 conArityAndPars q = do
   def <- getConstInfo q
-  TelV tel _ <- telViewM $ defType def
+  TelV tel _ <- telView $ defType def
   let Constructor{ conPars = np } = theDef def
       n = genericLength (telToList tel)
   return (n - np, np)
@@ -301,7 +302,7 @@
   irr (LitP {})   = return False
   irr (ConP q _ ps) =
     (&&) <$> singleConstructorType q
-         <*> (and <$> mapM irr' ps)
+         <*> (andM $ L.map irr' ps)
 
   -- | Irrelevant patterns are naturally irrefutable.
   irr' (Arg _ Irrelevant _) = return $ True
@@ -319,7 +320,7 @@
 --   Types are extracted as @()@.
 --   @DontCare@ outside of irrelevant arguments is extracted as @error@.
 term :: Term -> ReaderT Nat TCM HS.Exp
-term tm0 = case tm0 of
+term tm0 = case ignoreSharing tm0 of
   Var   i as -> do n <- ask; apps (hsVarUQ $ ihname "v" (n - i - 1)) as
   Lam   _ at -> do n <- ask; HS.Lambda dummy [HS.PVar $ ihname "v" n] <$>
                               local (1+) (term $ absBody at)
@@ -335,6 +336,7 @@
   Sort  _    -> return HS.unit_con
   MetaV _ _  -> mazerror "hit MetaV"
   DontCare _ -> return $ rtmError $ "hit DontCare"
+  Shared{}   -> __IMPOSSIBLE__
   where apps =  foldM (\h a -> HS.App h <$> term' a)
 
 -- | Irrelevant arguments are replaced by Haskells' ().
@@ -444,6 +446,7 @@
         , "ExistentialQuantification"
         , "ScopedTypeVariables"
         , "NoMonomorphismRestriction"
+        , "Rank2Types"
         ]
 
 rteModule :: HS.Module
@@ -466,11 +469,19 @@
   ]
   where
     parse = HS.parseWithMode
-              HS.defaultParseMode{HS.extensions = [HS.ExplicitForall]}
-
+              HS.defaultParseMode{HS.extensions = [explicitForAll]}
     ok (HS.ParseOk d)   = d
     ok HS.ParseFailed{} = __IMPOSSIBLE__
 
+explicitForAll :: HS.Extension
+explicitForAll =
+-- GHC 7.0.1 cannot parse the following CPP conditional
+-- error: missing binary operator before token "("
+#if MIN_VERSION_haskell_src_exts(1,12,0)
+  HS.ExplicitForAll
+#else
+  HS.ExplicitForall
+#endif
 
 compileDir :: TCM FilePath
 compileDir = do
@@ -511,6 +522,7 @@
   let overridableArgs =
         [ "-O"
         , "-o", mdir </> show outputName
+        , "-Werror"
         ]
       otherArgs       =
         [ "-i" ++ mdir
@@ -519,7 +531,6 @@
         , "--make"
         , "-fwarn-incomplete-patterns"
         , "-fno-warn-overlapping-patterns"
-        , "-Werror"
         ]
       args     = overridableArgs ++ opts ++ otherArgs
       compiler = "ghc"
@@ -527,23 +538,4 @@
   -- Note: Some versions of GHC use stderr for progress reports. For
   -- those versions of GHC we don't print any progress information
   -- unless an error is encountered.
-
-  reportSLn "" 1 $ "calling: " ++ L.intercalate " " (compiler : args)
-  (_, _, err, p) <-
-    liftIO $ createProcess (proc compiler args){ std_err = CreatePipe }
-
-  errors <- liftIO $ case err of
-    Nothing  -> __IMPOSSIBLE__
-    Just err -> do
-      -- The handle should be in text mode.
-      hSetBinaryMode err False
-      liftIO $ LocIO.hGetContents err
-
-  exitcode <- liftIO $ do
-    -- Ensure that the output has been read before waiting for the
-    -- process.
-    E.evaluate (length errors)
-    waitForProcess p
-  case exitcode of
-    ExitFailure _ -> typeError (CompilationError errors)
-    _             -> return ()
+  callCompiler compiler args
diff --git a/src/full/Agda/Compiler/MAlonzo/Misc.hs b/src/full/Agda/Compiler/MAlonzo/Misc.hs
--- a/src/full/Agda/Compiler/MAlonzo/Misc.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Misc.hs
@@ -3,7 +3,6 @@
 module Agda.Compiler.MAlonzo.Misc where
 
 import Control.Monad.State
-import Data.Generics
 import Data.List as L
 import Data.Map as M
 import Data.Set as S
@@ -11,7 +10,6 @@
 import Data.Function
 import qualified Language.Haskell.Exts.Syntax as HS
 import System.IO
-import System.Time
 
 import Agda.Interaction.Imports
 import Agda.Syntax.Common
@@ -85,9 +83,12 @@
 ihname s i = HS.Ident $ s ++ show i
 
 unqhname :: String -> QName -> HS.Name
+{- NOT A GOOD IDEA, see Issue 728
 unqhname s q | ("d", "main") == (s, show(qnameName q)) = HS.Ident "main"
              | otherwise = ihname s (idnum $ nameId $ qnameName $ q)
-  where idnum (NameId x _) = fromIntegral x
+-}
+unqhname s q = ihname s (idnum $ nameId $ qnameName $ q)
+   where idnum (NameId x _) = fromIntegral x
 
 -- the toplevel module containing the given one
 tlmodOf :: ModuleName -> TCM HS.ModuleName
@@ -124,7 +125,9 @@
 
 -- qualify name s by the module of builtin b
 bltQual :: String -> String -> TCM HS.QName
-bltQual b s = do (Def q _) <- getBuiltin b; xqual q (HS.Ident s)
+bltQual b s = do
+  Def q _ <- ignoreSharing <$> getBuiltin b
+  xqual q (HS.Ident s)
 
 -- sub-naming for cascaded definitions for concsecutive clauses
 dsubname q i | i == 0    = unqhname "d"                     q
@@ -187,26 +190,3 @@
 
 dummy :: a
 dummy = error "MAlonzo : this dummy value should not have been eval'ed."
-
-
---------------------------------------------------
--- For Debugging
---------------------------------------------------
-gshow' :: Data a => a -> String
-gshow' = ( \t ->
-           "("
-           ++ showConstr (toConstr t)
-           ++ concat (gmapQ ((++) " " . gshow') t)
-           ++ ")" )
-         `extQ` (show :: String -> String)
-         `extQ` (show :: Name -> String)
-         `extQ` (show :: QName -> String)
-         `extQ` (show :: ModuleName -> String)
-         `extQ` (gshow' . M.toList :: M.Map QName [AbstractName] -> String)
-         `extQ` (gshow' . M.toList :: M.Map QName [AbstractModule] -> String)
-         `extQ` (gshow' . M.toList :: M.Map ModuleName Section -> String)
-         `extQ` (gshow' . M.toList :: M.Map QName Definition -> String)
-         `extQ` (gshow' . M.toList :: M.Map TermHead [Pattern] -> String)
-         `extQ` (gshow' . M.toList :: M.Map TermHead [Arg Pattern] -> String)
-         `extQ` (gshow' . M.toList :: M.Map String (Builtin String) -> String)
-         `extQ` (show :: Scope -> String)
diff --git a/src/full/Agda/Compiler/MAlonzo/Pretty.hs b/src/full/Agda/Compiler/MAlonzo/Pretty.hs
--- a/src/full/Agda/Compiler/MAlonzo/Pretty.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Pretty.hs
@@ -2,16 +2,33 @@
 -- Pretty-printing of Haskell modules
 ------------------------------------------------------------------------
 
+{-# LANGUAGE FlexibleContexts, FlexibleInstances,
+             MultiParamTypeClasses, TemplateHaskell #-}
+
 module Agda.Compiler.MAlonzo.Pretty where
 
-import Data.Generics
+import Data.Generics.Geniplate
 import qualified Language.Haskell.Exts.Pretty as Pretty
+import qualified Language.Haskell.Exts.Syntax as HS
 
 import Agda.Compiler.MAlonzo.Encode
 
--- | Inserts disambiguating parentheses and encodes module names just
--- before pretty-printing.
+-- | Encodes module names just before pretty-printing.
 
-prettyPrint :: (Pretty.Pretty a, Data a) => a -> String
+prettyPrint :: (Pretty.Pretty a, TransformBi HS.ModuleName (Wrap a)) =>
+               a -> String
 prettyPrint = Pretty.prettyPrint .
-              everywhere (mkT encodeModuleName)
+              unwrap .
+              transformBi encodeModuleName .
+              Wrap
+
+-- | A wrapper type used to avoid orphan instances.
+
+newtype Wrap a = Wrap { unwrap :: a }
+
+-- Some TransformBiT instances.
+
+instanceTransformBiT [ [t| String |] ] [t| (HS.ModuleName, Wrap HS.Exp)        |]
+instanceTransformBiT [ [t| String |] ] [t| (HS.ModuleName, Wrap HS.Module)     |]
+instanceTransformBiT [ [t| String |] ] [t| (HS.ModuleName, Wrap HS.ModuleName) |]
+instanceTransformBiT [ [t| String |] ] [t| (HS.ModuleName, Wrap HS.QName)      |]
diff --git a/src/full/Agda/Compiler/MAlonzo/Primitives.hs b/src/full/Agda/Compiler/MAlonzo/Primitives.hs
--- a/src/full/Agda/Compiler/MAlonzo/Primitives.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Primitives.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 module Agda.Compiler.MAlonzo.Primitives where
 
 import Control.Monad.Reader
@@ -18,29 +19,64 @@
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Pretty
 import Agda.Utils.Monad
+import Agda.Utils.Impossible
+import qualified Agda.Utils.HashMap as HMap
 
+#include "../../undefined.h"
+
+{- OLD
 -- | Check that the main function has type IO a, for some a.
 checkTypeOfMain :: QName -> Type -> TCM ()
 checkTypeOfMain q ty
   | show (qnameName q) /= "main" = return ()
   | otherwise = do
-    Def io _ <- primIO
+    Def io _ <- ignoreSharing <$> primIO
     ty <- normalise ty
-    case unEl ty of
+    case ignoreSharing $ unEl ty of
       Def d _ | d == io -> return ()
       _                 -> do
         err <- fsep $
           pwords "The type of main should be" ++
           [prettyTCM io] ++ pwords " A, for some A. The given type is" ++ [prettyTCM ty]
         typeError $ GenericError $ show err
+-}
 
+-- | Check that the main function has type IO a, for some a.
+checkTypeOfMain :: QName -> Type -> TCM [HS.Decl] -> TCM [HS.Decl]
+checkTypeOfMain q ty ret
+  | show (qnameName q) /= "main" = ret
+  | otherwise = do
+    Def io _ <- ignoreSharing <$> primIO
+    ty <- normalise ty
+    case ignoreSharing $ unEl ty of
+      Def d _ | d == io -> (mainAlias :) <$> ret
+      _                 -> do
+        err <- fsep $
+          pwords "The type of main should be" ++
+          [prettyTCM io] ++ pwords " A, for some A. The given type is" ++ [prettyTCM ty]
+        typeError $ GenericError $ show err
+  where
+    mainAlias = HS.FunBind [HS.Match dummy mainLHS [] Nothing mainRHS $ HS.BDecls [] ]
+    mainLHS   = HS.Ident "main"
+    mainRHS   = HS.UnGuardedRhs $ HS.Var $ HS.UnQual $ unqhname "d" q
+
 -- Haskell modules to be imported for BUILT-INs
 importsForPrim :: TCM [HS.ModuleName]
 importsForPrim =
   xForPrim $
   L.map (\(s, ms) -> (s, return (L.map HS.ModuleName ms))) $
-  [ "CHAR" |-> ["Data.Char"]
-  -- , "IO" |-> ["System.IO"]
+  [ "CHAR"           |-> ["Data.Char"]
+  , "primIsDigit"    |-> ["Data.Char"]
+  , "primIsLower"    |-> ["Data.Char"]
+  , "primIsDigit"    |-> ["Data.Char"]
+  , "primIsAlpha"    |-> ["Data.Char"]
+  , "primIsSpace"    |-> ["Data.Char"]
+  , "primIsAscii"    |-> ["Data.Char"]
+  , "primIsLatin1"   |-> ["Data.Char"]
+  , "primIsPrint"    |-> ["Data.Char"]
+  , "primIsHexDigit" |-> ["Data.Char"]
+  , "primToUpper"    |-> ["Data.Char"]
+  , "primToLower"    |-> ["Data.Char"]
   ]
   where (|->) = (,)
 
@@ -107,10 +143,15 @@
 
 xForPrim :: [(String, TCM [a])] -> TCM [a]
 xForPrim table = do
-  qs <- keys   <$> curDefs
+  qs <- HMap.keys <$> curDefs
   bs <- toList <$> gets stBuiltinThings
+  let getName (Builtin (Def q _))    = q
+      getName (Builtin (Con q _))    = q
+      getName (Builtin (Shared p))   = getName (Builtin $ derefPtr p)
+      getName (Builtin _)            = __IMPOSSIBLE__
+      getName (Prim (PrimFun q _ _)) = q
   concat <$> sequence [ maybe (return []) id $ L.lookup s table
-                        | (s, Builtin (Def q _)) <- bs, q `elem` qs ]
+                        | (s, def) <- bs, getName def `elem` qs ]
 
 
 -- Definition bodies for primitive functions
@@ -165,7 +206,7 @@
   , "primIsAscii"        |-> pred "Data.Char.isAscii"
   , "primIsLatin1"       |-> pred "Data.Char.isLatin1"
   , "primIsPrint"        |-> pred "Data.Char.isPrint"
-  , "primIsHExDigit"     |-> pred "Data.Char.isHexDigit"
+  , "primIsHexDigit"     |-> pred "Data.Char.isHexDigit"
   , "primToUpper"        |-> return "Data.Char.toUpper"
   , "primToLower"        |-> return "Data.Char.toLower"
   , "primCharToNat" |-> do toN <- bltQual' "NATURAL" mazIntToNat
@@ -218,7 +259,9 @@
   unimplemented = typeError $ NotImplemented s
 
   lam x t = Lam Hidden (Abs x t)
+{- UNUSED
   var x   = Arg Hidden Relevant (Var x [])
+-}
 
 ----------------------
 
diff --git a/src/full/Agda/Interaction/BasicOps.hs b/src/full/Agda/Interaction/BasicOps.hs
--- a/src/full/Agda/Interaction/BasicOps.hs
+++ b/src/full/Agda/Interaction/BasicOps.hs
@@ -17,7 +17,7 @@
 import Agda.Syntax.Position
 import Agda.Syntax.Abstract as A hiding (Open)
 import Agda.Syntax.Common
-import Agda.Syntax.Info(ExprInfo(..),MetaInfo(..))
+import Agda.Syntax.Info(ExprInfo(..),MetaInfo(..),emptyMetaInfo)
 import Agda.Syntax.Internal as I
 import Agda.Syntax.Translation.InternalToAbstract
 import Agda.Syntax.Translation.AbstractToConcrete
@@ -29,7 +29,7 @@
 
 import Agda.TypeChecker
 import Agda.TypeChecking.Conversion
-import Agda.TypeChecking.Monad as M
+import Agda.TypeChecking.Monad as M hiding (MetaInfo)
 import Agda.TypeChecking.MetaVars
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
@@ -39,7 +39,7 @@
 import Agda.TypeChecking.Records
 import Agda.TypeChecking.Irrelevance (wakeIrrelevantVars)
 import Agda.TypeChecking.Pretty (prettyTCM)
-import Agda.TypeChecking.Eliminators (unElim)
+-- UNUSED: import Agda.TypeChecking.Eliminators (unElim)
 import qualified Agda.TypeChecking.Pretty as TP
 
 import Agda.Utils.List
@@ -82,7 +82,8 @@
 		    let t' = t `piApply` ctx
 		    v	<- checkExpr e t'
 		    case mvInstantiation mv of
-			InstV v' -> equalTerm t' v (v' `apply` ctx)
+			InstV v' -> whenM ((Irrelevant /=) <$> asks envRelevance) $
+                                      equalTerm t' v (v' `apply` ctx)
 			_	 -> updateMeta mi v
 		    reify v
 		 IsSort{} -> __IMPOSSIBLE__
@@ -93,7 +94,7 @@
   mis <- getInteractionPoints
   r <- getInteractionRange ii
   updateMetaVarRange mi $ maybe r id mr
-  giveExpr mi e `catchError` \err -> case errError err of
+  giveExpr mi e `catchError` \err -> case err of
     PatternErr _ -> do
       err <- withInteractionId ii $ TP.text "Failed to give" TP.<+> prettyTCM e
       typeError $ GenericError $ show err
@@ -129,8 +130,9 @@
 				    { Agda.Syntax.Info.metaRange = r
                                     , Agda.Syntax.Info.metaScope = scope { scopePrecedence = ArgumentCtx }
 				    , metaNumber = Nothing
+                                    , metaNameSuggestion = ""
 				    }
-                      in App (ExprRange $ r) e (defaultArg $ unnamed metaVar)
+                      in App (ExprRange $ r) e (defaultNamedArg metaVar)
                  --ToDo: The position of metaVar is not correct
                  --ToDo: The fixity of metavars is not correct -- fixed? MT
 
@@ -151,6 +153,7 @@
 
 
 data Rewrite =  AsIs | Instantiated | HeadNormal | Normalised
+    deriving (Read)
 
 --rewrite :: Rewrite -> Term -> TCM Term
 rewrite AsIs	     t = return t
@@ -171,7 +174,7 @@
       | JustSort b | CmpSorts Comparison b b
       | Guard (OutputConstraint a b) ProblemId
       | Assign b a | TypedAssign b a a
-      | IsEmptyType a | FindInScopeOF b
+      | IsEmptyType a | FindInScopeOF b a [(a,a)]
   deriving (Functor)
 
 -- | A subset of 'OutputConstraint'.
@@ -198,7 +201,7 @@
       Assign i _           -> i
       TypedAssign i _ _    -> i
       IsEmptyType _        -> __IMPOSSIBLE__   -- Should never be used on IsEmpty constraints
-      FindInScopeOF _      -> __IMPOSSIBLE__
+      FindInScopeOF _ _ _  -> __IMPOSSIBLE__
 
 instance Reify ProblemConstraint (Closure (OutputForm Expr Expr)) where
   reify (PConstr pid cl) = enterClosure cl $ \c -> buildClosure =<< (OutputForm pid <$> reify c)
@@ -230,10 +233,14 @@
           OpenIFS{}  -> __IMPOSSIBLE__
           InstS{} -> __IMPOSSIBLE__
           InstV{} -> __IMPOSSIBLE__
-    reify (FindInScope m) = do
+    reify (FindInScope m cands) = do
       m' <- reify (MetaV m [])
-      return $ FindInScopeOF m' -- IFSTODO
-    reify (IsEmpty a) = IsEmptyType <$> reify a
+      ctxArgs <- getContextArgs
+      t <- getMetaType m
+      t' <- reify t
+      cands' <- mapM (\(tm,ty) -> (,) <$> reify tm <*> reify ty) cands
+      return $ FindInScopeOF m' t' cands' -- IFSTODO
+    reify (IsEmpty r a) = IsEmptyType <$> reify a
 
 showComparison :: Comparison -> String
 showComparison CmpEq  = " = "
@@ -257,7 +264,9 @@
     show (Assign m e)           = show m ++ " := " ++ show e
     show (TypedAssign m e a)    = show m ++ " := " ++ show e ++ " :? " ++ show a
     show (IsEmptyType a)        = "Is empty: " ++ show a
-    show (FindInScopeOF s)      = "Find in Scope: " ++ show s
+    show (FindInScopeOF s t cs) = "Resolve implicit argument " ++ showCand (s,t) ++ ". Candidates: [" ++
+                                    intercalate ", " (map showCand cs) ++ "]"
+      where showCand (tm,ty) = show tm ++ " : " ++ show ty
 
 instance (ToConcrete a c, ToConcrete b d) =>
          ToConcrete (OutputForm a b) (OutputForm c d) where
@@ -285,7 +294,9 @@
     toConcrete (TypedAssign m e a) = TypedAssign <$> toConcrete m <*> toConcreteCtx TopCtx e
                                                                   <*> toConcreteCtx TopCtx a
     toConcrete (IsEmptyType a) = IsEmptyType <$> toConcreteCtx TopCtx a
-    toConcrete (FindInScopeOF s) = FindInScopeOF <$> toConcrete s
+    toConcrete (FindInScopeOF s t cs) =
+      FindInScopeOF <$> toConcrete s <*> toConcrete t
+                    <*> mapM (\(tm,ty) -> (,) <$> toConcrete tm <*> toConcrete ty) cs
 
 instance (Pretty a, Pretty b) => Pretty (OutputConstraint' a b) where
   pretty (OfType' e t) = pretty e <+> text ":" <+> pretty t
@@ -297,8 +308,14 @@
 --ToDo: Move somewhere else
 instance ToConcrete InteractionId C.Expr where
     toConcrete (InteractionId i) = return $ C.QuestionMark noRange (Just i)
+{- UNUSED
 instance ToConcrete MetaId C.Expr where
-    toConcrete (MetaId i) = return $ C.Underscore noRange (Just i)
+    toConcrete x@(MetaId i) = do
+      return $ C.Underscore noRange (Just $ "_" ++ show i)
+-}
+instance ToConcrete NamedMeta C.Expr where
+    toConcrete i = do
+      return $ C.Underscore noRange (Just $ show i)
 
 judgToOutputForm :: Judgement a c -> OutputConstraint a c
 judgToOutputForm (HasType e t) = OfType e t
@@ -316,7 +333,7 @@
     toOutputForm (ii, mi, e) = do
       mv <- getMetaInfo <$> lookupMeta mi
       withMetaInfo mv $ do
-        let m = QuestionMark $ MetaInfo noRange emptyScopeInfo (Just $ fromIntegral ii)
+        let m = QuestionMark $ emptyMetaInfo { metaNumber = Just $ fromIntegral ii }
         abstractToConcrete_ $ OutputForm 0 $ Assign m e
 
 getSolvedInteractionPoints :: TCM [(InteractionId, MetaId, Expr)]
@@ -340,25 +357,30 @@
           BlockedConst{}                 -> unsol
           PostponedTypeCheckingProblem{} -> unsol
 
-typeOfMetaMI :: Rewrite -> MetaId -> TCM (OutputConstraint Expr MetaId)
+typeOfMetaMI :: Rewrite -> MetaId -> TCM (OutputConstraint Expr NamedMeta)
 typeOfMetaMI norm mi =
      do mv <- lookupMeta mi
 	withMetaInfo (getMetaInfo mv) $
 	  rewriteJudg mv (mvJudgement mv)
    where
     rewriteJudg mv (HasType i t) = do
+      ms <- getMetaNameSuggestion i
       t <- rewrite norm t
       vs <- getContextArgs
+      let x = NamedMeta ms i
       reportSDoc "interactive.meta" 10 $ TP.vcat
         [ TP.text $ unwords ["permuting", show i, "with", show $ mvPermutation mv]
         , TP.nest 2 $ TP.vcat
           [ TP.text "len  =" TP.<+> TP.text (show $ length vs)
           , TP.text "args =" TP.<+> prettyTCM vs
           , TP.text "t    =" TP.<+> prettyTCM t
+          , TP.text "x    =" TP.<+> TP.text (show x)
           ]
         ]
-      OfType i <$> reify (t `piApply` permute (takeP (size vs) $ mvPermutation mv) vs)
-    rewriteJudg mv (IsSort i t) = return $ JustSort i
+      OfType x <$> reify (t `piApply` permute (takeP (size vs) $ mvPermutation mv) vs)
+    rewriteJudg mv (IsSort i t) = do
+      ms <- getMetaNameSuggestion i
+      return $ JustSort $ NamedMeta ms i
 
 
 typeOfMeta :: Rewrite -> InteractionId -> TCM (OutputConstraint Expr InteractionId)
@@ -371,7 +393,7 @@
 typesOfVisibleMetas norm =
   liftTCM $ mapM (typeOfMeta norm) =<< getInteractionPoints
 
-typesOfHiddenMetas :: Rewrite -> TCM [OutputConstraint Expr MetaId]
+typesOfHiddenMetas :: Rewrite -> TCM [OutputConstraint Expr NamedMeta]
 typesOfHiddenMetas norm = liftTCM $ do
   is    <- getInteractionMetas
   store <- Map.filterWithKey (openAndImplicit is) <$> getMetaStore
@@ -394,7 +416,7 @@
 	visible _	     = __IMPOSSIBLE__
         reifyContext xs = reverse <$> zipWithM out [1..] xs
 
-        out i (Arg h _ (x, t)) = escapeContext i $ do
+        out i (Dom h _ (x, t)) = escapeContext i $ do
           t' <- reify =<< rewrite norm t
           return $ OfType x t'
 
@@ -424,22 +446,22 @@
 
 withMetaId :: MetaId -> TCM a -> TCM a
 withMetaId m ret = do
-  info <- lookupMeta m
-  withMetaInfo (mvInfo info) ret
+  mv <- lookupMeta m
+  withMetaInfo' mv ret
 
 -- The intro tactic
 
 -- Returns the terms (as strings) that can be
 -- used to refine the goal. Uses the coverage checker
 -- to find out which constructors are possible.
-introTactic :: InteractionId -> TCM [String]
-introTactic ii = do
+introTactic :: Bool -> InteractionId -> TCM [String]
+introTactic pmLambda ii = do
   mi <- lookupInteractionId ii
   mv <- lookupMeta mi
   withMetaInfo (getMetaInfo mv) $ case mvJudgement mv of
     HasType _ t -> do
         t <- reduce =<< piApply t <$> getContextArgs
-        case unEl t of
+        case ignoreSharing $ unEl t of
           I.Def d _ -> do
             def <- getConstInfo d
             case theDef def of
@@ -464,27 +486,34 @@
 
     introFun tel = addCtxTel tel' $ do
         imp <- showImplicitArguments
-        let okHiding h = imp || h == NotHidden
-        vars <- mapM showTCM [ Arg h Relevant (I.Var i [])
-                             | (h, i) <- zip hs $ reverse [0..n - 1]
-                             , okHiding h
-                             ]
-        return [ unwords $ ["λ"] ++ vars ++ ["→", "?"] ]
+        let okHiding0 h = imp || h == NotHidden
+            -- if none of the vars were displayed, we would get a parse error
+            -- thus, we switch to displaying all
+            allHidden   = null (filter okHiding0 hs)
+            okHiding    = if allHidden then const True else okHiding0
+        vars <- -- setShowImplicitArguments (imp || allHidden) $
+                (if allHidden then withShowAllArguments else id) $
+                  mapM showTCM [ Arg h Relevant (var i)
+                               | (h, i) <- zip hs $ downFrom n
+                               , okHiding h
+                               ]
+        if pmLambda
+           then return [ unwords $ ["λ", "{"] ++ vars ++ ["→", "?", "}"] ]
+           else return [ unwords $ ["λ"]      ++ vars ++ ["→", "?"] ]
       where
         n = size tel
-        hs   = map argHiding $ telToList tel
+        hs   = map domHiding $ telToList tel
         tel' = telFromList [ fmap makeName b | b <- telToList tel ]
         makeName ("_", t) = ("x", t)
         makeName (x, t)   = (x, t)
 
     introData t = do
-      let tel  = telFromList [defaultArg ("_", t)]
-          perm = idP 1
+      let tel  = telFromList [domFromArg $ defaultArg ("_", t)]
           pat  = [defaultArg (I.VarP "c")]
-      r <- split CoInductive tel perm pat 0
+      r <- splitLast CoInductive tel pat
       case r of
         Left err -> return []
-        Right cs -> mapM showTCM $ concatMap (conName . scPats) cs
+        Right cov -> mapM showTCM $ concatMap (conName . scPats) $ splitClauses cov
 
     introRec d = do
       hfs <- getRecordFieldNames d
@@ -517,7 +546,7 @@
           M.withCurrentModule current $
             withScope_ scope $
               addContext (zipWith' (fmap . (,))
-                                   (map snd $ scopeLocals scope)
+                                   (reverse $ map snd $ scopeLocals scope)
                                    (map (fmap snd) $ telToList tel)) $
                 m
 
diff --git a/src/full/Agda/Interaction/CommandLine/CommandLine.hs b/src/full/Agda/Interaction/CommandLine/CommandLine.hs
--- a/src/full/Agda/Interaction/CommandLine/CommandLine.hs
+++ b/src/full/Agda/Interaction/CommandLine/CommandLine.hs
@@ -10,7 +10,6 @@
 import Data.Map as Map
 import Data.List as List
 import Data.Maybe
-import qualified Agda.Utils.IO.Locale as LocIO
 
 import Agda.Interaction.BasicOps as BasicOps hiding (parseExpr)
 import Agda.Interaction.Monad
@@ -69,16 +68,16 @@
 			do  case matchCommand cmd cmds of
 				Right c	-> go =<< liftTCM (c args)
 				Left []	->
-				    do	liftIO $ LocIO.putStrLn $ "Unknown command '" ++ cmd ++ "'"
+				    do	liftIO $ putStrLn $ "Unknown command '" ++ cmd ++ "'"
 					loop
 				Left xs	->
-				    do	liftIO $ LocIO.putStrLn $ "More than one command match: " ++ concat (intersperse ", " xs)
+				    do	liftIO $ putStrLn $ "More than one command match: " ++ concat (intersperse ", " xs)
 					loop
 		    Just _ ->
 			do  go =<< liftTCM (eval $ fromJust ms)
 	    `catchError` \e ->
 		do  s <- liftTCM $ prettyError e
-		    liftIO $ LocIO.putStrLn s
+		    liftIO $ putStrLn s
 		    loop
 
 -- | The interaction loop.
@@ -100,8 +99,8 @@
               Nothing -> emptyScopeInfo
 	  `catchError` \e -> do
 	    s <- prettyError e
-	    liftIO $ LocIO.putStrLn s
-	    liftIO $ LocIO.putStrLn "Failed."
+	    liftIO $ putStrLn s
+	    liftIO $ putStrLn "Failed."
 
 	commands =
 	    [ "quit"	    |>  \_ -> return $ Return ()
@@ -130,13 +129,13 @@
 loadFile reload [file] =
     do	setInputFile file
 	reload
-loadFile _ _ = liftIO $ LocIO.putStrLn ":load file"
+loadFile _ _ = liftIO $ putStrLn ":load file"
 
 showConstraints :: [String] -> TCM ()
 showConstraints [] =
     do	cs <- BasicOps.getConstraints
-	liftIO $ LocIO.putStrLn $ unlines (List.map show cs)
-showConstraints _ = liftIO $ LocIO.putStrLn ":constraints [cid]"
+	liftIO $ putStrLn $ unlines (List.map show cs)
+showConstraints _ = liftIO $ putStrLn ":constraints [cid]"
 
 
 showMetas :: [String] -> TCM ()
@@ -146,21 +145,21 @@
 	  s <- typeOfMeta AsIs i
 	  r <- getInteractionRange i
 	  d <- showA s
-	  liftIO $ LocIO.putStrLn $ d ++ " " ++ show r
+	  liftIO $ putStrLn $ d ++ " " ++ show r
 showMetas [m,"normal"] =
     do	i <- InteractionId <$> readM m
 	withInteractionId i $ do
 	  s <- showA =<< typeOfMeta Normalised i
 	  r <- getInteractionRange i
-	  liftIO $ LocIO.putStrLn $ s ++ " " ++ show r
+	  liftIO $ putStrLn $ s ++ " " ++ show r
 showMetas [] =
     do  interactionMetas <- typesOfVisibleMetas AsIs
         hiddenMetas      <- typesOfHiddenMetas  AsIs
-        mapM_ (liftIO . LocIO.putStrLn) =<< mapM showII interactionMetas
+        mapM_ (liftIO . putStrLn) =<< mapM showII interactionMetas
 	mapM_ print' hiddenMetas
     where
 	showII o = withInteractionId (outputFormId $ OutputForm 0 o) $ showA o
-	showM  o = withMetaId (outputFormId $ OutputForm 0 o) $ showA o
+	showM  o = withMetaId (nmid $ outputFormId $ OutputForm 0 o) $ showA o
 
 	metaId (OfType i _) = i
 	metaId (JustType i) = i
@@ -168,23 +167,23 @@
 	metaId (Assign i e) = i
 	metaId _ = __IMPOSSIBLE__
 	print' x = do
-	    r <- getMetaRange (metaId x)
+	    r <- getMetaRange $ nmid $ metaId x
 	    d <- showM x
-	    liftIO $ LocIO.putStrLn $ d ++ "  [ at " ++ show r ++ " ]"
-showMetas _ = liftIO $ LocIO.putStrLn $ ":meta [metaid]"
+	    liftIO $ putStrLn $ d ++ "  [ at " ++ show r ++ " ]"
+showMetas _ = liftIO $ putStrLn $ ":meta [metaid]"
 
 
 showScope :: TCM ()
 showScope = do
   scope <- getScope
-  liftIO $ LocIO.print scope
+  liftIO $ print scope
 
 metaParseExpr ::  InteractionId -> String -> TCM A.Expr
 metaParseExpr ii s =
     do	m <- lookupInteractionId ii
         scope <- getMetaScope <$> lookupMeta m
         r <- getRange <$> lookupMeta m
-        --liftIO $ LocIO.putStrLn $ show scope
+        --liftIO $ putStrLn $ show scope
         let pos = case rStart r of
                     Nothing  -> __IMPOSSIBLE__
                     Just pos -> pos
@@ -204,7 +203,7 @@
 giveMeta s | length s >= 2 =
     do  actOnMeta s (\ii -> \e  -> give ii Nothing e)
         return ()
-giveMeta _ = liftIO $ LocIO.putStrLn $ ": give" ++ " metaid expr"
+giveMeta _ = liftIO $ putStrLn $ ": give" ++ " metaid expr"
 
 
 
@@ -212,7 +211,7 @@
 refineMeta s | length s >= 2 =
     do  actOnMeta s (\ii -> \e  -> refine ii Nothing e)
         return ()
-refineMeta _ = liftIO $ LocIO.putStrLn $ ": refine" ++ " metaid expr"
+refineMeta _ = liftIO $ putStrLn $ ": refine" ++ " metaid expr"
 
 
 
@@ -223,8 +222,8 @@
 evalIn :: [String] -> TCM ()
 evalIn s | length s >= 2 =
     do	d <- actOnMeta s $ \_ e -> prettyA =<< evalInCurrent e
-        liftIO $ LocIO.print d
-evalIn _ = liftIO $ LocIO.putStrLn ":eval metaid expr"
+        liftIO $ print d
+evalIn _ = liftIO $ putStrLn ":eval metaid expr"
 
 parseExpr :: String -> TCM A.Expr
 parseExpr s = do
@@ -236,7 +235,7 @@
     do	e <- parseExpr s
         v <- evalInCurrent e
 	e <- prettyTCM v
-	liftIO $ LocIO.putStrLn $ show e
+	liftIO $ putStrLn $ show e
 	return Continue
     where
 	evalInCurrent e = do
@@ -250,22 +249,22 @@
     do  e  <- parseExpr (unwords s)
         e0 <- typeInCurrent Normalised e
         e1 <- typeInCurrent AsIs e
-	liftIO . LocIO.putStrLn =<< showA e1
+	liftIO . putStrLn =<< showA e1
 
 typeIn :: [String] -> TCM ()
 typeIn s@(_:_:_) =
     actOnMeta s $ \i e ->
     do	e1 <- typeInMeta i Normalised e
         e2 <- typeInMeta i AsIs e
-	liftIO . LocIO.putStrLn =<< showA e1
-typeIn _ = liftIO $ LocIO.putStrLn ":typeIn meta expr"
+	liftIO . putStrLn =<< showA e1
+typeIn _ = liftIO $ putStrLn ":typeIn meta expr"
 
 showContext :: [String] -> TCM ()
 showContext (meta:args) = do
     i <- InteractionId <$> readM meta
     mi <- lookupMeta =<< lookupInteractionId i
     withMetaInfo (getMetaInfo mi) $ do
-    ctx <- List.map unArg . telToList <$> getContextTelescope
+    ctx <- List.map unDom . telToList <$> getContextTelescope
     zipWithM_ display ctx $ reverse $ zipWith const [1..] ctx
     where
 	display (x, t) n = do
@@ -273,8 +272,8 @@
 		    ["normal"] -> normalise $ raise n t
 		    _	       -> return $ raise n t
 	    d <- prettyTCM t
-	    liftIO $ LocIO.print $ text x <+> text ":" <+> d
-showContext _ = liftIO $ LocIO.putStrLn ":Context meta"
+	    liftIO $ print $ text x <+> text ":" <+> d
+showContext _ = liftIO $ putStrLn ":Context meta"
 
 -- | The logo that prints when Agda is started in interactive mode.
 splashScreen :: String
@@ -294,7 +293,7 @@
 
 -- | The help message
 help :: [Command a] -> IO ()
-help cs = LocIO.putStr $ unlines $
+help cs = putStr $ unlines $
     [ "Command overview" ] ++ List.map explain cs ++
     [ "<exp> Infer type of expression <exp> and evaluate it." ]
     where
diff --git a/src/full/Agda/Interaction/EmacsCommand.hs b/src/full/Agda/Interaction/EmacsCommand.hs
--- a/src/full/Agda/Interaction/EmacsCommand.hs
+++ b/src/full/Agda/Interaction/EmacsCommand.hs
@@ -1,16 +1,20 @@
 ------------------------------------------------------------------------
--- | Low-level code for instructing Emacs to do things
+-- | Code for instructing Emacs to do things
 ------------------------------------------------------------------------
 
 {-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
 
 module Agda.Interaction.EmacsCommand
   ( Lisp(..)
+  , response
   , putResponse
+  , display_info'
+  , clearRunningInfo
+  , displayRunningInfo
   ) where
 
-import qualified Agda.Utils.IO.Locale as LocIO
 import Agda.Utils.Pretty
+import Agda.Utils.String
 
 -- | Simple Emacs Lisp expressions.
 
@@ -30,16 +34,56 @@
   pretty (L xs)     = parens (hsep (map pretty xs))
   pretty (Q x)      = text "'" <> pretty x
 
-instance Pretty String where pretty = text
+instance Pretty String where
+  pretty = text
 
-instance Pretty a => Show (Lisp a) where show = show . pretty
+instance Pretty a => Show (Lisp a) where
+  show = show . pretty
 
 -- | Formats a response command.
-
+--
+--   Replaces @'\n'@ with spaces to ensure that each command is a
+--   single line.
 response :: Lisp String -> String
-response l = show (text "agda2_mode_code" <+> pretty l)
+response = (++ "\n") . map replaceNewLines . show . pretty
+  where
+  replaceNewLines '\n' = ' '
+  replaceNewLines c    = c
 
 -- | Writes a response command to standard output.
 
 putResponse :: Lisp String -> IO ()
-putResponse = LocIO.putStrLn . response
+putResponse = putStr . response
+
+-- | @display_info' append header content@ displays @content@ (with
+-- header @header@) in some suitable way. If @append@ is @True@, then
+-- the content is appended to previous content (if any), otherwise any
+-- previous content is deleted.
+
+display_info' :: Bool -> String -> String -> Lisp String
+display_info' append bufname content =
+    L [ A "agda2-info-action"
+      , A (quote bufname)
+      , A (quote content)
+      , A (if append then "t" else "nil")
+      ]
+
+------------------------------------------------------------------------
+-- Running info
+
+-- | The name of the running info buffer.
+
+runningInfoBufferName :: String
+runningInfoBufferName = "*Type-checking*"
+
+-- | Clear the running info buffer.
+
+clearRunningInfo :: Lisp String
+clearRunningInfo =
+    display_info' False runningInfoBufferName ""
+
+-- | Display running information about what the type-checker is up to.
+
+displayRunningInfo :: String -> Lisp String
+displayRunningInfo s =
+    display_info' True runningInfoBufferName s
diff --git a/src/full/Agda/Interaction/Exceptions.hs b/src/full/Agda/Interaction/Exceptions.hs
--- a/src/full/Agda/Interaction/Exceptions.hs
+++ b/src/full/Agda/Interaction/Exceptions.hs
@@ -3,8 +3,8 @@
 -}
 module Agda.Interaction.Exceptions where
 
-import Prelude hiding (catch)
-import Control.Exception
+import Prelude
+import Control.Exception as E
 import Control.Monad.Trans
 import System.Exit
 
@@ -17,6 +17,6 @@
 -- | Note that 'failOnException' only catches 'ParseError's.
 
 failOnException :: (Range -> String -> IO a) -> IO a -> IO a
-failOnException h m = m `catch` handleParseException handler
+failOnException h m = m `E.catch` handleParseException handler
     where
 	handler x = h (getRange x) (show x)
diff --git a/src/full/Agda/Interaction/FindFile.hs b/src/full/Agda/Interaction/FindFile.hs
--- a/src/full/Agda/Interaction/FindFile.hs
+++ b/src/full/Agda/Interaction/FindFile.hs
@@ -26,7 +26,6 @@
 import Data.Map (Map)
 import qualified Data.Map as Map
 import System.FilePath
-import System.Directory
 
 import Agda.Syntax.Concrete
 import Agda.Syntax.Parser
@@ -105,7 +104,7 @@
                                   [".agda", ".lagda"]
                     ]
       existingFiles <-
-        liftIO $ filterM (doesFileExist . filePath) files
+        liftIO $ filterM (doesFileExistCaseSensitive . filePath) files
       return $ case nub existingFiles of
         []     -> (Left (NotFound files), modFile)
         [file] -> (Right file, Map.insert m file modFile)
@@ -121,7 +120,7 @@
 findInterfaceFile :: TopLevelModuleName -> TCM (Maybe AbsolutePath)
 findInterfaceFile m = do
   f  <- toIFile <$> findFile m
-  ex <- liftIO $ doesFileExist $ filePath f
+  ex <- liftIO $ doesFileExistCaseSensitive $ filePath f
   return $ if ex then Just f else Nothing
 
 -- | Ensures that the module name matches the file name. The file
diff --git a/src/full/Agda/Interaction/GhcTop.hs b/src/full/Agda/Interaction/GhcTop.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/GhcTop.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE CPP, ScopedTypeVariables, FlexibleInstances #-}
+module Agda.Interaction.GhcTop
+    ( mimicGHCi
+    ) where
+
+import Data.List
+import Data.Maybe
+import Control.Monad.Error
+import Control.Monad.State
+
+import System.Directory
+import System.Environment
+import System.IO
+
+import Agda.Utils.Pretty
+import Agda.Utils.String
+
+import Agda.TypeChecking.Monad
+
+import Agda.Interaction.Response
+import Agda.Interaction.InteractionTop
+import Agda.Interaction.EmacsCommand
+import Agda.Interaction.Highlighting.Emacs
+
+----------------------------------
+
+-- | 'mimicGHCi' is a fake ghci interpreter for the Emacs frontend
+--   and for interaction tests.
+--
+--   'mimicGHCi' reads the Emacs frontend commands from stdin,
+--   interprets them and print the result into stdout.
+
+mimicGHCi :: TCM ()
+mimicGHCi = do
+
+    liftIO $ hSetBuffering stdout NoBuffering
+
+    modify $ \st -> st { stInteractionOutputCallback =
+                           liftIO . putStrLn . show <=< lispifyResponse }
+
+    opts <- commandLineOptions
+    _ <- interact' `runCommandM` initCommandState { optionsOnReload = opts }
+    return ()
+  where
+
+    interact' :: CommandM ()
+    interact' = do
+        liftIO $ putStr "Agda2> "
+        b <- liftIO isEOF
+        if b then return () else do
+            r <- liftIO getLine
+            _ <- return $! length r     -- force to read the full input line
+            case dropWhile (==' ') r of
+                ""  -> return ()
+                ('-':'-':_) -> return ()
+                _ -> case listToMaybe $ reads r of
+                    Just (x, "")  -> runInteraction x
+                    Just (_, rem) -> liftIO $ putStrLn $ "not consumed: " ++ rem
+                    _ ->             liftIO $ putStrLn $ "cannot read: " ++ r
+            interact'
+
+
+-- | Convert Response to an elisp value for the interactive emacs frontend.
+
+lispifyResponse :: Response -> TCM (Lisp String)
+lispifyResponse (Resp_HighlightingInfo info modFile) =
+  lispifyHighlightingInfo info modFile
+lispifyResponse (Resp_DisplayInfo info) = return $ case info of
+    Info_CompilationOk -> f "The module was successfully compiled." "*Compilation result*"
+    Info_Constraints s -> f s "*Constraints*"
+    Info_AllGoals s -> f s "*All Goals*"
+    Info_Auto s -> f s "*Auto*"
+    Info_Error s -> f s "*Error*"
+
+    Info_NormalForm s -> f (render s) "*Normal Form*"   -- show?
+    Info_InferredType s -> f (render s) "*Inferred Type*"
+    Info_CurrentGoal s -> f (render s) "*Current Goal*"
+    Info_GoalType s -> f (render s) "*Goal type etc.*"
+    Info_ModuleContents s -> f (render s) "*Module contents*"
+    Info_Context s -> f (render s) "*Context*"
+    Info_Intro s -> f (render s) "*Intro*"
+  where f content bufname = display_info' False bufname content
+lispifyResponse Resp_ClearHighlighting = return $ L [ A "agda2-highlight-clear" ]
+lispifyResponse Resp_ClearRunningInfo = return $ clearRunningInfo
+lispifyResponse (Resp_RunningInfo s) = return $ displayRunningInfo $ s ++ "\n"
+lispifyResponse (Resp_Status s)
+    = return $ L [ A "agda2-status-action"
+                 , A (quote $ intercalate "," $ catMaybes [checked, showImpl])
+                 ]
+  where
+    boolToMaybe b x = if b then Just x else Nothing
+
+    checked  = boolToMaybe (sChecked               s) "Checked"
+    showImpl = boolToMaybe (sShowImplicitArguments s) "ShowImplicit"
+
+lispifyResponse (Resp_JumpToError f p) = return $ lastTag 3 $
+  L [ A "agda2-goto", Q $ L [A (quote f), A ".", A (show p)] ]
+lispifyResponse (Resp_InteractionPoints is) = return $ lastTag 1 $
+  L [A "agda2-goals-action", Q $ L $ map showNumIId is]
+lispifyResponse (Resp_GiveAction ii s)
+    = return $ L [A "agda2-give-action", showNumIId ii, A s']
+  where
+    s' = case s of
+        Give_String str -> quote str
+        Give_Paren      -> "'paren"
+        Give_NoParen    -> "'no-paren"
+lispifyResponse (Resp_MakeCaseAction cs) = return $ lastTag 2 $
+  L [A "agda2-make-case-action", Q $ L $ map (A . quote) cs]
+lispifyResponse (Resp_MakeCase cmd pcs) = return $ lastTag 2 $
+  L [A cmd, Q $ L $ map (A . quote) pcs]
+lispifyResponse (Resp_SolveAll ps) = return $ lastTag 2 $
+  L [A "agda2-solveAll-action", Q . L $ concatMap prn ps]
+  where
+    prn (ii,e)= [showNumIId ii, A $ quote $ show e]
+
+-- | Adds a \"last\" tag to a response.
+
+lastTag :: Integer -> Lisp String -> Lisp String
+lastTag n r = Cons (Cons (A "last") (A $ show n)) r
+
+-- | Show an iteraction point identifier as an elisp expression.
+
+showNumIId :: InteractionId -> Lisp String
+showNumIId = A . tail . show
diff --git a/src/full/Agda/Interaction/GhciTop.hs b/src/full/Agda/Interaction/GhciTop.hs
deleted file mode 100644
--- a/src/full/Agda/Interaction/GhciTop.hs
+++ /dev/null
@@ -1,1083 +0,0 @@
-{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-}
-{-# OPTIONS -fno-cse #-}
-
-module Agda.Interaction.GhciTop
-  ( module Agda.Interaction.GhciTop
-  , module Agda.TypeChecker
-  , module Agda.TypeChecking.MetaVars
-  , module Agda.TypeChecking.Reduce
-  , module Agda.TypeChecking.Errors
-
-  , module Agda.Syntax.Position
-  , module Agda.Syntax.Parser
---  , module SC  -- trivial clash removal: remove all!
---  , module SA
---  , module SI
-  , module Agda.Syntax.Scope.Base
-  , module Agda.Syntax.Scope.Monad
-  , module Agda.Syntax.Translation.ConcreteToAbstract
-  , module Agda.Syntax.Translation.AbstractToConcrete
-  , module Agda.Syntax.Translation.InternalToAbstract
-  , module Agda.Syntax.Abstract.Name
-
-  , module Agda.Interaction.Exceptions
-
-  , mkAbsolute
-  )
-  where
-
-import System.Directory
-import qualified System.IO as IO
-import System.IO.Unsafe
-import Data.Char
-import Data.Maybe
-import Data.IORef
-import Data.Function
-import Control.Applicative
-
-import Agda.Utils.Fresh
-import Agda.Utils.Monad
-import Agda.Utils.Pretty as P
-import Agda.Utils.String
-import Agda.Utils.FileName
-import qualified Agda.Utils.Trie as Trie
-import Agda.Utils.Tuple
-import qualified Agda.Utils.IO.UTF8 as UTF8
-
-import Control.Monad.Error
-import Control.Monad.Reader
-import Control.Monad.State hiding (State)
-import Control.Exception
-import Data.List as List
-import qualified Data.Map as Map
-import System.Exit
-import qualified System.Mem as System
-import System.Time
-import Text.PrettyPrint
-
-import Agda.TypeChecker
-import Agda.TypeChecking.Monad as TM
-  hiding (initState, setCommandLineOptions)
-import qualified Agda.TypeChecking.Monad as TM
-import Agda.TypeChecking.MetaVars
-import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Errors
-
-import Agda.Syntax.Fixity
-import Agda.Syntax.Position
-import Agda.Syntax.Parser
-import qualified Agda.Syntax.Parser.Tokens as T
-import Agda.Syntax.Concrete as SC
-import Agda.Syntax.Common as SCo
-import Agda.Syntax.Concrete.Name as CN
-import Agda.Syntax.Concrete.Pretty ()
-import Agda.Syntax.Abstract as SA
-import Agda.Syntax.Abstract.Pretty
-import Agda.Syntax.Internal as SI
-import Agda.Syntax.Scope.Base
-import Agda.Syntax.Scope.Monad hiding (bindName, withCurrentModule)
-import qualified Agda.Syntax.Info as Info
-import Agda.Syntax.Translation.ConcreteToAbstract
-import Agda.Syntax.Translation.AbstractToConcrete hiding (withScope)
-import Agda.Syntax.Translation.InternalToAbstract
-import Agda.Syntax.Abstract.Name
-
-import Agda.Interaction.EmacsCommand
-import Agda.Interaction.Exceptions
-import Agda.Interaction.FindFile
-import Agda.Interaction.Options
-import Agda.Interaction.MakeCase
-import qualified Agda.Interaction.BasicOps as B
-import Agda.Interaction.Highlighting.Emacs
-import Agda.Interaction.Highlighting.Generate
-import qualified Agda.Interaction.Imports as Imp
-
-import Agda.Termination.TermCheck
-
-import qualified Agda.Compiler.Epic.Compiler as Epic
-import qualified Agda.Compiler.MAlonzo.Compiler as MAlonzo
-import qualified Agda.Compiler.JS.Compiler as JS
-
-import qualified Agda.Auto.Auto as Auto
-
-#include "../undefined.h"
-import Agda.Utils.Impossible
-
-data State = State
-  { theTCState           :: TCState
-  , theInteractionPoints :: [InteractionId]
-    -- ^ The interaction points of the buffer, in the order in which
-    --   they appear in the buffer. The interaction points are
-    --   recorded in 'theTCState', but when new interaction points are
-    --   added by give or refine Agda does not ensure that the ranges
-    --   of later interaction points are updated.
-  , theCurrentFile       :: Maybe (AbsolutePath, ClockTime)
-    -- ^ The file which the state applies to. Only stored if the
-    -- module was successfully type checked (potentially with
-    -- warnings). The 'ClockTime' is the modification time stamp of
-    -- the file when it was last loaded.
-  }
-
-initState :: State
-initState = State
-  { theTCState           = TM.initState
-  , theInteractionPoints = []
-  , theCurrentFile       = Nothing
-  }
-
-{-# NOINLINE theState #-}
-theState :: IORef State
-theState = unsafePerformIO $ newIORef initState
-
--- | Can the command run even if the relevant file has not been loaded
--- into the state?
-
-data Independence
-  = Independent (Maybe [FilePath])
-    -- ^ Yes. If the argument is @'Just' is@, then @is@ is used as the
-    -- command's include directories.
-  | Dependent
-    -- No.
-
--- | An interactive computation.
-
-data Interaction = Interaction
-  { independence :: Independence
-    -- ^ Is the command independent?
-  , command :: TCM (Maybe ModuleName)
-    -- ^ If a module name is returned, then syntax highlighting
-    -- information will be written for the given module (by 'ioTCM').
-  }
-
--- ^ Is the command independent?
-
-isIndependent :: Interaction -> Bool
-isIndependent i = case independence i of
-  Independent {} -> True
-  Dependent   {} -> False
-
--- | Run a TCM computation in the current state. Should only
---   be used for debugging.
-ioTCM_ :: TCM a -> IO a
-ioTCM_ m = do
-  tcs <- readIORef theState
-  result <- runTCM $ do
-    put $ theTCState tcs
-    x <- withEnv initEnv m
-    s <- get
-    return (x, s)
-  case result of
-    Right (x, s) -> do
-      writeIORef theState $ tcs { theTCState = s }
-      return x
-    Left err -> do
-      Right doc <- runTCM $ prettyTCM err
-      putStrLn $ render doc
-      return __IMPOSSIBLE__
-{-
-  Right (x, s) <- runTCM $ do
-    put $ theTCState tcs
-    x <- withEnv initEnv m
-    s <- get
-    return (x, s)
-  writeIORef theState $ tcs { theTCState = s }
-  return x
--}
-
--- | Runs a 'TCM' computation. All calls from the Emacs mode should be
--- wrapped in this function.
-
-ioTCM :: FilePath
-         -- ^ The current file. If this file does not match
-         -- 'theCurrentFile', and the 'Interaction' is not
-         -- \"independent\", then an error is raised.
-      -> Maybe FilePath
-         -- ^ Syntax highlighting information will be written to this
-         -- file, if any.
-      -> Interaction
-      -> IO ()
-ioTCM current highlightingFile cmd = infoOnException $ do
-#if MIN_VERSION_base(4,2,0)
-  -- Ensure that UTF-8 is used for communication with the Emacs mode.
-  IO.hSetEncoding IO.stdout IO.utf8
-#endif
-
-  current <- absolute current
-
-  -- Read the state.
-  State { theTCState = st } <- readIORef theState
-
-  -- Run the computation.
-  r <- runTCM $ catchError (do
-           put st
-           x  <- withEnv initEnv $ do
-                   case independence cmd of
-                     Dependent             -> ensureFileLoaded current
-                     Independent Nothing   ->
-                       -- Make sure that the include directories have
-                       -- been set.
-                       setCommandLineOptions =<< commandLineOptions
-                     Independent (Just is) -> do
-                       ex <- liftIO $ doesFileExist $ filePath current
-                       setIncludeDirs is $
-                         if ex then ProjectRoot current else CurrentDir
-                   command cmd
-           st <- get
-           return (Right (x, st))
-         ) (\e -> do
-           pers <- stPersistent <$> get
-           s    <- prettyError e
-           return (Left (pers, s, e))
-         )
-
-  -- Upon success: update the state. Upon failure: update the
-  -- persistent state, and, for independent commands, the current
-  -- file.
-  case r of
-    Right (Right (m, st')) ->
-      modifyIORef theState $ \s ->
-        s { theTCState = st'
-          }
-    Right (Left (pers, _, _)) -> do
-      modifyIORef theState $ \s ->
-        s { theTCState = (theTCState s) { stPersistent = pers }
-          }
-    Left _ -> return ()
-  when (isIndependent cmd) $
-    case r of
-      Right (Right _) -> return ()
-      _               ->
-        modifyIORef theState $ \s ->
-          s { theCurrentFile = Nothing
-            }
-
-  -- Write out syntax highlighting info.
-  case highlightingFile of
-    Nothing -> return ()
-    Just f  -> do
-      let errHi e s = errHighlighting e
-                        `mplus`
-                      ((\h -> (h, Map.empty)) <$>
-                           generateErrorInfo (getRange e) s)
-      UTF8.writeFile f $
-        showHighlightingInfo $
-          case r of
-            Right (Right (mm, st')) -> do
-              m  <- mm
-              mi <- Map.lookup (SA.toTopLevelModuleName m)
-                               (stVisitedModules st')
-              return ( iHighlighting $ miInterface mi
-                     , stModuleToSource st'
-                     )
-            Right (Left (_ , s, e)) -> errHi e (Just s)
-            Left e                  -> errHi e Nothing
-
-  -- If an error was encountered, display an error message and exit
-  -- with an error code; otherwise, inform Emacs about the buffer's
-  -- goals (if current matches the new current file).
-  let errStatus = Status { sChecked               = False
-                         , sShowImplicitArguments =
-                             optShowImplicit $ stPragmaOptions st
-                         }
-  case r of
-    Right (Left (_, s, e)) -> displayErrorAndExit errStatus (getRange e) s
-    Left e                 -> displayErrorAndExit errStatus (getRange e) $
-                                tcErrString e
-    Right (Right _)        -> do
-      f <- theCurrentFile <$> readIORef theState
-      case f of
-        Just (f, _) | f === current -> do
-          is <- theInteractionPoints <$> liftIO (readIORef theState)
-          liftIO $ putResponse $
-            L [A "agda2-goals-action", Q $ L $ List.map showNumIId is]
-        _ -> return ()
-
--- | @cmd_load m includes@ loads the module in file @m@, using
--- @includes@ as the include directories.
-
-cmd_load :: FilePath -> [FilePath] -> Interaction
-cmd_load m includes =
-  cmd_load' m includes True (\_ -> command cmd_metas >> return ())
-
--- | @cmd_load' m includes cmd cmd2@ loads the module in file @m@,
--- using @includes@ as the include directories.
---
--- If type checking completes without any exceptions having been
--- encountered then the command @cmd r@ is executed, where @r@ is the
--- result of 'Imp.typeCheck'.
-
-cmd_load' :: FilePath -> [FilePath]
-          -> Bool -- ^ Allow unsolved meta-variables?
-          -> ((Interface, Maybe Imp.Warnings) -> TCM ())
-          -> Interaction
-cmd_load' file includes unsolvedOK cmd =
-  Interaction (Independent (Just includes)) $ do
-    -- Forget the previous "current file" and interaction points.
-    liftIO $ modifyIORef theState $ \s ->
-      s { theInteractionPoints = []
-        , theCurrentFile       = Nothing
-        }
-
-    f <- liftIO $ absolute file
-    t <- liftIO $ getModificationTime file
-
-    -- All options (except for the verbosity setting) are reset when a
-    -- file is reloaded, including the choice of whether or not to
-    -- display implicit arguments. (At this point the include
-    -- directories have already been set, so they are preserved.)
-    opts <- commandLineOptions
-    setCommandLineOptions $
-      defaultOptions { optIncludeDirs   = optIncludeDirs opts
-                     , optPragmaOptions =
-                         (optPragmaOptions defaultOptions)
-                           { optAllowUnsolved = unsolvedOK
-                           , optVerbose       = optVerbose (optPragmaOptions opts)
-                           }
-                     }
-
-    -- Reset the state, preserving options and decoded modules. Note
-    -- that if the include directories have changed, then the decoded
-    -- modules are reset when cmd_load' is run by ioTCM.
-    resetState
-
-    ok <- Imp.typeCheck f
-
-    -- The module type checked. If the file was not changed while the
-    -- type checker was running then the interaction points and the
-    -- "current file" are stored.
-    t' <- liftIO $ getModificationTime file
-    when (t == t') $ do
-      is <- sortInteractionPoints =<< getInteractionPoints
-      liftIO $ modifyIORef theState $ \s ->
-        s { theInteractionPoints = is
-          , theCurrentFile       = Just (f, t)
-          }
-
-    cmd ok
-
-    liftIO System.performGC
-
-    return $ Just $ iModuleName (fst ok)
-
--- | Available backends.
-
-data Backend = MAlonzo | Epic | JS
-
--- | @cmd_compile b m includes@ compiles the module in file @m@ using
--- the backend @b@, using @includes@ as the include directories.
-
-cmd_compile :: Backend -> FilePath -> [FilePath] -> Interaction
-cmd_compile b file includes =
-  cmd_load' file includes False (\(i, mw) ->
-    case mw of
-      Nothing -> do
-        case b of
-          MAlonzo -> MAlonzo.compilerMain i
-          Epic    -> Epic.compilerMain i
-          JS      -> JS.compilerMain i
-        display_info "*Compilation result*"
-                     "The module was successfully compiled."
-      Just w ->
-        display_info errorTitle $ unlines
-          [ "You can only compile modules without unsolved metavariables"
-          , "or termination checking problems."
-          ])
-
-cmd_constraints :: Interaction
-cmd_constraints = Interaction Dependent $ do
-    cs <- map show <$> B.getConstraints
-    display_info "*Constraints*" (unlines cs)
-    return Nothing
-
--- Show unsolved metas. If there are no unsolved metas but unsolved constraints
--- show those instead.
-cmd_metas :: Interaction
-cmd_metas = Interaction Dependent $ do -- CL.showMetas []
-  ims <- B.typesOfVisibleMetas B.AsIs
-  -- Show unsolved implicit arguments normalised.
-  hms <- B.typesOfHiddenMetas B.Normalised
-  if not $ null ims && null hms
-    then do
-      di <- mapM (\i -> B.withInteractionId (B.outputFormId $ B.OutputForm 0 i) (showATop i)) ims
-      dh <- mapM showA' hms
-      display_info "*All Goals*" $ unlines $ di ++ dh
-      return Nothing
-    else do
-      cs <- B.getConstraints
-      if null cs
-        then display_info "*All Goals*" "" >> return Nothing
-        else command cmd_constraints
-  where
-    metaId (B.OfType i _) = i
-    metaId (B.JustType i) = i
-    metaId (B.JustSort i) = i
-    metaId (B.Assign i e) = i
-    metaId _ = __IMPOSSIBLE__
-    showA' m = do
-      r <- getMetaRange (metaId m)
-      d <- B.withMetaId (B.outputFormId $ B.OutputForm 0 m) (showATop m)
-      return $ d ++ "  [ at " ++ show r ++ " ]"
-
--- | If the range is 'noRange', then the string comes from the
--- minibuffer rather than the goal.
-
-type GoalCommand = InteractionId -> Range -> String -> Interaction
-
-cmd_give :: GoalCommand
-cmd_give = give_gen B.give $ \rng s ce ->
-  case ce of
-    ce | rng == noRange -> quote (show ce)
-    SC.Paren _ _ -> "'paren"
-    _            -> "'no-paren"
-
-cmd_refine :: GoalCommand
-cmd_refine = give_gen B.refine $ \_ s -> quote . show
-
-give_gen give_ref mk_newtxt ii rng s = Interaction Dependent $
-  give_gen' give_ref mk_newtxt ii rng s
-
-give_gen' give_ref mk_newtxt ii rng s = do
-  scope     <- getInteractionScope ii
-  (ae, iis) <- give_ref ii Nothing =<< B.parseExprIn ii rng s
-  let newtxt = A . mk_newtxt rng s $ abstractToConcrete (makeEnv scope) ae
-  iis       <- sortInteractionPoints iis
-  liftIO $ modifyIORef theState $ \s ->
-             s { theInteractionPoints =
-                   replace ii iis (theInteractionPoints s) }
-  liftIO $ putResponse $ L [A "agda2-give-action", showNumIId ii, newtxt]
-  command cmd_metas
-  return Nothing
-  where
-  -- Substitutes xs for x in ys.
-  replace x xs ys = concatMap (\y -> if y == x then xs else [y]) ys
-
-cmd_intro :: GoalCommand
-cmd_intro ii rng _ = Interaction Dependent $ do
-  ss <- B.introTactic ii
-  B.withInteractionId ii $ case ss of
-    []    -> do
-      display_infoD "*Intro*" $ text "No introduction forms found."
-      return Nothing
-    [s]   -> command $ cmd_refine ii rng s
-    _:_:_ -> do
-      display_infoD "*Intro*" $
-        sep [ text "Don't know which constructor to introduce of"
-            , let mkOr []     = []
-                  mkOr [x, y] = [text x <+> text "or" <+> text y]
-                  mkOr (x:xs) = text x : mkOr xs
-              in nest 2 $ fsep $ punctuate comma (mkOr ss)
-            ]
-      return Nothing
-
-cmd_refine_or_intro :: GoalCommand
-cmd_refine_or_intro ii rng s =
-  (if null s then cmd_intro else cmd_refine) ii rng s
-
-cmd_auto :: GoalCommand
-cmd_auto ii rng s = Interaction Dependent $ do
-  (res, msg) <- Auto.auto ii rng s
-  case res of
-   Left xs -> do
-    mapM_ (\(ii, s) -> do
-      liftIO $ modifyIORef theState $ \s ->
-        s { theInteractionPoints = filter (/= ii) (theInteractionPoints s) }
-      liftIO $ putResponse $ L [A "agda2-give-action", showNumIId ii, A $ quote s]
-     ) xs
-    case msg of
-     Nothing -> command cmd_metas >> return ()
-     Just msg -> display_info "*Auto*" msg
-    return Nothing
-   Right (Left cs) -> do
-    case msg of
-     Nothing -> return ()
-     Just msg -> display_info "*Auto*" msg
-    liftIO $ putResponse $
-     Cons (A "last")
-          (L [ A "agda2-make-case-action",
-               Q $ L $ List.map (A . quote) cs
-             ])
-    return Nothing
-   Right (Right s) -> give_gen' B.refine (\_ s -> quote . show) ii rng s
-
--- | Sorts interaction points based on their ranges.
-
-sortInteractionPoints :: [InteractionId] -> TCM [InteractionId]
-sortInteractionPoints is =
-  map fst . sortBy (compare `on` snd) <$>
-    mapM (\i -> (,) i <$> getInteractionRange i) is
-
--- | Pretty-prints the type of the meta-variable.
-
-prettyTypeOfMeta :: B.Rewrite -> InteractionId -> TCM Doc
-prettyTypeOfMeta norm ii = do
-  form <- B.typeOfMeta norm ii
-  case form of
-    B.OfType _ e -> prettyATop e
-    _            -> text <$> showATop form
-
--- | Pretty-prints the context of the given meta-variable.
-
-prettyContext
-  :: B.Rewrite      -- ^ Normalise?
-  -> Bool           -- ^ Print the elements in reverse order?
-  -> InteractionId
-  -> TCM Doc
-prettyContext norm rev ii = B.withInteractionId ii $ do
-  ctx <- B.contextOfMeta ii norm
-  es  <- mapM (prettyATop . B.ofExpr) ctx
-  ns  <- mapM (showATop   . B.ofName) ctx
-  let shuffle = if rev then reverse else id
-  return $ align 10 $ filter (not . null. fst) $ shuffle $ zip ns (map (text ":" <+>) es)
-
-cmd_context :: B.Rewrite -> GoalCommand
-cmd_context norm ii _ _ = Interaction Dependent $ do
-  display_infoD "*Context*" =<< prettyContext norm False ii
-  return Nothing
-
-cmd_infer :: B.Rewrite -> GoalCommand
-cmd_infer norm ii rng s = Interaction Dependent $ do
-  display_infoD "*Inferred Type*"
-    =<< B.withInteractionId ii
-          (prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s)
-  return Nothing
-
-cmd_goal_type :: B.Rewrite -> GoalCommand
-cmd_goal_type norm ii _ _ = Interaction Dependent $ do
-  s <- B.withInteractionId ii $ prettyTypeOfMeta norm ii
-  display_infoD "*Current Goal*" s
-  return Nothing
-
--- | Displays the current goal, the given document, and the current
--- context.
-
-cmd_goal_type_context_and doc norm ii _ _ = do
-  goal <- B.withInteractionId ii $ prettyTypeOfMeta norm ii
-  ctx  <- prettyContext norm True ii
-  display_infoD "*Goal type etc.*"
-                (text "Goal:" <+> goal $+$
-                 doc $+$
-                 text (replicate 60 '\x2014') $+$
-                 ctx)
-  return Nothing
-
--- | Displays the current goal and context.
-
-cmd_goal_type_context :: B.Rewrite -> GoalCommand
-cmd_goal_type_context norm ii rng s = Interaction Dependent $
-  cmd_goal_type_context_and P.empty norm ii rng s
-
--- | Displays the current goal and context /and/ infers the type of an
--- expression.
-
-cmd_goal_type_context_infer :: B.Rewrite -> GoalCommand
-cmd_goal_type_context_infer norm ii rng s =
-  Interaction Dependent $ do
-    typ <- B.withInteractionId ii $
-             prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s
-    cmd_goal_type_context_and (text "Have:" <+> typ) norm ii rng s
-
--- | Shows all the top-level names in the given module, along with
--- their types.
-
-showModuleContents :: Range -> String -> TCM ()
-showModuleContents rng s = do
-  (modules, types) <- B.moduleContents rng s
-  types' <- mapM (\(x, t) -> do
-                    t <- prettyTCM t
-                    return (show x, text ":" <+> t))
-                 types
-  display_infoD "*Module contents*" $
-    text "Modules" $$
-    nest 2 (vcat $ map (text . show) modules) $$
-    text "Names" $$
-    nest 2 (align 10 types')
-
--- | Shows all the top-level names in the given module, along with
--- their types. Uses the scope of the given goal.
-
-cmd_show_module_contents :: GoalCommand
-cmd_show_module_contents ii rng s = Interaction Dependent $ do
-  B.withInteractionId ii $ showModuleContents rng s
-  return Nothing
-
--- | Shows all the top-level names in the given module, along with
--- their types. Uses the top-level scope.
-
-cmd_show_module_contents_toplevel :: String -> Interaction
-cmd_show_module_contents_toplevel s = Interaction Dependent $ do
-  B.atTopLevel $ showModuleContents noRange s
-  return Nothing
-
--- | Sets the command line options and updates the status information.
-
-setCommandLineOptions :: CommandLineOptions -> TCM ()
-setCommandLineOptions opts = do
-  TM.setCommandLineOptions opts
-  liftIO . displayStatus =<< status
-
--- | Status information.
-
-data Status = Status
-  { sShowImplicitArguments :: Bool
-    -- ^ Are implicit arguments displayed?
-  , sChecked               :: Bool
-    -- ^ Has the module been successfully type checked?
-  }
-
--- | Computes some status information.
-
-status :: TCM Status
-status = do
-  showImpl <- showImplicitArguments
-
-  -- Check if the file was successfully type checked, and has not
-  -- changed since. Note: This code does not check if any dependencies
-  -- have changed, and uses a time stamp to check for changes.
-  cur      <- theCurrentFile <$> liftIO (readIORef theState)
-  checked  <- case cur of
-    Nothing     -> return False
-    Just (f, t) -> do
-      t' <- liftIO $ getModificationTime $ filePath f
-      case t == t' of
-        False -> return False
-        True  ->
-          not . miWarnings . maybe __IMPOSSIBLE__ id <$>
-            (getVisitedModule =<<
-               maybe __IMPOSSIBLE__ id .
-                 Map.lookup f <$> sourceToModule)
-
-  return $ Status { sShowImplicitArguments = showImpl
-                  , sChecked               = checked
-                  }
-
--- | Shows status information.
-
-showStatus :: Status -> String
-showStatus s = intercalate "," $ catMaybes [checked, showImpl]
-  where
-  boolToMaybe b x = if b then Just x else Nothing
-
-  checked  = boolToMaybe (sChecked               s) "Checked"
-  showImpl = boolToMaybe (sShowImplicitArguments s) "ShowImplicit"
-
--- | Displays\/updates status information.
-
-displayStatus :: Status -> IO ()
-displayStatus s =
-  putResponse $ L [A "agda2-status-action", A (quote $ showStatus s)]
-
--- | @display_info' header content@ displays @content@ (with header
--- @header@) in some suitable way.
-
-display_info' :: String -> String -> IO ()
-display_info' bufname content =
-  putResponse $
-    L [ A "agda2-info-action"
-      , A (quote bufname)
-      , A (quote content)
-      ]
-
--- | @display_info@ does what 'display_info'' does, but additionally
--- displays some status information (see 'status' and
--- 'displayStatus').
-
-display_info :: String -> String -> TCM ()
-display_info bufname content = do
-  liftIO . displayStatus =<< status
-  liftIO $ display_info' bufname content
-
--- | Like 'display_info', but takes a 'Doc' instead of a 'String'.
-
-display_infoD :: String -> Doc -> TCM ()
-display_infoD bufname content = display_info bufname (render content)
-
-showNumIId = A . tail . show
-
-takenNameStr :: TCM [String]
-takenNameStr = do
-  xss <- sequence [ List.map (fst . unArg) <$> getContext
-                  , Map.keys <$> asks envLetBindings
-                  , List.map qnameName . Map.keys . sigDefinitions <$> getSignature
-		  ]
-  return $ concat [ parts $ nameConcrete x | x <- concat xss]
-  where
-    parts x = [ s | Id s <- nameParts x ]
-
-refreshStr :: [String] -> String -> ([String], String)
-refreshStr taken s = go nameModifiers where
-  go (m:mods) = let s' = s ++ m in
-                if s' `elem` taken then go mods else (s':taken, s')
-  go _        = __IMPOSSIBLE__
-
-nameModifiers = "" : "'" : "''" : [show i | i <-[3..]]
-
-cmd_make_case :: GoalCommand
-cmd_make_case ii rng s = Interaction Dependent $ do
-  (casectxt , cs) <- makeCase ii rng s
-  B.withInteractionId ii $ do
-    hidden <- showImplicitArguments
-    pcs <- mapM prettyA $ List.map (extlam_dropLLifted casectxt hidden) cs
-    liftIO $ putResponse $
-      Cons (A "last")
-           (L [ A (emacscmd casectxt)
-              , Q $ L $ List.map (A . quote . (extlam_dropName casectxt) . render) pcs
-              ])
-  return Nothing
-  where
-    render = renderStyle (style { mode = OneLineMode })
-    emacscmd :: CaseContext -> String
-    emacscmd FunctionDef = "agda2-make-case-action"
-    emacscmd (ExtendedLambda _ _) = "agda2-make-case-action-extendlam"
-
-    -- Drops pattern added to extended lambda functions when lambda lifting them
-    extlam_dropLLifted :: CaseContext -> Bool -> SA.Clause -> SA.Clause
-    extlam_dropLLifted FunctionDef _ x = x
-    extlam_dropLLifted (ExtendedLambda h nh) hidden (SA.Clause (SA.LHS info name nps ps) rhs decl)
-      = let n = if hidden then h else nh
-        in
-         (SA.Clause (SA.LHS info name (drop n nps) ps) rhs decl)
-
-    -- very dirty hack, string manipulation by dropping the function name
-    -- and replacing " = " with " -> "
-    extlam_dropName :: CaseContext -> String -> String
-    extlam_dropName FunctionDef x = x
-    extlam_dropName (ExtendedLambda _ _) x = unwords $ map (\ y -> if y == "=" then "→" else y) $ drop 1 $ words x
-
-cmd_solveAll :: Interaction
-cmd_solveAll = Interaction Dependent $ do
-  out <- getInsts
-  liftIO $ putResponse $
-    Cons (A "last")
-         (L [ A "agda2-solveAll-action"
-            , Q . L $ concatMap prn out
-            ])
-  return Nothing
-  where
-  getInsts = mapM lowr =<< B.getSolvedInteractionPoints
-    where
-      lowr (i, m, e) = do
-        mi <- getMetaInfo <$> lookupMeta m
-        e <- withMetaInfo mi $ lowerMeta <$> abstractToConcreteCtx TopCtx e
-        return (i, e)
-  prn (ii,e)= [showNumIId ii, A $ quote $ show e]
-
-class LowerMeta a where lowerMeta :: a -> a
-instance LowerMeta SC.Expr where
-  lowerMeta = go where
-    go e = case e of
-      Ident _              -> e
-      SC.Lit _             -> e
-      SC.QuestionMark _ _  -> preMeta
-      SC.Underscore _ _    -> preUscore
-      SC.App r e1 ae2      -> case appView e of
-        SC.AppView (SC.QuestionMark _ _) _ -> preMeta
-        SC.AppView (SC.Underscore   _ _) _ -> preUscore
-        _ -> SC.App r (go e1) (lowerMeta ae2)
-      SC.WithApp r e es	   -> SC.WithApp r (lowerMeta e) (lowerMeta es)
-      SC.Lam r bs e1       -> SC.Lam r (lowerMeta bs) (go e1)
-      SC.AbsurdLam r h     -> SC.AbsurdLam r h
-      SC.ExtendedLam r cs  -> SC.ExtendedLam r cs
-      SC.Fun r ae1 e2      -> SC.Fun r (lowerMeta ae1) (go e2)
-      SC.Pi tb e1          -> SC.Pi (lowerMeta tb) (go e1)
-      SC.Set _             -> e
-      SC.Prop _            -> e
-      SC.SetN _ _          -> e
-      SC.ETel tel          -> SC.ETel (lowerMeta tel)
-      SC.Let r ds e1       -> SC.Let r (lowerMeta ds) (go e1)
-      Paren r e1           -> case go e1 of
-        q@(SC.QuestionMark _ Nothing) -> q
-        e2                            -> Paren r e2
-      Absurd _          -> e
-      As r n e1         -> As r n (go e1)
-      SC.Dot r e	-> SC.Dot r (go e)
-      SC.RawApp r es	-> SC.RawApp r (lowerMeta es)
-      SC.OpApp r x es	-> SC.OpApp r x (lowerMeta es)
-      SC.Rec r fs	-> SC.Rec r (List.map (id -*- lowerMeta) fs)
-      SC.RecUpdate r e fs -> SC.RecUpdate r (lowerMeta e) (List.map (id -*- lowerMeta) fs)
-      SC.HiddenArg r e	-> SC.HiddenArg r (lowerMeta e)
-      SC.InstanceArg r e  -> SC.InstanceArg r (lowerMeta e)
-      SC.QuoteGoal r x e  -> SC.QuoteGoal r x (lowerMeta e)
-      e@SC.Quote{}      -> e
-      e@SC.QuoteTerm{}  -> e
-      e@SC.Unquote{}    -> e
-      SC.DontCare e     -> SC.DontCare (lowerMeta e)
-
-instance LowerMeta (OpApp SC.Expr) where
-  lowerMeta (Ordinary e) = Ordinary $ lowerMeta e
-  lowerMeta (SyntaxBindingLambda r bs e) = SyntaxBindingLambda r (lowerMeta bs) (lowerMeta e)
-
-
-instance LowerMeta SC.LamBinding where
-  lowerMeta b@(SC.DomainFree _ _ _) = b
-  lowerMeta (SC.DomainFull tb)    = SC.DomainFull (lowerMeta tb)
-
-instance LowerMeta SC.TypedBindings where
-  lowerMeta (SC.TypedBindings r bs) = SC.TypedBindings r (lowerMeta bs)
-
-instance LowerMeta SC.TypedBinding where
-  lowerMeta (SC.TBind r ns e) = SC.TBind r ns (lowerMeta e)
-  lowerMeta (SC.TNoBind e)    = SC.TNoBind (lowerMeta e)
-
-instance LowerMeta SC.RHS where
-    lowerMeta (SC.RHS e)    = SC.RHS (lowerMeta e)
-    lowerMeta  SC.AbsurdRHS = SC.AbsurdRHS
-
-instance LowerMeta (Maybe SC.Expr) where
-    lowerMeta (Just e) = Just (lowerMeta e)
-    lowerMeta Nothing  = Nothing
-
-instance LowerMeta SC.Declaration where
-  lowerMeta = go where
-    go d = case d of
-      TypeSig rel n e1              -> TypeSig rel n (lowerMeta e1)
-      SC.Field n e1                 -> SC.Field n (lowerMeta e1)
-      FunClause lhs rhs whcl        -> FunClause lhs (lowerMeta rhs) (lowerMeta whcl)
-      SC.DataSig r ind n tel e1     -> SC.DataSig r ind n
-                                         (lowerMeta tel) (lowerMeta e1)
-      Data r ind n tel e1 cs        -> Data r ind n
-                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)
-      SC.RecordSig r n tel e1       -> SC.RecordSig r n
-                                         (lowerMeta tel) (lowerMeta e1)
-      SC.Record r n c tel e1 cs     -> SC.Record r n c
-                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)
-      Infix _ _                     -> d
-      Syntax _ _                     -> d
-      SC.Mutual r ds                -> SC.Mutual r (lowerMeta ds)
-      Abstract r ds                 -> Abstract r (lowerMeta ds)
-      Private r ds                  -> Private r (lowerMeta ds)
-      Postulate r sigs              -> Postulate r (lowerMeta sigs)
-      SC.Primitive r sigs           -> SC.Primitive r (lowerMeta sigs)
-      SC.Open _ _ _                 -> d
-      SC.Import _ _ _ _ _           -> d
-      SC.Pragma _                   -> d
-      ModuleMacro r n modapp op dir -> ModuleMacro r n
-                                         (lowerMeta modapp) op dir
-      SC.Module r qn tel ds         -> SC.Module r qn (lowerMeta tel) (lowerMeta ds)
-
-instance LowerMeta SC.ModuleApplication where
-  lowerMeta (SC.SectionApp r tel e) = SC.SectionApp r (lowerMeta tel) (lowerMeta e)
-  lowerMeta (SC.RecordModuleIFS r rec) = SC.RecordModuleIFS r rec
-
-instance LowerMeta SC.WhereClause where
-  lowerMeta SC.NoWhere		= SC.NoWhere
-  lowerMeta (SC.AnyWhere ds)	= SC.AnyWhere $ lowerMeta ds
-  lowerMeta (SC.SomeWhere m ds) = SC.SomeWhere m $ lowerMeta ds
-
-instance LowerMeta a => LowerMeta [a] where
-  lowerMeta as = List.map lowerMeta as
-
-instance LowerMeta a => LowerMeta (Arg a) where
-  lowerMeta aa = fmap lowerMeta aa
-
-instance LowerMeta a => LowerMeta (Named name a) where
-  lowerMeta aa = fmap lowerMeta aa
-
-
-preMeta   = SC.QuestionMark noRange Nothing
-preUscore = SC.Underscore   noRange Nothing
-
-cmd_compute :: Bool -- ^ Ignore abstract?
-               -> GoalCommand
-cmd_compute ignore ii rng s = Interaction Dependent $ do
-  e <- B.parseExprIn ii rng s
-  d <- B.withInteractionId ii $ do
-         let c = B.evalInCurrent e
-         v <- if ignore then ignoreAbstractMode c else c
-         prettyATop v
-  display_info "*Normal Form*" (show d)
-  return Nothing
-
--- | Parses and scope checks an expression (using the \"inside scope\"
--- as the scope), performs the given command with the expression as
--- input, and displays the result.
-
-parseAndDoAtToplevel
-  :: (SA.Expr -> TCM SA.Expr)
-     -- ^ The command to perform.
-  -> String
-     -- ^ The name to use for the buffer displaying the output.
-  -> String
-     -- ^ The expression to parse.
-  -> Interaction
-parseAndDoAtToplevel cmd title s = Interaction Dependent $ do
-  e <- liftIO $ parse exprParser s
-  display_info title =<<
-    B.atTopLevel (showA =<< cmd =<< concreteToAbstract_ e)
-  return Nothing
-
--- | Parse the given expression (as if it were defined at the
--- top-level of the current module) and infer its type.
-
-cmd_infer_toplevel
-  :: B.Rewrite  -- ^ Normalise the type?
-  -> String
-  -> Interaction
-cmd_infer_toplevel norm =
-  parseAndDoAtToplevel (B.typeInCurrent norm) "*Inferred Type*"
-
--- | Parse and type check the given expression (as if it were defined
--- at the top-level of the current module) and normalise it.
-
-cmd_compute_toplevel :: Bool -- ^ Ignore abstract?
-                     -> String -> Interaction
-cmd_compute_toplevel ignore =
-  parseAndDoAtToplevel (if ignore then ignoreAbstractMode . c
-                                  else inConcreteMode . c)
-                       "*Normal Form*"
-  where c = B.evalInCurrent
-
-------------------------------------------------------------------------
--- Syntax highlighting
-
--- | @cmd_write_highlighting_info source target@ writes syntax
--- highlighting information for the module in @source@ into @target@.
---
--- If the module does not exist, or its module name is malformed or
--- cannot be determined, or the module has not already been visited,
--- or the cached info is out of date, then the representation of \"no
--- highlighting information available\" is instead written to
--- @target@.
---
--- This command is used to load syntax highlighting information when a
--- new file is opened, and it would probably be annoying if jumping to
--- the definition of an identifier reset the proof state, so this
--- command tries not to do that. One result of this is that the
--- command uses the current include directories, whatever they happen
--- to be.
-
-cmd_write_highlighting_info :: FilePath -> FilePath -> Interaction
-cmd_write_highlighting_info source target =
-  Interaction (Independent Nothing) $ do
-    liftIO . UTF8.writeFile target . showHighlightingInfo =<< do
-      ex <- liftIO $ doesFileExist source
-      case ex of
-        False -> return Nothing
-        True  -> do
-          mmi <- (getVisitedModule =<<
-                    moduleName =<< liftIO (absolute source))
-                   `catchError`
-                 \_ -> return Nothing
-          case mmi of
-            Nothing -> return Nothing
-            Just mi -> do
-              sourceT <- liftIO $ getModificationTime source
-              if sourceT <= miTimeStamp mi
-               then do
-                modFile <- stModuleToSource <$> get
-                return $ Just (iHighlighting $ miInterface mi, modFile)
-               else
-                return Nothing
-    return Nothing
-
--- | Tells the Emacs mode to go to the first error position (if any).
-
-tellEmacsToJumpToError :: Range -> IO ()
-tellEmacsToJumpToError r = do
-  case rStart r of
-    Nothing                                    -> return ()
-    Just (Pn { srcFile = Nothing })            -> return ()
-    Just (Pn { srcFile = Just f, posPos = p }) ->
-      putResponse $
-        L [ A "annotation-goto"
-          , Q $ L [A (quote $ filePath f), A ".", A (show p)]
-          ]
-
-------------------------------------------------------------------------
--- Implicit arguments
-
--- | Tells Agda whether or not to show implicit arguments.
-
-showImplicitArgs :: Bool -- ^ Show them?
-                 -> Interaction
-showImplicitArgs showImpl = Interaction Dependent $ do
-  opts <- commandLineOptions
-  setCommandLineOptions $
-    opts { optPragmaOptions =
-             (optPragmaOptions opts) { optShowImplicit = showImpl } }
-  return Nothing
-
--- | Toggle display of implicit arguments.
-
-toggleImplicitArgs :: Interaction
-toggleImplicitArgs = Interaction Dependent $ do
-  opts <- commandLineOptions
-  let ps = optPragmaOptions opts
-  setCommandLineOptions $
-    opts { optPragmaOptions =
-             ps { optShowImplicit = not $ optShowImplicit ps } }
-  return Nothing
-
-------------------------------------------------------------------------
--- Error handling
-
--- | When an error message is displayed the following title should be
--- used, if appropriate.
-
-errorTitle :: String
-errorTitle = "*Error*"
-
--- | Displays an error, instructs Emacs to jump to the site of the
--- error, and terminates the program. Because this function may switch
--- the focus to another file the status information is also updated.
-
-displayErrorAndExit :: Status
-                       -- ^ The new status information.
-                    -> Range -> String -> IO a
-displayErrorAndExit status r s = do
-  display_info' errorTitle s
-  tellEmacsToJumpToError r
-  displayStatus status
-  exitWith (ExitFailure 1)
-
--- | Outermost error handler.
-
-infoOnException m =
-  failOnException (displayErrorAndExit s) m `catchImpossible` \e ->
-    displayErrorAndExit s noRange (show e)
-  where
-  s = Status { sChecked               = False
-             , sShowImplicitArguments = False
-               -- Educated guess... This field is not important, so it
-               -- does not really matter if it is displayed
-               -- incorrectly when an unexpected error has occurred.
-             }
-
--- | Raises an error if the given file is not the one currently
--- loaded.
-
-ensureFileLoaded :: AbsolutePath -> TCM ()
-ensureFileLoaded current = do
-  f <- theCurrentFile <$> liftIO (readIORef theState)
-  when (Just current /= (fst <$> f)) $
-    typeError $ GenericError "Error: First load the file."
-
--- Helpers for testing ----------------------------------------------------
-
-getCurrentFile :: IO FilePath
-getCurrentFile = do
-  mf <- theCurrentFile <$> readIORef theState
-  case mf of
-    Nothing     -> error "command: No file loaded!"
-    Just (f, _) -> return (filePath f)
-
--- | Changes the 'Interaction' so that its first action is to turn off
--- all debug messages.
-
-makeSilent :: Interaction -> Interaction
-makeSilent i = i { command = do
-  opts <- commandLineOptions
-  TM.setCommandLineOptions $ opts
-    { optPragmaOptions =
-        (optPragmaOptions opts)
-          { optVerbose = Trie.singleton [] 0 }
-    }
-  command i }
-
-top_command' :: FilePath -> Interaction -> IO ()
-top_command' f cmd = ioTCM f Nothing $ makeSilent cmd
-
-goal_command :: InteractionId -> GoalCommand -> String -> IO ()
-goal_command i cmd s = do
-  f <- getCurrentFile
-  -- TODO: Test with other ranges as well.
-  ioTCM f Nothing $ makeSilent $ cmd i noRange s
diff --git a/src/full/Agda/Interaction/Highlighting/Emacs.hs b/src/full/Agda/Interaction/Highlighting/Emacs.hs
--- a/src/full/Agda/Interaction/Highlighting/Emacs.hs
+++ b/src/full/Agda/Interaction/Highlighting/Emacs.hs
@@ -3,30 +3,40 @@
 -- | Functions which give precise syntax highlighting info to Emacs.
 
 module Agda.Interaction.Highlighting.Emacs
-  ( showHighlightingInfo
+  ( lispifyHighlightingInfo
   , Agda.Interaction.Highlighting.Emacs.tests
   ) where
 
 import Agda.Interaction.FindFile
 import Agda.Interaction.Highlighting.Precise
 import Agda.Interaction.Highlighting.Range
+import Agda.Interaction.EmacsCommand
 import Agda.Syntax.Abstract (QName)
 import Agda.Syntax.Common
 import qualified Agda.Syntax.Position as P
 import Agda.Syntax.Translation.ConcreteToAbstract (TopLevelInfo)
 import Agda.TypeChecking.Errors (prettyError)
+import Agda.TypeChecking.Monad
+  (TCM, envHighlightingMethod, HighlightingMethod(..))
 import Agda.Utils.FileName
+import qualified Agda.Utils.IO.UTF8 as UTF8
 import Agda.Utils.String
 import Agda.Utils.TestHelpers
 
 import Agda.Utils.Impossible
 #include "../../undefined.h"
 
+import Control.Applicative
+import qualified Control.Exception as E
+import Control.Monad.Reader
 import Control.Monad.Trans
+import Data.Char
 import Data.List
 import qualified Data.Map as Map
-import Data.Char
 import Data.Maybe
+import Data.Monoid
+import qualified System.Directory as D
+import qualified System.IO as IO
 
 ------------------------------------------------------------------------
 -- Read/show functions
@@ -56,35 +66,52 @@
 showMetaInfo :: ModuleToSource
                 -- ^ Must contain a mapping for the definition site's
                 -- module, if any.
-             -> (Range, MetaInfo) -> String
+             -> (Range, MetaInfo) -> Lisp String
 showMetaInfo modFile (r, m) =
-     "("
-  ++ show (from r)
-  ++ " "
-  ++ show (to r)
-  ++ " ("
-  ++ concat (intersperse " " (toAtoms m))
-  ++ ")"
-  ++ (maybe " nil" ((" " ++) . quote) $ note m)
-  ++ defSite
-  ++ ")"
+    L $ ((map (A . show) [from r, to r])
+           ++
+         [L $ map A $ toAtoms m]
+           ++
+         (A $ maybe "nil" quote $ note m)
+         :
+          defSite)
   where
   defSite = case definitionSite m of
-    Nothing     -> ""
+    Nothing     -> []
     Just (m, p) -> case Map.lookup m modFile of
       Nothing -> __IMPOSSIBLE__
-      Just f  -> " (" ++ quote (filePath f) ++ " . " ++ show p ++ ")"
+      Just f  -> [Cons (A $ quote $ filePath f) (A $ show p)]
 
--- | Shows syntax highlighting information in an Emacsy fashion.
+-- | Turns syntax highlighting information into a list of
+-- S-expressions.
 
-showHighlightingInfo
-  :: Maybe (HighlightingInfo, ModuleToSource)
-     -- ^ The 'ModuleToSource' must contain a mapping for every
-     -- definition site's module.
-  -> String
-showHighlightingInfo Nothing             = ""
-showHighlightingInfo (Just (h, modFile)) =
-  "(" ++ unlines (map (showMetaInfo modFile) h) ++ ")"
+lispifyHighlightingInfo
+  :: HighlightingInfo
+  -> ModuleToSource
+     -- ^ Must contain a mapping for every definition site's module.
+  -> TCM (Lisp String)
+lispifyHighlightingInfo h modFile = do
+  method <- envHighlightingMethod <$> ask
+  liftIO $ case ranges h of
+    _             | method == Direct                   -> direct
+    ((_, mi) : _) | otherAspects mi == [TypeChecks] ||
+                    mi == mempty                       -> direct
+    _                                                  -> indirect
+  where
+  info     = map (showMetaInfo modFile) (ranges h)
+
+  direct   = return $ L (A "agda2-highlight-add-annotations" :
+                         map Q info)
+
+  indirect = do
+    dir <- D.getTemporaryDirectory
+    f   <- E.bracket (IO.openTempFile dir "agda2-mode")
+                     (IO.hClose . snd) $ \ (f, h) -> do
+             UTF8.hPutStr h (show $ L info)
+             return f
+    return $ L [ A "agda2-highlight-load-and-delete-action"
+               , A (quote f)
+               ]
 
 ------------------------------------------------------------------------
 -- All tests
diff --git a/src/full/Agda/Interaction/Highlighting/Generate.hs b/src/full/Agda/Interaction/Highlighting/Generate.hs
--- a/src/full/Agda/Interaction/Highlighting/Generate.hs
+++ b/src/full/Agda/Interaction/Highlighting/Generate.hs
@@ -1,25 +1,34 @@
-{-# LANGUAGE CPP, Rank2Types, RelaxedPolyRec #-}
+{-# LANGUAGE CPP, FlexibleContexts, RelaxedPolyRec #-}
 
 -- | Generates data used for precise syntax highlighting.
 
 module Agda.Interaction.Highlighting.Generate
-  ( generateSyntaxInfo
-  , generateErrorInfo
+  ( Level(..)
+  , generateAndPrintSyntaxInfo
+  , generateTokenInfo
+  , printErrorInfo
+  , printUnsolvedInfo
+  , printHighlightingInfo
+  , highlightAsTypeChecked
   , Agda.Interaction.Highlighting.Generate.tests
-  )
-  where
+  ) where
 
 import Agda.Interaction.FindFile
+import Agda.Interaction.Response (Response(Resp_HighlightingInfo))
+import Agda.Interaction.Highlighting.Emacs   hiding (tests)
 import Agda.Interaction.Highlighting.Precise hiding (tests)
 import Agda.Interaction.Highlighting.Range   hiding (tests)
+import Agda.Interaction.EmacsCommand
 import qualified Agda.TypeChecking.Errors as E
 import Agda.TypeChecking.MetaVars (isBlockedTerm)
-import Agda.TypeChecking.Monad.Options (reportSLn)
+import Agda.TypeChecking.Monad.Options (reportSLn, reportSDoc)
 import Agda.TypeChecking.Monad
   hiding (MetaInfo, Primitive, Constructor, Record, Function, Datatype)
 import qualified Agda.TypeChecking.Monad as M
+import Agda.TypeChecking.Pretty
 import qualified Agda.TypeChecking.Reduce as R
 import qualified Agda.Syntax.Abstract as A
+import Agda.Syntax.Common (Delayed(..))
 import qualified Agda.Syntax.Common as SC
 import qualified Agda.Syntax.Concrete as C
 import qualified Agda.Syntax.Info as SI
@@ -32,316 +41,384 @@
 import qualified Agda.Syntax.Translation.ConcreteToAbstract as CA
 import Agda.Utils.List
 import Agda.Utils.TestHelpers
+import Agda.Utils.HashMap (HashMap)
+import qualified Agda.Utils.HashMap as HMap
 import Control.Monad
 import Control.Monad.Trans
 import Control.Monad.State
+import Control.Monad.Reader
 import Control.Applicative
+import Control.Arrow ((***))
 import Data.Monoid
 import Data.Function
-import Agda.Utils.Generics
+import Data.Generics.Geniplate
 import Agda.Utils.FileName
+import qualified Agda.Utils.IO.UTF8 as UTF8
+import Agda.Utils.Monad
+import Data.HashSet (HashSet)
+import qualified Data.HashSet as HSet
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.Maybe
-import Data.Sequence (Seq, (><))
 import Data.List ((\\), isPrefixOf)
-import qualified Data.Sequence as Seq
 import qualified Data.Foldable as Fold (toList, fold, foldMap)
+import System.Directory
+import System.IO
 
 import Agda.Utils.Impossible
 #include "../../undefined.h"
 
--- | Generates syntax highlighting information for an error,
--- represented as a range and an optional string. The error range is
--- completed so that there are no gaps in it.
+-- | @highlightAsTypeChecked rPre r m@ runs @m@ and returns its
+-- result. Some code may additionally be highlighted:
 --
--- Nothing is generated unless the file name component of the range is
--- defined.
+-- * If @r@ is non-empty and not a sub-range of @rPre@ (after
+--   'P.continuousPerLine' has been applied to both): @r@ is
+--   highlighted as being type-checked while @m@ is running (this
+--   highlighting is removed if @m@ completes /successfully/).
+--
+-- * Otherwise: Highlighting is removed for @rPre - r@ before @m@
+--   runs, and if @m@ completes successfully, then @rPre - r@ is
+--   highlighted as being type-checked.
 
-generateErrorInfo :: P.Range -> Maybe String -> Maybe HighlightingInfo
-generateErrorInfo r s =
-  case P.rStart r of
-    Nothing                                          -> Nothing
-    Just (P.Pn { P.srcFile = Nothing })              -> Nothing
-    Just (P.Pn { P.srcFile = Just f, P.posPos = p }) ->
-      Just $ compress $ generateErrorFile r s
+highlightAsTypeChecked
+  :: MonadTCM tcm
+  => P.Range
+  -> P.Range
+  -> tcm a
+  -> tcm a
+highlightAsTypeChecked rPre r m
+  | r /= P.noRange && delta == rPre' = wrap r'    highlight clear
+  | otherwise                        = wrap delta clear     highlight
+  where
+  rPre'     = rToR (P.continuousPerLine rPre)
+  r'        = rToR (P.continuousPerLine r)
+  delta     = rPre' `minus` r'
+  clear     = mempty
+  highlight = mempty { otherAspects = [TypeChecks] }
 
--- | Generates syntax highlighting information for an error,
--- represented as a range and an optional string. The error range is
--- completed so that there are no gaps in it.
+  wrap rs x y = do
+    p rs x
+    v <- m
+    p rs y
+    return v
+    where
+    p rs x = printHighlightingInfo (singletonC rs x)
 
-generateErrorFile :: P.Range -> Maybe String -> File
-generateErrorFile r s =
-  several (rToR $ P.continuousPerLine r)
-          (mempty { otherAspects = [Error]
-                  , note         = s
-                  })
+-- | Lispify and print the given highlighting information.
 
--- | Generates syntax highlighting information.
+printHighlightingInfo :: MonadTCM tcm => HighlightingInfo -> tcm ()
+printHighlightingInfo x = do
+  liftTCM $ reportSLn "highlighting" 50 $
+    "Printing highlighting info:\n" ++ show x
+  unless (null $ ranges x) $ do
+    st <- get
+    liftTCM $ stInteractionOutputCallback st
+                (Resp_HighlightingInfo x (stModuleToSource st))
 
-generateSyntaxInfo
-  :: AbsolutePath          -- ^ The module to highlight.
-  -> Maybe TCErr           -- ^ 'Nothing' if the module has been
-                           --   successfully type checked (perhaps
-                           --   with warnings), otherwise the
-                           --   offending error.
-                           --
-                           --   Precondition: The range of the error
-                           --   must match the file name given in the
-                           --   previous argument.
-  -> CA.TopLevelInfo       -- ^ The abstract syntax of the module.
-  -> [M.TerminationError]  -- ^ Termination checking problems.
-  -> TCM HighlightingInfo
-generateSyntaxInfo file mErr top termErrs = do
-  reportSLn "import.iface.create" 15  $
-      "Generating syntax info for " ++ filePath file ++ ' ' : maybe "(No TCErr)" (const "(with TCErr)") mErr ++ "."
+-- | Highlighting levels.
 
-  M.withScope_ (CA.insideScope top) $ M.ignoreAbstractMode $ do
+data Level
+  = Full [TerminationError]
+    -- ^ Full highlighting. Should only be used after typechecking has
+    -- completed successfully.
+    --
+    -- The list of termination problems is also highlighted.
+    --
+    -- Precondition: The termination problems must be located in the
+    -- module that is highlighted.
+  | Partial
+    -- ^ Highlighting without disambiguation of overloaded
+    -- constructors.
+
+-- | Generate syntax highlighting information for the given
+-- declaration, and (if appropriate) print it. If the
+-- 'HighlightingLevel' is @'Full' something@, then the state is
+-- additionally updated with the new highlighting info (in case of a
+-- conflict new info takes precedence over old info).
+--
+-- The procedure makes use of some of the token highlighting info in
+-- 'stTokens' (that corresponding to the interval covered by the
+-- declaration). If the 'HighlightingLevel' is @'Full' something@,
+-- then this token highlighting info is additionally removed from
+-- 'stTokens'.
+
+generateAndPrintSyntaxInfo :: A.Declaration -> Level -> TCM ()
+generateAndPrintSyntaxInfo decl hlLevel = do
+  file <- envCurrentPath <$> ask
+
+  reportSLn "import.iface.create" 15 $
+      "Generating syntax info for " ++ filePath file ++ ' ' :
+        case hlLevel of
+            Full    {} -> "(final)"
+            Partial {} -> "(first approximation)"
+        ++ "."
+
+  M.ignoreAbstractMode $ do
     modMap <- sourceToModule
-    tokens <- liftIO $ Pa.parseFile' Pa.tokensParser file
-    kinds  <- nameKinds mErr decls
-    let nameInfo = mconcat $ map (generate modMap file kinds)
-                                 (Fold.toList names)
+    kinds  <- nameKinds hlLevel decl
+
+    let nameInfo = mconcat $ map (generate modMap file kinds) names
+
     -- Constructors are only highlighted after type checking, since they
     -- can be overloaded.
-    constructorInfo <- case mErr of
-      Nothing -> generateConstructorInfo modMap file kinds decls
-      Just _  -> return mempty
-    metaInfo <- case mErr of
-      Nothing -> computeUnsolvedMetaWarnings
-      Just _  -> return mempty
-    errorInfo <- case mErr of
-      Nothing -> return mempty
-      Just e  -> let r = P.getRange e in
-        case P.rStart r of
-          Just p | P.srcFile p == Just file ->
-            generateErrorFile r . Just <$> E.prettyError e
-          _ -> __IMPOSSIBLE__
+    constructorInfo <- case hlLevel of
+      Full _ -> generateConstructorInfo modMap file kinds decl
+      _      -> return mempty
+
+    let (from, to) = case P.rangeToInterval (P.getRange decl) of
+          Nothing -> __IMPOSSIBLE__
+          Just i  -> let conv = toInteger . P.posPos in
+                     (conv $ P.iStart i, conv $ P.iEnd i)
+    (prevTokens, (curTokens, postTokens)) <-
+      (id *** splitAtC to) . splitAtC from . stTokens <$> get
+
     -- theRest needs to be placed before nameInfo here since record
     -- field declarations contain QNames. constructorInfo also needs
     -- to be placed before nameInfo since, when typechecking is done,
-    -- constructors are included in both lists. Finally tokInfo is
-    -- placed last since token highlighting is more crude than the
-    -- others.
-    return $ compress $ mconcat
-      [ errorInfo
-      , constructorInfo
-      , theRest modMap
-      , nameInfo
-      , metaInfo
-      , termInfo
-      , tokInfo tokens
-      ]
-  where
-    decls = CA.topLevelDecls top
-
-    -- Converts an aspect and a range to a file.
-    aToF a r = several (rToR r) (mempty { aspect = Just a })
+    -- constructors are included in both lists. Finally the token
+    -- information is placed last since token highlighting is more
+    -- crude than the others.
+    let syntaxInfo = compress (mconcat [ constructorInfo
+                                       , theRest modMap file
+                                       , nameInfo
+                                       , termInfo
+                                       ])
+                       `mappend`
+                     curTokens
 
-    tokInfo = Fold.foldMap tokenToFile
-      where
-      tokenToFile :: T.Token -> File
-      tokenToFile (T.TokSetN (i, _))               = aToF PrimitiveType (P.getRange i)
-      tokenToFile (T.TokKeyword T.KwSet  i)        = aToF PrimitiveType (P.getRange i)
-      tokenToFile (T.TokKeyword T.KwProp i)        = aToF PrimitiveType (P.getRange i)
-      tokenToFile (T.TokKeyword T.KwForall i)      = aToF Symbol (P.getRange i)
-      tokenToFile (T.TokKeyword _ i)               = aToF Keyword (P.getRange i)
-      tokenToFile (T.TokSymbol  _ i)               = aToF Symbol (P.getRange i)
-      tokenToFile (T.TokLiteral (L.LitInt    r _)) = aToF Number r
-      tokenToFile (T.TokLiteral (L.LitFloat  r _)) = aToF Number r
-      tokenToFile (T.TokLiteral (L.LitString r _)) = aToF String r
-      tokenToFile (T.TokLiteral (L.LitChar   r _)) = aToF String r
-      tokenToFile (T.TokLiteral (L.LitQName  r _)) = aToF String r
-      tokenToFile (T.TokComment (i, _))            = aToF Comment (P.getRange i)
-      tokenToFile (T.TokTeX (i, _))                = aToF Comment (P.getRange i)
-      tokenToFile (T.TokId {})                     = mempty
-      tokenToFile (T.TokQId {})                    = mempty
-      tokenToFile (T.TokString {})                 = mempty
-      tokenToFile (T.TokDummy {})                  = mempty
-      tokenToFile (T.TokEOF {})                    = mempty
+    case hlLevel of
+      Full _ -> modify (\st ->
+                  st { stSyntaxInfo = syntaxInfo `mappend` stSyntaxInfo st
+                     , stTokens     = prevTokens `mappend` postTokens
+                     })
+      _      -> return ()
 
-    termInfo = functionDefs `mappend` callSites
+    ifTopLevelAndHighlightingLevelIs NonInteractive $
+      printHighlightingInfo syntaxInfo
+  where
+  -- Highlighting of termination problems.
+  termInfo = case hlLevel of
+    Full termErrs -> functionDefs `mappend` callSites
       where
       m            = mempty { otherAspects = [TerminationProblem] }
-      functionDefs = Fold.foldMap (\x -> several (rToR $ bindingSite x) m) $
+      functionDefs = Fold.foldMap (\x -> singleton (rToR $ bindingSite x) m) $
                      concatMap M.termErrFunctions termErrs
-      callSites    = Fold.foldMap (\r -> several (rToR r) m) $
+      callSites    = Fold.foldMap (\r -> singleton (rToR r) m) $
                      concatMap (map M.callInfoRange . M.termErrCalls) termErrs
+    _ -> mempty
 
-    -- All names mentioned in the syntax tree (not bound variables).
-    names = everything' (><) (Seq.empty `mkQ`  getName
-                                        `extQ` getAmbiguous)
-                        decls
-      where
-      getName :: A.QName -> Seq A.AmbiguousQName
-      getName n | isPrefixOf extendlambdaname $ show $ A.qnameName n = mempty
-                | otherwise                                          = Seq.singleton (A.AmbQ [n])
+  -- All names mentioned in the syntax tree (not bound variables).
+  names :: [A.AmbiguousQName]
+  names =
+    (map (A.AmbQ . (:[])) $
+     filter (not . extendedLambda) $
+     universeBi decl) ++
+    universeBi decl
+    where
+    extendedLambda :: A.QName -> Bool
+    extendedLambda n = extendlambdaname `isPrefixOf` show (A.qnameName n)
 
+  -- Bound variables, dotted patterns, record fields, module names,
+  -- the "as" and "to" symbols.
+  theRest modMap file = mconcat
+    [ Fold.foldMap getFieldDecl   $ universeBi decl
+    , Fold.foldMap getVarAndField $ universeBi decl
+    , Fold.foldMap getLet         $ universeBi decl
+    , Fold.foldMap getLam         $ universeBi decl
+    , Fold.foldMap getTyped       $ universeBi decl
+    , Fold.foldMap getPattern     $ universeBi decl
+    , Fold.foldMap getModuleName  $ universeBi decl
+    , Fold.foldMap getModuleInfo  $ universeBi decl
+    ]
+    where
+    bound n = nameToFile modMap file []
+                         (A.nameConcrete n)
+                         (\isOp -> mempty { aspect = Just $ Name (Just Bound) isOp })
+                         (Just $ A.nameBindingSite n)
+    field m n = nameToFile modMap file m n
+                           (\isOp -> mempty { aspect = Just $ Name (Just Field) isOp })
+                           Nothing
+    asName n = nameToFile modMap file []
+                          n
+                          (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })
+                          Nothing
+    mod isTopLevelModule n =
+      nameToFile modMap file []
+                 (A.nameConcrete n)
+                 (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })
+                 (Just $ (if isTopLevelModule then P.beginningOfFile else id)
+                           (A.nameBindingSite n))
 
-      getAmbiguous :: A.AmbiguousQName -> Seq A.AmbiguousQName
-      getAmbiguous = Seq.singleton
+    getVarAndField :: A.Expr -> File
+    getVarAndField (A.Var x)    = bound x
+    getVarAndField (A.Rec _ fs) = mconcat $ map (field [] . fst) fs
+    getVarAndField _            = mempty
 
-    -- Bound variables, dotted patterns, record fields, module names,
-    -- the "as" and "to" symbols.
-    theRest modMap = everything' mappend query decls
-      where
-      query :: GenericQ File
-      query = mempty         `mkQ`
-              getFieldDecl   `extQ`
-              getVarAndField `extQ`
-              getLet         `extQ`
-              getLam         `extQ`
-              getTyped       `extQ`
-              getPattern     `extQ`
-              getModuleName  `extQ`
-              getModuleInfo
+    getLet :: A.LetBinding -> File
+    getLet (A.LetBind _ _ x _ _) = bound x
+    getLet A.LetPatBind{}        = mempty
+    getLet A.LetApply{}          = mempty
+    getLet A.LetOpen{}           = mempty
 
-      bound n = nameToFile modMap file []
-                           (A.nameConcrete n)
-                           (\isOp -> mempty { aspect = Just $ Name (Just Bound) isOp })
-                           (Just $ A.nameBindingSite n)
-      field m n = nameToFile modMap file m n
-                             (\isOp -> mempty { aspect = Just $ Name (Just Field) isOp })
-                             Nothing
-      asName n = nameToFile modMap file []
-                            n
-                            (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })
-                            Nothing
-      mod isTopLevelModule n =
-        nameToFile modMap file []
-                   (A.nameConcrete n)
-                   (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })
-                   (Just $ (if isTopLevelModule then P.beginningOfFile else id)
-                             (A.nameBindingSite n))
+    getLam :: A.LamBinding -> File
+    getLam (A.DomainFree _ _ x) = bound x
+    getLam (A.DomainFull {})  = mempty
 
-      getVarAndField :: A.Expr -> File
-      getVarAndField (A.Var x)    = bound x
-      getVarAndField (A.Rec _ fs) = mconcat $ map (field [] . fst) fs
-      getVarAndField _            = mempty
+    getTyped :: A.TypedBinding -> File
+    getTyped (A.TBind _ xs _) = mconcat $ map bound xs
+    getTyped (A.TNoBind {})   = mempty
 
-      getLet :: A.LetBinding -> File
-      getLet (A.LetBind _ _ x _ _) = bound x
-      getLet A.LetApply{}          = mempty
-      getLet A.LetOpen{}           = mempty
+    getPattern :: A.Pattern -> File
+    getPattern (A.VarP x)    = bound x
+    getPattern (A.AsP _ x _) = bound x
+    getPattern (A.DotP pi _) =
+      singleton (rToR $ P.getRange pi)
+                (mempty { otherAspects = [DottedPattern] })
+    getPattern _             = mempty
 
-      getLam :: A.LamBinding -> File
-      getLam (A.DomainFree _ _ x) = bound x
-      getLam (A.DomainFull {})  = mempty
+    getFieldDecl :: A.Declaration -> File
+    getFieldDecl (A.RecDef _ _ _ _ _ _ fs) = Fold.foldMap extractField fs
+      where
+      extractField (A.ScopedDecl _ ds) = Fold.foldMap extractField ds
+      extractField (A.Field _ x _)     = field (concreteQualifier x)
+                                               (concreteBase x)
+      extractField _                   = mempty
+    getFieldDecl _                   = mempty
 
-      getTyped :: A.TypedBinding -> File
-      getTyped (A.TBind _ xs _) = mconcat $ map bound xs
-      getTyped (A.TNoBind {})   = mempty
+    getModuleName :: A.ModuleName -> File
+    getModuleName m@(A.MName { A.mnameToList = xs }) =
+      mconcat $ map (mod isTopLevelModule) xs
+      where
+      isTopLevelModule =
+        case catMaybes $
+             map (join .
+                  fmap P.srcFile .
+                  P.rStart .
+                  A.nameBindingSite) xs of
+          f : _ -> Map.lookup f modMap ==
+                   Just (C.toTopLevelModuleName $ A.mnameToConcrete m)
+          []    -> False
 
-      getPattern :: A.Pattern -> File
-      getPattern (A.VarP x)    = bound x
-      getPattern (A.AsP _ x _) = bound x
-      getPattern (A.DotP pi _) =
-        several (rToR $ P.getRange pi)
-                (mempty { otherAspects = [DottedPattern] })
-      getPattern _             = mempty
+    getModuleInfo :: SI.ModuleInfo -> File
+    getModuleInfo (SI.ModuleInfo { SI.minfoAsTo   = asTo
+                                 , SI.minfoAsName = name }) =
+      singleton (rToR asTo) (mempty { aspect = Just Symbol })
+        `mappend`
+      maybe mempty asName name
 
-      getFieldDecl :: A.Declaration -> File
-      getFieldDecl (A.RecDef _ _ _ _ _ fs) = Fold.foldMap extractField fs
-        where
-        extractField (A.ScopedDecl _ ds) = Fold.foldMap extractField ds
-        extractField (A.Field _ x _)     = field (concreteQualifier x)
-                                                 (concreteBase x)
-        extractField _                   = mempty
-      getFieldDecl _                   = mempty
+-- | Generate and return the syntax highlighting information for the
+-- tokens in the given file.
 
-      getModuleName :: A.ModuleName -> File
-      getModuleName m@(A.MName { A.mnameToList = xs }) =
-        mconcat $ map (mod isTopLevelModule) xs
-        where
-        isTopLevelModule =
-          case catMaybes $
-               map (join .
-                    fmap P.srcFile .
-                    P.rStart .
-                    A.nameBindingSite) xs of
-            f : _ -> Map.lookup f modMap ==
-                     Just (C.toTopLevelModuleName $ A.mnameToConcrete m)
-            []    -> False
+generateTokenInfo
+  :: AbsolutePath          -- ^ The module to highlight.
+  -> TCM CompressedFile
+generateTokenInfo file = do
+  tokens <- liftIO $ Pa.parseFile' Pa.tokensParser file
+  return $ merge $ map tokenToCFile tokens
+  where
+  -- Converts an aspect and a range to a file.
+  aToF a r = singletonC (rToR r) (mempty { aspect = Just a })
 
-      getModuleInfo :: SI.ModuleInfo -> File
-      getModuleInfo (SI.ModuleInfo { SI.minfoAsTo   = asTo
-                                   , SI.minfoAsName = name }) =
-        aToF Symbol asTo `mappend` maybe mempty asName name
+  -- Merges /sorted, non-overlapping/ compressed files.
+  merge = CompressedFile . concat . map ranges
 
+  tokenToCFile :: T.Token -> CompressedFile
+  tokenToCFile (T.TokSetN (i, _))               = aToF PrimitiveType (P.getRange i)
+  tokenToCFile (T.TokKeyword T.KwSet  i)        = aToF PrimitiveType (P.getRange i)
+  tokenToCFile (T.TokKeyword T.KwProp i)        = aToF PrimitiveType (P.getRange i)
+  tokenToCFile (T.TokKeyword T.KwForall i)      = aToF Symbol (P.getRange i)
+  tokenToCFile (T.TokKeyword _ i)               = aToF Keyword (P.getRange i)
+  tokenToCFile (T.TokSymbol  _ i)               = aToF Symbol (P.getRange i)
+  tokenToCFile (T.TokLiteral (L.LitInt    r _)) = aToF Number r
+  tokenToCFile (T.TokLiteral (L.LitFloat  r _)) = aToF Number r
+  tokenToCFile (T.TokLiteral (L.LitString r _)) = aToF String r
+  tokenToCFile (T.TokLiteral (L.LitChar   r _)) = aToF String r
+  tokenToCFile (T.TokLiteral (L.LitQName  r _)) = aToF String r
+  tokenToCFile (T.TokComment (i, _))            = aToF Comment (P.getRange i)
+  tokenToCFile (T.TokTeX (i, _))                = aToF Comment (P.getRange i)
+  tokenToCFile (T.TokId {})                     = mempty
+  tokenToCFile (T.TokQId {})                    = mempty
+  tokenToCFile (T.TokString {})                 = mempty
+  tokenToCFile (T.TokDummy {})                  = mempty
+  tokenToCFile (T.TokEOF {})                    = mempty
+
 -- | A function mapping names to the kind of name they stand for.
 
 type NameKinds = A.QName -> Maybe NameKind
 
 -- | Builds a 'NameKinds' function.
 
-nameKinds :: Maybe TCErr  -- ^ 'Nothing' if type checking completed
-                          --   successfully.
-          -> [A.Declaration]
+nameKinds :: Level
+             -- ^ This should only be @'Full' something@ if
+             -- type-checking completed successfully (without any
+             -- errors).
+          -> A.Declaration
           -> TCM NameKinds
-nameKinds mErr decls = do
+nameKinds hlLevel decl = do
   imported <- fix . stImports <$> get
-  local    <- case mErr of
-    Nothing -> fix . stSignature <$> get
-    Just _  -> return $
+  local    <- case hlLevel of
+    Full _ -> fix . stSignature <$> get
+    _      -> return $
       -- Traverses the syntax tree and constructs a map from qualified
       -- names to name kinds. TODO: Handle open public.
-      everything' union (Map.empty `mkQ` getDecl) decls
-  let merged = Map.union local imported
-  return (\n -> Map.lookup n merged)
+      foldr ($) HMap.empty $ map declToKind $ universeBi decl
+  let merged = HMap.union local imported
+  return (\n -> HMap.lookup n merged)
   where
-  fix = Map.map (defnToNameKind . theDef) . sigDefinitions
+  fix = HMap.map (defnToKind . theDef) . sigDefinitions
 
   -- | The 'M.Axiom' constructor is used to represent various things
   -- which are not really axioms, so when maps are merged 'Postulate's
-  -- are thrown away whenever possible. The 'getDef' and 'getDecl'
-  -- functions below can return several explanations for one qualified
-  -- name; the 'Postulate's are bogus.
-  union = Map.unionWith dropPostulates
+  -- are thrown away whenever possible. The 'declToKind' function
+  -- below can return several explanations for one qualified name; the
+  -- 'Postulate's are bogus.
+  insert = HMap.insertWith dropPostulates
     where
     dropPostulates Postulate k = k
     dropPostulates k         _ = k
 
-  defnToNameKind :: Defn -> NameKind
-  defnToNameKind (M.Axiom {})                     = Postulate
-  defnToNameKind (M.Function {})                  = Function
-  defnToNameKind (M.Datatype {})                  = Datatype
-  defnToNameKind (M.Record {})                    = Record
-  defnToNameKind (M.Constructor { M.conInd = i }) = Constructor i
-  defnToNameKind (M.Primitive {})                 = Primitive
+  defnToKind :: Defn -> NameKind
+  defnToKind (M.Axiom {})                     = Postulate
+  defnToKind (M.Function {})                  = Function
+  defnToKind (M.Datatype {})                  = Datatype
+  defnToKind (M.Record {})                    = Record
+  defnToKind (M.Constructor { M.conInd = i }) = Constructor i
+  defnToKind (M.Primitive {})                 = Primitive
 
   getAxiomName :: A.Declaration -> A.QName
   getAxiomName (A.Axiom _ _ q _) = q
   getAxiomName _                 = __IMPOSSIBLE__
 
-  getDecl :: A.Declaration -> Map A.QName NameKind
-  getDecl (A.Axiom _ _ q _)   = Map.singleton q Postulate
-  getDecl (A.Field _ q _)     = Map.singleton q Function
+  declToKind :: A.Declaration ->
+                HashMap A.QName NameKind -> HashMap A.QName NameKind
+  declToKind (A.Axiom _ _ q _)      = insert q Postulate
+  declToKind (A.Field _ q _)        = insert q Function
     -- Note that the name q can be used both as a field name and as a
     -- projection function. Highlighting of field names is taken care
     -- of by "theRest" above, which does not use NameKinds.
-  getDecl (A.Primitive _ q _) = Map.singleton q Primitive
-  getDecl (A.Mutual {})       = Map.empty
-  getDecl (A.Section {})      = Map.empty
-  getDecl (A.Apply {})        = Map.empty
-  getDecl (A.Import {})       = Map.empty
-  getDecl (A.Pragma {})       = Map.empty
-  getDecl (A.ScopedDecl {})   = Map.empty
-  getDecl (A.Open {})         = Map.empty
-  getDecl (A.FunDef  _ q _)       = Map.singleton q Function
-  getDecl (A.DataSig _ q _ _)       = Map.singleton q Datatype
-  getDecl (A.DataDef _ q _ cs)    = Map.singleton q Datatype `union`
-                                   (Map.unions $
-                                    map (\q -> Map.singleton q (Constructor SC.Inductive)) $
-                                    map getAxiomName cs)
-  getDecl (A.RecSig _ q _ _)      = Map.singleton q Record
-  getDecl (A.RecDef _ q c _ _ _)  = Map.singleton q Record `union`
-                                   case c of
-                                     Nothing -> Map.empty
-                                     Just q ->
-                                       Map.singleton q (Constructor SC.Inductive)
+  declToKind (A.Primitive _ q _)    = insert q Primitive
+  declToKind (A.Mutual {})          = id
+  declToKind (A.Section {})         = id
+  declToKind (A.Apply {})           = id
+  declToKind (A.Import {})          = id
+  declToKind (A.Pragma {})          = id
+  declToKind (A.ScopedDecl {})      = id
+  declToKind (A.Open {})            = id
+  declToKind (A.FunDef  _ q _ _)    = insert q Function
+  declToKind (A.DataSig _ q _ _)    = insert q Datatype
+  declToKind (A.DataDef _ q _ cs)   = \m ->
+                                      insert q Datatype $
+                                      foldr (\d -> insert (getAxiomName d)
+                                                          (Constructor SC.Inductive))
+                                            m cs
+  declToKind (A.RecSig _ q _ _)     = insert q Record
+  declToKind (A.RecDef _ q _ c _ _ _) = insert q Record .
+                                      case c of
+                                        Nothing -> id
+                                        Just q  -> insert q (Constructor SC.Inductive)
 
 -- | Generates syntax highlighting information for all constructors
--- occurring in patterns and expressions in the given declarations.
+-- occurring in patterns and expressions in the given declaration.
 --
 -- This function should only be called after type checking.
 -- Constructors can be overloaded, and the overloading is resolved by
@@ -351,71 +428,130 @@
   :: SourceToModule  -- ^ Maps source file paths to module names.
   -> AbsolutePath    -- ^ The module to highlight.
   -> NameKinds
-  -> [A.Declaration]
+  -> A.Declaration
   -> TCM File
-generateConstructorInfo modMap file kinds decls = do
-  -- Extract all defined names from the declaration list.
-  let names = Fold.toList $ Fold.foldMap A.allNames decls
+generateConstructorInfo modMap file kinds decl = do
+  -- Extract all defined names from the declaration.
+  let names = Fold.toList (A.allNames decl)
 
   -- Look up the corresponding declarations in the internal syntax.
   defMap <- M.sigDefinitions <$> M.getSignature
-  let defs = catMaybes $ map (flip Map.lookup defMap) names
+  let defs = catMaybes $ map (flip HMap.lookup defMap) names
 
   -- Instantiate meta variables.
   clauses <- R.instantiateFull $ concatMap M.defClauses defs
   types   <- R.instantiateFull $ map defType defs
 
-  -- Find all constructors occurring in type signatures or clauses
-  -- within the given declarations.
-  constrs <- everything' (liftM2 (><)) query (types, clauses)
+  let -- Find all patterns and terms.
+      patterns = universeBi (types, clauses)
+      terms    = universeBi (types, clauses)
 
+      -- Find all constructors in the patterns and terms.
+      constrs = concatMap getConstructorP patterns ++
+                concatMap getConstructor  terms
+
+  -- Find all constructors in right-hand sides of delayed definitions.
+  delayed <- evalStateT (getDelayed terms) HSet.empty
+
   -- Return suitable syntax highlighting information.
-  return $ Fold.fold $ fmap (generate modMap file kinds . mkAmb) constrs
+  return $ Fold.fold $ fmap (generate modMap file kinds . mkAmb)
+                            (delayed ++ constrs)
   where
   mkAmb q = A.AmbQ [q]
 
-  query :: GenericQ (TCM (Seq A.QName))
-  query = return mempty   `mkQ`
-          getConstructor  `extQ`
-          getConstructorP
+  -- Finds names corresponding to delayed definitions occurring at the
+  -- top of the given terms, as well as in the found definition's
+  -- right-hand sides. Only definitions from the current file are
+  -- considered.
+  --
+  -- Constructors occurring in the delayed definitions' right-hand
+  -- sides are returned.
+  --
+  -- The set is used to avoid inspecting the same definition multiple
+  -- times.
 
-  getConstructor :: I.Term -> TCM (Seq A.QName)
-  getConstructor (I.Con q _) = return $ Seq.singleton q
-  getConstructor (I.Def c _)
-    | fmap P.srcFile (P.rStart (P.getRange c)) == Just (Just file)
-                             = retrieveCoconstructor c
-  getConstructor _           = return Seq.empty
+  getDelayed :: [I.Term] -> StateT (HashSet A.QName) TCM [A.QName]
+  getDelayed ts = concat <$> mapM getT ts
+    where
+    getT t = do
+      lift $ reportSDoc "highlighting.delayed" 50 $
+        text "Inspecting sub-term:" <+> prettyTCM t
 
-  getConstructorP :: I.Pattern -> TCM (Seq A.QName)
-  getConstructorP (I.ConP q _ _) = return $ Seq.singleton q
-  getConstructorP _              = return Seq.empty
+      seen <- get
+      case t of
+        I.Def q _ | not (q `HSet.member` seen)
+                      &&
+                    fmap P.srcFile (P.rStart (P.getRange q)) ==
+                      Just (Just file)
+                  -> getQ q
+        _         -> return []
 
-  retrieveCoconstructor :: A.QName -> TCM (Seq A.QName)
-  retrieveCoconstructor c = do
-    def <- getConstInfo c
-    case defDelayed def of
-      -- Not a coconstructor.
-      NotDelayed -> return Seq.empty
+    getQ q = do
+      lift $ reportSDoc "highlighting.delayed" 30 $
+        text "Inspecting name:" <+> prettyTCM q
 
-      Delayed -> do
-        clauses <- R.instantiateFull $ defClauses def
-        case clauses of
-          [I.Clause{ I.clauseBody = body }] -> case getRHS body of
-            Just (I.Con c args) -> do
-              s <- everything' (liftM2 (><)) query args
-              return $ Seq.singleton c >< s
+      def <- lift $ getConstInfo q
+      case defDelayed def of
+        NotDelayed -> return []
+        Delayed    -> do
+          lift $ reportSDoc "highlighting.delayed" 10 $
+            text "Found delayed definition:" <+> prettyTCM q
 
-            -- The meta variable could not be instantiated.
-            Just (I.MetaV {})   -> return Seq.empty
+          -- Mark the definition as seen.
+          modify (HSet.insert q)
 
-            _                   -> __IMPOSSIBLE__
+          -- All sub-terms in the delayed definition's right-hand
+          -- sides.
+          terms <- universeBi . concat . map (getRHS . I.clauseBody) <$>
+                     lift (R.instantiateFull $ defClauses def)
 
-          _ -> __IMPOSSIBLE__
-    where
-      getRHS (I.Body v)   = Just v
-      getRHS I.NoBody     = Nothing
-      getRHS (I.Bind b)   = getRHS (I.unAbs b)
+          -- Find the constructors and continue the search.
+          (concatMap getConstructor terms ++) <$> getDelayed terms
 
+    getRHS (I.Body v)   = [v]
+    getRHS I.NoBody     = []
+    getRHS (I.Bind b)   = getRHS (I.unAbs b)
+
+  getConstructorP :: I.Pattern -> [A.QName]
+  getConstructorP (I.ConP q _ _) = [q]
+  getConstructorP _              = []
+
+  getConstructor :: I.Term -> [A.QName]
+  getConstructor (I.Con q _) = [q]
+  getConstructor _           = []
+
+-- | Prints syntax highlighting info for an error.
+
+printErrorInfo :: TCErr -> TCM ()
+printErrorInfo e = do
+  file <- envCurrentPath <$> ask
+  let r = P.getRange e
+  case P.rStart r of
+    Just x | P.srcFile x == Just file -> do
+      s <- E.prettyError e
+
+      -- Erase previous highlighting.
+      p (P.continuousPerLine r) mempty
+
+      -- Print new highlighting.
+      p r $ mempty { otherAspects = [Error]
+                   , note         = Just s
+                   }
+    _ -> internalError . ("invalid range when printing error: " ++) =<< E.prettyError e
+  where
+  p r x = printHighlightingInfo $ singletonC (rToR r) x
+
+-- | Generates and prints syntax highlighting information for unsolved
+-- meta-variables and certain unsolved constraints.
+
+printUnsolvedInfo :: TCM ()
+printUnsolvedInfo = do
+  metaInfo       <- computeUnsolvedMetaWarnings
+  constraintInfo <- computeUnsolvedConstraints
+
+  printHighlightingInfo
+    (compress $ metaInfo `mappend` constraintInfo)
+
 -- | Generates syntax highlighting information for unsolved meta
 -- variables.
 
@@ -430,9 +566,20 @@
   ms <- filterM notBlocked =<< getOpenMetas
 
   rs <- mapM getMetaRange (ms \\ is)
-  return $ several (concatMap (rToR . P.continuousPerLine) rs)
-         $ mempty { otherAspects = [UnsolvedMeta] }
+  return $ several (map (rToR . P.continuousPerLine) rs)
+                   (mempty { otherAspects = [UnsolvedMeta] })
 
+-- | Generates syntax highlighting information for unsolved constraints
+-- that are not connected to a meta variable.
+
+computeUnsolvedConstraints :: TCM File
+computeUnsolvedConstraints = do
+  cs <- getAllConstraints
+  -- get ranges of emptyness constraints
+  let rs = [ r | PConstr{ theConstraint = Closure{ clValue = IsEmpty r t }} <- cs ]
+  return $ several (map (rToR . P.continuousPerLine) rs)
+                   (mempty { otherAspects = [UnsolvedConstraint] })
+
 -- | Generates a suitable file for a possibly ambiguous name.
 
 generate :: SourceToModule
@@ -477,13 +624,13 @@
 nameToFile modMap file xs x m mR =
   -- We don't care if we get any funny ranges.
   if all (== Just file) fileNames then
-    several rs' ((m isOp) { definitionSite = mFilePos })
+    several (map rToR rs)
+            ((m $ C.isOperator x) { definitionSite = mFilePos })
    else
     mempty
   where
   fileNames  = catMaybes $ map (fmap P.srcFile . P.rStart . P.getRange) (x : xs)
-  (rs, isOp) = getRanges x
-  rs'        = rs ++ concatMap (fst . getRanges) xs
+  rs         = map P.getRange (x : xs)
   mFilePos   = do
     r <- mR
     P.Pn { P.srcFile = Just f, P.posPos = p } <- P.rStart r
@@ -516,35 +663,6 @@
 concreteBase      = A.nameConcrete . A.qnameName
 concreteQualifier = map A.nameConcrete . A.mnameToList . A.qnameModule
 bindingSite       = A.nameBindingSite . A.qnameName
-
--- | Like 'everything', but modified so that it does not descend into
--- everything.
-
-everything' :: (r -> r -> r) -> GenericQ r -> GenericQ r
-everything' (+) = everythingBut
-                    (+)
-                    (False `mkQ` isString
-                           `extQ` isAQName `extQ` isAName `extQ` isCName
-                           `extQ` isScope `extQ` isMap1 `extQ` isMap2
-                           `extQ` isAmbiguous)
-  where
-  isString    :: String                        -> Bool
-  isAQName    :: A.QName                       -> Bool
-  isAName     :: A.Name                        -> Bool
-  isCName     :: C.Name                        -> Bool
-  isScope     :: S.ScopeInfo                   -> Bool
-  isMap1      :: Map A.QName A.QName           -> Bool
-  isMap2      :: Map A.ModuleName A.ModuleName -> Bool
-  isAmbiguous :: A.AmbiguousQName              -> Bool
-
-  isString    = const True
-  isAQName    = const True
-  isAName     = const True
-  isCName     = const True
-  isScope     = const True
-  isMap1      = const True
-  isMap2      = const True
-  isAmbiguous = const True
 
 ------------------------------------------------------------------------
 -- All tests
diff --git a/src/full/Agda/Interaction/Highlighting/Generate.hs-boot b/src/full/Agda/Interaction/Highlighting/Generate.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/Highlighting/Generate.hs-boot
@@ -0,0 +1,10 @@
+module Agda.Interaction.Highlighting.Generate where
+import Agda.TypeChecking.Monad.Base
+import Agda.Syntax.Position (Range)
+
+highlightAsTypeChecked
+  :: MonadTCM tcm
+  => Range
+  -> Range
+  -> tcm a
+  -> tcm a
diff --git a/src/full/Agda/Interaction/Highlighting/LaTeX.hs b/src/full/Agda/Interaction/Highlighting/LaTeX.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/Highlighting/LaTeX.hs
@@ -0,0 +1,455 @@
+{-# LANGUAGE CPP, ViewPatterns #-}
+
+-- | Function for generating highlighted and aligned LaTeX from literate
+-- Agda source.
+
+module Agda.Interaction.Highlighting.LaTeX
+  ( generateLaTeX
+  ) where
+
+import Data.Char
+import Data.Maybe
+import Data.Function
+import Data.List
+import Control.Monad.RWS
+import Control.Monad.Error
+import Control.Monad.Trans
+import System.Directory
+import System.FilePath
+import System.Process
+import System.Exit
+import Data.Text (Text)
+import qualified Data.Text          as T
+import qualified Data.Text.Encoding as E
+import qualified Data.ByteString    as BS
+
+import qualified Data.List as List
+import qualified Data.Map  as Map
+
+import Paths_Agda
+
+import Agda.Syntax.Common
+import qualified Agda.Syntax.Abstract as A
+import Agda.Interaction.Highlighting.Precise
+import Agda.TypeChecking.Monad (TCM)
+import qualified Agda.TypeChecking.Monad as TCM
+import Agda.Interaction.Options
+import Agda.Compiler.CallCompiler
+import qualified Agda.Utils.IO.UTF8 as UTF8
+
+#include "../../undefined.h"
+import Agda.Utils.Impossible
+
+------------------------------------------------------------------------
+-- * Datatypes.
+
+-- | The @LaTeX@ monad is a combination of @ErrorT@ and @RWS@. The error
+-- part is just used to keep track whether we finished or not, the
+-- reader part isn't used, the writer is where the output goes and the
+-- state is for keeping track of the tokens and some other useful info.
+type LaTeX = ErrorT String (RWS () Text State)
+
+data State = State
+  { tokens     :: Tokens
+  , column     :: Int     -- ^ Column number, used for polytable alignment.
+  , indent     :: Int     -- ^ Indentation level, also for alignment.
+  , indentPrev :: Int
+  , inCode     :: Bool    -- ^ Keeps track of whether we are in a code
+                          -- block or not.
+  }
+
+type Tokens = [Token]
+
+data Token = Token
+  { string   :: Text
+  , info     :: MetaInfo
+  , position :: Integer  -- ^ Is not used currently, but could
+                         -- potentially be used for hyperlinks as in
+                         -- the HTML output?
+  }
+
+-- | Run function for the @LaTeX@ monad.
+runLaTeX :: LaTeX a -> () -> State -> (Either String a, State, Text)
+runLaTeX = runRWS . runErrorT
+
+emptyState :: State
+emptyState = State
+  { tokens     = []
+  , column     = 0
+  , indent     = 0
+  , indentPrev = 0
+  , inCode     = False
+  }
+
+------------------------------------------------------------------------
+-- * Some helpers.
+
+(<+>) = T.append
+
+isInfixOf' :: Text -> Text -> Maybe (Text, Text)
+isInfixOf' needle haystack = go (T.tails haystack) 0
+  where
+  go []                                         n = Nothing
+  go ((T.stripPrefix needle -> Just suf) : xss) n = Just (T.take n haystack, suf)
+  go (_                                  : xss) n = go xss (n + 1)
+
+isSpaces :: Text -> Bool
+isSpaces (T.uncons -> Nothing)     = True
+isSpaces (T.uncons -> Just (c, s)) | isSpace c = isSpaces s
+                                   | otherwise = False
+
+isSpaces _                         = __IMPOSSIBLE__
+
+-- | Yields the next token, taking special care to begin/end code
+-- blocks. Junk occuring before and after the code blocks is separated
+-- into separate tokens, this makes it easier to keep track of whether
+-- we are in a code block or not.
+nextToken' :: LaTeX Token
+nextToken' = do
+  toks <- gets tokens
+  case toks of
+    []     -> throwError "Done"
+
+    -- Clean begin/end code block or a LaTeX comment.
+    t : ts | string t == beginCode || string t == endCode ||
+             T.singleton '%' == T.take 1 (T.stripStart (string t)) -> do
+
+      modify $ \s -> s { tokens = ts }
+      return t
+
+    t : ts -> do
+      modify $ \s -> s { tokens = ts }
+
+      inCode <- gets inCode
+      let code = if inCode then endCode else beginCode
+
+      case code `isInfixOf'` string t of
+        Nothing -> do
+
+          -- Spaces take care of their own column tracking.
+          unless (isSpaces (string t)) $ do
+            moveColumn $ T.length $ string t
+
+          return t
+
+        Just (pre, suf) -> do
+          let t'  = t { string = code }
+          let t'' = t { string = suf }
+          modify $ \s -> s { tokens = t' : t'' : tokens s }
+
+          unless (isSpaces pre) $ do
+            moveColumn $ T.length pre
+
+          return $ t { string = pre }
+
+nextToken :: LaTeX Text
+nextToken = string `fmap` nextToken'
+
+resetColumn :: LaTeX ()
+resetColumn = modify $ \s -> s { column = 0 }
+
+moveColumn :: Int -> LaTeX ()
+moveColumn i = modify $ \s -> s { column = i + column s }
+
+moveIndent :: Int -> LaTeX ()
+moveIndent i = modify $ \s -> s { indent = i + indent s }
+
+resetIndent :: LaTeX ()
+resetIndent = modify $ \s -> s { indent = 0 }
+
+setIndentPrev :: Int -> LaTeX ()
+setIndentPrev i = modify $ \s -> s { indentPrev = i }
+
+resetIndentPrev :: LaTeX ()
+resetIndentPrev = modify $ \s -> s { indentPrev = 0 }
+
+setInCode :: LaTeX ()
+setInCode = modify $ \s -> s { inCode = True }
+
+unsetInCode :: LaTeX ()
+unsetInCode = modify $ \s -> s { inCode = False }
+
+------------------------------------------------------------------------
+-- * LaTeX and polytable strings.
+
+-- Polytable, http://www.ctan.org/pkg/polytable, is used for code
+-- alignment, similar to lhs2TeX's approach.
+
+nl        = T.pack "%\n"
+beginCode = T.pack "\\begin{code}"
+endCode   = T.pack "\\end{code}"
+
+ptOpen     = T.pack "\\>"
+ptOpen'  i = ptOpen <+> T.pack ("[" ++ show i ++ "]")
+ptClose    = T.pack "\\<"
+ptClose' i = ptClose <+> T.pack ("[" ++ show i ++ "]")
+ptNL       = nl <+> T.pack "\\\\\n"
+
+cmdPrefix   = T.pack "\\Agda"
+cmdArg    x = T.singleton '{' <+> x <+> T.singleton '}'
+cmdIndent i = cmdPrefix <+> T.pack "Indent" <+>
+                  cmdArg (T.pack (show i)) <+> cmdArg T.empty
+
+infixl'     = T.pack "infixl"
+infix'      = T.pack "infix"
+infixr'     = T.pack "infixr"
+
+------------------------------------------------------------------------
+-- * Automaton.
+
+-- | The start state, @nonCode@, prints non-code (the LaTeX part of
+-- literate Agda) until it sees a @beginBlock@.
+nonCode :: LaTeX ()
+nonCode = do
+  tok <- nextToken
+
+  if tok == beginCode
+
+     then do
+       tell tok
+       resetColumn
+       setInCode
+       code
+
+     else do
+       tell tok
+       nonCode
+
+-- | Deals with code blocks. Every token, except spaces, is pretty
+-- printed as a LaTeX command.
+code :: LaTeX ()
+code = do
+
+  col <- gets column
+  when (col == 0) $ do
+    tell ptOpen
+
+  tok' <- nextToken'
+  let tok = string tok'
+
+  when (tok == endCode) $ do
+    tell $ ptClose <+> tok
+    unsetInCode
+    nonCode
+
+  when (tok `elem` [ infixl', infix', infixr' ]) $ do
+    tell $ cmdPrefix <+> T.pack "Keyword" <+> cmdArg tok
+    fixity
+    code
+
+  when (isSpaces tok) $ do
+    spaces $ T.group tok
+    code
+
+  case aspect (info tok') of
+    Nothing -> tell $ escape tok
+    Just a  -> tell $ cmdPrefix <+> T.pack (cmd a) <+> cmdArg (escape tok)
+  code
+
+  where
+  cmd :: Aspect -> String
+  cmd (Name mKind _) = maybe __IMPOSSIBLE__ showKind mKind
+    where
+    showKind :: NameKind -> String
+    showKind (Constructor Inductive)   = "InductiveConstructor"
+    showKind (Constructor CoInductive) = "CoinductiveConstructor"
+    showKind k                         = show k
+  cmd a              = show a
+
+-- Escapes special characters.
+escape :: Text -> Text
+escape (T.uncons -> Nothing)     = T.empty
+escape (T.uncons -> Just (c, s)) = T.pack (replace c) <+> escape s
+  where
+  replace :: Char -> String
+  replace c = case c of
+    '_'  -> "\\_"
+    '{'  -> "\\{"
+    '}'  -> "\\}"
+    '#'  -> "\\#"
+    '$'  -> "\\$"
+    '&'  -> "\\&"
+    '%'  -> "\\%"
+    '~'  -> "\textasciitilde"
+    '^'  -> "\textasciicircum"
+    '\\' -> "\textbackslash"
+    _    -> [ c ]
+escape _                         = __IMPOSSIBLE__
+
+-- | Fixity declarations need a special treatment. The operations in
+-- declarations like:
+--
+--     infix num op1 op2 op3
+--
+-- are treated as comments and thus grouped together with the newlines
+-- that follow, which results incorrect LaTeX output -- the following
+-- state remedies the problem by breaking on newlines.
+fixity :: LaTeX ()
+fixity = do
+  tok <- nextToken
+
+  case T.breakOn (T.pack "\n") tok of
+
+    -- Spaces.
+    (sps, nls) | nls == T.empty && isSpaces sps -> do
+        spaces $ T.group sps
+        fixity
+
+    -- Fixity level.
+    (num, nls) | nls == T.empty -> do
+        tell $ cmdPrefix <+> T.pack "Number" <+> cmdArg num
+        fixity
+
+    -- Operations followed by newlines.
+    (ops, nls) | otherwise      -> do
+        tell $ escape ops
+        spaces (T.group nls)
+
+
+-- | Spaces are grouped before processed, because multiple consecutive
+-- spaces determine the alignment of the code and consecutive newline
+-- characters need special treatment as well.
+spaces :: [Text] -> LaTeX ()
+spaces []                                 = return ()
+spaces ((T.uncons -> Nothing)       : ss) = __IMPOSSIBLE__
+
+-- Single spaces are ignored.
+spaces ((T.uncons -> Just (' ', s)) : []) | T.null s = do
+  moveColumn 1
+  tell $ T.singleton ' '
+
+-- Multiple spaces.
+spaces (s@(T.uncons -> Just (' ', _)) : ss) = do
+  let len = T.length s
+
+  col <- gets column
+  moveColumn len
+
+  if col == 0
+     then do
+
+       -- FIX: What's going on here?
+       ind     <- gets indent
+       indPrev <- gets indentPrev
+
+       if ind == len
+          then do
+            tell $ ptOpen' indPrev
+          else do
+            if len < ind
+               then do
+                 resetIndent
+                 resetIndentPrev
+                 tell $ ptOpen' $ if indPrev == 0 ||
+                                         len == indPrev
+                                     then 0
+                                     else ind - indPrev - len
+               else do
+                 moveIndent $ len - ind
+                 setIndentPrev ind
+                 tell $ ptOpen' ind
+
+       tell $ cmdIndent len
+       tell $ ptClose' len <+> nl <+> ptOpen' len
+     else do
+       tell $ T.singleton ' '
+       col <- gets column
+       tell $ ptClose' col <+> nl <+> ptOpen' col
+
+  spaces ss
+
+-- Newlines.
+spaces (s@(T.uncons -> Just ('\n', _)) : ss) = do
+  resetColumn
+  tell $ ptClose <+> T.replicate (T.length s) ptNL
+  spaces ss
+
+-- Treat tabs as if they were spaces.
+spaces (s@(T.uncons -> Just ('\t', _)) : ss) =
+  spaces $ T.replicate (T.length s) (T.singleton ' ') : ss
+spaces (_                              : ss) = __IMPOSSIBLE__
+
+------------------------------------------------------------------------
+-- * Main.
+
+defaultStyFile = "agda.sty"
+
+-- | The only exported function. It's (only) called in @Main.hs@.
+generateLaTeX :: A.ModuleName -> HighlightingInfo -> TCM ()
+generateLaTeX mod hi = do
+
+  options <- TCM.commandLineOptions
+
+  -- There is a default directory given by 'defaultLaTeXDir'.
+  let dir = optLaTeXDir options
+  liftIO $ createDirectoryIfMissing True dir
+
+  TCM.reportSLn "latex" 1 $ unlines
+    [ ""
+    , "Checking if " ++ defaultStyFile ++ " is found by the LaTeX environment."
+    ]
+
+  merrors <- callCompiler' "kpsewhich" [ defaultStyFile ]
+
+  when (isJust merrors) $ do
+    TCM.reportSLn "latex" 1 $ unlines
+      [ ""
+      , defaultStyFile ++ " was not found. Copying a default version of " ++
+          defaultStyFile
+      , "into the working directory."
+      ]
+
+    liftIO $ do
+      styFile <- getDataFileName defaultStyFile
+      liftIO $ copyFile styFile defaultStyFile
+
+  liftIO $ do
+    source <- UTF8.readTextFile (modToFile mod <.> "lagda")
+    let latex = E.encodeUtf8 $ toLaTeX source hi
+    BS.writeFile (dir </> modToFile mod <.> "tex") latex
+
+  where
+  modToFile :: A.ModuleName -> FilePath
+  modToFile mod = go $ show mod
+    where
+    go []         = []
+    go ('.' : cs) = pathSeparator : go cs
+    go (c   : cs) = c             : go cs
+
+-- | Transforms the source code into LaTeX.
+toLaTeX :: String -> HighlightingInfo -> Text
+toLaTeX source hi
+
+  = processTokens
+
+  -- Head the list (the grouped chars contain the same meta info) and
+  -- collect the characters into a string.
+  . map (\xs -> case xs of
+                    (mi, (pos, _)) : _ ->
+                        Token { string   = T.pack $ map (\(_, (_, c)) -> c) xs
+                              , info     = maybe mempty id mi
+                              , position = pos
+                              }
+                    []                 -> __IMPOSSIBLE__)
+
+  . List.groupBy ((==) `on` fst)  -- Characters which share the same
+                                  -- meta info are the same token, so
+                                  -- group them together.
+
+  -- Look up the meta info at each position in the highlighting info.
+  . map (\(pos, char) ->
+        (Map.lookup pos infoMap, (pos, char)))
+
+  -- Add position in file to each character.
+  . zip [1..]
+  $ source
+  where
+  infoMap = toMap (decompress hi)
+
+processTokens :: Tokens -> Text
+processTokens ts =
+  case x of
+    Left "Done" -> s
+    _           -> __IMPOSSIBLE__
+  where
+  (x, _, s) = runLaTeX nonCode () (emptyState { tokens = ts })
diff --git a/src/full/Agda/Interaction/Highlighting/Precise.hs b/src/full/Agda/Interaction/Highlighting/Precise.hs
--- a/src/full/Agda/Interaction/Highlighting/Precise.hs
+++ b/src/full/Agda/Interaction/Highlighting/Precise.hs
@@ -3,19 +3,31 @@
 -- | Types used for precise syntax highlighting.
 
 module Agda.Interaction.Highlighting.Precise
-  ( Aspect(..)
+  ( -- * Files
+    Aspect(..)
   , NameKind(..)
   , OtherAspect(..)
   , MetaInfo(..)
   , File
   , HighlightingInfo
+    -- ** Creation
   , singleton
   , several
+    -- ** Inspection
   , smallestPos
   , toMap
-  , CompressedFile
+    -- * Compressed files
+  , CompressedFile(..)
+  , compressedFileInvariant
   , compress
   , decompress
+    -- ** Creation
+  , singletonC
+  , severalC
+  , splitAtC
+    -- ** Inspection
+  , smallestPosC
+    -- * Tests
   , Agda.Interaction.Highlighting.Precise.tests
   ) where
 
@@ -25,15 +37,18 @@
 import Data.List
 import Data.Function
 import Data.Monoid
+import Control.Applicative ((<$>), (<*>))
+import Control.Arrow ((&&&))
 import Control.Monad
-import Agda.Utils.QuickCheck
+import Agda.Utils.QuickCheck hiding (ranges)
 import Data.Map (Map)
 import qualified Data.Map as Map
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 
 import qualified Agda.Syntax.Abstract.Name as A
 import qualified Agda.Syntax.Common as C
 import qualified Agda.Syntax.Concrete as SC
+import qualified Agda.Syntax.Position as P
 
 import Agda.Interaction.Highlighting.Range
 
@@ -51,7 +66,7 @@
   | Symbol                     -- ^ Symbols like forall, =, ->, etc.
   | PrimitiveType              -- ^ Things like Set and Prop.
   | Name (Maybe NameKind) Bool -- ^ Is the name an operator part?
-    deriving (Eq, Show, Typeable, Data)
+    deriving (Eq, Show, Typeable)
 
 data NameKind
   = Bound                   -- ^ Bound variable.
@@ -63,7 +78,7 @@
   | Postulate
   | Primitive               -- ^ Primitive.
   | Record                  -- ^ Record type.
-    deriving (Eq, Show, Typeable, Data)
+    deriving (Eq, Show, Typeable)
 
 -- | Other aspects. (These can overlap with each other and with
 -- 'Aspect's.)
@@ -72,11 +87,16 @@
   = Error
   | DottedPattern
   | UnsolvedMeta
+  | UnsolvedConstraint
+    -- ^ Unsolved constraint not connected to meta-variable. This
+    -- could for instance be an emptyness constraint.
   | TerminationProblem
   | IncompletePattern
     -- ^ When this constructor is used it is probably a good idea to
     -- include a 'note' explaining why the pattern is incomplete.
-    deriving (Eq, Show, Enum, Bounded, Typeable, Data)
+  | TypeChecks
+    -- ^ Code which is being type-checked.
+    deriving (Eq, Show, Enum, Bounded, Typeable)
 
 -- | Meta information which can be associated with a
 -- character\/character range.
@@ -93,41 +113,32 @@
     -- ^ The definition site of the annotated thing, if applicable and
     --   known. File positions are counted from 1.
   }
-  deriving (Eq, Show, Typeable, Data)
+  deriving (Eq, Show, Typeable)
 
 -- | A 'File' is a mapping from file positions to meta information.
 --
 -- The first position in the file has number 1.
 
 newtype File = File { mapping :: Map Integer MetaInfo }
-  deriving (Eq, Show, Typeable, Data)
-
--- | Returns the smallest position, if any, in the 'File'.
-
-smallestPos :: File -> Maybe Integer
-smallestPos = fmap (fst . fst) . Map.minViewWithKey . mapping
+  deriving (Eq, Show, Typeable)
 
--- | Syntax highlighting information for a given source file.
+-- | Syntax highlighting information.
 
 type HighlightingInfo = CompressedFile
 
 ------------------------------------------------------------------------
 -- Creation
 
--- | @'singleton' r m@ is a file whose positions are those in @r@, and
--- in which every position is associated with @m@.
-
-singleton :: Range -> MetaInfo -> File
-singleton r m = File {
- mapping = Map.fromAscList [ (p, m) | p <- toList r ] }
+-- | @'singleton' rs m@ is a file whose positions are those in @rs@,
+-- and in which every position is associated with @m@.
 
-prop_singleton r m =
-  compress (singleton r m) ==
-    if null (toList r) then [] else [(r, m)]
+singleton :: Ranges -> MetaInfo -> File
+singleton rs m = File {
+ mapping = Map.fromAscList [ (p, m) | p <- rangesToPositions rs ] }
 
--- | Like 'singleton', but with several ranges instead of only one.
+-- | Like 'singleton', but with several 'Ranges' instead of only one.
 
-several :: [Range] -> MetaInfo -> File
+several :: [Ranges] -> MetaInfo -> File
 several rs m = mconcat $ map (\r -> singleton r m) rs
 
 ------------------------------------------------------------------------
@@ -170,6 +181,11 @@
 ------------------------------------------------------------------------
 -- Inspection
 
+-- | Returns the smallest position, if any, in the 'File'.
+
+smallestPos :: File -> Maybe Integer
+smallestPos = fmap (fst . fst) . Map.minViewWithKey . mapping
+
 -- | Convert the 'File' to a map from file positions (counting from 1)
 -- to meta information.
 
@@ -177,18 +193,35 @@
 toMap = mapping
 
 ------------------------------------------------------------------------
--- Compression
+-- Compressed files
 
 -- | A compressed 'File', in which consecutive positions with the same
 -- 'MetaInfo' are stored together.
 
-type CompressedFile = [(Range, MetaInfo)]
+newtype CompressedFile =
+  CompressedFile { ranges :: [(Range, MetaInfo)] }
+  deriving (Eq, Show, Typeable)
 
+-- | Invariant for compressed files.
+--
+-- Note that these files are not required to be /maximally/
+-- compressed, because ranges are allowed to be empty, and the
+-- 'MetaInfo's in adjacent ranges are allowed to be equal.
+
+compressedFileInvariant :: CompressedFile -> Bool
+compressedFileInvariant (CompressedFile []) = True
+compressedFileInvariant (CompressedFile f)  =
+  all rangeInvariant rs &&
+  all (not . empty) rs &&
+  and (zipWith (<=) (map to $ init rs) (map from $ tail rs))
+  where rs = map fst f
+
 -- | Compresses a file by merging consecutive positions with equal
 -- meta information into longer ranges.
 
 compress :: File -> CompressedFile
-compress f = map join $ groupBy' p (Map.toAscList $ mapping f)
+compress f =
+  CompressedFile $ map join $ groupBy' p (Map.toAscList $ mapping f)
   where
   p (pos1, m1) (pos2, m2) = pos2 == pos1 + 1 && m1 == m2
   join pms = ( Range { from = head ps, to = last ps + 1 }
@@ -203,20 +236,107 @@
   File .
   Map.fromList .
   concat .
-  map (\(r, m) -> [ (p, m) | p <- toList r ])
+  map (\(r, m) -> [ (p, m) | p <- rangeToPositions r ]) .
+  ranges
 
 prop_compress f =
-  decompress c == f
-  &&
-  and (map (rangeInvariant . fst) c)
+  compressedFileInvariant c
   &&
-  and [ not (overlapping r1 r2) | (r1, r2) <- allPairs (map fst c) ]
+  decompress c == f
+  where c = compress f
+
+------------------------------------------------------------------------
+-- Operations that work directly with compressed files
+
+-- | @'singletonC' rs m@ is a file whose positions are those in @rs@,
+-- and in which every position is associated with @m@.
+
+singletonC :: Ranges -> MetaInfo -> CompressedFile
+singletonC (Ranges rs) m =
+  CompressedFile [(r, m) | r <- rs, not (empty r)]
+
+prop_singleton rs m = singleton rs m == decompress (singletonC rs m)
+
+-- | Like 'singletonR', but with a list of 'Ranges' instead of a
+-- single one.
+
+severalC :: [Ranges] -> MetaInfo -> CompressedFile
+severalC rss m = mconcat $ map (\rs -> singletonC rs m) rss
+
+prop_several rss m = several rss m == decompress (severalC rss m)
+
+-- | Merges compressed files.
+
+mergeC :: CompressedFile -> CompressedFile -> CompressedFile
+mergeC (CompressedFile f1) (CompressedFile f2) =
+  CompressedFile (mrg f1 f2)
   where
-    c = compress f
+  mrg []             f2             = f2
+  mrg f1             []             = f1
+  mrg (p1@(i1,_):f1) (p2@(i2,_):f2)
+    | to i1 <= from i2 = p1 : mrg f1      (p2:f2)
+    | to i2 <= from i1 = p2 : mrg (p1:f1) f2
+    | to i1 <= to i2   = ps1 ++ mrg f1 (ps2 ++ f2)
+    | otherwise        = ps1 ++ mrg (ps2 ++ f1) f2
+      where (ps1, ps2) = fuse p1 p2
 
-    allPairs []       = []
-    allPairs (x : xs) = map ((,) x) xs ++ allPairs xs
+  -- Precondition: The ranges are overlapping.
+  fuse (i1, m1) (i2, m2) =
+    ( fix [ (Range { from = a, to = b }, ma)
+          , (Range { from = b, to = c }, mergeMetaInfo m1 m2)
+          ]
+    , fix [ (Range { from = c, to = d }, md)
+          ]
+    )
+    where
+    [(a, ma), (b, _), (c, _), (d, md)] =
+      sortBy (compare `on` fst)
+             [(from i1, m1), (to i1, m1), (from i2, m2), (to i2, m2)]
+    fix = filter (not . empty . fst)
 
+prop_merge f1 f2 =
+  merge f1 f2 == decompress (mergeC (compress f1) (compress f2))
+
+instance Monoid CompressedFile where
+  mempty  = CompressedFile []
+  mappend = mergeC
+
+-- | @splitAtC p f@ splits the compressed file @f@ into @(f1, f2)@,
+-- where all the positions in @f1@ are @< p@, and all the positions
+-- in @f2@ are @>= p@.
+
+splitAtC :: Integer -> CompressedFile ->
+            (CompressedFile, CompressedFile)
+splitAtC p f = (CompressedFile f1, CompressedFile f2)
+  where
+  (f1, f2) = split $ ranges f
+
+  split [] = ([], [])
+  split (rx@(r,x) : f)
+    | p <= from r = ([], rx:f)
+    | to r <= p   = (rx:f1, f2)
+    | otherwise   = ([ (toP, x) ], (fromP, x) : f)
+    where (f1, f2) = split f
+          toP      = Range { from = from r, to = p    }
+          fromP    = Range { from = p,      to = to r }
+
+prop_splitAtC p f =
+  all (<  p) (positions f1) &&
+  all (>= p) (positions f2) &&
+  decompress (mergeC f1 f2) == decompress f
+  where
+  (f1, f2) = splitAtC p f
+
+  positions = Map.keys . toMap . decompress
+
+-- | Returns the smallest position, if any, in the 'CompressedFile'.
+
+smallestPosC :: CompressedFile -> Maybe Integer
+smallestPosC (CompressedFile [])           = Nothing
+smallestPosC (CompressedFile ((r, _) : _)) = Just (from r)
+
+prop_smallestPos f = smallestPos (decompress f) == smallestPosC f
+
 ------------------------------------------------------------------------
 -- Generators
 
@@ -227,6 +347,9 @@
               , (1, liftM2 Name (maybeGen arbitrary) arbitrary)
               ]
 
+  shrink Name{} = [Comment]
+  shrink _      = []
+
 instance CoArbitrary Aspect where
   coarbitrary Comment       = variant 0
   coarbitrary Keyword       = variant 1
@@ -249,6 +372,9 @@
                                  , Record
                                  ]
 
+  shrink Constructor{} = [Bound]
+  shrink _             = []
+
 instance CoArbitrary NameKind where
   coarbitrary Bound             = variant 0
   coarbitrary (Constructor ind) = variant 1 . coarbitrary ind
@@ -276,6 +402,12 @@
                      , note = note, definitionSite = defSite })
     where string = listOfElements "abcdefABCDEF/\\.\"'@()åäö\n"
 
+  shrink (MetaInfo a o n d) =
+    [ MetaInfo a o n d | a <- shrink a ] ++
+    [ MetaInfo a o n d | o <- shrink o ] ++
+    [ MetaInfo a o n d | n <- shrink n ] ++
+    [ MetaInfo a o n d | d <- shrink d ]
+
 instance CoArbitrary MetaInfo where
   coarbitrary (MetaInfo aspect otherAspects note defSite) =
     coarbitrary aspect .
@@ -285,10 +417,28 @@
 
 instance Arbitrary File where
   arbitrary = fmap (File . Map.fromList) $ listOf arbitrary
+  shrink    = map (File . Map.fromList) . shrink . Map.toList . toMap
 
 instance CoArbitrary File where
   coarbitrary (File rs) = coarbitrary (Map.toAscList rs)
 
+instance Arbitrary CompressedFile where
+  arbitrary = do
+    rs <- (\ns1 ns2 -> toRanges $ sort $
+                         ns1 ++ concatMap (\n -> [n, succ n]) ns2) <$>
+            arbitrary <*> arbitrary
+    CompressedFile <$> mapM (\r -> (,) r <$> arbitrary) rs
+    where
+    toRanges (f : t : rs)
+      | f == t    = toRanges (t : rs)
+      | otherwise = Range { from = f, to = t } :
+                    toRanges (case rs of
+                                f : rs | t == f -> rs
+                                _               -> rs)
+    toRanges _ = []
+
+  shrink (CompressedFile f) = CompressedFile <$> shrink f
+
 ------------------------------------------------------------------------
 -- All tests
 
@@ -296,6 +446,18 @@
 
 tests :: IO Bool
 tests = runTests "Agda.Interaction.Highlighting.Precise"
-  [ quickCheck' prop_singleton
+  [ quickCheck' compressedFileInvariant
+  , quickCheck' (all compressedFileInvariant . shrink)
+  , quickCheck' (\r m -> compressedFileInvariant $ singletonC r m)
+  , quickCheck' (\rs m -> compressedFileInvariant $ severalC rs m)
+  , quickCheck' (\f1 f2 -> compressedFileInvariant $ mergeC f1 f2)
+  , quickCheck' (\i f -> all compressedFileInvariant $
+                         (\(f1, f2) -> [f1, f2]) $
+                         splitAtC i f)
   , quickCheck' prop_compress
+  , quickCheck' prop_singleton
+  , quickCheck' prop_several
+  , quickCheck' prop_merge
+  , quickCheck' prop_splitAtC
+  , quickCheck' prop_smallestPos
   ]
diff --git a/src/full/Agda/Interaction/Highlighting/Range.hs b/src/full/Agda/Interaction/Highlighting/Range.hs
--- a/src/full/Agda/Interaction/Highlighting/Range.hs
+++ b/src/full/Agda/Interaction/Highlighting/Range.hs
@@ -5,21 +5,25 @@
 module Agda.Interaction.Highlighting.Range
   ( Range(..)
   , rangeInvariant
+  , Ranges(..)
+  , rangesInvariant
   , overlapping
-  , toList
-  , getRanges
-  , getRangesA
+  , empty
+  , rangeToPositions
+  , rangesToPositions
   , rToR
+  , minus
   , Agda.Interaction.Highlighting.Range.tests
   ) where
 
-import Agda.Utils.QuickCheck
+import Control.Applicative ((<$>))
 import Data.List
-import Data.Generics (Typeable, Data)
-import Agda.Utils.TestHelpers
-import qualified Agda.Syntax.Abstract as A
-import qualified Agda.Syntax.Concrete as C
+import Data.Typeable (Typeable)
+
 import qualified Agda.Syntax.Position as P
+import Agda.Utils.List
+import Agda.Utils.TestHelpers
+import Agda.Utils.QuickCheck
 
 -- | Character ranges. The first character in the file has position 1.
 -- Note that the 'to' position is considered to be outside of the
@@ -28,13 +32,28 @@
 -- Invariant: @'from' '<=' 'to'@.
 
 data Range = Range { from, to :: Integer }
-             deriving (Eq, Ord, Show, Typeable, Data)
+             deriving (Eq, Ord, Show, Typeable)
 
 -- | The 'Range' invariant.
 
 rangeInvariant :: Range -> Bool
 rangeInvariant r = from r <= to r
 
+-- | Zero or more consecutive and separated ranges.
+
+newtype Ranges = Ranges [Range]
+  deriving (Eq, Show)
+
+-- | The 'Ranges' invariant.
+
+rangesInvariant :: Ranges -> Bool
+rangesInvariant (Ranges []) = True
+rangesInvariant (Ranges rs) =
+  and (zipWith (<) (map to $ init rs) (map from $ tail rs))
+
+------------------------------------------------------------------------
+-- Queries
+
 -- | 'True' iff the ranges overlap.
 --
 -- The ranges are assumed to be well-formed.
@@ -43,34 +62,30 @@
 overlapping r1 r2 = not $
   to r1 <= from r2 || to r2 <= from r1
 
--- | Converts a range to a list of positions.
+-- | 'True' iff the range is empty.
 
-toList :: Range -> [Integer]
-toList r = [from r .. to r - 1]
+empty :: Range -> Bool
+empty r = to r <= from r
 
 ------------------------------------------------------------------------
 -- Conversion
 
--- | Calculates a set of ranges associated with a name.
---
--- For an operator the ranges associated with the NameParts are
--- returned. Otherwise the range associated with the Name is returned.
---
--- A boolean, indicating operatorness, is also returned.
+-- | Converts a range to a list of positions.
 
-getRanges :: C.Name -> ([Range], Bool)
-getRanges n = (rToR $ P.getRange n, C.isOperator n)
+rangeToPositions :: Range -> [Integer]
+rangeToPositions r = [from r .. to r - 1]
 
--- | Like 'getRanges', but for 'A.QName's. Note that the module part
--- of the name is thrown away; only the base part is used.
+-- | Converts several ranges to a list of positions.
 
-getRangesA :: A.QName -> ([Range], Bool)
-getRangesA = getRanges . A.nameConcrete . A.qnameName
+rangesToPositions :: Ranges -> [Integer]
+rangesToPositions (Ranges rs) = concatMap rangeToPositions rs
 
--- | Converts a 'P.Range' to a list of 'Range's.
+prop_rangesToPositions rs = sorted (rangesToPositions rs)
 
-rToR :: P.Range -> [Range]
-rToR (P.Range is) = map iToR is
+-- | Converts a 'P.Range' to a 'Ranges'.
+
+rToR :: P.Range -> Ranges
+rToR (P.Range is) = Ranges (map iToR is)
   where
   iToR (P.Interval { P.iStart = P.Pn { P.posPos = pos1 }
                    , P.iEnd   = P.Pn { P.posPos = pos2 }
@@ -78,6 +93,33 @@
     Range { from = toInteger pos1, to = toInteger pos2 }
 
 ------------------------------------------------------------------------
+-- Operations
+
+-- | @minus xs ys@ computes the difference between @xs@ and @ys@: the
+-- result contains those positions which are present in @xs@ but not
+-- in @ys@.
+--
+-- Linear in the lengths of the input ranges.
+
+minus :: Ranges -> Ranges -> Ranges
+minus (Ranges rs1) (Ranges rs2) = Ranges (m rs1 rs2)
+  where
+  m []     _      = []
+  m xs     []     = xs
+  m (x:xs) (y:ys)
+    | empty y         = m (x:xs) ys
+    | to x < from y   = x : m xs (y:ys)
+    | to y < from x   = m (x:xs) ys
+    | from x < from y = Range { from = from x, to = from y } :
+                        m (Range { from = from y, to = to x } : xs) (y:ys)
+    | to y < to x     = m (Range { from = to y, to = to x } : xs) ys
+    | otherwise       = m xs (y:ys)
+
+prop_minus xs ys =
+  rangesToPositions (xs `minus` ys) ==
+  rangesToPositions xs \\ rangesToPositions ys
+
+------------------------------------------------------------------------
 -- Generators
 
 instance Arbitrary Range where
@@ -88,6 +130,9 @@
 instance CoArbitrary Range where
   coarbitrary (Range f t) = coarbitrary f . coarbitrary t
 
+instance Arbitrary Ranges where
+  arbitrary = rToR <$> arbitrary
+
 ------------------------------------------------------------------------
 -- All tests
 
@@ -96,4 +141,9 @@
 tests :: IO Bool
 tests = runTests "Agda.Interaction.Highlighting.Range"
   [ quickCheck' rangeInvariant
+  , quickCheck' rangesInvariant
+  , quickCheck' (rangesInvariant . rToR)
+  , quickCheck' (\r1 r2 -> rangesInvariant $ r1 `minus` r2)
+  , quickCheck' prop_rangesToPositions
+  , quickCheck' prop_minus
   ]
diff --git a/src/full/Agda/Interaction/Highlighting/Vim.hs b/src/full/Agda/Interaction/Highlighting/Vim.hs
--- a/src/full/Agda/Interaction/Highlighting/Vim.hs
+++ b/src/full/Agda/Interaction/Highlighting/Vim.hs
@@ -4,6 +4,7 @@
 
 import Control.Monad.Trans
 import Data.Char
+import Data.Function ( on )
 import Data.Set ( Set )
 import Data.Map ( Map )
 import System.FilePath
@@ -23,7 +24,8 @@
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
-on f g x y = f (g x) (g y)
+-- defined in Data.Function
+-- on f g x y = f (g x) (g y)
 
 vimFile :: FilePath -> FilePath
 vimFile file =
@@ -46,8 +48,8 @@
 match cat ws	= "syn match " ++ cat ++ " \"" ++
 		    concat (List.intersperse "\\|" $ map escape ws) ++ "\""
 
-matches :: [String] -> [String] -> [String] -> [String] -> [String]
-matches cons icons defs idefs =
+matches :: [String] -> [String] -> [String] -> [String] -> [String] -> [String] -> [String]
+matches cons icons defs idefs flds iflds =
     map snd
     $ List.sortBy (compare `on` fst)
     $ cons' ++ defs' ++ icons' ++ idefs'
@@ -56,6 +58,8 @@
 	icons' = foo "agdaInfixConstructor" $ classify length icons
 	defs'  = foo "agdaFunction"	    $ classify length defs
 	idefs' = foo "agdaInfixFunction"    $ classify length idefs
+	flds'  = foo "agdaProjection"	    $ classify length flds
+	iflds' = foo "agdaInfixProjection"  $ classify length iflds
 
 	classify f = List.groupBy ((==) `on` f)
 		     . List.sortBy (compare `on` f)
@@ -64,16 +68,19 @@
 	foo cat = map (length . head /\ match cat)
 
 toVim :: NamesInScope -> String
-toVim ns = unlines $ matches mcons micons mdefs midefs
+toVim ns = unlines $ matches mcons micons mdefs midefs mflds miflds
     where
 	cons = [ x | (x, def:_) <- Map.toList ns, anameKind def == ConName ]
 	defs = [ x | (x, def:_) <- Map.toList ns, anameKind def == DefName ]
+	flds = [ x | (x, fld:_) <- Map.toList ns, anameKind fld == FldName ]
 
 	mcons = map show cons
 	mdefs = map show defs
+	mflds = map show flds
 
 	micons = concatMap parts cons
 	midefs = concatMap parts defs
+	miflds = concatMap parts flds
 
 	parts (NoName _ _) = []
 	parts (Name _ [_]) = []
diff --git a/src/full/Agda/Interaction/Imports.hs b/src/full/Agda/Interaction/Imports.hs
--- a/src/full/Agda/Interaction/Imports.hs
+++ b/src/full/Agda/Interaction/Imports.hs
@@ -4,23 +4,26 @@
 -}
 module Agda.Interaction.Imports where
 
-import Prelude hiding (catch)
+import Prelude
 
 import Control.Arrow
 import Control.Monad.Error
+import Control.Monad.Reader
 import Control.Monad.State
 import qualified Control.Exception as E
+
+import Data.Function (on)
 import qualified Data.Map as Map
 import qualified Data.List as List
 import qualified Data.Set as Set
+import qualified Data.Foldable as Fold (toList)
 import qualified Data.ByteString.Lazy as BS
 import Data.List
 import Data.Maybe
+import Data.Monoid (mempty, mappend)
 import Data.Map (Map)
 import Data.Set (Set)
-import System.Directory
-import System.Time
-import qualified Agda.Utils.IO.Locale as LocIO
+import System.Directory (doesFileExist, getModificationTime, removeFile)
 import System.FilePath hiding (splitPath)
 
 import Agda.Syntax.Position
@@ -35,6 +38,7 @@
 
 import Agda.Termination.TermCheck
 
+import Agda.TypeChecking.Errors
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
@@ -42,8 +46,10 @@
 import Agda.TypeChecking.Primitive
 import Agda.TypeChecker
 
+import Agda.Interaction.EmacsCommand
 import Agda.Interaction.FindFile
 import Agda.Interaction.Options
+import Agda.Interaction.Response (Response(Resp_RunningInfo))
 import Agda.Interaction.Highlighting.Precise (HighlightingInfo)
 import Agda.Interaction.Highlighting.Generate
 import Agda.Interaction.Highlighting.Vim
@@ -54,6 +60,7 @@
 import Agda.Utils.IO.Binary
 import Agda.Utils.Pretty
 import Agda.Utils.Fresh
+import Agda.Utils.Time
 
 import Agda.Utils.Impossible
 #include "../undefined.h"
@@ -79,24 +86,25 @@
             Just b1 = Map.lookup b bs
             Just b2 = Map.lookup b bi
     mapM_ check (map fst $ Map.toList $ Map.intersection bs bi)
-    addImportedThings sig bi (iHaskellImports i)
+    addImportedThings sig bi (iHaskellImports i) (iPatternSyns i)
     reportSLn "import.iface.merge" 20 $
       "  Rebinding primitives " ++ show prim
     prim <- Map.fromList <$> mapM rebind prim
     modify $ \st -> st { stImportedBuiltins = stImportedBuiltins st `Map.union` prim
 		       }
     where
-	rebind x = do
+	rebind (x, q) = do
 	    PrimImpl _ pf <- lookupPrimitiveFunction x
-	    return (x, Prim pf)
+	    return (x, Prim $ pf { primFunName = q })
 
 addImportedThings ::
-  Signature -> BuiltinThings PrimFun -> Set String -> TCM ()
-addImportedThings isig ibuiltin hsImports =
+  Signature -> BuiltinThings PrimFun -> Set String -> A.PatternSynDefns -> TCM ()
+addImportedThings isig ibuiltin hsImports patsyns =
   modify $ \st -> st
     { stImports          = unionSignatures [stImports st, isig]
     , stImportedBuiltins = Map.union (stImportedBuiltins st) ibuiltin
     , stHaskellImports   = Set.union (stHaskellImports st) hsImports
+    , stPatternSynImports = Map.union (stPatternSynImports st) patsyns
     }
 
 -- | Scope checks the given module. A proper version of the module
@@ -107,7 +115,7 @@
     reportSLn "import.scope" 5 $ "Scope checking " ++ show x
     verboseS "import.scope" 10 $ do
       visited <- Map.keys <$> getVisitedModules
-      liftIO $ LocIO.putStrLn $
+      reportSLn "" 0 $
         "  visited: " ++ intercalate ", " (map (render . pretty) visited)
     i <- fst <$> getInterface x
     addImport x
@@ -149,30 +157,6 @@
                 }
           return r
 
--- | Warnings.
---
--- Invariant: The fields are never empty at the same time.
-
-data Warnings = Warnings
-  { terminationProblems   :: [TerminationError]
-    -- ^ Termination checking problems are not reported if
-    -- 'optTerminationCheck' is 'False'.
-  , unsolvedMetaVariables :: [Range]
-    -- ^ Meta-variable problems are reported as type errors unless
-    -- 'optAllowUnsolved' is 'True'.
-  , unsolvedConstraints   :: Constraints
-    -- ^ Same as 'unsolvedMetaVariables'.
-  }
-
--- | Turns warnings into an error. Even if several errors are possible
--- only one is raised.
-
-warningsToError :: Warnings -> TypeError
-warningsToError (Warnings [] [] [])    = __IMPOSSIBLE__
-warningsToError (Warnings _ w@(_:_) _) = UnsolvedMetas w
-warningsToError (Warnings _ _ w@(_:_)) = UnsolvedConstraints w
-warningsToError (Warnings w@(_:_) _ _) = TerminationCheckFailed w
-
 -- | Type checks the given module (if necessary).
 
 typeCheck :: AbsolutePath -> TCM (Interface, Maybe Warnings)
@@ -206,9 +190,10 @@
                        -- be preserved?
               -> TCM (Interface, Either Warnings ClockTime)
 getInterface' x includeStateChanges =
+  withIncreasedModuleNestingLevel $
   -- Preserve the pragma options unless includeStateChanges is True.
-  bracket (stPragmaOptions <$> get)
-          (unless includeStateChanges . setPragmaOptions) $ \_ -> do
+  bracket_ (stPragmaOptions <$> get)
+           (unless includeStateChanges . setPragmaOptions) $ do
    -- Forget the pragma options (locally).
    setCommandLineOptions . stPersistentOptions . stPersistent =<< get
 
@@ -241,7 +226,10 @@
     visited <- isVisited x
     reportSLn "import.iface" 5 $ if visited then "  We've been here. Don't merge."
                                  else "  New module. Let's check it out."
-    unless (visited || stateChangesIncluded) $ mergeInterface i
+    unless (visited || stateChangesIncluded) $ do
+      mergeInterface i
+      ifTopLevelAndHighlightingLevelIs NonInteractive $
+        highlightFromInterface i file
 
     modify (\s -> s { stCurrentModule = Just $ iModuleName i })
 
@@ -255,7 +243,7 @@
     where
       isCached file = do
         let ifile = filePath $ toIFile file
-        exist <- liftIO $ doesFileExist ifile
+        exist <- liftIO $ doesFileExistCaseSensitive ifile
         if not exist
           then return False
           else do
@@ -265,6 +253,18 @@
               Just (mi, mt) | mt >= t -> True
               _                       -> False
 
+      -- Formats the "Checking", "Finished" and "Skipping" messages.
+      chaseMsg kind file = do
+        nesting <- envModuleNestingLevel <$> ask
+        let s = genericReplicate nesting ' ' ++ kind ++
+                " " ++ render (pretty x) ++
+                case file of
+                  Nothing -> "."
+                  Just f  -> " (" ++ f ++ ")."
+        ifM (envEmacs <$> ask)
+            (get >>= \st -> stInteractionOutputCallback st $ Resp_RunningInfo s)
+            (reportSLn "" 1 s)
+
       skip file = do
         -- Examine the mtime of the interface file. If it is newer than the
         -- stored version (in stDecodedModules), or if there is no stored version,
@@ -301,52 +301,63 @@
                 -- liftIO close	-- Close the interface file. See above.
                 typeCheck file
               else do
-                unless cached $ reportSLn "" 1 $
-                  "Skipping " ++ render (pretty x) ++
-                    " (" ++ ifile ++ ")."
+                unless cached $ chaseMsg "Skipping" (Just ifile)
                 -- We set the pragma options of the skipped file here,
                 -- because if the top-level file is skipped we want the
                 -- pragmas to apply to interactive commands in the UI.
                 mapM_ setOptionsFromPragma (iPragmaOptions i)
                 return (False, (i, Right t))
 
-      typeCheck file =
-        let ret a = do
-              reportSLn "" 1 $ "Finished " ++ render (pretty x) ++ "."
-              return a
-        in do
+      typeCheck file = do
+          let withMsgs m = do
+                chaseMsg "Checking" (Just $ filePath file)
+                x <- m
+                chaseMsg "Finished" Nothing
+                return x
+
           -- Do the type checking.
-          reportSLn "" 1 $ "Checking " ++ render (pretty x) ++ " (" ++ filePath file ++ ")."
+
           if includeStateChanges then do
-            r <- createInterface file x
+            r <- withMsgs $ createInterface file x
 
             -- Merge the signature with the signature for imported
             -- things.
             sig <- getSignature
-            addImportedThings sig Map.empty Set.empty
+            patsyns <- getPatternSyns
+            addImportedThings sig Map.empty Set.empty patsyns
             setSignature emptySignature
+            setPatternSyns Map.empty
 
-            ret (True, r)
+            return (True, r)
            else do
             ms       <- getImportPath
+            emacs    <- envEmacs <$> ask
+            nesting  <- envModuleNestingLevel <$> ask
             mf       <- stModuleToSource <$> get
             vs       <- getVisitedModules
             ds       <- getDecodedModules
             opts     <- stPersistentOptions . stPersistent <$> get
             isig     <- getImportedSignature
             ibuiltin <- gets stImportedBuiltins
+            ipatsyns <- getPatternSynImports
+            ho       <- stInteractionOutputCallback <$> get
             -- Every interface is treated in isolation. Note: Changes
             -- to stDecodedModules are not preserved if an error is
             -- encountered in an imported module.
             r <- liftIO $ runTCM $
-                   withImportPath ms $ do
+                   withImportPath ms $
+                   local (\e -> e { envEmacs              = emacs
+                                  , envModuleNestingLevel = nesting
+                                  }) $ do
                      setDecodedModules ds
                      setCommandLineOptions opts
-                     modify $ \s -> s { stModuleToSource = mf }
+                     modify $ \s -> s { stModuleToSource     = mf
+                                      , stInteractionOutputCallback = ho
+                                      }
                      setVisitedModules vs
-                     addImportedThings isig ibuiltin Set.empty
+                     addImportedThings isig ibuiltin Set.empty ipatsyns
 
-                     r <- createInterface file x
+                     r <- withMsgs $ createInterface file x
 
                      mf        <- stModuleToSource <$> get
                      ds        <- getDecodedModules
@@ -363,13 +374,29 @@
                 Right (r, update) -> do
                   update
                   case r of
-                    (_, Right _) -> do
-                      r <- skip file
-                      ret r
-                    _ ->
-                      ret (False, r)
+                    (_, Right _) ->
+                      -- We skip the file which has just been type-checked to
+                      -- be able to forget some of the local state from
+                      -- checking the module.
+                      -- Note that this doesn't actually read the interface
+                      -- file, only the cached interface.
+                      skip file
+                    _ -> return (False, r)
 
+-- | Print the highlighting information contained in the given
+-- interface.
 
+highlightFromInterface
+  :: Interface
+  -> AbsolutePath
+     -- ^ The corresponding file.
+  -> TCM ()
+highlightFromInterface i file = do
+  reportSLn "import.iface" 5 $
+    "Generating syntax info for " ++ filePath file ++
+    " (read from interface)."
+  printHighlightingInfo (iHighlighting i)
+
 readInterface :: FilePath -> TCM (Maybe Interface)
 readInterface file = do
     -- Decode the interface file
@@ -389,9 +416,9 @@
   -- Catch exceptions
   `catchError` handler
   where
-    handler e = case errError e of
+    handler e = case e of
       IOException _ e -> do
-        liftIO $ LocIO.putStrLn $ "IO exception: " ++ show e
+        reportSLn "" 0 $ "IO exception: " ++ show e
         return Nothing   -- Work-around for file locking bug.
                          -- TODO: What does this refer to? Please
                          -- document.
@@ -424,12 +451,17 @@
   :: AbsolutePath          -- ^ The file to type check.
   -> C.TopLevelModuleName  -- ^ The expected module name.
   -> TCM (Interface, Either Warnings ClockTime)
-createInterface file mname = do
-    reportSLn "import.iface.create" 5  $
+createInterface file mname =
+  local (\e -> e { envCurrentPath = file }) $ do
+    modFile       <- stModuleToSource <$> get
+    fileTokenInfo <- generateTokenInfo file
+    modify $ \st -> st { stTokens = fileTokenInfo }
+
+    reportSLn "import.iface.create" 5 $
       "Creating interface for " ++ render (pretty mname) ++ "."
     verboseS "import.iface.create" 10 $ do
       visited <- Map.keys <$> getVisitedModules
-      liftIO $ LocIO.putStrLn $
+      reportSLn "" 0 $
         "  visited: " ++ intercalate ", " (map (render . pretty) visited)
 
     previousHsImports <- getHaskellImports
@@ -444,75 +476,55 @@
     mapM_ setOptionsFromPragma options
     topLevel <- concreteToAbstract_ (TopLevel top)
 
-    termErrs <- catchError (do
-      -- Type checking.
-      checkDecls (topLevelDecls topLevel)
-      unfreezeMetas
-
-      -- Count number of metas
-      verboseS "profile.metas" 10 $ do
-        MetaId n <- fresh
-        tickN "metas" n
+    let ds = topLevelDecls topLevel
 
-      -- Termination checking.
-      termErrs <- ifM (optTerminationCheck <$> pragmaOptions)
-                      (termDecls $ topLevelDecls topLevel)
-                      (return [])
-      mapM_ (\e -> reportSLn "term.warn.no" 2
-                     (show (termErrFunctions e) ++
-                      " do(es) NOT pass the termination checker."))
-            termErrs
-      return termErrs
-      ) (\e -> do
-        -- If there is an error syntax highlighting info can still be
-        -- generated.
-        case rStart $ getRange e of
-          Just (Pn { srcFile = Just f }) | f == file -> do
-            syntaxInfo <- generateSyntaxInfo file (Just e) topLevel []
-            modFile    <- stModuleToSource <$> get
-            -- The highlighting info is included with the error.
-            case errHighlighting e of
-              Just _  -> __IMPOSSIBLE__
-              Nothing ->
-                throwError $ e { errHighlighting =
-                                   Just (syntaxInfo, modFile) }
-          _ -> throwError e
-      )
+    ifTopLevelAndHighlightingLevelIs NonInteractive $ do
+      -- Generate and print approximate syntax highlighting info.
+      printHighlightingInfo fileTokenInfo
+      mapM_ (\d -> generateAndPrintSyntaxInfo d Partial) ds
 
-    -- Generate syntax highlighting info.
-    syntaxInfo <- generateSyntaxInfo file Nothing topLevel termErrs
+    catchError (checkDecls ds) $ \e -> do
+      ifTopLevelAndHighlightingLevelIs NonInteractive $
+        printErrorInfo e
+      throwError e
 
-    -- Generate Vim file.
-    whenM (optGenerateVimFile <$> commandLineOptions) $
-	withScope_ (insideScope topLevel) $ generateVimFile $ filePath file
+    unfreezeMetas
 
-    -- Print stats
-    stats <- Map.toList <$> getStatistics
-    case stats of
-      []      -> return ()
-      _       -> reportS "profile" 1 $ unlines $
-        [ "Ticks for " ++ show (pretty mname) ] ++
-        [ "  " ++ s ++ " = " ++ show n
-        | (s, n) <- sortBy (compare `on` snd) stats ]
+    -- Count number of metas
+    verboseS "profile.metas" 10 $ do
+      MetaId n <- fresh
+      tickN "metas" (fromIntegral n)
 
-    -- Check if there are unsolved meta-variables...
-    unsolvedOK    <- optAllowUnsolved <$> pragmaOptions
-    unsolvedMetas <- List.nub <$> (mapM getMetaRange =<< getOpenMetas)
-    unless (null unsolvedMetas || unsolvedOK) $
-      typeError $ UnsolvedMetas unsolvedMetas
+    -- Move any remaining token highlighting to stSyntaxInfo.
+    ifTopLevelAndHighlightingLevelIs NonInteractive $
+      printHighlightingInfo . stTokens =<< get
+    modify $ \st ->
+      st { stTokens     = mempty
+         , stSyntaxInfo = stSyntaxInfo st `mappend` stTokens st
+         }
 
-    -- ...or unsolved constraints
-    unsolvedConstraints <- getAllConstraints
-    unless (null unsolvedConstraints || unsolvedOK) $
-      typeError $ UnsolvedConstraints unsolvedConstraints
+    whenM (optGenerateVimFile <$> commandLineOptions) $
+      -- Generate Vim file.
+      withScope_ (insideScope topLevel) $ generateVimFile $ filePath file
 
     setScope $ outsideScope topLevel
 
     reportSLn "scope.top" 50 $ "SCOPE " ++ show (insideScope topLevel)
 
+    syntaxInfo <- stSyntaxInfo <$> get
     i <- buildInterface topLevel syntaxInfo previousHsImports options
 
-    if and [ null termErrs, null unsolvedMetas, null unsolvedConstraints ]
+    -- TODO: It would be nice if unsolved things were highlighted
+    -- after every mutual block.
+
+    termErrs            <- Fold.toList <$> stTermErrs <$> get
+    unsolvedMetas       <- List.nub <$> (mapM getMetaRange =<< getOpenMetas)
+    unsolvedConstraints <- getAllConstraints
+
+    ifTopLevelAndHighlightingLevelIs NonInteractive $
+      printUnsolvedInfo
+
+    r <- if and [ null termErrs, null unsolvedMetas, null unsolvedConstraints ]
      then do
       -- The file was successfully type-checked (and no warnings were
       -- encountered), so the interface should be written out.
@@ -522,6 +534,17 @@
      else
       return (i, Left $ Warnings termErrs unsolvedMetas unsolvedConstraints)
 
+    -- Print stats
+    stats <- Map.toList <$> getStatistics
+    case stats of
+      []      -> return ()
+      _       -> reportS "profile" 1 $ unlines $
+        [ "Ticks for " ++ show (pretty mname) ] ++
+        [ "  " ++ s ++ " = " ++ show n
+        | (s, n) <- sortBy (compare `on` snd) stats ]
+
+    return r
+
 -- | Builds an interface for the current module, which should already
 -- have been successfully type checked.
 
@@ -543,7 +566,8 @@
     builtin <- gets stLocalBuiltins
     ms      <- getImports
     hsImps  <- getHaskellImports
-    let	builtin' = Map.mapWithKey (\x b -> fmap (const x) b) builtin
+    patsyns <- getPatternSyns
+    let	builtin' = Map.mapWithKey (\x b -> fmap (\pf -> (x, primFunName pf)) b) builtin
     reportSLn "import.iface" 7 "  instantiating all meta variables"
     i <- instantiateFull $ Interface
 			{ iImportedModules = Set.toList ms
@@ -556,6 +580,7 @@
                                                             previousHsImports
                         , iHighlighting    = syntaxInfo
                         , iPragmaOptions   = pragmas
+                        , iPatternSyns     = patsyns
 			}
     reportSLn "import.iface" 7 "  interface complete"
     return i
diff --git a/src/full/Agda/Interaction/InteractionTop.hs b/src/full/Agda/Interaction/InteractionTop.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/InteractionTop.hs
@@ -0,0 +1,1034 @@
+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances,
+             MultiParamTypeClasses, Rank2Types,
+             GeneralizedNewtypeDeriving, ScopedTypeVariables,
+             GADTs #-}
+{-# OPTIONS -fno-cse #-}
+
+module Agda.Interaction.InteractionTop
+  ( module Agda.Interaction.InteractionTop
+  )
+  where
+
+import System.Directory
+import qualified System.IO as IO
+import Data.Maybe
+import Data.Function
+import Control.Applicative hiding (empty)
+import qualified Control.Exception as E
+
+import Agda.Utils.Pretty
+import Agda.Utils.String
+import Agda.Utils.FileName
+import Agda.Utils.Tuple
+import qualified Agda.Utils.IO.UTF8 as UTF8
+
+import Control.Monad.Identity
+import Control.Monad.Error
+import Control.Monad.Reader
+import Control.Monad.State
+import Data.List as List
+import qualified Data.Map as Map
+import qualified System.Mem as System
+
+import Agda.TypeChecking.Monad as TM
+  hiding (initState, setCommandLineOptions)
+import qualified Agda.TypeChecking.Monad as TM
+import Agda.TypeChecking.Errors
+
+import Agda.Syntax.Fixity
+import Agda.Syntax.Position
+import Agda.Syntax.Parser
+import Agda.Syntax.Concrete as SC
+import Agda.Syntax.Common as SCo
+import Agda.Syntax.Concrete.Pretty ()
+import Agda.Syntax.Abstract as SA
+import Agda.Syntax.Abstract.Pretty
+import Agda.Syntax.Translation.ConcreteToAbstract
+import Agda.Syntax.Translation.AbstractToConcrete hiding (withScope)
+
+import Agda.Interaction.Exceptions
+import Agda.Interaction.FindFile
+import Agda.Interaction.Options
+import Agda.Interaction.MakeCase
+import Agda.Interaction.Response
+import qualified Agda.Interaction.BasicOps as B
+import Agda.Interaction.Highlighting.Emacs
+import Agda.Interaction.Highlighting.Generate
+import Agda.Interaction.Highlighting.Precise hiding (Postulate)
+import qualified Agda.Interaction.Imports as Imp
+
+import qualified Agda.Compiler.Epic.Compiler as Epic
+import qualified Agda.Compiler.MAlonzo.Compiler as MAlonzo
+import qualified Agda.Compiler.JS.Compiler as JS
+
+import qualified Agda.Auto.Auto as Auto
+import qualified Agda.Utils.HashMap as HMap
+import Agda.Utils.Time
+
+#include "../undefined.h"
+import Agda.Utils.Impossible
+
+------------------------------------------
+
+-- | Auxiliary state of an interactive computation.
+
+data CommandState = CommandState
+  { theInteractionPoints :: [InteractionId]
+    -- ^ The interaction points of the buffer, in the order in which
+    --   they appear in the buffer. The interaction points are
+    --   recorded in 'theTCState', but when new interaction points are
+    --   added by give or refine Agda does not ensure that the ranges
+    --   of later interaction points are updated.
+  , theCurrentFile       :: Maybe (AbsolutePath, ClockTime)
+    -- ^ The file which the state applies to. Only stored if the
+    -- module was successfully type checked (potentially with
+    -- warnings). The 'ClockTime' is the modification time stamp of
+    -- the file when it was last loaded.
+  , optionsOnReload :: CommandLineOptions
+    -- ^ Reset the options on each reload to these.
+  }
+
+-- | Initial auxiliary interaction state
+
+initCommandState :: CommandState
+initCommandState = CommandState
+  { theInteractionPoints = []
+  , theCurrentFile       = Nothing
+  , optionsOnReload      = defaultOptions
+  }
+
+
+-- | Monad for computing answers to interactive commands.
+--
+--   'CommandM' is 'TCM' extended with state 'CommandState'.
+--
+--   'StateT' is in a newtype wrapper because we would like to prevent
+--   the accidental use of 'lift'.
+--   Instead of 'lift' one can use 'liftCommandM', see below.
+
+newtype CommandM a = CommandM { unCommandM :: StateT CommandState TCM a }
+    deriving (Monad, MonadIO, Functor, MonadState CommandState, MonadError TCErr)
+
+-- | Wrapped 'runStateT' for 'CommandM'.
+
+runCommandM :: CommandM a -> CommandState -> TCM (a, CommandState)
+runCommandM = runStateT . unCommandM
+
+-- | lift a TCM action to CommandM.
+--
+--   'liftCommandM' is a customized form of 'lift' for 'StateT'.
+--   At the end of the lifted action 'stInteractionOutputCallback' is set
+--   to its original value because the value is lost during the execution
+--   of some TCM actions.
+
+liftCommandM :: TCM a -> CommandM a
+liftCommandM m = CommandM $ lift $ do
+    outf <- gets stInteractionOutputCallback
+    a <- m
+    modify $ \st -> st { stInteractionOutputCallback = outf }
+    return a
+
+-- | Build an opposite action to 'lift' for state monads.
+
+revLift
+    :: MonadState st m
+    => (forall c . m c -> st -> k (c, st))      -- ^ run
+    -> (forall b . k b -> m b)                  -- ^ lift
+    -> (forall x . (m a -> k x) -> k x) -> m a  -- ^ reverse lift in double negative position
+revLift run lift f = do
+    st <- get
+    (a, st) <- lift $ f (`run` st)
+    put st
+    return a
+
+-- | Opposite of 'liftIO' for 'CommandM'.
+--   Use only if main errors are already catched.
+
+commandMToIO :: (forall x . (CommandM a -> IO x) -> IO x) -> CommandM a
+commandMToIO ci_i = revLift runCommandM liftCommandM $ \ct -> revLift runSafeTCM liftIO $ ci_i . (. ct)
+
+-- | 'runSafeTCM' runs a safe 'TMC' action (a 'TCM' action which cannot fail)
+
+runSafeTCM :: TCM a -> TCState -> IO (a, TCState)
+runSafeTCM m st = do
+    x <- runTCM $ do
+        put st
+        a <- m
+        st <- get
+        return (a, st)
+    case x of
+        Right x -> return x
+        Left _  -> __IMPOSSIBLE__   -- cannot happen if 'm' is safe
+
+-- | Lift a TCM action transformer to a CommandM action transformer.
+
+liftCommandMT :: (forall a . TCM a -> TCM a) -> CommandM a -> CommandM a
+liftCommandMT f m = revLift runCommandM liftCommandM $ f . ($ m)
+
+-- | Put a response by the callback function given by 'stInteractionOutputCallback'.
+
+putResponse :: Response -> CommandM ()
+putResponse x = liftCommandM $ do
+  callback <- stInteractionOutputCallback <$> get
+  callback x
+
+{- UNUSED
+
+-- | Changes the 'Interaction' so that its first action is to turn off
+-- all debug messages.
+
+makeSilent :: Interaction -> Interaction
+makeSilent i = i { command = do
+  opts <- liftCommandM commandLineOptions
+  liftCommandM $ TM.setCommandLineOptions $ opts
+    { optPragmaOptions =
+        (optPragmaOptions opts)
+          { optVerbose = Trie.singleton [] 0 }
+    }
+  command i }
+-}
+
+
+-- | Run an 'IOTCM' value, catch the exceptions, emit output
+--
+--   If an error happens the state of 'CommandM' does not change,
+--   but stPersistent may change (which contains successfully
+--   loaded interfaces for example).
+
+runInteraction :: IOTCM -> CommandM ()
+runInteraction (IOTCM current highlighting highlightingMethod cmd)
+    = handleNastyErrors
+    $ inEmacs
+    $ do
+        current <- liftIO $ absolute current
+
+        res <- (`catchError` (return . Just)) $ do
+
+            -- Raises an error if the given file is not the one currently
+            -- loaded.
+            cf <- gets theCurrentFile
+            when (not (independent cmd) && Just current /= (fst <$> cf)) $
+                liftCommandM $ typeError $ GenericError "Error: First load the file."
+
+            interpret cmd
+
+            cf <- gets theCurrentFile
+            when (Just current == (fst <$> cf)) $
+                putResponse . Resp_InteractionPoints =<< gets theInteractionPoints
+            return Nothing
+
+        maybe (return ()) handleErr res
+
+  where
+    inEmacs = liftCommandMT $ withEnv $ initEnv
+            { envEmacs              = True
+            , envHighlightingLevel  = highlighting
+            , envHighlightingMethod = highlightingMethod
+            }
+
+    -- | Handle nasty errors like stack space overflow (issue 637)
+    -- We assume that the input action handles other kind of errors.
+    handleNastyErrors :: CommandM () -> CommandM ()
+    handleNastyErrors m = commandMToIO $ \toIO ->
+        toIO m `E.catch` (toIO . handleErr . Exception noRange . (show :: E.SomeException -> String))
+
+    -- | Displays an error and instructs Emacs to jump to the site of the
+    -- error. Because this function may switch the focus to another file
+    -- the status information is also updated.
+    handleErr e = do
+        s <- liftCommandM $ prettyError e
+        x <- liftCommandM . gets $ optShowImplicit . stPragmaOptions
+        let
+        mapM_ putResponse $
+            [ Resp_DisplayInfo $ Info_Error s ] ++
+            tellEmacsToJumpToError (getRange e) ++
+            [ Resp_Status $ Status { sChecked = False
+                                   , sShowImplicitArguments = x
+                                   } ]
+
+
+----------------------------------------------------------------------------
+-- | An interactive computation.
+
+data Interaction
+    -- | @cmd_load m includes@ loads the module in file @m@, using
+    -- @includes@ as the include directories.
+  = Cmd_load            FilePath [FilePath]
+
+    -- | @cmd_compile b m includes@ compiles the module in file @m@ using
+    -- the backend @b@, using @includes@ as the include directories.
+  | Cmd_compile         Backend FilePath [FilePath]
+
+  | Cmd_constraints
+
+    -- | Show unsolved metas. If there are no unsolved metas but unsolved constraints
+    -- show those instead.
+  | Cmd_metas
+
+    -- | Shows all the top-level names in the given module, along with
+    -- their types. Uses the top-level scope.
+  | Cmd_show_module_contents_toplevel
+                        String
+
+  | Cmd_solveAll
+
+    -- | Parse the given expression (as if it were defined at the
+    -- top-level of the current module) and infer its type.
+  | Cmd_infer_toplevel  B.Rewrite  -- Normalise the type?
+                        String
+
+
+    -- | Parse and type check the given expression (as if it were defined
+    -- at the top-level of the current module) and normalise it.
+  | Cmd_compute_toplevel Bool -- Ignore abstract?
+                         String
+
+    ------------------------------------------------------------------------
+    -- Syntax highlighting
+
+    -- | @cmd_load_highlighting_info source@ loads syntax highlighting
+    -- information for the module in @source@, and asks Emacs to apply
+    -- highlighting info from this file.
+    --
+    -- If the module does not exist, or its module name is malformed or
+    -- cannot be determined, or the module has not already been visited,
+    -- or the cached info is out of date, then no highlighting information
+    -- is printed.
+    --
+    -- This command is used to load syntax highlighting information when a
+    -- new file is opened, and it would probably be annoying if jumping to
+    -- the definition of an identifier reset the proof state, so this
+    -- command tries not to do that. One result of this is that the
+    -- command uses the current include directories, whatever they happen
+    -- to be.
+  | Cmd_load_highlighting_info
+                        FilePath
+
+    ------------------------------------------------------------------------
+    -- Implicit arguments
+
+    -- | Tells Agda whether or not to show implicit arguments.
+  | ShowImplicitArgs    Bool -- Show them?
+
+
+    -- | Toggle display of implicit arguments.
+  | ToggleImplicitArgs
+
+    ------------------------------------------------------------------------
+    -- | Goal commands
+    --
+    -- If the range is 'noRange', then the string comes from the
+    -- minibuffer rather than the goal.
+
+  | Cmd_give            InteractionId Range String
+
+  | Cmd_refine          InteractionId Range String
+
+  | Cmd_intro           Bool InteractionId Range String
+
+  | Cmd_refine_or_intro Bool InteractionId Range String
+
+  | Cmd_auto            InteractionId Range String
+
+  | Cmd_context         B.Rewrite InteractionId Range String
+
+  | Cmd_infer           B.Rewrite InteractionId Range String
+
+  | Cmd_goal_type       B.Rewrite InteractionId Range String
+
+    -- | Displays the current goal and context.
+  | Cmd_goal_type_context B.Rewrite InteractionId Range String
+
+    -- | Displays the current goal and context /and/ infers the type of an
+    -- expression.
+  | Cmd_goal_type_context_infer
+                        B.Rewrite InteractionId Range String
+
+    -- | Shows all the top-level names in the given module, along with
+    -- their types. Uses the scope of the given goal.
+  | Cmd_show_module_contents
+                        InteractionId Range String
+
+  | Cmd_make_case       InteractionId Range String
+
+  | Cmd_compute         Bool -- Ignore abstract?
+                        InteractionId Range String
+        deriving Read
+
+data IOTCM
+    = IOTCM
+        FilePath
+         -- -^ The current file. If this file does not match
+         -- 'theCurrentFile, and the 'Interaction' is not
+         -- \"independent\", then an error is raised.
+        HighlightingLevel
+        HighlightingMethod
+        Interaction
+         -- -^ What to do
+            deriving Read
+
+---------------------------------------------------------
+-- Read instances
+
+
+-- | The 'Parse' monad.
+--   'StateT' state holds the remaining input.
+
+type Parse a = ErrorT String (StateT String Identity) a
+
+-- | Converter from the type of 'reads' to 'Parse'
+--   The first paramter is part of the error message
+--   in case the parse fails.
+
+readsToParse :: String -> (String -> Maybe (a, String)) -> Parse a
+readsToParse s f = do
+    st <- lift get
+    case f st of
+        Nothing -> throwError s
+        Just (a, st) -> do
+            lift $ put st
+            return a
+
+parseToReadsPrec :: Parse a -> Int -> String -> [(a, String)]
+parseToReadsPrec p i s = case runIdentity . flip runStateT s . runErrorT $ parens' p of
+    (Right a, s) -> [(a,s)]
+    _ -> []
+
+-- | Demand an exact string.
+
+exact :: String -> Parse ()
+exact s = readsToParse (show s) $ fmap (\x -> ((),x)) . stripPrefix s . dropWhile (==' ')
+
+readParse :: Read a => Parse a
+readParse = readsToParse "read failed" $ listToMaybe . reads
+
+parens' :: Parse a -> Parse a
+parens' p = do
+    exact "("
+    x <- p
+    exact ")"
+    return x
+  `mplus`
+    p
+
+instance Read InteractionId where
+    readsPrec = parseToReadsPrec $
+        fmap InteractionId readParse
+
+instance Read Range where
+    readsPrec = parseToReadsPrec $ do
+                exact "Range"
+                fmap Range readParse
+          `mplus` do
+                exact "noRange"
+                return noRange
+
+instance Read Interval where
+    readsPrec = parseToReadsPrec $ do
+        exact "Interval"
+        liftM2 Interval readParse readParse
+
+instance Read AbsolutePath where
+    readsPrec = parseToReadsPrec $ do
+        exact "mkAbsolute"
+        fmap mkAbsolute readParse
+
+instance Read Position where
+    readsPrec = parseToReadsPrec $ do
+        exact "Pn"
+        liftM4 Pn readParse readParse readParse readParse
+
+---------------------------------------------------------
+
+-- | Can the command run even if the relevant file has not been loaded
+--   into the state?
+
+independent :: Interaction -> Bool
+independent (Cmd_load {})    = True
+independent (Cmd_compile {}) = True
+independent (Cmd_load_highlighting_info {}) = True
+independent _                = False
+
+-- | Interpret an interaction
+
+interpret :: Interaction -> CommandM ()
+
+interpret (Cmd_load m includes) =
+  cmd_load' m includes True $ \_ -> interpret Cmd_metas
+
+interpret (Cmd_compile b file includes) =
+  cmd_load' file includes False $ \(i, mw) -> do
+    case mw of
+      Nothing -> do
+        liftCommandM $ case b of
+          MAlonzo -> MAlonzo.compilerMain i
+          Epic    -> Epic.compilerMain i
+          JS      -> JS.compilerMain i
+        display_info $ Info_CompilationOk
+      Just w ->
+        display_info $ Info_Error $ unlines
+          [ "You can only compile modules without unsolved metavariables"
+          , "or termination checking problems."
+          ]
+
+interpret Cmd_constraints =
+    display_info . Info_Constraints . unlines . map show =<< liftCommandM B.getConstraints
+
+interpret Cmd_metas = do -- CL.showMetas []
+  ims <- liftCommandM $ B.typesOfVisibleMetas B.AsIs
+  -- Show unsolved implicit arguments normalised.
+  hms <- liftCommandM $ B.typesOfHiddenMetas B.Normalised
+  if not $ null ims && null hms
+    then do
+      di <- liftCommandM $ forM ims $ \i -> B.withInteractionId (B.outputFormId $ B.OutputForm 0 i) (showATop i)
+      dh <- liftCommandM $ mapM showA' hms
+      display_info $ Info_AllGoals $ unlines $ di ++ dh
+    else do
+      cs <- liftCommandM B.getConstraints
+      if null cs
+        then display_info $ Info_AllGoals ""
+        else interpret Cmd_constraints
+  where
+    metaId (B.OfType i _) = i
+    metaId (B.JustType i) = i
+    metaId (B.JustSort i) = i
+    metaId (B.Assign i e) = i
+    metaId _ = __IMPOSSIBLE__
+    showA' :: B.OutputConstraint SA.Expr NamedMeta -> TCM String
+    showA' m = do
+      let i = nmid $ metaId m
+      r <- getMetaRange i
+      d <- B.withMetaId i (showATop m)
+      return $ d ++ "  [ at " ++ show r ++ " ]"
+
+interpret (Cmd_show_module_contents_toplevel s) =
+  liftCommandMT B.atTopLevel $ showModuleContents noRange s
+
+interpret Cmd_solveAll = do
+  out <- liftCommandM $ mapM lowr =<< B.getSolvedInteractionPoints
+  putResponse $ Resp_SolveAll out
+  where
+      lowr (i, m, e) = do
+        mi <- getMetaInfo <$> lookupMeta m
+        e <- withMetaInfo mi $ lowerMeta <$> abstractToConcreteCtx TopCtx e
+        return (i, e)
+
+interpret (Cmd_infer_toplevel norm s) =
+  parseAndDoAtToplevel (B.typeInCurrent norm) Info_InferredType s
+
+interpret (Cmd_compute_toplevel ignore s) =
+  parseAndDoAtToplevel (if ignore then ignoreAbstractMode . c
+                                  else inConcreteMode . c)
+                       Info_NormalForm
+                       s
+  where c = B.evalInCurrent
+
+interpret (ShowImplicitArgs showImpl) = do
+  opts <- liftCommandM commandLineOptions
+  setCommandLineOptions' $
+    opts { optPragmaOptions =
+             (optPragmaOptions opts) { optShowImplicit = showImpl } }
+
+interpret ToggleImplicitArgs = do
+  opts <- liftCommandM commandLineOptions
+  let ps = optPragmaOptions opts
+  setCommandLineOptions' $
+    opts { optPragmaOptions =
+             ps { optShowImplicit = not $ optShowImplicit ps } }
+
+interpret (Cmd_load_highlighting_info source) = do
+    -- Make sure that the include directories have
+    -- been set.
+    setCommandLineOptions' =<< liftCommandM commandLineOptions
+
+    resp <- liftCommandM $ liftIO . tellToUpdateHighlighting =<< do
+      ex <- liftIO $ doesFileExist source
+      case ex of
+        False -> return Nothing
+        True  -> do
+          mmi <- (getVisitedModule =<<
+                    moduleName =<< liftIO (absolute source))
+                   `catchError`
+                 \_ -> return Nothing
+          case mmi of
+            Nothing -> return Nothing
+            Just mi -> do
+              sourceT <- liftIO $ getModificationTime source
+              if sourceT <= miTimeStamp mi
+               then do
+                modFile <- gets stModuleToSource
+                return $ Just (iHighlighting $ miInterface mi, modFile)
+               else
+                return Nothing
+    mapM_ putResponse resp
+
+interpret (Cmd_give ii rng s) = give_gen ii rng s B.give $ \rng s ce ->
+  case ce of
+    ce | rng == noRange -> Give_String $ show ce
+    SC.Paren _ _ -> Give_Paren
+    _            -> Give_NoParen
+
+interpret (Cmd_refine ii rng s) = give_gen ii rng s B.refine $ \_ s -> Give_String . show
+
+interpret (Cmd_intro pmLambda ii rng _) = do
+  ss <- liftCommandM $ B.introTactic pmLambda ii
+  liftCommandMT (B.withInteractionId ii) $ case ss of
+    []    -> do
+      display_info $ Info_Intro $ text "No introduction forms found."
+    [s]   -> do
+      interpret $ Cmd_refine ii rng s
+    _:_:_ -> do
+      display_info $ Info_Intro $
+        sep [ text "Don't know which constructor to introduce of"
+            , let mkOr []     = []
+                  mkOr [x, y] = [text x <+> text "or" <+> text y]
+                  mkOr (x:xs) = text x : mkOr xs
+              in nest 2 $ fsep $ punctuate comma (mkOr ss)
+            ]
+
+interpret (Cmd_refine_or_intro pmLambda ii r s) = interpret $
+  (if null s then Cmd_intro pmLambda else Cmd_refine) ii r s
+
+interpret (Cmd_auto ii rng s) = do
+  (res, msg) <- liftCommandM $ Auto.auto ii rng s
+  case res of
+   Left xs -> do
+    forM_ xs $ \(ii, s) -> do
+      modify $ \st -> st { theInteractionPoints = filter (/= ii) (theInteractionPoints st) }
+      putResponse $ Resp_GiveAction ii $ Give_String s
+    case msg of
+     Nothing -> interpret Cmd_metas
+     Just msg -> display_info $ Info_Auto msg
+   Right (Left cs) -> do
+    case msg of
+     Nothing -> return ()
+     Just msg -> display_info $ Info_Auto msg
+    putResponse $ Resp_MakeCaseAction cs
+   Right (Right s) -> give_gen' B.refine (\_ s -> Give_String . show) ii rng s
+
+interpret (Cmd_context norm ii _ _) =
+  display_info . Info_Context =<< liftCommandM (prettyContext norm False ii)
+
+interpret (Cmd_infer norm ii rng s) =
+  display_info . Info_InferredType
+    =<< liftCommandM (B.withInteractionId ii
+          (prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s))
+
+interpret (Cmd_goal_type norm ii _ _) =
+  display_info . Info_CurrentGoal
+    =<< liftCommandM (B.withInteractionId ii $ prettyTypeOfMeta norm ii)
+
+interpret (Cmd_goal_type_context norm ii rng s) =
+  cmd_goal_type_context_and empty norm ii rng s
+
+interpret (Cmd_goal_type_context_infer norm ii rng s) = do
+  typ <- liftCommandM $ B.withInteractionId ii $
+           prettyATop =<< B.typeInMeta ii norm =<< B.parseExprIn ii rng s
+  cmd_goal_type_context_and (text "Have:" <+> typ) norm ii rng s
+
+interpret (Cmd_show_module_contents ii rng s) =
+  liftCommandMT (B.withInteractionId ii) $ showModuleContents rng s
+
+interpret (Cmd_make_case ii rng s) = do
+  (casectxt , cs) <- liftCommandM $ makeCase ii rng s
+  liftCommandMT (B.withInteractionId ii) $ do
+    hidden <- liftCommandM $ showImplicitArguments
+    pcs <- liftCommandM $ mapM prettyA $ List.map (extlam_dropLLifted casectxt hidden) cs
+    putResponse $ Resp_MakeCase (emacscmd casectxt) (List.map (extlam_dropName casectxt . render) pcs)
+  where
+    render = renderStyle (style { mode = OneLineMode })
+
+    emacscmd :: CaseContext -> String
+    emacscmd FunctionDef = "agda2-make-case-action"
+    emacscmd (ExtendedLambda _ _) = "agda2-make-case-action-extendlam"
+
+    -- very dirty hack, string manipulation by dropping the function name
+    -- and replacing " = " with " -> "
+    extlam_dropName :: CaseContext -> String -> String
+    extlam_dropName FunctionDef x = x
+    extlam_dropName (ExtendedLambda _ _) x
+        = unwords $ map (\ y -> if y == "=" then "→" else y) $ drop 1 $ words x
+
+    -- Drops pattern added to extended lambda functions when lambda lifting them
+    extlam_dropLLifted :: CaseContext -> Bool -> SA.Clause -> SA.Clause
+    extlam_dropLLifted FunctionDef _ x = x
+    extlam_dropLLifted (ExtendedLambda h nh) hidden (SA.Clause (SA.LHS info (SA.LHSProj{}) ps) rhs decl) = __IMPOSSIBLE__
+    extlam_dropLLifted (ExtendedLambda h nh) hidden (SA.Clause (SA.LHS info (SA.LHSHead name nps) ps) rhs decl)
+      = let n = if hidden then h + nh else nh
+        in
+         (SA.Clause (SA.LHS info (SA.LHSHead name (drop n nps)) ps) rhs decl)
+
+interpret (Cmd_compute ignore ii rng s) = do
+  e <- liftCommandM $ B.parseExprIn ii rng s
+  d <- liftCommandM $ B.withInteractionId ii $ do
+         let c = B.evalInCurrent e
+         v <- if ignore then ignoreAbstractMode c else c
+         prettyATop v
+  display_info $ Info_NormalForm d
+
+type GoalCommand = InteractionId -> Range -> String -> Interaction
+
+-- | @cmd_load' m includes cmd cmd2@ loads the module in file @m@,
+-- using @includes@ as the include directories.
+--
+-- If type checking completes without any exceptions having been
+-- encountered then the command @cmd r@ is executed, where @r@ is the
+-- result of 'Imp.typeCheck'.
+
+cmd_load' :: FilePath -> [FilePath]
+          -> Bool -- ^ Allow unsolved meta-variables?
+          -> ((Interface, Maybe Warnings) -> CommandM ())
+          -> CommandM ()
+cmd_load' file includes unsolvedOK cmd = do
+    f <- liftIO $ absolute file
+    ex <- liftIO $ doesFileExist $ filePath f
+    liftCommandM $ setIncludeDirs includes $
+      if ex then ProjectRoot f else CurrentDir
+
+    -- Forget the previous "current file" and interaction points.
+    modify $ \st -> st { theInteractionPoints = []
+                       , theCurrentFile       = Nothing
+                       }
+
+    t <- liftIO $ getModificationTime file
+
+    -- All options (except for the verbosity setting) are reset when a
+    -- file is reloaded, including the choice of whether or not to
+    -- display implicit arguments. (At this point the include
+    -- directories have already been set, so they are preserved.)
+    opts <- liftCommandM $ commandLineOptions
+    defaultOptions <- gets optionsOnReload
+    setCommandLineOptions' $
+      defaultOptions { optIncludeDirs   = optIncludeDirs opts
+                     , optPragmaOptions =
+                         (optPragmaOptions defaultOptions)
+                           { optAllowUnsolved = unsolvedOK
+                           , optVerbose       = optVerbose (optPragmaOptions opts)
+                           }
+                     }
+
+    -- Reset the state, preserving options and decoded modules. Note
+    -- that if the include directories have changed, then the decoded
+    -- modules are reset when cmd_load' is run by ioTCM.
+    liftCommandM resetState
+
+    -- Clear the info buffer to make room for information about which
+    -- module is currently being type-checked.
+    putResponse Resp_ClearRunningInfo
+
+    -- Remove any prior syntax highlighting.
+    putResponse Resp_ClearHighlighting
+
+    ok <- liftCommandM $ Imp.typeCheck f
+
+    -- The module type checked. If the file was not changed while the
+    -- type checker was running then the interaction points and the
+    -- "current file" are stored.
+    t' <- liftIO $ getModificationTime file
+    when (t == t') $ do
+      is <- liftCommandM $ sortInteractionPoints =<< getInteractionPoints
+      modify $ \st -> st { theInteractionPoints = is
+                         , theCurrentFile       = Just (f, t)
+                         }
+
+    cmd ok
+
+    liftIO System.performGC
+
+-- | Available backends.
+
+data Backend = MAlonzo | Epic | JS
+    deriving (Show, Read)
+
+
+give_gen ii rng s give_ref mk_newtxt =
+  give_gen' give_ref mk_newtxt ii rng s
+
+give_gen' give_ref mk_newtxt ii rng s = do
+  scope     <- liftCommandM $ getInteractionScope ii
+  (ae, iis) <- liftCommandM $ give_ref ii Nothing =<< B.parseExprIn ii rng s
+  iis       <- liftCommandM $ sortInteractionPoints iis
+  modify $ \st -> st { theInteractionPoints =
+                           replace ii iis (theInteractionPoints st) }
+  putResponse $ Resp_GiveAction ii $ mk_newtxt rng s $ abstractToConcrete (makeEnv scope) ae
+  interpret Cmd_metas
+  where
+  -- Substitutes xs for x in ys.
+  replace x xs ys = concatMap (\y -> if y == x then xs else [y]) ys
+
+-- | Sorts interaction points based on their ranges.
+
+sortInteractionPoints :: [InteractionId] -> TCM [InteractionId]
+sortInteractionPoints is =
+  map fst . sortBy (compare `on` snd) <$>
+    mapM (\i -> (,) i <$> getInteractionRange i) is
+
+-- | Pretty-prints the type of the meta-variable.
+
+prettyTypeOfMeta :: B.Rewrite -> InteractionId -> TCM Doc
+prettyTypeOfMeta norm ii = do
+  form <- B.typeOfMeta norm ii
+  case form of
+    B.OfType _ e -> prettyATop e
+    _            -> text <$> showATop form
+
+-- | Pretty-prints the context of the given meta-variable.
+
+prettyContext
+  :: B.Rewrite      -- ^ Normalise?
+  -> Bool           -- ^ Print the elements in reverse order?
+  -> InteractionId
+  -> TCM Doc
+prettyContext norm rev ii = B.withInteractionId ii $ do
+  ctx <- B.contextOfMeta ii norm
+  es  <- mapM (prettyATop . B.ofExpr) ctx
+  ns  <- mapM (showATop   . B.ofName) ctx
+  let shuffle = if rev then reverse else id
+  return $ align 10 $ filter (not . null. fst) $ shuffle $ zip ns (map (text ":" <+>) es)
+
+-- | Displays the current goal, the given document, and the current
+-- context.
+
+cmd_goal_type_context_and doc norm ii _ _ = do
+  goal <- liftCommandM $ B.withInteractionId ii $ prettyTypeOfMeta norm ii
+  ctx  <- liftCommandM $ prettyContext norm True ii
+  display_info $ Info_GoalType
+                (text "Goal:" <+> goal $+$
+                 doc $+$
+                 text (replicate 60 '\x2014') $+$
+                 ctx)
+
+-- | Shows all the top-level names in the given module, along with
+-- their types.
+
+showModuleContents :: Range -> String -> CommandM ()
+showModuleContents rng s = do
+  (modules, types) <- liftCommandM $ B.moduleContents rng s
+  types' <- liftCommandM $ mapM (\(x, t) -> do
+                    t <- prettyTCM t
+                    return (show x, text ":" <+> t))
+                 types
+  display_info $ Info_ModuleContents $
+    text "Modules" $$
+    nest 2 (vcat $ map (text . show) modules) $$
+    text "Names" $$
+    nest 2 (align 10 types')
+
+-- | Sets the command line options and updates the status information.
+
+setCommandLineOptions' :: CommandLineOptions -> CommandM ()
+setCommandLineOptions' opts = do
+    liftCommandM $ TM.setCommandLineOptions opts
+    displayStatus
+
+
+-- | Computes some status information.
+
+status :: CommandM Status
+status = do
+  cf <- gets theCurrentFile
+  showImpl <- liftCommandM showImplicitArguments
+
+  -- Check if the file was successfully type checked, and has not
+  -- changed since. Note: This code does not check if any dependencies
+  -- have changed, and uses a time stamp to check for changes.
+  checked  <- liftCommandM $ case cf of
+    Nothing     -> return False
+    Just (f, t) -> do
+      t' <- liftIO $ getModificationTime $ filePath f
+      case t == t' of
+        False -> return False
+        True  ->
+          not . miWarnings . maybe __IMPOSSIBLE__ id <$>
+            (getVisitedModule =<<
+               maybe __IMPOSSIBLE__ id .
+                 Map.lookup f <$> sourceToModule)
+
+  return $ Status { sShowImplicitArguments = showImpl
+                  , sChecked               = checked
+                  }
+
+-- | Displays\/updates status information.
+
+displayStatus :: CommandM ()
+displayStatus =
+  putResponse . Resp_Status  =<< status
+
+-- | @display_info@ does what @'display_info'' False@ does, but
+-- additionally displays some status information (see 'status' and
+-- 'displayStatus').
+
+display_info :: DisplayInfo -> CommandM ()
+display_info info = do
+  displayStatus
+  putResponse $ Resp_DisplayInfo info
+
+takenNameStr :: TCM [String]
+takenNameStr = do
+  xss <- sequence [ List.map (fst . unDom) <$> getContext
+                  , Map.keys <$> asks envLetBindings
+                  , List.map qnameName . HMap.keys . sigDefinitions <$> getSignature
+		  ]
+  return $ concat [ parts $ nameConcrete x | x <- concat xss]
+  where
+    parts x = [ s | Id s <- nameParts x ]
+
+refreshStr :: [String] -> String -> ([String], String)
+refreshStr taken s = go nameModifiers where
+  go (m:mods) = let s' = s ++ m in
+                if s' `elem` taken then go mods else (s':taken, s')
+  go _        = __IMPOSSIBLE__
+
+nameModifiers = "" : "'" : "''" : [show i | i <-[3..]]
+
+
+class LowerMeta a where lowerMeta :: a -> a
+instance LowerMeta SC.Expr where
+  lowerMeta = go where
+    go e = case e of
+      Ident _              -> e
+      SC.Lit _             -> e
+      SC.QuestionMark _ _  -> preMeta
+      SC.Underscore _ _    -> preUscore
+      SC.App r e1 ae2      -> case appView e of
+        SC.AppView (SC.QuestionMark _ _) _ -> preMeta
+        SC.AppView (SC.Underscore   _ _) _ -> preUscore
+        _ -> SC.App r (go e1) (lowerMeta ae2)
+      SC.WithApp r e es	   -> SC.WithApp r (lowerMeta e) (lowerMeta es)
+      SC.Lam r bs e1       -> SC.Lam r (lowerMeta bs) (go e1)
+      SC.AbsurdLam r h     -> SC.AbsurdLam r h
+      SC.ExtendedLam r cs  -> SC.ExtendedLam r cs
+      SC.Fun r ae1 e2      -> SC.Fun r (lowerMeta ae1) (go e2)
+      SC.Pi tb e1          -> SC.Pi (lowerMeta tb) (go e1)
+      SC.Set _             -> e
+      SC.Prop _            -> e
+      SC.SetN _ _          -> e
+      SC.ETel tel          -> SC.ETel (lowerMeta tel)
+      SC.Let r ds e1       -> SC.Let r (lowerMeta ds) (go e1)
+      Paren r e1           -> case go e1 of
+        q@(SC.QuestionMark _ Nothing) -> q
+        e2                            -> Paren r e2
+      Absurd _          -> e
+      As r n e1         -> As r n (go e1)
+      SC.Dot r e	-> SC.Dot r (go e)
+      SC.RawApp r es	-> SC.RawApp r (lowerMeta es)
+      SC.OpApp r x es	-> SC.OpApp r x (lowerMeta es)
+      SC.Rec r fs	-> SC.Rec r (List.map (id -*- lowerMeta) fs)
+      SC.RecUpdate r e fs -> SC.RecUpdate r (lowerMeta e) (List.map (id -*- lowerMeta) fs)
+      SC.HiddenArg r e	-> SC.HiddenArg r (lowerMeta e)
+      SC.InstanceArg r e  -> SC.InstanceArg r (lowerMeta e)
+      SC.QuoteGoal r x e  -> SC.QuoteGoal r x (lowerMeta e)
+      e@SC.Quote{}      -> e
+      e@SC.QuoteTerm{}  -> e
+      e@SC.Unquote{}    -> e
+      SC.DontCare e     -> SC.DontCare (lowerMeta e)
+
+instance LowerMeta (OpApp SC.Expr) where
+  lowerMeta (Ordinary e) = Ordinary $ lowerMeta e
+  lowerMeta (SyntaxBindingLambda r bs e) = SyntaxBindingLambda r (lowerMeta bs) (lowerMeta e)
+
+instance LowerMeta SC.LamBinding where
+  lowerMeta b@(SC.DomainFree _ _ _) = b
+  lowerMeta (SC.DomainFull tb)    = SC.DomainFull (lowerMeta tb)
+
+instance LowerMeta SC.TypedBindings where
+  lowerMeta (SC.TypedBindings r bs) = SC.TypedBindings r (lowerMeta bs)
+
+instance LowerMeta SC.TypedBinding where
+  lowerMeta (SC.TBind r ns e) = SC.TBind r ns (lowerMeta e)
+  lowerMeta (SC.TNoBind e)    = SC.TNoBind (lowerMeta e)
+
+instance LowerMeta SC.RHS where
+    lowerMeta (SC.RHS e)    = SC.RHS (lowerMeta e)
+    lowerMeta  SC.AbsurdRHS = SC.AbsurdRHS
+
+instance LowerMeta (Maybe SC.Expr) where
+    lowerMeta (Just e) = Just (lowerMeta e)
+    lowerMeta Nothing  = Nothing
+
+instance LowerMeta SC.Declaration where
+  lowerMeta = go where
+    go d = case d of
+      TypeSig rel n e1              -> TypeSig rel n (lowerMeta e1)
+      SC.Field n e1                 -> SC.Field n (lowerMeta e1)
+      FunClause lhs rhs whcl        -> FunClause lhs (lowerMeta rhs) (lowerMeta whcl)
+      SC.DataSig r ind n tel e1     -> SC.DataSig r ind n
+                                         (lowerMeta tel) (lowerMeta e1)
+      Data r ind n tel e1 cs        -> Data r ind n
+                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)
+      SC.RecordSig r n tel e1       -> SC.RecordSig r n
+                                         (lowerMeta tel) (lowerMeta e1)
+      SC.Record r n ind c tel e1 cs  -> SC.Record r n ind c
+                                         (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)
+      Infix _ _                     -> d
+      Syntax _ _                    -> d
+      SC.PatternSyn _ _ _ _         -> d
+      SC.Mutual r ds                -> SC.Mutual r (lowerMeta ds)
+      Abstract r ds                 -> Abstract r (lowerMeta ds)
+      Private r ds                  -> Private r (lowerMeta ds)
+      Postulate r sigs              -> Postulate r (lowerMeta sigs)
+      SC.Primitive r sigs           -> SC.Primitive r (lowerMeta sigs)
+      SC.Open _ _ _                 -> d
+      SC.Import _ _ _ _ _           -> d
+      SC.Pragma _                   -> d
+      ModuleMacro r n modapp op dir -> ModuleMacro r n
+                                         (lowerMeta modapp) op dir
+      SC.Module r qn tel ds         -> SC.Module r qn (lowerMeta tel) (lowerMeta ds)
+
+instance LowerMeta SC.ModuleApplication where
+  lowerMeta (SC.SectionApp r tel e) = SC.SectionApp r (lowerMeta tel) (lowerMeta e)
+  lowerMeta (SC.RecordModuleIFS r rec) = SC.RecordModuleIFS r rec
+
+instance LowerMeta SC.WhereClause where
+  lowerMeta SC.NoWhere		= SC.NoWhere
+  lowerMeta (SC.AnyWhere ds)	= SC.AnyWhere $ lowerMeta ds
+  lowerMeta (SC.SomeWhere m ds) = SC.SomeWhere m $ lowerMeta ds
+
+instance LowerMeta a => LowerMeta [a] where
+  lowerMeta as = List.map lowerMeta as
+
+instance LowerMeta a => LowerMeta (Arg a) where
+  lowerMeta aa = fmap lowerMeta aa
+
+instance LowerMeta a => LowerMeta (Named name a) where
+  lowerMeta aa = fmap lowerMeta aa
+
+
+preMeta   = SC.QuestionMark noRange Nothing
+preUscore = SC.Underscore   noRange Nothing
+
+-- | Parses and scope checks an expression (using the \"inside scope\"
+-- as the scope), performs the given command with the expression as
+-- input, and displays the result.
+
+parseAndDoAtToplevel
+  :: (SA.Expr -> TCM SA.Expr)
+     -- ^ The command to perform.
+  -> (Doc -> DisplayInfo)
+     -- ^ The name to use for the buffer displaying the output.
+  -> String
+     -- ^ The expression to parse.
+  -> CommandM ()
+parseAndDoAtToplevel cmd title s = do
+  e <- liftIO $ parse exprParser s
+  display_info . title =<<
+    liftCommandM (B.atTopLevel $ prettyA =<< cmd =<< concreteToAbstract_ e)
+
+-- | Tell to highlight the code using the given highlighting
+-- info (unless it is @Nothing@).
+
+tellToUpdateHighlighting
+  :: Maybe (HighlightingInfo, ModuleToSource) -> IO [Response]
+tellToUpdateHighlighting Nothing                = return []
+tellToUpdateHighlighting (Just (info, modFile)) =
+  return [Resp_HighlightingInfo info modFile]
+
+-- | Tells the Emacs mode to go to the first error position (if any).
+
+tellEmacsToJumpToError :: Range -> [Response]
+tellEmacsToJumpToError r =
+  case rStart r of
+    Nothing                                    -> []
+    Just (Pn { srcFile = Nothing })            -> []
+    Just (Pn { srcFile = Just f, posPos = p }) ->
+       [ Resp_JumpToError (filePath f) p ]
diff --git a/src/full/Agda/Interaction/MakeCase.hs b/src/full/Agda/Interaction/MakeCase.hs
--- a/src/full/Agda/Interaction/MakeCase.hs
+++ b/src/full/Agda/Interaction/MakeCase.hs
@@ -6,6 +6,7 @@
 import Control.Applicative
 import Control.Monad hiding (mapM, mapM_)
 import Control.Monad.State hiding (mapM, mapM_)
+import Data.Maybe
 import qualified Data.Map as Map
 import Data.Traversable
 import Data.List
@@ -32,6 +33,7 @@
 
 import Agda.Utils.Size
 import Agda.Utils.Permutation
+import qualified Agda.Utils.HashMap as HMap
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
@@ -52,7 +54,7 @@
 findClause m = do
   sig <- getImportedSignature
   let res = do
-        def <- Map.elems $ sigDefinitions sig
+        def <- HMap.elems $ sigDefinitions sig
         Function{funClauses = cs} <- [theDef def]
         c <- cs
         unless (rhsIsm $ clauseBody c) []
@@ -64,7 +66,7 @@
         , text "expected rhs to be meta var" <+> (text $ show m)
         , text "but could not find it in the signature"
         ]
-      reportSDoc "interaction.case" 20 $ vcat $ map (text . show) (Map.elems $ sigDefinitions sig)  -- you asked for it!
+      reportSDoc "interaction.case" 100 $ vcat $ map (text . show) (HMap.elems $ sigDefinitions sig)  -- you asked for it!
       typeError $ GenericError "Right hand side must be a single hole when making a case distinction."
     [(n,c)] | isPrefixOf extendlambdaname $ show $ A.qnameName n -> do
                                                Just (h , nh) <- Map.lookup n <$> getExtLambdaTele
@@ -74,7 +76,7 @@
   where
     rhsIsm (Bind b)   = rhsIsm $ unAbs b
     rhsIsm NoBody     = False
-    rhsIsm (Body e)   = case e of
+    rhsIsm (Body e)   = case ignoreSharing e of
       MetaV m' _  -> m == m'
       _           -> False
 
@@ -92,15 +94,46 @@
       , text "ps      =" <+> text (show ps)
       ]
     ]
-  var         <- deBruijnIndex =<< parseExprIn hole rng s
-  z           <- splitClauseWithAbs clause var
-  (case z of
-    Left err        -> typeError . GenericError . show =<< prettyTCM err
-    Right (Left cl) -> ((:[]) <$> makeAbsurdClause f cl)
-    Right (Right c) -> (mapM (makeAbstractClause f) c)) >>= (\ x -> return (casectxt , x))
+  vars <- mapM (\s -> deBruijnIndex =<< parseExprIn hole rng s) $ words s
+  (,) casectxt <$> split f vars clause
+  where
+  split :: QName -> [Nat] -> Clause -> TCM [A.Clause]
+  split f [] clause =
+    (:[]) <$> makeAbstractClause f (clauseToSplitClause clause)
+  split f (var : vars) clause = do
+    z <- splitClauseWithAbs clause var
+    case z of
+      Left err          -> typeError . GenericError . show =<<
+                             prettyTCM err
+      Right (Left cl)   -> (:[]) <$> makeAbsurdClause f cl
+      Right (Right cov)
+        | null vars -> mapM (makeAbstractClause f) $ splitClauses cov
+        | otherwise -> concat <$> do
+            mapM (\cl -> split f (mapMaybe (newVar cl) vars)
+                                 (splitClauseToClause cl))
+                 $ splitClauses cov
+    where
+    -- Note that the body of the created clause is the body of the
+    -- argument to split.
+    splitClauseToClause :: SplitClause -> Clause
+    splitClauseToClause c = Clause
+      { clauseRange = noRange
+      , clauseTel   = scTel c
+      , clausePerm  = scPerm c
+      , clausePats  = scPats c
+      , clauseBody  = clauseBody clause
+      }
 
+  -- Finds the new variable corresponding to an old one, if any.
+  newVar :: SplitClause -> Nat -> Maybe Nat
+  newVar c x = case ignoreSharing $ applySubst (scSubst c) (Var x []) of
+    Var x [] -> Just x
+    _        -> Nothing
+
+  -- NOTE: clauseToSplitClause moved to Coverage.hs
+
 makeAbsurdClause :: QName -> SplitClause -> TCM A.Clause
-makeAbsurdClause f (SClause tel perm ps _) = do
+makeAbsurdClause f (SClause tel perm ps _ _) = do
   reportSDoc "interaction.case" 10 $ vcat
     [ text "Interaction.MakeCase.makeCase: split clause:"
     , nest 2 $ vcat
@@ -113,17 +146,16 @@
   withCurrentModule (qnameModule f) $ do
     -- Normalise the dot patterns
     ps <- addCtxTel tel $ normalise ps
-    inContext [] $ reify $ NamedClause f $ Clause noRange tel perm ps NoBody
+    inContext [] $ reify $ QNamed f $ Clause noRange tel perm ps NoBody
 
+-- | Make a clause with a question mark as rhs.
 makeAbstractClause :: QName -> SplitClause -> TCM A.Clause
 makeAbstractClause f cl = do
   A.Clause lhs _ _ <- makeAbsurdClause f cl
   return $ mkClause lhs
   where
     mkClause :: A.LHS -> A.Clause
-    mkClause lhs = A.Clause lhs (A.RHS $ A.QuestionMark info) []
-      where
-        info = A.MetaInfo noRange emptyScopeInfo Nothing
+    mkClause lhs = A.Clause lhs (A.RHS $ A.QuestionMark A.emptyMetaInfo) []
 
 deBruijnIndex :: A.Expr -> TCM Nat
 deBruijnIndex e = do
@@ -131,7 +163,7 @@
 --            Context.wakeIrrelevantVars $
             applyRelevanceToContext Irrelevant $
               inferExpr e
-  case v of
+  case ignoreSharing v of
     Var n _ -> return n
     _       -> typeError . GenericError . show =<< (fsep $
                 pwords "The scrutinee of a case distinction must be a variable,"
diff --git a/src/full/Agda/Interaction/Options.hs b/src/full/Agda/Interaction/Options.hs
--- a/src/full/Agda/Interaction/Options.hs
+++ b/src/full/Agda/Interaction/Options.hs
@@ -11,6 +11,7 @@
     , parsePragmaOptions
     , parsePluginOptions
     , defaultOptions
+    , defaultInteractionOptions
     , defaultVerbosity
     , standardOptions_
     , unsafePragmaOptions
@@ -49,24 +50,27 @@
 
 data CommandLineOptions =
     Options { optProgramName          :: String
-	    , optInputFile            :: Maybe FilePath
-	    , optIncludeDirs          :: Either [FilePath] [AbsolutePath]
+            , optInputFile            :: Maybe FilePath
+            , optIncludeDirs          :: Either [FilePath] [AbsolutePath]
               -- ^ 'Left' is used temporarily, before the paths have
               -- been made absolute. An empty 'Left' list is
               -- interpreted as @["."]@ (see
               -- 'Agda.TypeChecking.Monad.Options.makeIncludeDirsAbsolute').
-	    , optShowVersion          :: Bool
-	    , optShowHelp             :: Bool
-	    , optInteractive          :: Bool
-	    , optRunTests             :: Bool
-	    , optCompile              :: Bool
-	    , optEpicCompile          :: Bool
-	    , optJSCompile            :: Bool
+            , optShowVersion          :: Bool
+            , optShowHelp             :: Bool
+            , optInteractive          :: Bool
+            , optRunTests             :: Bool
+            , optGHCiInteraction      :: Bool
+            , optCompile              :: Bool
+            , optEpicCompile          :: Bool
+            , optJSCompile            :: Bool
             , optCompileDir           :: Maybe FilePath
               -- ^ In the absence of a path the project root is used.
 	    , optGenerateVimFile      :: Bool
+            , optGenerateLaTeX        :: Bool
 	    , optGenerateHTML         :: Bool
 	    , optDependencyGraph      :: Maybe FilePath
+	    , optLaTeXDir             :: FilePath
 	    , optHTMLDir              :: FilePath
 	    , optCSSFile              :: Maybe FilePath
 	    , optIgnoreInterfaces     :: Bool
@@ -82,6 +86,7 @@
 
 data PragmaOptions = PragmaOptions
   { optShowImplicit              :: Bool
+  , optShowIrrelevant            :: Bool
   , optVerbose                   :: Verbosity
   , optProofIrrelevance          :: Bool
   , optAllowUnsolved             :: Bool
@@ -97,6 +102,7 @@
   , optIrrelevantProjections     :: Bool
   , optExperimentalIrrelevance   :: Bool  -- ^ irrelevant levels, irrelevant data matching
   , optWithoutK                  :: Bool
+  , optCopatterns                :: Bool  -- ^ definitions by copattern matching
   }
   deriving Show
 
@@ -112,25 +118,38 @@
 mapFlag :: (String -> String) -> OptDescr a -> OptDescr a
 mapFlag f (Option _ long arg descr) = Option [] (map f long) arg descr
 
+-- | For batch usage.
 defaultVerbosity :: Verbosity
 defaultVerbosity = Trie.singleton [] 1
 
+-- | For interactive usage, do not print any debug messages
+--   by default.
+defaultInteractionVerbosity :: Verbosity
+defaultInteractionVerbosity = Trie.singleton [] 0
+
+defaultInteractionOptions :: PragmaOptions
+defaultInteractionOptions = defaultPragmaOptions
+  { optVerbose = defaultInteractionVerbosity }
+
 defaultOptions :: CommandLineOptions
 defaultOptions =
     Options { optProgramName          = "agda"
-	    , optInputFile            = Nothing
-	    , optIncludeDirs          = Left []
-	    , optShowVersion          = False
-	    , optShowHelp             = False
-	    , optInteractive          = False
-	    , optRunTests             = False
-	    , optCompile              = False
-	    , optEpicCompile          = False
-	    , optJSCompile            = False
+            , optInputFile            = Nothing
+            , optIncludeDirs          = Left []
+            , optShowVersion          = False
+            , optShowHelp             = False
+            , optInteractive          = False
+            , optRunTests             = False
+            , optGHCiInteraction      = False
+            , optCompile              = False
+            , optEpicCompile          = False
+            , optJSCompile            = False
             , optCompileDir           = Nothing
 	    , optGenerateVimFile      = False
+            , optGenerateLaTeX        = False
 	    , optGenerateHTML         = False
 	    , optDependencyGraph      = Nothing
+	    , optLaTeXDir             = defaultLaTeXDir
 	    , optHTMLDir              = defaultHTMLDir
 	    , optCSSFile              = Nothing
 	    , optIgnoreInterfaces     = False
@@ -139,11 +158,12 @@
             , optPragmaOptions        = defaultPragmaOptions
             , optEpicFlags            = []
             , optSafe                 = False
-	    }
+            }
 
 defaultPragmaOptions :: PragmaOptions
 defaultPragmaOptions = PragmaOptions
   { optShowImplicit              = False
+  , optShowIrrelevant            = False
   , optVerbose                   = defaultVerbosity
   , optProofIrrelevance          = False
   , optExperimentalIrrelevance   = False
@@ -159,8 +179,13 @@
   , optGuardingTypeConstructors  = False
   , optUniversePolymorphism      = True
   , optWithoutK                  = False
+  , optCopatterns                = False
   }
 
+-- | The default output directory for LaTeX.
+
+defaultLaTeXDir = "latex"
+
 -- | The default output directory for HTML.
 
 defaultHTMLDir = "html"
@@ -181,16 +206,20 @@
 checkOpts opts
   | not (atMostOne [optAllowUnsolved . p, optCompile]) = Left
       "Unsolved meta variables are not allowed when compiling.\n"
-  | not (atMostOne [optInteractive, optCompile, optEpicCompile, optJSCompile]) =
-      Left "Choose at most one: compiler/interactive mode.\n"
-  | not (atMostOne [optGenerateHTML, optInteractive]) =
-      Left "Choose at most one: HTML generator or interactive mode.\n"
-  | not (atMostOne [isJust . optDependencyGraph, optInteractive]) =
-      Left "Choose at most one: Dependency graph generator or interactive mode.\n"
+  | not (atMostOne [optGHCiInteraction, isJust . optInputFile]) =
+      Left "Choose at most one: input file or --interaction.\n"
+  | not (atMostOne $ interactive ++ [optCompile, optEpicCompile, optJSCompile]) =
+      Left "Choose at most one: compilers/--interactive/--interaction.\n"
+  | not (atMostOne $ interactive ++ [optGenerateHTML]) =
+      Left "Choose at most one: --html/--interactive/--interaction.\n"
+  | not (atMostOne $ interactive ++ [isJust . optDependencyGraph]) =
+      Left "Choose at most one: --dependency-graph/--interactive/--interaction.\n"
   | not (atMostOne [ optUniversePolymorphism . p
                    , not . optUniverseCheck . p
                    ]) =
       Left "Cannot have both universe polymorphism and type in type.\n"
+  | not (atMostOne $ interactive ++ [optGenerateLaTeX]) =
+      Left "Choose at most one: --latex/--interactive/--interaction.\n"
   | (not . null . optEpicFlags $ opts)
       && not (optEpicCompile opts) =
       Left "Cannot set Epic flags without using the Epic backend.\n"
@@ -200,6 +229,8 @@
 
   p = optPragmaOptions
 
+  interactive = [optInteractive, optGHCiInteraction]
+
 -- Check for unsafe pramas. Gives a list of used unsafe flags.
 
 unsafePragmaOptions :: PragmaOptions -> [String]
@@ -212,7 +243,8 @@
   [ "--sized-types"                              | optSizedTypes opts                ] ++
   [ "--injective-type-constructors"              | optInjectiveTypeConstructors opts ] ++
   [ "--guardedness-preserving-type-constructors" | optGuardingTypeConstructors opts  ] ++
-  [ "--experimental-irrelevance"                 | optExperimentalIrrelevance opts   ]
+  [ "--experimental-irrelevance"                 | optExperimentalIrrelevance opts   ] ++
+  [ "--copatterns"                               | optCopatterns opts   ]
 
 -- The default pragma options should be considered safe
 
@@ -220,15 +252,15 @@
 defaultPragmaOptionsSafe
     | null unsafe = return True
     | otherwise   = do putStrLn $ "Following pragmas are default but not safe: "
-                                  ++ intercalate ", " unsafe
+                                        ++ intercalate ", " unsafe
                        return False
   where unsafe = unsafePragmaOptions defaultPragmaOptions
 
 inputFlag :: FilePath -> Flag CommandLineOptions
 inputFlag f o =
     case optInputFile o of
-	Nothing  -> return $ o { optInputFile = Just f }
-	Just _	 -> throwError "only one input file allowed"
+        Nothing  -> return $ o { optInputFile = Just f }
+        Just _   -> throwError "only one input file allowed"
 
 versionFlag                  o = return $ o { optShowVersion               = True  }
 helpFlag                     o = return $ o { optShowHelp                  = True  }
@@ -239,8 +271,12 @@
 ignoreInterfacesFlag         o = return $ o { optIgnoreInterfaces          = True  }
 allowUnsolvedFlag            o = return $ o { optAllowUnsolved             = True  }
 showImplicitFlag             o = return $ o { optShowImplicit              = True  }
+showIrrelevantFlag           o = return $ o { optShowIrrelevant            = True  }
 runTestsFlag                 o = return $ o { optRunTests                  = True  }
+ghciInteractionFlag          o = return $ o { optGHCiInteraction           = True  }
 vimFlag                      o = return $ o { optGenerateVimFile           = True  }
+latexFlag                    o = return $ o { optGenerateLaTeX             = True  }
+latexDirFlag               d o = return $ o { optLaTeXDir                  = d     }
 noPositivityFlag             o = return $ o { optDisablePositivity         = True  }
 dontTerminationCheckFlag     o = return $ o { optTerminationCheck          = False }
 dontCompletenessCheckFlag    o = return $ o { optCompletenessCheck         = False }
@@ -253,11 +289,12 @@
 noUniversePolymorphismFlag   o = return $ o { optUniversePolymorphism      = False }
 noForcingFlag                o = return $ o { optForcing                   = False }
 withoutKFlag                 o = return $ o { optWithoutK                  = True  }
+copatternsFlag               o = return $ o { optCopatterns                = True  }
 
 interactiveFlag  o = return $ o { optInteractive    = True
                                 , optPragmaOptions  = (optPragmaOptions o)
                                                         { optAllowUnsolved = True }
-		                }
+                                }
 compileFlag      o = return $ o { optCompile    = True }
 compileEpicFlag  o = return $ o { optEpicCompile = True}
 compileJSFlag    o = return $ o { optJSCompile = True}
@@ -274,8 +311,8 @@
   where ds = either id (const []) $ optIncludeDirs o
 
 verboseFlag s o =
-    do	(k,n) <- parseVerbose s
-	return $ o { optVerbose = Trie.insert k n $ optVerbose o }
+    do  (k,n) <- parseVerbose s
+        return $ o { optVerbose = Trie.insert k n $ optVerbose o }
   where
     parseVerbose s = case wordsBy (`elem` ":.") s of
       []  -> usage
@@ -293,14 +330,16 @@
 integerArgument :: String -> String -> Either String Int
 integerArgument flag s =
     readM s `catchError` \_ ->
-	throwError $ "option '" ++ flag ++ "' requires an integer argument"
+        throwError $ "option '" ++ flag ++ "' requires an integer argument"
 
 standardOptions :: [OptDescr (Flag CommandLineOptions)]
 standardOptions =
-    [ Option ['V']  ["version"]	(NoArg versionFlag) "show version number"
-    , Option ['?']  ["help"]	(NoArg helpFlag)    "show this help"
+    [ Option ['V']  ["version"] (NoArg versionFlag) "show version number"
+    , Option ['?']  ["help"]    (NoArg helpFlag)    "show this help"
     , Option ['I']  ["interactive"] (NoArg interactiveFlag)
-		    "start in interactive mode"
+                    "start in interactive mode"
+    , Option []     ["interaction"] (NoArg ghciInteractionFlag)
+                    "for use with the Emacs mode"
     , Option ['c']  ["compile"] (NoArg compileFlag)
                     "compile program using the MAlonzo backend (experimental)"
     , Option []     ["epic"] (NoArg compileEpicFlag) "compile program using the Epic backend"
@@ -315,6 +354,11 @@
 		    "run internal test suite"
     , Option []	    ["vim"] (NoArg vimFlag)
 		    "generate Vim highlighting files"
+    , Option []	    ["latex"] (NoArg latexFlag)
+                    "generate LaTeX with highlighted source code"
+    , Option []	    ["latex-dir"] (ReqArg latexDirFlag "DIR")
+                    ("directory in which LaTeX files are placed (default: " ++
+                     defaultLaTeXDir ++ ")")
     , Option []	    ["html"] (NoArg htmlFlag)
 		    "generate HTML files with highlighted source code"
     , Option []	    ["dependency-graph"] (ReqArg dependencyGraphFlag "FILE")
@@ -343,6 +387,8 @@
 pragmaOptions =
     [ Option []	    ["show-implicit"] (NoArg showImplicitFlag)
 		    "show implicit arguments when printing"
+    , Option []	    ["show-irrelevant"] (NoArg showIrrelevantFlag)
+		    "show irrelevant arguments when printing"
     , Option ['v']  ["verbose"]	(ReqArg verboseFlag "N")
                     "set verbosity level to N"
     -- , Option []	    ["proof-irrelevance"] (NoArg proofIrrelevanceFlag)
@@ -375,6 +421,8 @@
                     "enable potentially unsound irrelevance features (irrelevant levels, irrelevant data matching)"
     , Option []     ["without-K"] (NoArg withoutKFlag)
                     "disable the K rule (maybe)"
+    , Option []     ["copatterns"] (NoArg copatternsFlag)
+                    "enable definitions by copattern matching"
     ]
 
 -- | Used for printing usage info.
@@ -427,7 +475,7 @@
     where
 	header progName = unlines [ "Agda"
 				  , ""
-				  , "Usage: " ++ progName ++ " [OPTIONS...] FILE"
+				  , "Usage: " ++ progName ++ " [OPTIONS...] [FILE]"
 				  ]
 
         pluginMsg (name, help, inherited, opts)
diff --git a/src/full/Agda/Interaction/Response.hs b/src/full/Agda/Interaction/Response.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/Response.hs
@@ -0,0 +1,115 @@
+------------------------------------------------------------------------
+-- | Data type for all interactive responses
+------------------------------------------------------------------------
+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-}
+
+module Agda.Interaction.Response
+  ( Response (..)
+  , DisplayInfo (..)
+  , Status (..)
+  , GiveResult (..)
+  , InteractionOutputCallback
+  , defaultInteractionOutputCallback
+  ) where
+
+import Agda.Interaction.Highlighting.Precise
+import Agda.Interaction.FindFile (ModuleToSource)
+--import Agda.Interaction.MakeCase
+import Agda.TypeChecking.Monad.Base
+import Agda.Syntax.Concrete (Expr)
+import Agda.Utils.Pretty
+
+import Data.Int
+
+#include "../undefined.h"
+import Agda.Utils.Impossible
+
+-- | Responses for any interactive interface
+--
+--   Note that the response is given in pieces and incrementally,
+--   so the user can have timely response even during long computations.
+
+data Response
+    = Resp_HighlightingInfo HighlightingInfo ModuleToSource
+    | Resp_Status Status
+    | Resp_JumpToError FilePath Int32
+    | Resp_InteractionPoints [InteractionId]
+    | Resp_GiveAction InteractionId GiveResult
+    | Resp_MakeCaseAction [String]
+    | Resp_MakeCase String [String]
+    | Resp_SolveAll [(InteractionId, Expr)]
+    | Resp_DisplayInfo DisplayInfo
+    | Resp_RunningInfo String
+    | Resp_ClearRunningInfo
+    | Resp_ClearHighlighting
+
+-- | Info to display at the end of an interactive command
+
+data DisplayInfo
+    = Info_CompilationOk
+    | Info_Constraints String
+    | Info_AllGoals String
+    | Info_Error String
+        -- ^ When an error message is displayed this constructor should be
+        -- used, if appropriate.
+    | Info_Intro Doc
+        -- ^ 'Info_Intro' denotes two different types of errors
+        --   TODO: split these into separate constructors
+    | Info_Auto String
+        -- ^ 'Info_Auto' denotes either an error or a success (when 'Resp_GiveAction' is present)
+        --   TODO: split these into separate constructors
+    | Info_ModuleContents Doc
+    | Info_NormalForm Doc
+    | Info_GoalType Doc
+    | Info_CurrentGoal Doc
+    | Info_InferredType Doc
+    | Info_Context Doc
+        deriving Show
+
+-- | Status information.
+
+data Status = Status
+  { sShowImplicitArguments :: Bool
+    -- ^ Are implicit arguments displayed?
+  , sChecked               :: Bool
+    -- ^ Has the module been successfully type checked?
+  }
+
+-- | Give action result
+--
+--   Comment derived from agda2-mode.el
+--
+--   If 'GiveResult' is 'Give_String s', then the goal is replaced by 's',
+--   and otherwise the text inside the goal is retained (parenthesised
+--   if 'GiveResult' is 'Give_Paren').
+
+data GiveResult
+    = Give_String String
+    | Give_Paren
+    | Give_NoParen
+
+-- | Callback fuction to call when there is a response
+--   to give to the interactive frontend.
+--
+--   Note that the response is given in pieces and incrementally,
+--   so the user can have timely response even during long computations.
+--
+--   Typical 'InteractionOutputCallback' functions:
+--
+--    * Convert the response into a 'String' representation and
+--      print it on standard output
+--      (suitable for inter-process communication).
+--
+--    * Put the response into a mutable variable stored in the
+--      closure of the 'InteractionOutputCallback' function.
+--      (suitable for intra-process communication).
+
+type InteractionOutputCallback = Response -> TCM ()
+
+-- | The default 'InteractionOutputCallback' function
+--   is set to @__@@IMPOSSIBLE__@ because in this way it is easier to
+--   recognize that some response is lost due to an uninitialized
+--   'InteractionOutputCallback' function.
+
+defaultInteractionOutputCallback :: InteractionOutputCallback
+defaultInteractionOutputCallback = __IMPOSSIBLE__
diff --git a/src/full/Agda/Interaction/Response.hs-boot b/src/full/Agda/Interaction/Response.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/Response.hs-boot
@@ -0,0 +1,11 @@
+module Agda.Interaction.Response
+  ( InteractionOutputCallback
+  , defaultInteractionOutputCallback
+  ) where
+
+import {-# SOURCE #-} Agda.TypeChecking.Monad.Base
+
+data Response
+
+type InteractionOutputCallback = Response -> TCM ()
+defaultInteractionOutputCallback :: InteractionOutputCallback
diff --git a/src/full/Agda/Main.hs b/src/full/Agda/Main.hs
--- a/src/full/Agda/Main.hs
+++ b/src/full/Agda/Main.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE PatternGuards #-}
 
 {-| Agda main module.
 -}
@@ -16,8 +17,6 @@
 import System.Environment
 import System.Exit
 import System.FilePath
-import qualified Agda.Utils.IO.Locale as LocIO
-import System.Time
 
 import Agda.Syntax.Position
 import Agda.Syntax.Parser
@@ -28,16 +27,16 @@
 import Agda.Syntax.Translation.AbstractToConcrete
 import Agda.Syntax.Translation.InternalToAbstract
 import Agda.Syntax.Abstract.Name
-import Agda.Syntax.Strict
 import Agda.Syntax.Scope.Base
 
 import Agda.Interaction.Exceptions
 import Agda.Interaction.CommandLine.CommandLine
 import Agda.Interaction.Options
 import Agda.Interaction.Monad
-import Agda.Interaction.GhciTop ()      -- to make sure it compiles
+import Agda.Interaction.GhcTop (mimicGHCi)
 import qualified Agda.Interaction.Imports as Imp
 import qualified Agda.Interaction.Highlighting.Dot as Dot
+import qualified Agda.Interaction.Highlighting.LaTeX as LaTeX
 import Agda.Interaction.Highlighting.HTML
 
 import Agda.TypeChecker
@@ -82,6 +81,7 @@
           unless ok exitFailure
       | isNothing (optInputFile opts)
           && not (optInteractive opts)
+          && not (optGHCiInteraction opts)
                             -> liftIO printUsage
       | otherwise           -> do
           setCommandLineOptions opts
@@ -89,18 +89,23 @@
   where
     checkFile :: TCM ()
     checkFile = do
-      i       <- optInteractive <$> liftTCM commandLineOptions
-      compile <- optCompile     <$> liftTCM commandLineOptions
-      epic    <- optEpicCompile <$> liftTCM commandLineOptions
-      js      <- optJSCompile   <$> liftTCM commandLineOptions
-      when i $ liftIO $ LocIO.putStr splashScreen
+      i       <- optInteractive     <$> liftTCM commandLineOptions
+      ghci    <- optGHCiInteraction <$> liftTCM commandLineOptions
+      compile <- optCompile         <$> liftTCM commandLineOptions
+      epic    <- optEpicCompile     <$> liftTCM commandLineOptions
+      js      <- optJSCompile       <$> liftTCM commandLineOptions
+      when i $ liftIO $ putStr splashScreen
       let failIfNoInt (Just i) = return i
           -- The allowed combinations of command-line
           -- options should rule out Nothing here.
           failIfNoInt Nothing  = __IMPOSSIBLE__
 
+          failIfInt x Nothing  = x
+          failIfInt _ (Just _) = __IMPOSSIBLE__
+
           interaction :: TCM (Maybe Interface) -> TCM ()
           interaction | i         = runIM . interactionLoop
+                      | ghci      = (failIfInt mimicGHCi =<<)
                       | compile   = (MAlonzo.compilerMain =<<) . (failIfNoInt =<<)
                       | epic      = (Epic.compilerMain    =<<) . (failIfNoInt =<<)
                       | js        = (JS.compilerMain      =<<) . (failIfNoInt =<<)
@@ -115,12 +120,12 @@
           unsolvedOK <- optAllowUnsolved <$> pragmaOptions
 
           result <- case mw of
-            Just (Imp.Warnings [] [] []) -> __IMPOSSIBLE__
-            Just (Imp.Warnings _ unsolved@(_:_) _)
+            Just (Warnings [] [] []) -> __IMPOSSIBLE__
+            Just (Warnings _ unsolved@(_:_) _)
               | not unsolvedOK -> typeError $ UnsolvedMetas unsolved
-            Just (Imp.Warnings _ _ unsolved@(_:_))
+            Just (Warnings _ _ unsolved@(_:_))
               | not unsolvedOK -> typeError $ UnsolvedConstraints unsolved
-            Just (Imp.Warnings termErrs@(_:_) _ _) ->
+            Just (Warnings termErrs@(_:_) _ _) ->
               typeError $ TerminationCheckFailed termErrs
             Just _  -> return Nothing
             Nothing -> return $ Just i
@@ -131,40 +136,39 @@
           whenM (isJust . optDependencyGraph <$> commandLineOptions) $
             Dot.generateDot $ i
 
+          whenM (optGenerateLaTeX <$> commandLineOptions) $
+            LaTeX.generateLaTeX (iModuleName i) (iHighlighting i)
+
           return result
 
 -- | Print usage information.
 printUsage :: IO ()
 printUsage = do
   progName <- getProgName
-  LocIO.putStr $ usage standardOptions_ [] progName
+  putStr $ usage standardOptions_ [] progName
 
 -- | Print version information.
 printVersion :: IO ()
 printVersion =
-  LocIO.putStrLn $ "Agda version " ++ version
+  putStrLn $ "Agda version " ++ version
 
 -- | What to do for bad options.
 optionError :: String -> IO ()
 optionError err = do
-  LocIO.putStrLn $ "Error: " ++ err
+  putStrLn $ "Error: " ++ err
   printUsage
   exitFailure
 
 -- | Main
 main :: IO ()
 main = do
-#if MIN_VERSION_base(4,2,0)
-    -- Ensure that UTF-8 is used for functions in Agda.Utils.IO.Locale
-    IO.hSetEncoding IO.stdout IO.utf8
-#endif
     r <- runTCM $ runAgda `catchError` \err -> do
       s <- prettyError err
-      liftIO $ LocIO.putStrLn s
+      liftIO $ putStrLn s
       throwError err
     case r of
       Right _ -> exitSuccess
       Left _  -> exitFailure
   `catchImpossible` \e -> do
-    LocIO.putStr $ show e
+    putStr $ show e
     exitFailure
diff --git a/src/full/Agda/Syntax/Abstract.hs b/src/full/Agda/Syntax/Abstract.hs
--- a/src/full/Agda/Syntax/Abstract.hs
+++ b/src/full/Agda/Syntax/Abstract.hs
@@ -1,4 +1,7 @@
-{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable, CPP #-}
+{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, DeriveFoldable,
+             DeriveTraversable, CPP, TemplateHaskell,
+             MultiParamTypeClasses, FlexibleInstances,
+             TypeSynonymInstances #-}
 {-| The abstract syntax. This is what you get after desugaring and scope
     analysis of the concrete syntax. The type checker works on abstract syntax,
     producing internal syntax ("Agda.Syntax.Internal").
@@ -8,14 +11,14 @@
     , module Agda.Syntax.Abstract.Name
     ) where
 
-import Prelude hiding (foldr)
+import Prelude hiding (foldl, foldr)
 import Control.Applicative
 import Data.Sequence (Seq, (<|), (><))
 import qualified Data.Sequence as Seq
 import Data.Foldable as Fold
 import Data.Traversable
 import Data.Map (Map)
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 
 import qualified Agda.Syntax.Concrete as C
 import Agda.Syntax.Concrete.Pretty ()
@@ -27,6 +30,7 @@
 import Agda.Syntax.Literal
 import Agda.Syntax.Scope.Base
 
+import Agda.Utils.Geniplate
 import Agda.Utils.Tuple
 
 #include "../undefined.h"
@@ -34,7 +38,7 @@
 
 data Expr
         = Var  Name			     -- ^ Bound variables
-        | Def  QName			     -- ^ Constants (i.e. axioms, functions, and datatypes)
+        | Def  QName			     -- ^ Constants (i.e. axioms, functions, projections, and datatypes)
         | Con  AmbiguousQName		     -- ^ Constructors
 	| Lit Literal			     -- ^ Literals
 	| QuestionMark MetaInfo		     -- ^ meta variable for interaction
@@ -46,42 +50,43 @@
         | ExtendedLam ExprInfo DefInfo QName [Clause]
         | Pi   ExprInfo Telescope Expr	     -- ^
 	| Fun  ExprInfo (Arg Expr) Expr	     -- ^ independent function space
-        | Set  ExprInfo Nat		     -- ^ Set, Set1, Set2, ...
+        | Set  ExprInfo Integer              -- ^ Set, Set1, Set2, ...
         | Prop ExprInfo			     -- ^
         | Let  ExprInfo [LetBinding] Expr    -- ^
         | ETel Telescope                     -- ^ only used when printing telescopes
 	| Rec  ExprInfo [(C.Name, Expr)]     -- ^ record construction
 	| RecUpdate ExprInfo Expr [(C.Name, Expr)]     -- ^ record update
 	| ScopedExpr ScopeInfo Expr	     -- ^ scope annotation
-        | QuoteGoal ExprInfo Name Expr       -- ^
+        | QuoteGoal ExprInfo Name Expr       -- ^ binds @Name@ to current type in @Expr@
         | Quote ExprInfo                     -- ^
         | QuoteTerm ExprInfo                 -- ^
         | Unquote ExprInfo                   -- ^ The splicing construct: unquote ...
         | DontCare Expr                      -- ^ for printing DontCare from Syntax.Internal
-  deriving (Typeable, Data, Show)
+        | PatternSyn QName
+  deriving (Typeable, Show)
 
 data Declaration
 	= Axiom      DefInfo Relevance QName Expr          -- ^ postulate
 	| Field      DefInfo QName (Arg Expr)		   -- ^ record field
 	| Primitive  DefInfo QName Expr			   -- ^ primitive function
-	| Mutual     DeclInfo [Declaration]                -- ^ a bunch of mutually recursive definitions
+	| Mutual     MutualInfo [Declaration]              -- ^ a bunch of mutually recursive definitions
 	| Section    ModuleInfo ModuleName [TypedBindings] [Declaration]
 	| Apply	     ModuleInfo ModuleName ModuleApplication (Map QName QName) (Map ModuleName ModuleName)
 	| Import     ModuleInfo ModuleName
 	| Pragma     Range	Pragma
         | Open       ModuleInfo ModuleName
           -- ^ only retained for highlighting purposes
-        | FunDef     DefInfo QName [Clause]
+        | FunDef     DefInfo QName Delayed [Clause] -- ^ sequence of function clauses
         | DataSig    DefInfo QName Telescope Expr -- ^ lone data signature
             -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.
         | DataDef    DefInfo QName [LamBinding] [Constructor]
             -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.
         | RecSig     DefInfo QName Telescope Expr -- ^ lone record signature
-        | RecDef     DefInfo QName (Maybe QName) [LamBinding] Expr [Declaration]
+        | RecDef     DefInfo QName (Maybe Induction) (Maybe QName) [LamBinding] Expr [Declaration]
             -- ^ The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,
             --   and the optional name is the constructor's name.
 	| ScopedDecl ScopeInfo [Declaration]  -- ^ scope annotation
-        deriving (Typeable, Data, Show)
+        deriving (Typeable, Show)
 
 class GetDefInfo a where
   getDefInfo :: a -> Maybe DefInfo
@@ -91,16 +96,16 @@
   getDefInfo (Field i _ _) = Just i
   getDefInfo (Primitive i _ _) = Just i
   getDefInfo (ScopedDecl _ (d:_)) = getDefInfo d
-  getDefInfo (FunDef i _ _) = Just i
+  getDefInfo (FunDef i _ _ _) = Just i
   getDefInfo (DataSig i _ _ _) = Just i
   getDefInfo (DataDef i _ _ _) = Just i
   getDefInfo (RecSig i _ _ _) = Just i
-  getDefInfo (RecDef i _ _ _ _ _) = Just i
+  getDefInfo (RecDef i _ _ _ _ _ _) = Just i
   getDefInfo _ = Nothing
 
 data ModuleApplication = SectionApp [TypedBindings] ModuleName [NamedArg Expr]
                        | RecordModuleIFS ModuleName
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 data Pragma = OptionsPragma [String]
 	    | BuiltinPragma String Expr
@@ -111,27 +116,29 @@
             | CompiledJSPragma QName String
             | StaticPragma QName
             | EtaPragma QName
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 data LetBinding = LetBind LetInfo Relevance Name Expr Expr    -- ^ LetBind info rel name type defn
+                | LetPatBind LetInfo Pattern Expr -- ^ irrefutable pattern binding
                 | LetApply ModuleInfo ModuleName ModuleApplication (Map QName QName) (Map ModuleName ModuleName)
                 | LetOpen ModuleInfo ModuleName     -- ^ only for highlighting and abstractToConcrete
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 -- | Only 'Axiom's.
 type TypeSignature  = Declaration
 type Constructor    = TypeSignature
+type Field          = TypeSignature
 
 -- | A lambda binding is either domain free or typed.
 data LamBinding
 	= DomainFree Hiding Relevance Name  -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@
 	| DomainFull TypedBindings  -- ^ . @(xs:e)@ or @{xs:e}@
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 -- | Typed bindings with hiding information.
 data TypedBindings = TypedBindings Range (Arg TypedBinding)
 	    -- ^ . @(xs : e)@ or @{xs : e}@
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 -- | A typed binding. Appears in dependent function spaces, typed lambdas, and
 --   telescopes. I might be tempting to simplify this to only bind a single
@@ -141,15 +148,19 @@
 --   you have to.
 data TypedBinding = TBind Range [Name] Expr
 		  | TNoBind Expr
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 type Telescope	= [TypedBindings]
 
 -- | We could throw away @where@ clauses at this point and translate them to
 --   @let@. It's not obvious how to remember that the @let@ was really a
 --   @where@ clause though, so for the time being we keep it here.
-data Clause	= Clause LHS RHS [Declaration]
-  deriving (Typeable, Data, Show)
+data Clause	= Clause
+  { clauseLHS        :: LHS
+  , clauseRHS        :: RHS
+  , clauseWhereDecls :: [Declaration]
+  } deriving (Typeable, Show)
+
 data RHS	= RHS Expr
 		| AbsurdRHS
 		| WithRHS QName [Expr] [Clause] -- ^ The 'QName' is the name of the with function.
@@ -157,24 +168,113 @@
                     -- ^ The 'QName's are the names of the generated with functions.
                     --   One for each 'Expr'.
                     --   The RHS shouldn't be another RewriteRHS
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
-data LHS	= LHS LHSInfo QName [NamedArg Pattern] [Pattern]
-  deriving (Typeable, Data, Show)
+-- | The lhs of a clause in spine view (inside-out).
+--   Projection patterns are contained in @spLhsPats@,
+--   represented as @DefP d []@.
+data SpineLHS = SpineLHS
+  { spLhsInfo     :: LHSInfo             -- ^ Range.
+  , spLhsDefName  :: QName               -- ^ Name of function we are defining.
+  , spLhsPats     :: [NamedArg Pattern]  -- ^ Function parameters (patterns).
+  , spLhsWithPats :: [Pattern]           -- ^ @with@ patterns (after @|@).
+  }
+  deriving (Typeable, Show)
 
+-- | The lhs of a clause in projection-application view (outside-in).
+--   Projection patters are represented as 'LHSProj's.
+data LHS = LHS
+  { lhsInfo     :: LHSInfo               -- ^ Range.
+  , lhsCore     :: LHSCore               -- ^ Copatterns.
+  , lhsWithPats :: [Pattern]             -- ^ @with@ patterns (after @|@).
+  }
+  deriving (Typeable, Show)
+
+-- | The lhs minus @with@-patterns in projection-application view.
+--   Parameterised over the type @e@ of dot patterns.
+data LHSCore' e
+    -- | The head applied to ordinary patterns.
+  = LHSHead  { lhsDefName  :: QName                    -- ^ Head @f@.
+             , lhsPats     :: [NamedArg (Pattern' e)]  -- ^ Applied to patterns @ps@.
+             }
+    -- | Projection
+  | LHSProj  { lhsDestructor :: QName
+               -- ^ Record projection identifier.
+             , lhsPatsLeft   :: [NamedArg (Pattern' e)]
+               -- ^ Indices of the projection.
+               --   Currently none @[]@, since we do not have indexed records.
+             , lhsFocus      :: NamedArg (LHSCore' e)
+               -- ^ Main branch.
+             , lhsPatsRight  :: [NamedArg (Pattern' e)]
+               -- ^ Further applied to patterns.
+             }
+  deriving (Typeable, Show, Functor, Foldable, Traversable)
+
+type LHSCore = LHSCore' Expr
+
+lhsToSpine :: LHS -> SpineLHS
+lhsToSpine (LHS i core wps) = SpineLHS i f ps wps
+  where QNamed f ps = lhsCoreToSpine core
+
+lhsCoreToSpine :: LHSCore' e -> QNamed [NamedArg (Pattern' e)]
+lhsCoreToSpine (LHSHead f ps) = QNamed f ps
+lhsCoreToSpine (LHSProj d ps1 h ps2) = (++ (p : ps2)) <$> lhsCoreToSpine (namedArg h)
+  where p = updateNamedArg (const $ DefP i d ps1) h
+        i = PatRange noRange
+
+-- spineToLhsCore ::
+
+-- | Used for checking pattern linearity.
+lhsCoreAllPatterns :: LHSCore' e -> [Pattern' e]
+lhsCoreAllPatterns = map namedArg . qnamed . lhsCoreToSpine
+{- OLD code, dumps projection patterns, superfluous
+lhsCoreAllPatterns (LHSHead f ps) = map namedArg ps
+lhsCoreAllPatterns (LHSProj d ps1 l ps2) =
+  map namedArg ps1 ++
+  lhsCoreAllPatterns (namedArg l) ++
+  map namedArg ps2
+-}
+
+-- | Used in AbstractToConcrete.
+lhsCoreToPattern :: LHSCore -> Pattern
+lhsCoreToPattern lc =
+  case lc of
+    LHSHead f aps -> DefP noInfo f aps
+    LHSProj d aps1 lhscore aps2 -> DefP noInfo d $
+      aps1 ++ fmap (fmap lhsCoreToPattern) lhscore : aps2
+  where noInfo = PatRange noRange -- TODO, preserve range!
+
+mapLHSHead :: (QName -> [NamedArg Pattern] -> LHSCore) -> LHSCore -> LHSCore
+mapLHSHead f (LHSHead x ps)        = f x ps
+mapLHSHead f (LHSProj d ps1 l ps2) =
+  LHSProj d ps1 (fmap (fmap (mapLHSHead f)) l) ps2
+
+{- UNUSED
+mapLHSHeadM :: (Monad m) => (QName -> [NamedArg Pattern] -> m LHSCore) -> LHSCore -> m LHSCore
+mapLHSHeadM f (LHSHead x ps)        = f x ps
+mapLHSHeadM f (LHSProj d ps1 l ps2) = do
+  l <- mapLHSHead f l
+  return $ LHSProj d ps1 l ps2
+-}
+
 -- | Parameterised over the type of dot patterns.
-data Pattern' e	= VarP Name
-		| ConP PatInfo AmbiguousQName [NamedArg (Pattern' e)]
-		| DefP PatInfo QName          [NamedArg (Pattern' e)]  -- ^ defined pattern
-		| WildP PatInfo
-		| AsP PatInfo Name (Pattern' e)
-		| DotP PatInfo e
-		| AbsurdP PatInfo
-		| LitP Literal
-		| ImplicitP PatInfo	-- ^ generated at type checking for implicit arguments
-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
+data Pattern' e
+  = VarP Name
+  | ConP PatInfo AmbiguousQName [NamedArg (Pattern' e)]
+  | DefP PatInfo QName          [NamedArg (Pattern' e)]
+    -- ^ Defined pattern: function definition @f ps@ or destructor pattern @d p ps@.
+  | WildP PatInfo
+  | AsP PatInfo Name (Pattern' e)
+  | DotP PatInfo e
+  | AbsurdP PatInfo
+  | LitP Literal
+  | ImplicitP PatInfo
+    -- ^ Generated at type checking for implicit arguments.
+  | PatternSynP PatInfo QName [NamedArg (Pattern' e)]
+  deriving (Typeable, Show, Functor, Foldable, Traversable)
 
-type Pattern = Pattern' Expr
+type Pattern  = Pattern' Expr
+type Patterns = [NamedArg Pattern]
 
 {--------------------------------------------------------------------------
     Instances
@@ -192,63 +292,69 @@
     getRange (TNoBind e)   = getRange e
 
 instance HasRange Expr where
-    getRange (Var x)		= getRange x
-    getRange (Def x)		= getRange x
-    getRange (Con x)		= getRange x
-    getRange (Lit l)		= getRange l
-    getRange (QuestionMark i)	= getRange i
-    getRange (Underscore  i)	= getRange i
-    getRange (App i _ _)	= getRange i
-    getRange (WithApp i _ _)	= getRange i
-    getRange (Lam i _ _)	= getRange i
-    getRange (AbsurdLam i _)    = getRange i
-    getRange (ExtendedLam i _ _ _)  = getRange i
-    getRange (Pi i _ _)		= getRange i
-    getRange (Fun i _ _)	= getRange i
-    getRange (Set i _)		= getRange i
-    getRange (Prop i)		= getRange i
-    getRange (Let i _ _)	= getRange i
-    getRange (Rec i _)		= getRange i
-    getRange (RecUpdate i _ _)  = getRange i
-    getRange (ETel tel)         = getRange tel
-    getRange (ScopedExpr _ e)	= getRange e
-    getRange (QuoteGoal _ _ e)	= getRange e
-    getRange (Quote i)  	= getRange i
-    getRange (QuoteTerm i)  	= getRange i
-    getRange (Unquote i)  	= getRange i
-    getRange (DontCare{})       = noRange
+    getRange (Var x)		   = getRange x
+    getRange (Def x)		   = getRange x
+    getRange (Con x)		   = getRange x
+    getRange (Lit l)		   = getRange l
+    getRange (QuestionMark i)	   = getRange i
+    getRange (Underscore  i)	   = getRange i
+    getRange (App i _ _)	   = getRange i
+    getRange (WithApp i _ _)	   = getRange i
+    getRange (Lam i _ _)	   = getRange i
+    getRange (AbsurdLam i _)       = getRange i
+    getRange (ExtendedLam i _ _ _) = getRange i
+    getRange (Pi i _ _)		   = getRange i
+    getRange (Fun i _ _)	   = getRange i
+    getRange (Set i _)		   = getRange i
+    getRange (Prop i)		   = getRange i
+    getRange (Let i _ _)	   = getRange i
+    getRange (Rec i _)		   = getRange i
+    getRange (RecUpdate i _ _)     = getRange i
+    getRange (ETel tel)            = getRange tel
+    getRange (ScopedExpr _ e)	   = getRange e
+    getRange (QuoteGoal _ _ e)	   = getRange e
+    getRange (Quote i)  	   = getRange i
+    getRange (QuoteTerm i)  	   = getRange i
+    getRange (Unquote i)  	   = getRange i
+    getRange (DontCare{})          = noRange
+    getRange (PatternSyn x)        = getRange x
 
 instance HasRange Declaration where
-    getRange (Axiom      i _ _ _       ) = getRange i
-    getRange (Field      i _ _         ) = getRange i
-    getRange (Mutual     i _           ) = getRange i
-    getRange (Section    i _ _ _       ) = getRange i
-    getRange (Apply	 i _ _ _ _     ) = getRange i
-    getRange (Import     i _	       ) = getRange i
-    getRange (Primitive  i _ _	       ) = getRange i
-    getRange (Pragma	 i _	       ) = getRange i
-    getRange (Open       i _           ) = getRange i
-    getRange (ScopedDecl _ d	       ) = getRange d
-    getRange (FunDef  i _ _         ) = getRange i
-    getRange (DataSig i _ _ _       ) = getRange i
-    getRange (DataDef i _ _ _       ) = getRange i
-    getRange (RecSig  i _ _ _       ) = getRange i
-    getRange (RecDef  i _ _ _ _ _   ) = getRange i
+    getRange (Axiom      i _ _ _    ) = getRange i
+    getRange (Field      i _ _      ) = getRange i
+    getRange (Mutual     i _        ) = getRange i
+    getRange (Section    i _ _ _    ) = getRange i
+    getRange (Apply	 i _ _ _ _  ) = getRange i
+    getRange (Import     i _	    ) = getRange i
+    getRange (Primitive  i _ _	    ) = getRange i
+    getRange (Pragma	 i _	    ) = getRange i
+    getRange (Open       i _        ) = getRange i
+    getRange (ScopedDecl _ d	    ) = getRange d
+    getRange (FunDef     i _ _ _    ) = getRange i
+    getRange (DataSig    i _ _ _    ) = getRange i
+    getRange (DataDef    i _ _ _    ) = getRange i
+    getRange (RecSig     i _ _ _    ) = getRange i
+    getRange (RecDef   i _ _ _ _ _ _) = getRange i
 
 instance HasRange (Pattern' e) where
-    getRange (VarP x)	   = getRange x
-    getRange (ConP i _ _)  = getRange i
-    getRange (DefP i _ _)  = getRange i
-    getRange (WildP i)	   = getRange i
-    getRange (ImplicitP i) = getRange i
-    getRange (AsP i _ _)   = getRange i
-    getRange (DotP i _)    = getRange i
-    getRange (AbsurdP i)   = getRange i
-    getRange (LitP l)	   = getRange l
+    getRange (VarP x)	         = getRange x
+    getRange (ConP i _ _)        = getRange i
+    getRange (DefP i _ _)        = getRange i
+    getRange (WildP i)	         = getRange i
+    getRange (ImplicitP i)       = getRange i
+    getRange (AsP i _ _)         = getRange i
+    getRange (DotP i _)          = getRange i
+    getRange (AbsurdP i)         = getRange i
+    getRange (LitP l)	         = getRange l
+    getRange (PatternSynP i _ _) = getRange i
 
 instance HasRange LHS where
-    getRange (LHS i _ _ _) = getRange i
+    getRange (LHS i _ _)   = getRange i
 
+instance HasRange (LHSCore' e) where
+    getRange (LHSHead f ps) = fuseRange f ps
+    getRange (LHSProj d ps1 lhscore ps2) = d `fuseRange` ps1 `fuseRange` lhscore `fuseRange` ps2
+
 instance HasRange Clause where
     getRange (Clause lhs rhs ds) = getRange (lhs,rhs,ds)
 
@@ -260,9 +366,23 @@
 
 instance HasRange LetBinding where
     getRange (LetBind  i _ _ _ _     ) = getRange i
+    getRange (LetPatBind  i _ _      ) = getRange i
     getRange (LetApply i _ _ _ _     ) = getRange i
     getRange (LetOpen  i _           ) = getRange i
 
+-- setRange for patterns applies the range to the outermost pattern constructor
+instance SetRange (Pattern' a) where
+    setRange r (VarP x)             = VarP (setRange r x)
+    setRange r (ConP _ ns as)       = ConP (PatRange r) (AmbQ $ map (setRange r) $ unAmbQ ns) as
+    setRange r (DefP _ n as)        = DefP (PatRange r) (setRange r n) as
+    setRange r (WildP _)            = WildP (PatRange r)
+    setRange r (ImplicitP _)        = ImplicitP (PatRange r)
+    setRange r (AsP _ n p)          = AsP (PatRange r) (setRange r n) p
+    setRange r (DotP _ e)           = DotP (PatRange r) e
+    setRange r (AbsurdP _)          = AbsurdP (PatRange r)
+    setRange r (LitP l)             = LitP (setRange r l)
+    setRange r (PatternSynP _ n as) = PatternSynP (PatRange r) (setRange r n) as
+
 instance KillRange LamBinding where
   killRange (DomainFree h r x) = killRange1 (DomainFree h r) x
   killRange (DomainFull b)     = killRange1 DomainFull b
@@ -275,31 +395,34 @@
   killRange (TNoBind e)    = killRange1 TNoBind e
 
 instance KillRange Expr where
-  killRange (Var x)          = killRange1 Var x
-  killRange (Def x)          = killRange1 Def x
-  killRange (Con x)          = killRange1 Con x
-  killRange (Lit l)          = killRange1 Lit l
-  killRange (QuestionMark i) = killRange1 QuestionMark i
-  killRange (Underscore  i)  = killRange1 Underscore i
-  killRange (App i e1 e2)    = killRange3 App i e1 e2
-  killRange (WithApp i e es) = killRange3 WithApp i e es
-  killRange (Lam i b e)      = killRange3 Lam i b e
-  killRange (AbsurdLam i h)  = killRange1 AbsurdLam i h
-  killRange (ExtendedLam i name di pes) = killRange4 ExtendedLam i name di pes --(\_ -> ExtendedLam i def {-name di si-}) i pes
-  killRange (Pi i a b)       = killRange3 Pi i a b
-  killRange (Fun i a b)      = killRange3 Fun i a b
-  killRange (Set i n)        = Set (killRange i) n
-  killRange (Prop i)         = killRange1 Prop i
-  killRange (Let i ds e)     = killRange3 Let i ds e
-  killRange (Rec i fs)       = Rec (killRange i) (map (id -*- killRange) fs)
-  killRange (RecUpdate i e fs) = RecUpdate (killRange i) (killRange e) (map (id -*- killRange) fs)
-  killRange (ETel tel)       = killRange1 ETel tel
-  killRange (ScopedExpr s e) = killRange1 (ScopedExpr s) e
-  killRange (QuoteGoal i x e)= killRange3 QuoteGoal i x e
-  killRange (Quote i)        = killRange1 Quote i
-  killRange (QuoteTerm i)    = killRange1 QuoteTerm i
-  killRange (Unquote i)      = killRange1 Unquote i
-  killRange (DontCare e)     = DontCare e
+  killRange (Var x)                = killRange1 Var x
+  killRange (Def x)                = killRange1 Def x
+  killRange (Con x)                = killRange1 Con x
+  killRange (Lit l)                = killRange1 Lit l
+  killRange (QuestionMark i)       = killRange1 QuestionMark i
+  killRange (Underscore  i)        = killRange1 Underscore i
+  killRange (App i e1 e2)          = killRange3 App i e1 e2
+  killRange (WithApp i e es)       = killRange3 WithApp i e es
+  killRange (Lam i b e)            = killRange3 Lam i b e
+  killRange (AbsurdLam i h)        = killRange1 AbsurdLam i h
+  killRange (ExtendedLam i n d ps) = killRange4 ExtendedLam i n d ps
+  killRange (Pi i a b)             = killRange3 Pi i a b
+  killRange (Fun i a b)            = killRange3 Fun i a b
+  killRange (Set i n)              = Set (killRange i) n
+  killRange (Prop i)               = killRange1 Prop i
+  killRange (Let i ds e)           = killRange3 Let i ds e
+  killRange (Rec i fs)             = Rec (killRange i) (map (id -*- killRange) fs)
+  killRange (RecUpdate i e fs)     = RecUpdate (killRange i)
+                                               (killRange e)
+                                               (map (id -*- killRange) fs)
+  killRange (ETel tel)             = killRange1 ETel tel
+  killRange (ScopedExpr s e)       = killRange1 (ScopedExpr s) e
+  killRange (QuoteGoal i x e)      = killRange3 QuoteGoal i x e
+  killRange (Quote i)              = killRange1 Quote i
+  killRange (QuoteTerm i)          = killRange1 QuoteTerm i
+  killRange (Unquote i)            = killRange1 Unquote i
+  killRange (DontCare e)           = DontCare e
+  killRange (PatternSyn x)         = killRange1 PatternSyn x
 
 instance KillRange Relevance where
   killRange rel = rel -- no range to kill
@@ -316,11 +439,11 @@
   killRange (Pragma     i a           ) = Pragma (killRange i) a
   killRange (Open       i x           ) = killRange2 Open       i x
   killRange (ScopedDecl a d           ) = killRange1 (ScopedDecl a) d
-  killRange (FunDef  i a b       ) = killRange3 FunDef  i a b
-  killRange (DataSig i a b c     ) = killRange3 DataSig i a b c
-  killRange (DataDef i a b c     ) = killRange4 DataDef i a b c
-  killRange (RecSig  i a b c     ) = killRange4 RecSig  i a b c
-  killRange (RecDef  i a b c d e ) = killRange6 RecDef  i a b c d e
+  killRange (FunDef  i a b c          ) = killRange4 FunDef  i a b c
+  killRange (DataSig i a b c          ) = killRange4 DataSig i a b c
+  killRange (DataDef i a b c          ) = killRange4 DataDef i a b c
+  killRange (RecSig  i a b c          ) = killRange4 RecSig  i a b c
+  killRange (RecDef  i a b c d e f    ) = killRange7 RecDef  i a b c d e f
 
 instance KillRange ModuleApplication where
   killRange (SectionApp a b c  ) = killRange3 SectionApp a b c
@@ -330,19 +453,24 @@
   killRange (ThingWithFixity c f) = ThingWithFixity (killRange c) f
 
 instance KillRange e => KillRange (Pattern' e) where
-  killRange (VarP x)      = killRange1 VarP x
-  killRange (ConP i a b)  = killRange3 ConP i a b
-  killRange (DefP i a b)  = killRange3 DefP i a b
-  killRange (WildP i)     = killRange1 WildP i
-  killRange (ImplicitP i) = killRange1 ImplicitP i
-  killRange (AsP i a b)   = killRange3 AsP i a b
-  killRange (DotP i a)    = killRange2 DotP i a
-  killRange (AbsurdP i)   = killRange1 AbsurdP i
-  killRange (LitP l)      = killRange1 LitP l
+  killRange (VarP x)            = killRange1 VarP x
+  killRange (ConP i a b)        = killRange3 ConP i a b
+  killRange (DefP i a b)        = killRange3 DefP i a b
+  killRange (WildP i)           = killRange1 WildP i
+  killRange (ImplicitP i)       = killRange1 ImplicitP i
+  killRange (AsP i a b)         = killRange3 AsP i a b
+  killRange (DotP i a)          = killRange2 DotP i a
+  killRange (AbsurdP i)         = killRange1 AbsurdP i
+  killRange (LitP l)            = killRange1 LitP l
+  killRange (PatternSynP i a p) = killRange3 PatternSynP i a p
 
 instance KillRange LHS where
-  killRange (LHS i a b c) = killRange4 LHS i a b c
+  killRange (LHS i a b)   = killRange3 LHS i a b
 
+instance KillRange e => KillRange (LHSCore' e) where
+  killRange (LHSHead a b)     = killRange2 LHSHead a b
+  killRange (LHSProj a b c d) = killRange4 LHSProj a b c d
+
 instance KillRange Clause where
   killRange (Clause lhs rhs ds) = killRange3 Clause lhs rhs ds
 
@@ -354,9 +482,21 @@
 
 instance KillRange LetBinding where
   killRange (LetBind  i rel a b c   ) = killRange5 LetBind  i rel a b c
+  killRange (LetPatBind i a b       ) = killRange3 LetPatBind i a b
   killRange (LetApply i a b c d     ) = killRange3 LetApply i a b c d
   killRange (LetOpen  i x           ) = killRange2 LetOpen  i x
 
+instanceUniverseBiT' [] [t| (Declaration, QName)          |]
+instanceUniverseBiT' [] [t| (Declaration, AmbiguousQName) |]
+instanceUniverseBiT' [] [t| (Declaration, Expr)           |]
+instanceUniverseBiT' [] [t| (Declaration, LetBinding)     |]
+instanceUniverseBiT' [] [t| (Declaration, LamBinding)     |]
+instanceUniverseBiT' [] [t| (Declaration, TypedBinding)   |]
+instanceUniverseBiT' [] [t| (Declaration, Pattern)        |]
+instanceUniverseBiT' [] [t| (Declaration, Declaration)    |]
+instanceUniverseBiT' [] [t| (Declaration, ModuleName)     |]
+instanceUniverseBiT' [] [t| (Declaration, ModuleInfo)     |]
+
 ------------------------------------------------------------------------
 -- Queries
 ------------------------------------------------------------------------
@@ -374,9 +514,9 @@
 allNames (DataSig _ q _ _)        = Seq.singleton q
 allNames (DataDef _ q _ decls)    = q <| Fold.foldMap allNames decls
 allNames (RecSig _ q _ _)         = Seq.singleton q
-allNames (RecDef _ q c _ _ decls) =
+allNames (RecDef _ q _ c _ _ decls) =
   q <| foldMap Seq.singleton c >< Fold.foldMap allNames decls
-allNames (FunDef _ q cls)         = q <| Fold.foldMap allNamesC cls
+allNames (FunDef _ q _ cls)       = q <| Fold.foldMap allNamesC cls
   where
   allNamesC :: Clause -> Seq QName
   allNamesC (Clause _ rhs decls) = allNamesR rhs ><
@@ -418,6 +558,7 @@
   allNamesE QuoteTerm {}            = Seq.empty
   allNamesE Unquote {}              = Seq.empty
   allNamesE DontCare {}             = Seq.empty
+  allNamesE (PatternSyn x)          = Seq.empty
 
   allNamesLam :: LamBinding -> Seq QName
   allNamesLam DomainFree {}      = Seq.empty
@@ -429,12 +570,13 @@
 
   allNamesLet :: LetBinding -> Seq QName
   allNamesLet (LetBind _ _ _ e1 e2)  = Fold.foldMap allNamesE [e1, e2]
+  allNamesLet (LetPatBind _ _ e)     = allNamesE e
   allNamesLet (LetApply _ _ app _ _) = allNamesApp app
   allNamesLet LetOpen {}             = Seq.empty
 
   allNamesApp :: ModuleApplication -> Seq QName
   allNamesApp (SectionApp bindss _ es) = Fold.foldMap allNamesBinds bindss ><
-                                         Fold.foldMap allNamesE (map (namedThing . unArg) es)
+                                         Fold.foldMap allNamesE (map namedArg es)
   allNamesApp RecordModuleIFS {}       = Seq.empty
 
 allNames (Section _ _ _ decls) = Fold.foldMap allNames decls
@@ -462,15 +604,106 @@
   anyAbstract = Fold.any anyAbstract
 
 instance AnyAbstract Declaration where
-  anyAbstract (Axiom i _ _ _)     = defAbstract i == AbstractDef
-  anyAbstract (Field i _ _)       = defAbstract i == AbstractDef
-  anyAbstract (Mutual     _ ds)   = anyAbstract ds
-  anyAbstract (ScopedDecl _ ds)   = anyAbstract ds
-  anyAbstract (Section _ _ _ ds)  = anyAbstract ds
-  anyAbstract (FunDef i _ _)       = defAbstract i == AbstractDef
-  anyAbstract (DataDef i _ _ _)    = defAbstract i == AbstractDef
-  anyAbstract (RecDef i _ _ _ _ _) = defAbstract i == AbstractDef
-  anyAbstract (DataSig i _ _ _)    = defAbstract i == AbstractDef
-  anyAbstract (RecSig i _ _ _)     = defAbstract i == AbstractDef
-  anyAbstract _                    = __IMPOSSIBLE__
+  anyAbstract (Axiom i _ _ _)        = defAbstract i == AbstractDef
+  anyAbstract (Field i _ _)          = defAbstract i == AbstractDef
+  anyAbstract (Mutual     _ ds)      = anyAbstract ds
+  anyAbstract (ScopedDecl _ ds)      = anyAbstract ds
+  anyAbstract (Section _ _ _ ds)     = anyAbstract ds
+  anyAbstract (FunDef i _ _ _)       = defAbstract i == AbstractDef
+  anyAbstract (DataDef i _ _ _)      = defAbstract i == AbstractDef
+  anyAbstract (RecDef i _ _ _ _ _ _) = defAbstract i == AbstractDef
+  anyAbstract (DataSig i _ _ _)      = defAbstract i == AbstractDef
+  anyAbstract (RecSig i _ _ _)       = defAbstract i == AbstractDef
+  anyAbstract _                      = __IMPOSSIBLE__
 
+app   = foldl (App (ExprRange noRange))
+
+patternToExpr :: Pattern -> Expr
+patternToExpr (VarP x)            = Var x
+patternToExpr (ConP _ c ps)       =
+          Con c `app` map (fmap (fmap patternToExpr)) ps
+patternToExpr (DefP _ f ps)       =
+          Def f `app` map (fmap (fmap patternToExpr)) ps
+patternToExpr (WildP _)           = Underscore emptyMetaInfo
+patternToExpr (AsP _ _ p)         = patternToExpr p
+patternToExpr (DotP _ e)          = e
+patternToExpr (AbsurdP _)         = Underscore emptyMetaInfo  -- TODO: could this happen?
+patternToExpr (LitP l)            = Lit l
+patternToExpr (ImplicitP _)       = Underscore emptyMetaInfo
+patternToExpr (PatternSynP _ _ _) = __IMPOSSIBLE__
+
+type PatternSynDefn = ([Name], Pattern)
+type PatternSynDefns = Map QName PatternSynDefn
+
+lambdaLiftExpr :: [Name] -> Expr -> Expr
+lambdaLiftExpr []     e = e
+lambdaLiftExpr (n:ns) e = Lam (ExprRange noRange)
+                                     (DomainFree NotHidden Relevant n) $
+                                     lambdaLiftExpr ns e
+
+substPattern :: [(Name, Pattern)] -> Pattern -> Pattern
+substPattern s p = case p of
+  VarP z      -> case lookup z s of
+    Nothing -> p
+    Just x  -> x
+  ConP i q ps -> ConP i q (fmap (fmap (fmap (substPattern s))) ps)
+  WildP i     -> p
+  DotP i e    -> DotP i (substExpr (map (fmap patternToExpr) s) e)
+  AbsurdP i   -> p
+  LitP l      -> p
+  _           -> __IMPOSSIBLE__ -- Implicits (generated at TC time),
+                                -- pattern synonyms (already gone), and
+                                -- @-patterns (not supported anyways).
+
+substExpr :: [(Name, Expr)] -> Expr -> Expr
+substExpr s e = case e of
+  Var n -> case lookup n s of
+    Nothing -> e
+    Just z  -> z
+  Def _                 -> e
+  Con _	                -> e
+  Lit _                 -> e
+  QuestionMark _        -> e
+  Underscore   _        -> e
+  App  i e e'           -> App i (substExpr s e)
+                                 (fmap (fmap (substExpr s)) e')
+  WithApp i e es        -> WithApp i (substExpr s e)
+                                     (fmap (substExpr s) es)
+  Lam  i lb e           -> Lam i lb (substExpr s e)
+  AbsurdLam i h         -> e
+  ExtendedLam i di n cs -> __IMPOSSIBLE__   -- Maybe later...
+  Pi   i t e            -> Pi i (fmap (substTypedBindings s) t)
+                                (substExpr s e)
+  Fun  i ae e           -> Fun i (fmap (substExpr s) ae)
+                                 (substExpr s e)
+  Set  i n              -> e
+  Prop i                -> e
+  Let  i ls e           -> Let i (fmap (substLetBinding s) ls)
+                                 (substExpr s e)
+  ETel t                -> e
+  Rec  i nes            -> Rec i (fmap (fmap (substExpr s)) nes)
+  RecUpdate i e nes     -> RecUpdate i (substExpr s e)
+                                       (fmap (fmap (substExpr s)) nes)
+  -- XXX: Do we need to do more with ScopedExprs?
+  ScopedExpr si e       -> ScopedExpr si (substExpr s e)
+  QuoteGoal i n e       -> QuoteGoal i n (substExpr s e)
+  Quote i               -> e
+  QuoteTerm i           -> e
+  Unquote i             -> e
+  DontCare e            -> DontCare (substExpr s e)
+  PatternSyn x          -> e
+
+substLetBinding :: [(Name, Expr)] -> LetBinding -> LetBinding
+substLetBinding s lb = case lb of
+  LetBind i r n e e' -> LetBind i r n (substExpr s e) (substExpr s e')
+  LetPatBind i p e   -> LetPatBind i p (substExpr s e) -- Andreas, 2012-06-04: what about the pattern p
+  _                  -> lb
+
+substTypedBindings :: [(Name, Expr)] -> TypedBindings -> TypedBindings
+substTypedBindings s (TypedBindings r atb) = TypedBindings r
+    (fmap (substTypedBinding s) atb)
+
+substTypedBinding :: [(Name, Expr)] -> TypedBinding -> TypedBinding
+substTypedBinding s tb = case tb of
+  TBind r ns e -> TBind r ns $ substExpr s e
+  TNoBind e    -> TNoBind $ substExpr s e
diff --git a/src/full/Agda/Syntax/Abstract/Copatterns.hs b/src/full/Agda/Syntax/Abstract/Copatterns.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Syntax/Abstract/Copatterns.hs
@@ -0,0 +1,422 @@
+{-# LANGUAGE CPP, TupleSections, PatternGuards, DeriveFunctor, StandaloneDeriving, ScopedTypeVariables, TypeSynonymInstances, FlexibleContexts,  FlexibleInstances #-}
+module Agda.Syntax.Abstract.Copatterns (translateCopatternClauses) where
+
+import Prelude hiding (mapM)
+
+import Control.Applicative
+import Control.Monad hiding (mapM)
+import Control.Monad.Writer hiding (mapM)
+
+import Data.Function
+import Data.List
+
+import Data.Traversable as T
+
+import Agda.Syntax.Abstract
+import Agda.Syntax.Abstract.Name as A
+import Agda.Syntax.Common
+import qualified Agda.Syntax.Concrete.Name as C
+import Agda.Syntax.Info
+import Agda.Syntax.Position
+import Agda.Syntax.Scope.Base
+import Agda.Syntax.Scope.Monad
+
+import Agda.TypeChecking.Monad.Base (TypeError(..), Call(..), typeError,
+                                     TCErr(..))
+import Agda.Utils.List
+import Agda.Utils.Tuple
+
+#include "../../undefined.h"
+import Agda.Utils.Impossible
+
+{- Andreas 2012-04-07, 2012-05-08
+
+   Translating copatterns into record expressions
+
+This is a preliminary solution until we have proper copattern type
+checking and evaluation.
+
+Example 1:
+
+  record Stream (A : Set) : Set where
+    field
+      head : A
+      tail : Stream A
+  open Stream
+
+  alternate : Stream Nat
+  (      head alternate ) = zero
+  (head (tail alternate)) = suc zero
+  (tail (tail alternate)) = alternate
+
+with pathes
+
+  Path [head]      zero
+  Path [tail,head] (suc zero)
+  Path [tail,tail] alternate
+
+is translated into
+
+  alternate = record
+    { head = zero
+    ; tail = record
+      { head = suc zero
+      ; tail = alternate
+      }
+    }
+
+Example 2:
+
+  record State (S A : Set) : Set where
+    constructor state
+    field
+      runState : S → A × S
+  open State
+
+  record Monad (M : Set → Set) : Set1 where
+    constructor monad
+    field
+      return : {A : Set}   → A → M A
+      _>>=_  : {A B : Set} → M A → (A → M B) → M B
+  open Monad
+
+  stateMonad : {S : Set} → Monad (State S)
+  runState (return stateMonad a  ) s  = a , s
+  runState (_>>=_  stateMonad m k) s₀ =
+    let as₁ = runState m s₀
+    in  runState (k (proj₁ as₁)) (proj₂ as₁)
+
+with pathes
+
+  Path [(return,[a]  ), (runstate,[s ])] (a,s)
+  Path [(_>>=_, [m,k]), (runstate,[s₀])] (let...)
+
+is translated to
+
+  stateMonad = record
+    { return = λ a → record { runState = λ s → a , s }
+    ; _>>=_  = λ m k → record { runState = λ s₀ →
+        let as₁ = runState m s₀
+        in  runState (k (proj₁ as₁)) (proj₂ as₁)
+    }
+
+Example 3:
+
+  swap3 : {A B C X : Set} → (X → A) × ((X → B) × C) → (X → C) × (X → (B × A))
+  fst (swap3 t) x       = snd (snd t)
+  fst (snd (swap3 t) y) = fst (snd t) y
+  snd (snd (swap3 t) z) = fst t z
+
+with pathes
+
+  Path [(fst,[x])]            (snd (snd t))
+  Path [(snd,[y]), (fst,[])]  (fst (snd t) y)
+  Path [(snd,[z]), (snd,[])]  (fst t z)
+
+ist translated to
+
+  swap3 t = record
+    { fst = λ x → snd (snd t)
+    ; snd = λ y → record
+      { fst = fst (snd t) y
+      ; snd = (fst t z){z := y}
+      }
+    }
+
+How to translate:
+- group clauses into those with same LHSCore and same withpatterns
+
+-}
+
+translateCopatternClauses :: [Clause] -> ScopeM (Delayed, [Clause])
+translateCopatternClauses cs = if all noCopats cs then return (NotDelayed, cs) else (Delayed,) <$> do
+  pcs :: [ProjPath Clause] <- mapM clauseToPath cs
+  let cps :: [(Clause, [ProjPath Expr])]
+      cps = groupClauses pcs
+{-
+      cps = map ((theContent . head) /\ map (fmap (rhsExpr . clauseRHS))) $
+              groupBy ((==) `on` clauseLHS . theContent) pcs
+-}
+  ces <- mapM (mapSndM pathToRecord) $
+    map (mapSnd $ sortBy (compare `on` thePath)) cps
+  return $ map (\ (c, e) -> c { clauseRHS = RHS e }) ces
+  where
+    noCopats Clause{ clauseLHS = LHS _ LHSHead{} _ } = True
+    noCopats _                                       = False
+    rhsExpr (RHS e) = e
+    rhsExpr _       = __IMPOSSIBLE__
+
+-- | A sequence of decisions @b@ leading to a head @a@.
+data Path a b = Path
+  { thePath    :: [a] -- ^ the list of choices
+  , theContent :: b
+  } deriving (Functor)  -- NB: this means @Path a@ is a functor for any @a@
+
+mapContent :: (b -> c) -> Path a b -> Path a c
+mapContent f (Path p c) = Path p (f c)
+
+data ProjEntry = ProjEntry
+  { projPE :: QName
+  , patsPE :: [NamedArg Name] -- ^ currently we only support variable patterns
+  } deriving (Eq, Ord)
+
+type ProjPath = Path ProjEntry
+
+instance HasRange ProjEntry where
+  getRange (ProjEntry p ps) = getRange (p,ps)
+
+-- | This is a n^2 grouping algorithm which uses only alpha-equality
+groupClauses :: [ProjPath Clause] -> [(Clause, [ProjPath Expr])]
+groupClauses [] = []
+groupClauses (pc@(Path p c) : pcs) = (c, Path p (rhs c) : grp) : groupClauses rest
+  where
+    (grp, rest) = collect pcs
+    -- Collect l splits l into pc's group and the remainder
+    -- If the lhs of the next clause is alpha-equivalent to the current lhs
+    -- then add the next clause to this group, performing the alpha-conversion
+    collect (Path p' c' : pcs) | Just rho <- alpha (clauseLHS c') (clauseLHS c) =
+      mapFst (Path p' (rename' rho (rhs c')) :) $ collect pcs
+    -- we go through all the clauses, since they could be in random order...
+    collect (pc : pcs) = mapSnd (pc :) $ collect pcs
+    collect []         = ([], [])
+
+    rhs             = rhsExpr . clauseRHS
+    rhsExpr (RHS e) = e
+    rhsExpr _       = __IMPOSSIBLE__
+
+clauseToPath :: Clause -> ScopeM (ProjPath Clause)
+clauseToPath (Clause (LHS i lhs wps) (RHS e) []) =
+  fmap (\ lhs -> Clause (LHS i lhs wps) (RHS e) []) <$> lhsToPath [] lhs
+clauseToPath (Clause lhs (RHS e) (_:_)) = typeError $ NotImplemented $ "copattern clauses with where declarations"
+clauseToPath (Clause lhs _ wheredecls) = typeError $ NotImplemented $ "copattern clauses with absurd, with or rewrite right hand side"
+
+lhsToPath :: [ProjEntry] -> LHSCore -> ScopeM (ProjPath LHSCore)
+lhsToPath acc lhs@LHSHead{}         = return $ Path acc lhs
+lhsToPath acc (LHSProj f [] lhs ps) | Just xs <- mapM (T.mapM (T.mapM fromVarP)) ps =
+    lhsToPath (ProjEntry f xs : acc) $ namedArg lhs
+  where fromVarP :: Pattern -> Maybe Name
+        fromVarP (VarP n) = Just n
+        fromVarP _        = Nothing
+lhsToPath acc (LHSProj f _ lhs _)   = typeError $ NotImplemented $
+  "copatterns with patterns before the principal argument"
+
+-- | Expects a sorted list.
+pathToRecord :: [ProjPath Expr] -> ScopeM Expr
+pathToRecord []          = __IMPOSSIBLE__
+pathToRecord [Path [] e] = return e
+pathToRecord pps =
+  case pathHeads pps of
+    Nothing  -> typeError $ GenericError $ "overlapping copattern clauses"
+    Just pps -> do
+      pes <- mapM (mapSndM pathToRecord) $ groupPathes pps
+      let ei = ExprRange $ getRange $ map fst pes
+      Rec ei <$> mapM abstractions pes
+
+        where
+          abstractions :: (ProjEntry, Expr) -> ScopeM (C.Name, Expr)
+          abstractions (ProjEntry p xs, e) = (C.unqualify $ qnameToConcrete p,) <$>
+            foldr abstract (return e) xs
+
+          abstract :: NamedArg Name -> ScopeM Expr -> ScopeM Expr
+          abstract (Arg h r (Named Nothing x)) me =
+            Lam (ExprRange noRange) (DomainFree h r x) <$> me
+          abstract (Arg _ _ (Named Just{} _)) me = typeError $ NotImplemented $
+            "named arguments in projection patterns"
+
+-- | Similar to 'groupClauses'.
+groupPathes :: [(ProjEntry, ProjPath Expr)] -> [(ProjEntry, [ProjPath Expr])]
+groupPathes [] = []
+groupPathes ((pe@(ProjEntry p xs), path) : pps) = (pe, path : grp) : groupPathes rest
+  -- Now group all following pps that have the same projection p
+  -- We expect that they have alpha-equivalent xs
+  where
+    (grp, rest) = collect pps
+    collect l@((ProjEntry p' xs', path) : pps) | p == p', Just rho <- alpha xs' xs =
+      -- add the alpha-converted path to the group
+      -- NOTE: because the path contains only projections and pattern vars
+      -- we only alpha-convert the content (rhs Expr)
+      -- When the path will contain dot patterns, we have to rename in them
+      mapFst (mapContent (rename' rho) path :) $ collect pps
+    collect l = ([], l) -- null or different projection: close group
+
+pathHeads :: [Path a b] -> Maybe [(a, Path a b)]
+pathHeads = mapM pathSplit
+
+pathSplit :: Path a b -> Maybe (a, Path a b)
+pathSplit (Path []     b) = Nothing
+pathSplit (Path (a:as) b) = Just (a, Path as b)
+
+
+-- * Alpha conversion
+
+type NameMap = [(Name,Name)]
+
+class Rename e where
+  rename :: (Name -> Maybe Name) -> e -> e
+  rename' :: NameMap -> e -> e
+  rename' rho = rename (flip lookup rho)
+
+instance Rename Expr where
+  rename rho e =
+    case e of
+      Var x                 -> Var $ maybe x id (rho x)
+      Def f                 -> e
+      Con c                 -> e
+      Lit l                 -> e
+      QuestionMark i        -> e
+      Underscore i          -> e
+      App i e es            -> App i (rename rho e) (rename rho es)
+      WithApp i e es        -> WithApp i (rename rho e) (rename rho es)
+      Lam i lb e            -> Lam i (rename rho lb) (rename rho e)
+      AbsurdLam{}           -> e
+      ExtendedLam i i' n cs -> ExtendedLam i i' n (rename rho cs)
+      Pi i tel e            -> Pi i (rename rho tel) (rename rho e)
+      Fun i a e             -> Fun i (rename rho a) (rename rho e)
+      Set{}                 -> e
+      Prop{}                -> e
+      Let i bs e            -> Let i (rename rho bs) (rename rho e)
+      ETel tel              -> ETel (rename rho tel)
+      Rec i fes             -> Rec i $ map (id -*- rename rho) fes
+      RecUpdate i e fes     -> RecUpdate i (rename rho e) $ map (id -*- rename rho) fes
+      ScopedExpr i e        -> ScopedExpr i (rename rho e)
+      QuoteGoal i n e       -> QuoteGoal i n (rename rho e)
+      Quote i               -> e
+      QuoteTerm i           -> e
+      Unquote i             -> e
+      DontCare e            -> DontCare (rename rho e)
+      PatternSyn n          -> e
+
+instance Rename LetBinding where
+  rename rho e =
+      case e of
+        LetBind i r n e e' -> LetBind i r n (rename rho e) (rename rho e')
+        LetPatBind i p e   -> LetPatBind i (rename rho p) (rename rho e)
+        LetApply{}         -> e
+        LetOpen{}          -> e
+
+instance Rename LamBinding where
+  rename rho e =
+      case e of
+        DomainFree{} -> e
+        DomainFull tb -> DomainFull (rename rho tb)
+
+instance Rename TypedBindings where
+  rename rho (TypedBindings r tb) = TypedBindings r (rename rho tb)
+
+instance Rename TypedBinding where
+  rename rho (TBind r ns e) = TBind r ns (rename rho e)
+  rename rho (TNoBind    e) = TNoBind (rename rho e)
+
+instance Rename Clause where
+  rename rho (Clause lhs rhs wheredecls) =
+    Clause (rename rho lhs) (rename rho rhs) (rename rho wheredecls)
+
+instance Rename RHS where
+  rename rho e = case e of
+      RHS e                 -> RHS (rename rho e)
+      AbsurdRHS             -> e
+      WithRHS n es cs       -> WithRHS n (rename rho es) (rename rho cs)
+      RewriteRHS ns es r ds -> RewriteRHS ns (rename rho es) (rename rho r) (rename rho ds)
+
+instance Rename LHS where
+  rename rho (LHS i core ps) = LHS i (rename rho core) (rename rho ps)
+
+instance Rename LHSCore where
+  rename rho = fmap (rename rho) -- only rename in dot patterns
+{-
+  rename rho = ren where
+    ren e = case e of
+      LHSHead f ps           -> LHSHead f (ren ps)
+      LHSProj d ps1 core ps2 -> LHSProj d (ren ps1) (ren core) (ren ps2)
+-}
+
+instance Rename Pattern where
+  rename rho = fmap (rename rho) -- only rename in dot patterns
+
+instance Rename Declaration where
+  rename rho d = __IMPOSSIBLE__
+
+instance Rename a => Rename (Arg a) where
+  rename rho = fmap (rename rho)
+
+instance Rename a => Rename (Named n a) where
+  rename rho = fmap (rename rho)
+
+instance Rename a => Rename [a] where
+  rename rho = map (rename rho)
+
+
+
+
+-- | Alpha-Equivalence of patterns, ignoring dot patterns
+class Alpha t where
+  alpha :: t -> t -> Maybe NameMap
+  alpha t t' = fmap snd $ runWriterT $ alpha' t t'
+
+  alpha' :: t -> t -> WriterT NameMap Maybe ()
+  alpha' t t' = WriterT $ fmap ((),) $ alpha t t'
+
+instance Alpha Name where
+  alpha' x x' = tell1 (x, x')
+
+instance Alpha (Pattern' e) where
+  alpha' p p' =
+    case (p,p') of
+      ((VarP x)             , (VarP x')             ) -> tell1 (x, x')
+      ((ConP _ x ps)        , (ConP _ x' ps')       ) -> guard (x == x') >> alpha' ps ps'
+      ((DefP _ x ps)        , (DefP _ x' ps')       ) -> guard (x == x') >> alpha' ps ps'
+      ((WildP _)            , (WildP _)             ) -> return ()
+      ((AsP _ x p)          , (AsP _ x' p')         ) -> tell1 (x, x') >> alpha' p p'
+      ((DotP _ _)           , (DotP _ _)            ) -> return ()
+      (AbsurdP{}            , AbsurdP{}             ) -> return ()
+      ((LitP l)             , (LitP l')             ) -> guard (l == l')
+      (ImplicitP{}          , ImplicitP{}           ) -> return ()
+      ((PatternSynP _ x ps) , (PatternSynP _ x' ps')) -> guard (x == x') >> alpha' ps ps'
+      (_                    , _                     ) -> fail "not alpha equivalent"
+
+tell1 :: (MonadWriter [a] m) => a -> m ()
+tell1 a = tell [a]
+
+deriving instance Eq AmbiguousQName
+
+instance Alpha (LHSCore' e) where
+  alpha' (LHSHead f ps) (LHSHead f' ps') = guard (f == f') >> alpha' ps ps'
+  alpha' (LHSProj d ps1 lhs ps2) (LHSProj d' ps1' lhs' ps2') =
+     guard (d == d') >> alpha' ps1 ps1' >> alpha' lhs lhs' >> alpha' ps2 ps2'
+  alpha' _ _ = fail "not alpha equivalent"
+
+instance Alpha LHS where
+  alpha' (LHS _ core wps) (LHS _ core' wps') = alpha' core core' >> alpha' wps wps'
+
+instance Alpha a => Alpha (Arg a) where
+  alpha' a a' = alpha' (unArg a) (unArg a')
+
+instance (Eq n, Alpha a) => Alpha (Named n a) where
+  alpha' a a' = guard (nameOf a == nameOf a') >> alpha' (namedThing a) (namedThing a')
+
+instance Alpha a => Alpha [a] where
+  alpha' l l' = guard (length l == length l') >> zipWithM_ alpha' l l'
+
+-- | Literal equality of patterns, ignoring dot patterns
+instance Eq (Pattern' e) where
+  p == p' =
+    case (p,p') of
+      ((VarP x)             , (VarP x')             ) -> x === x'
+      ((ConP _ x ps)        , (ConP _ x' ps')       ) -> x == x' && ps == ps'
+      ((DefP _ x ps)        , (DefP _ x' ps')       ) -> x == x' && ps == ps'
+      ((WildP _)            , (WildP _)             ) -> True
+      ((AsP _ x p)          , (AsP _ x' p')         ) -> x === x' && p == p'
+      ((DotP _ _)           , (DotP _ _)            ) -> True
+      (AbsurdP{}            , AbsurdP{}             ) -> True
+      ((LitP l)             , (LitP l')             ) -> l == l'
+      (ImplicitP{}          , ImplicitP{}           ) -> True
+      ((PatternSynP _ x ps) , (PatternSynP _ x' ps')) -> x == x' && ps == ps'
+      (_                    , _                     ) -> False
+    where (A.Name _ (C.Name _ x) _ _) === (A.Name _ (C.Name _ x') _ _) = True
+          (A.Name _ C.NoName{}   _ _) === (A.Name _ C.NoName{}    _ _) = True
+          _                           === _                            = False
+
+deriving instance Eq (LHSCore' e)
+
+instance Eq LHS where
+  (LHS _ core wps) == (LHS _ core' wps') = core == core' && wps == wps'
diff --git a/src/full/Agda/Syntax/Abstract/Name.hs b/src/full/Agda/Syntax/Abstract/Name.hs
--- a/src/full/Agda/Syntax/Abstract/Name.hs
+++ b/src/full/Agda/Syntax/Abstract/Name.hs
@@ -1,13 +1,20 @@
-{-# LANGUAGE CPP, DeriveDataTypeable, GeneralizedNewtypeDeriving, FlexibleContexts #-}
+{-# LANGUAGE CPP,
+  DeriveDataTypeable, GeneralizedNewtypeDeriving,
+  DeriveFunctor, DeriveFoldable, DeriveTraversable,
+  FlexibleContexts #-}
 
 {-| Abstract names should carry unique identifiers and stuff. Not right now though.
 -}
 module Agda.Syntax.Abstract.Name where
 
 import Control.Monad.State
-import Data.Generics (Typeable, Data)
+
+import Data.Foldable (Foldable)
+import Data.Traversable (Traversable)
+import Data.Typeable (Typeable)
 import Data.List
 import Data.Function
+import Data.Hashable
 
 import Agda.Syntax.Position
 import Agda.Syntax.Common
@@ -31,7 +38,7 @@
 		 , nameBindingSite :: Range
 		 , nameFixity	   :: Fixity'
 		 }
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 -- | Qualified names are non-empty lists of names. Equality on qualified names
 --   are just equality on the last name, i.e. the module part is just
@@ -42,32 +49,44 @@
 data QName = QName { qnameModule :: ModuleName
 		   , qnameName	 :: Name
 		   }
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
+-- | Something preceeded by a qualified name.
+data QNamed a = QNamed
+  { qname  :: QName
+  , qnamed :: a
+  }
+  deriving (Typeable, Show, Functor, Foldable, Traversable)
+
 -- | A module name is just a qualified name.
 --
 -- The 'SetRange' instance for module names sets all individual ranges
 -- to the given one.
 newtype ModuleName = MName { mnameToList :: [Name] }
-  deriving (Eq, Ord, Typeable, Data)
+  deriving (Eq, Ord, Typeable)
 
 -- | Ambiguous qualified names. Used for overloaded constructors.
 --
 -- Invariant: All the names in the list must have the same concrete,
 -- unqualified name.
 newtype AmbiguousQName = AmbQ { unAmbQ :: [QName] }
-  deriving (Typeable, Data, HasRange, Show)
+  deriving (Typeable, HasRange, Show)
 
 instance HasRange ModuleName where
   getRange (MName []) = noRange
   getRange (MName xs) = getRange xs
 
+-- | A module is anonymous if the qualification path ends in an underscore.
+isAnonymousModuleName :: ModuleName -> Bool
+isAnonymousModuleName (MName []) = False
+isAnonymousModuleName (MName ms) = C.isNoName $ nameConcrete $ last ms
+
 -- | Sets the ranges of the individual names in the module name to
 -- match those of the corresponding concrete names. If the concrete
 -- names are fewer than the number of module name name parts, then the
 -- initial name parts get the range 'noRange'.
 --
--- @C.D.E `withRangesOf` [A, B]@ returns @C.D.E@ but with ranges set
+-- @C.D.E \`withRangesOf\` [A, B]@ returns @C.D.E@ but with ranges set
 -- as follows:
 --
 -- * @C@: 'noRange'.
@@ -193,7 +212,7 @@
 freshNoName_ :: (MonadState s m, HasFresh NameId s) => m Name
 freshNoName_ = freshNoName noRange
 
--- | Get the next version of the concrete name. For instance, @nextName "x" = "x'"@.
+-- | Get the next version of the concrete name. For instance, @nextName "x" = "x₁"@.
 --   The name must not be a 'NoName'.
 nextName :: Name -> Name
 nextName x = x { nameConcrete = C.Name noRange $ nextSuf ps }
@@ -219,6 +238,10 @@
 instance Show Name where
   show x = show (nameConcrete x) -- ++ "|" ++ show (nameId x)
 
+instance Hashable Name where
+  {-# INLINE hash #-}
+  hash = hash . nameId
+
 instance Show QName where
   show q = concat $ intersperse "." $ map show $ qnameToList q
 
@@ -230,6 +253,10 @@
 
 instance Ord QName where
   compare = compare `on` qnameName
+
+instance Hashable QName where
+  {-# INLINE hash #-}
+  hash = hash . qnameName
 
 instance HasRange Name where
   getRange = getRange . nameConcrete
diff --git a/src/full/Agda/Syntax/Abstract/Views.hs b/src/full/Agda/Syntax/Abstract/Views.hs
--- a/src/full/Agda/Syntax/Abstract/Views.hs
+++ b/src/full/Agda/Syntax/Abstract/Views.hs
@@ -26,3 +26,10 @@
 unAppView :: AppView -> Expr
 unAppView (Application h es) =
   foldl (App (ExprRange noRange)) h es
+
+-- | Check whether we are dealing with a universe.
+isSet :: Expr -> Bool
+isSet (ScopedExpr _ e) = isSet e
+isSet (App _ e _)      = isSet e
+isSet (Set{})          = True
+isSet _                = False
diff --git a/src/full/Agda/Syntax/Common.hs b/src/full/Agda/Syntax/Common.hs
--- a/src/full/Agda/Syntax/Common.hs
+++ b/src/full/Agda/Syntax/Common.hs
@@ -5,10 +5,11 @@
 -}
 module Agda.Syntax.Common where
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Control.Applicative
 import Data.Foldable
 import Data.Traversable
+import Data.Hashable
 import Test.QuickCheck
 
 import Agda.Syntax.Position
@@ -18,28 +19,59 @@
 #include "../undefined.h"
 import Agda.Utils.Impossible
 
+-- | Used to specify whether something should be delayed.
+data Delayed = Delayed | NotDelayed
+  deriving (Typeable, Show, Eq, Ord)
+
 data Induction = Inductive | CoInductive
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Typeable, Eq, Ord)
 
+instance Show Induction where
+  show Inductive   = "inductive"
+  show CoInductive = "coinductive"
+
+instance HasRange Induction where
+  getRange _ = noRange
+
 data Hiding  = Hidden | Instance | NotHidden
-    deriving (Typeable, Data, Show, Eq, Ord)
+    deriving (Typeable, Show, Eq, Ord)
 
+instance KillRange Delayed   where killRange = id
+instance KillRange Induction where killRange = id
+instance KillRange Hiding    where killRange = id
+
+---------------------------------------------------------------------------
+-- * Relevance
+---------------------------------------------------------------------------
+
 -- | A function argument can be relevant or irrelevant.
 --   See 'Agda.TypeChecking.Irrelevance'.
 data Relevance
-  = Relevant    -- ^ the argument is (possibly) relevant at compile-time
-  | NonStrict   -- ^ the argument may never flow into evaluation position.
+  = Relevant    -- ^ The argument is (possibly) relevant at compile-time.
+  | NonStrict   -- ^ The argument may never flow into evaluation position.
                 --   Therefore, it is irrelevant at run-time.
                 --   It is treated relevantly during equality checking.
-  | Irrelevant  -- ^ the argument is irrelevant at compile- and runtime
-  | Forced      -- ^ the argument can be skipped during equality checking
-    deriving (Typeable, Data, Show, Eq)
+  | Irrelevant  -- ^ The argument is irrelevant at compile- and runtime.
+  | Forced      -- ^ The argument can be skipped during equality checking
+                --   because its value is already determined by the type.
+  | UnusedArg   -- ^ The polarity checker has determined that this argument
+                --   is unused in the definition.  It can be skipped during
+                --   equality checking but should be mined for solutions
+                --   of meta-variables with relevance 'UnusedArg'
+    deriving (Typeable, Show, Eq, Enum, Bounded)
 
+instance Arbitrary Relevance where
+  arbitrary = elements [minBound..maxBound]
+
 instance Ord Relevance where
   (<=) = moreRelevant
 
 -- | Information ordering.
--- @Relevant `moreRelevant` Forced `moreRelevant` NonStrict `moreRelevant` Irrelevant@
+-- @Relevant  \`moreRelevant\`
+--  UnusedArg \`moreRelevant\`
+--  Forced    \`moreRelevant\`
+--  NonStrict \`moreRelevant\`
+--  Irrelevant@
 moreRelevant :: Relevance -> Relevance -> Bool
 moreRelevant r r' =
   case (r, r') of
@@ -50,24 +82,76 @@
     (Relevant, _)   -> True
     (_, Relevant)   -> False
     -- second bottom
+    (UnusedArg, _)  -> True
+    (_, UnusedArg)  -> False
+    -- third bottom
     (Forced, _)     -> True
     (_, Forced)     -> False
     -- remaining case
     (NonStrict,NonStrict) -> True
 
-instance KillRange Induction where killRange = id
-instance KillRange Hiding    where killRange = id
+---------------------------------------------------------------------------
+-- * Function type domain
+---------------------------------------------------------------------------
 
+-- | Similar to 'Arg', but we need to distinguish
+--   an irrelevance annotation in a function domain
+--   (the domain itself is not irrelevant!)
+--   from an irrelevant argument.
+--
+--   @Dom@ is used in 'Pi' of internal syntax, in 'Context' and 'Telescope'.
+--   'Arg' is used for actual arguments ('Var', 'Con', 'Def' etc.)
+--   and in 'Abstract' syntax and other situations.
+data Dom e = Dom
+  { domHiding    :: Hiding
+  , domRelevance :: Relevance
+  , unDom        :: e
+  } deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable)
+
+argFromDom :: Dom a -> Arg a
+argFromDom (Dom h r a) = Arg h r a
+
+domFromArg :: Arg a -> Dom a
+domFromArg (Arg h r a) = Dom h r a
+
+mapDomHiding :: (Hiding -> Hiding) -> Dom a -> Dom a
+mapDomHiding f dom = dom { domHiding = f (domHiding dom) }
+
+mapDomRelevance :: (Relevance -> Relevance) -> Dom a -> Dom a
+mapDomRelevance f dom = dom { domRelevance = f (domRelevance dom) }
+
+instance HasRange a => HasRange (Dom a) where
+    getRange = getRange . unDom
+
+instance KillRange a => KillRange (Dom a) where
+  killRange = fmap killRange
+
+instance Sized a => Sized (Dom a) where
+  size = size . unDom
+
+instance Show a => Show (Dom a) where
+    show = show . argFromDom
+
+---------------------------------------------------------------------------
+-- * Argument decoration
+---------------------------------------------------------------------------
+
 -- | A function argument can be hidden and/or irrelevant.
 data Arg e  = Arg
   { argHiding    :: Hiding
   , argRelevance :: Relevance
   , unArg :: e
-  } deriving (Typeable, Data, Ord, Functor, Foldable, Traversable)
+  } deriving (Typeable, Ord, Functor, Foldable, Traversable)
 
 instance Eq a => Eq (Arg a) where
   Arg h1 _ x1 == Arg h2 _ x2 = (h1, x1) == (h2, x2)
 
+mapArgHiding :: (Hiding -> Hiding) -> Arg a -> Arg a
+mapArgHiding f arg = arg { argHiding = f (argHiding arg) }
+
+mapArgRelevance :: (Relevance -> Relevance) -> Arg a -> Arg a
+mapArgRelevance f arg = arg { argRelevance = f (argRelevance arg) }
+
 makeInstance :: Arg a -> Arg a
 makeInstance a = a { argHiding = Instance }
 
@@ -80,7 +164,7 @@
 isHiddenArg :: Arg a -> Bool
 isHiddenArg arg = argHiding arg /= NotHidden
 
--- | @xs `withArgsFrom` args@ translates @xs@ into a list of 'Arg's,
+-- | @xs \`withArgsFrom\` args@ translates @xs@ into a list of 'Arg's,
 -- using the elements in @args@ to fill in the non-'unArg' fields.
 --
 -- Precondition: The two lists should have equal length.
@@ -107,13 +191,18 @@
         showR Irrelevant s = "." ++ s
         showR NonStrict  s = "?" ++ s
         showR Forced     s = "!" ++ s
+        showR UnusedArg  s = "k" ++ s -- constant
         showR Relevant   s = "r" ++ s -- Andreas: I want to see it explicitly
 
+---------------------------------------------------------------------------
+-- * Named arguments
+---------------------------------------------------------------------------
+
 data Named name a =
     Named { nameOf     :: Maybe name
 	  , namedThing :: a
 	  }
-    deriving (Eq, Ord, Typeable, Data, Functor, Foldable, Traversable)
+    deriving (Eq, Ord, Typeable, Functor, Foldable, Traversable)
 
 unnamed :: a -> Named name a
 unnamed = Named Nothing
@@ -137,34 +226,54 @@
 -- | Only 'Hidden' arguments can have names.
 type NamedArg a = Arg (Named String a)
 
+-- | Get the content of a 'NamedArg'.
+namedArg :: NamedArg a -> a
+namedArg = namedThing . unArg
+
+defaultNamedArg :: a -> NamedArg a
+defaultNamedArg = defaultArg . unnamed
+
+-- | The functor instance for 'NamedArg' would be ambiguous,
+--   so we give it another name here.
+updateNamedArg :: (a -> b) -> NamedArg a -> NamedArg b
+updateNamedArg = fmap . fmap
+
+---------------------------------------------------------------------------
+-- * Infixity, access, abstract, etc.
+---------------------------------------------------------------------------
+
 -- | Functions can be defined in both infix and prefix style. See
 --   'Agda.Syntax.Concrete.LHS'.
 data IsInfix = InfixDef | PrefixDef
-    deriving (Typeable, Data, Show, Eq, Ord)
+    deriving (Typeable, Show, Eq, Ord)
 
 -- | Access modifier.
 data Access = PrivateAccess | PublicAccess
             | OnlyQualified  -- ^ Visible from outside, but not exported when opening the module
                              --   Used for qualified constructors.
-    deriving (Typeable, Data, Show, Eq, Ord)
+    deriving (Typeable, Show, Eq, Ord)
 
 -- | Abstract or concrete
 data IsAbstract = AbstractDef | ConcreteDef
-    deriving (Typeable, Data, Show, Eq, Ord)
+    deriving (Typeable, Show, Eq, Ord)
 
-type Nat    = Integer
+type Nat    = Int
 type Arity  = Nat
 
 -- | The unique identifier of a name. Second argument is the top-level module
 --   identifier.
-data NameId = NameId Nat Integer
-    deriving (Eq, Ord, Typeable, Data)
+data NameId = NameId Integer Integer
+    deriving (Eq, Ord, Typeable)
 
 instance Enum NameId where
   succ (NameId n m)	= NameId (n + 1) m
   pred (NameId n m)	= NameId (n - 1) m
   toEnum n		= __IMPOSSIBLE__  -- should not be used
   fromEnum (NameId n _) = fromIntegral n
+
+instance Hashable NameId where
+  {-# INLINE hash #-}
+  hash (NameId n m) = hash (n, m)
 
 newtype Constr a = Constr a
 
diff --git a/src/full/Agda/Syntax/Concrete.hs b/src/full/Agda/Syntax/Concrete.hs
--- a/src/full/Agda/Syntax/Concrete.hs
+++ b/src/full/Agda/Syntax/Concrete.hs
@@ -22,12 +22,11 @@
     , ModuleApplication(..)
     , TypeSignature
     , Constructor
-    , Field
     , ImportDirective(..), UsingOrHiding(..), ImportedName(..)
     , Renaming(..), AsName(..)
     , defaultImportDir
-    , OpenShortHand(..)
-    , LHS(..), Pattern(..)
+    , OpenShortHand(..), RewriteEqn, WithExpr
+    , LHS(..), Pattern(..), LHSCore(..)
     , RHS(..), WhereClause(..)
     , Pragma(..)
     , Module
@@ -38,7 +37,7 @@
     )
     where
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.Foldable hiding (concatMap)
 import Data.Traversable
 import Agda.Syntax.Position
@@ -55,7 +54,7 @@
 data OpApp e
         = SyntaxBindingLambda !Range [LamBinding] e -- ^ an abstraction inside a special syntax declaration (see Issue 358 why we introduce this).
         | Ordinary e
-    deriving (Typeable, Data, Functor)
+    deriving (Typeable, Functor)
 
 fromOrdinary :: e -> OpApp e -> e
 fromOrdinary d (Ordinary e) = e
@@ -66,10 +65,10 @@
 	= Ident QName			       -- ^ ex: @x@
 	| Lit Literal			       -- ^ ex: @1@ or @\"foo\"@
 	| QuestionMark !Range (Maybe Nat)      -- ^ ex: @?@ or @{! ... !}@
-	| Underscore !Range (Maybe Nat)	       -- ^ ex: @_@
+	| Underscore !Range (Maybe String)     -- ^ ex: @_@ or @_A_5@
 	| RawApp !Range [Expr]		       -- ^ before parsing operators
 	| App !Range Expr (NamedArg Expr)      -- ^ ex: @e e@, @e {e}@, or @e {x = e}@
-	| OpApp !Range Name [OpApp Expr]       -- ^ ex: @e + e@
+	| OpApp !Range QName [OpApp Expr]      -- ^ ex: @e + e@
         | WithApp !Range Expr [Expr]           -- ^ ex: @e | e1 | .. | en@
 	| HiddenArg !Range (Named String Expr) -- ^ ex: @{e}@ or @{x=e}@
 	| InstanceArg !Range (Named String Expr) -- ^ ex: @{{e}}@ or @{{x=e}}@
@@ -80,7 +79,7 @@
 	| Pi Telescope Expr		       -- ^ ex: @(xs:e) -> e@ or @{xs:e} -> e@
 	| Set !Range			       -- ^ ex: @Set@
 	| Prop !Range			       -- ^ ex: @Prop@
-	| SetN !Range Nat		       -- ^ ex: @Set0, Set1, ..@
+	| SetN !Range Integer                  -- ^ ex: @Set0, Set1, ..@
 	| Rec !Range [(Name, Expr)]	       -- ^ ex: @record {x = a; y = b}@
 	| RecUpdate !Range Expr [(Name, Expr)] -- ^ ex: @record e {x = a; y = b}@
 	| Let !Range [Declaration] Expr	       -- ^ ex: @let Ds in e@
@@ -94,44 +93,44 @@
         | QuoteTerm !Range                     -- ^ ex: @quoteTerm@, should be applied to a term
         | Unquote !Range                       -- ^ ex: @unquote@, should be applied to a term of type @Term@
         | DontCare Expr                        -- ^ to print irrelevant things
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 
 -- | Concrete patterns. No literals in patterns at the moment.
 data Pattern
-	= IdentP QName
-	| AppP Pattern (NamedArg Pattern)
-	| RawAppP !Range [Pattern]
-	| OpAppP !Range Name [Pattern]
-	| HiddenP !Range (Named String Pattern)
-	| InstanceP !Range (Named String Pattern)
-	| ParenP !Range Pattern
-	| WildP !Range
-	| AbsurdP !Range
-	| AsP !Range Name Pattern
-	| DotP !Range Expr
-	| LitP Literal
-    deriving (Typeable, Data)
+	= IdentP QName                            -- ^ @c@ or @x@
+	| AppP Pattern (NamedArg Pattern)         -- ^ @p p'@ or @p {x = p'}@
+	| RawAppP !Range [Pattern]                -- ^ @p1..pn@ before parsing operators
+	| OpAppP !Range QName [Pattern]           -- ^ eg: @p => p'@ for operator @_=>_@
+	| HiddenP !Range (Named String Pattern)   -- ^ @{p}@ or @{x = p}@
+	| InstanceP !Range (Named String Pattern) -- ^ @{{p}}@ or @{{x = p}}@
+	| ParenP !Range Pattern                   -- ^ @(p)@
+	| WildP !Range                            -- ^ @_@
+	| AbsurdP !Range                          -- ^ @()@
+	| AsP !Range Name Pattern                 -- ^ @x\@p@ unused
+	| DotP !Range Expr                        -- ^ @.e@
+	| LitP Literal                            -- ^ @0@, @1@, etc.
+    deriving (Typeable)
 
 
 -- | A lambda binding is either domain free or typed.
 data LamBinding
 	= DomainFree Hiding Relevance BoundName -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@ or @{.x}@
 	| DomainFull TypedBindings              -- ^ . @(xs : e)@ or @{xs : e}@
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 
 -- | A sequence of typed bindings with hiding information. Appears in dependent
 --   function spaces, typed lambdas, and telescopes.
 data TypedBindings = TypedBindings !Range (Arg TypedBinding)
 	-- ^ . @(xs : e)@ or @{xs : e}@
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 
 data BoundName = BName { boundName   :: Name
                        , bnameFixity :: Fixity'
                        }
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 mkBoundName_ :: Name -> BoundName
 mkBoundName_ x = BName x defaultFixity'
@@ -140,7 +139,7 @@
 data TypedBinding
 	= TBind !Range [BoundName] Expr   -- Binding @x1,..,xn:A@
 	| TNoBind Expr		    -- No binding @A@, equivalent to @_ : A@.
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 
 -- | A telescope is a sequence of typed bindings. Bound variables are in scope
@@ -154,25 +153,46 @@
 
    We use fixity information to see which name is actually defined.
 -}
-data LHS = LHS { lhsOriginalPattern :: Pattern
-               , lhsWithPattern     :: [Pattern]
-               , lhsRewriteEqn      :: [RewriteEqn]
-               , lhsWithExpr        :: [WithExpr]
+data LHS = LHS { lhsOriginalPattern :: Pattern       -- ^ @f ps@
+               , lhsWithPattern     :: [Pattern]     -- ^ @| p@ (many)
+               , lhsRewriteEqn      :: [RewriteEqn]  -- ^ @rewrite e@ (many)
+               , lhsWithExpr        :: [WithExpr]    -- ^ @with e@ (many)
                }
          -- ^ original pattern, with-patterns, rewrite equations and with-expressions
          | Ellipsis Range [Pattern] [RewriteEqn] [WithExpr]
          -- ^ new with-patterns, rewrite equations and with-expressions
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 type RewriteEqn = Expr
 type WithExpr   = Expr
 
+-- | Processed (scope-checked) intermediate form of the core @f ps@ of 'LHS'.
+--   Corresponds to 'lhsOriginalPattern'.
+data LHSCore
+  = LHSHead  { lhsDefName  :: Name                -- ^ @f@
+             , lhsPats     :: [NamedArg Pattern]  -- ^ @ps@
+             }
+  | LHSProj  { lhsDestructor :: QName      -- ^ record projection identifier
+             , lhsPatsLeft   :: [NamedArg Pattern]  -- ^ side patterns
+             , lhsFocus      :: NamedArg LHSCore    -- ^ main branch
+             , lhsPatsRight  :: [NamedArg Pattern]  -- ^ side patterns
+             }
+  deriving (Typeable)
+
+{- TRASH
+lhsCoreToPattern :: LHSCore -> Pattern
+lhsCoreToPattern (LHSHead f args) = OpAppP (fuseRange f args) (unqualify f) args
+lhsCoreToPattern (LHSProj d ps1 lhscore ps2) = OpAppP (fuseRange d ps) (unqualify) ps
+  where p = lhsCoreToPattern lhscore
+        ps = ps1 ++ p : ps2
+-}
+
 data RHS = AbsurdRHS
 	 | RHS Expr
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 data WhereClause = NoWhere | AnyWhere [Declaration] | SomeWhere Name [Declaration]
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 
 -- | The things you are allowed to say when you shuffle names between name
@@ -184,20 +204,21 @@
 	    , renaming		:: [Renaming]
 	    , publicOpen	:: Bool	-- ^ Only for @open@. Exports the opened names from the current module.
 	    }
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
+-- | Default is directive is @private@ (use everything, but do not export).
 defaultImportDir :: ImportDirective
 defaultImportDir = ImportDirective noRange (Hiding []) [] False
 
 data UsingOrHiding
 	= Hiding [ImportedName]
 	| Using  [ImportedName]
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 -- | An imported name can be a module or a defined name
 data ImportedName = ImportedModule  { importedName :: Name }
 		  | ImportedName    { importedName :: Name }
-    deriving (Typeable, Data, Eq, Ord)
+    deriving (Typeable, Eq, Ord)
 
 instance Show ImportedName where
     show (ImportedModule x) = "module " ++ show x
@@ -211,7 +232,7 @@
                            -- ^ The range of the \"to\" keyword. Retained
                            --   for highlighting purposes.
                          }
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 data AsName = AsName { asName  :: Name
                        -- ^ The \"as\" name.
@@ -219,7 +240,7 @@
                        -- ^ The range of the \"as\" keyword. Retained
                        --   for highlighting purposes.
                      }
-    deriving (Typeable, Data, Show)
+    deriving (Typeable, Show)
 
 {--------------------------------------------------------------------------
     Declarations
@@ -228,9 +249,8 @@
 -- | Just type signatures.
 type TypeSignature   = Declaration
 
--- | A constructor or field declaration is just a type signature.
+-- | A data constructor declaration is just a type signature.
 type Constructor = TypeSignature
-type Field	 = TypeSignature
 
 {-| The representation type of a declaration. The comments indicate
     which type in the intended family the constructor targets.
@@ -243,10 +263,11 @@
 	| DataSig     !Range Induction Name [LamBinding] Expr -- ^ lone data signature in mutual block
 	| Data        !Range Induction Name [LamBinding] (Maybe Expr) [Constructor]
 	| RecordSig   !Range Name [LamBinding] Expr -- ^ lone record signature in mutual block
-	| Record      !Range Name (Maybe Name) [LamBinding] (Maybe Expr) [Declaration]
+	| Record      !Range Name (Maybe Induction) (Maybe Name) [LamBinding] (Maybe Expr) [Declaration]
           -- ^ The optional name is a name for the record constructor.
 	| Infix Fixity [Name]
         | Syntax      Name Notation -- ^ notation declaration for a name
+        | PatternSyn  !Range Name [Name] Pattern
 	| Mutual      !Range [Declaration]
 	| Abstract    !Range [Declaration]
 	| Private     !Range [Declaration]
@@ -257,14 +278,14 @@
 	| ModuleMacro !Range  Name ModuleApplication OpenShortHand ImportDirective
 	| Module      !Range QName [TypedBindings] [Declaration]
 	| Pragma      Pragma
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 data ModuleApplication = SectionApp Range [TypedBindings] Expr
                        | RecordModuleIFS Range QName
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 data OpenShortHand = DoOpen | DontOpen
-    deriving (Typeable, Data, Show)
+    deriving (Typeable, Show)
 
 -- Pragmas ----------------------------------------------------------------
 
@@ -281,7 +302,8 @@
               -- module name.
             | ImpossiblePragma !Range
             | EtaPragma !Range QName
-    deriving (Typeable, Data)
+            | NoTerminationCheckPragma !Range
+    deriving (Typeable)
 
 ---------------------------------------------------------------------------
 
@@ -312,8 +334,9 @@
 	vApp (AppView e es) arg = AppView e (es ++ [arg])
 appView (RawApp _ (e:es)) = AppView e $ map arg es
     where
-	arg (HiddenArg _ e) = Arg Hidden    Relevant e
-	arg e		    = Arg NotHidden Relevant (unnamed e)
+	arg (HiddenArg   _ e) = Arg Hidden    Relevant e
+	arg (InstanceArg _ e) = Arg Instance  Relevant e
+	arg e		      = Arg NotHidden Relevant (unnamed e)
 appView e = AppView e []
 
 {--------------------------------------------------------------------------
@@ -328,7 +351,7 @@
     AppP p p'            -> patternHead p
     RawAppP _ []         -> __IMPOSSIBLE__
     RawAppP _ (p:_)      -> patternHead p
-    OpAppP _ name ps     -> return $ name
+    OpAppP _ name ps     -> return $ unqualify name
     HiddenP _ (namedPat) -> patternHead (namedThing namedPat)
     ParenP _ p           -> patternHead p
     WildP _              -> Nothing
@@ -345,9 +368,9 @@
 patternNames p =
   case p of
     IdentP x             -> [unqualify x]
-    AppP p p'            -> concatMap patternNames [p, namedThing $ unArg p']
+    AppP p p'            -> concatMap patternNames [p, namedArg p']
     RawAppP _ ps         -> concatMap patternNames  ps
-    OpAppP _ name ps     -> name : concatMap patternNames ps
+    OpAppP _ name ps     -> unqualify name : concatMap patternNames ps
     HiddenP _ (namedPat) -> patternNames (namedThing namedPat)
     ParenP _ p           -> patternNames p
     WildP _              -> []
@@ -435,7 +458,7 @@
     getRange (DataSig r _ _ _ _)       = r
     getRange (Data r _ _ _ _ _)	       = r
     getRange (RecordSig r _ _ _)       = r
-    getRange (Record r _ _ _ _ _)      = r
+    getRange (Record r _ _ _ _ _ _)    = r
     getRange (Mutual r _)	       = r
     getRange (Abstract r _)	       = r
     getRange (Open r _ _)	       = r
@@ -447,12 +470,17 @@
     getRange (Module r _ _ _)	       = r
     getRange (Infix f _)	       = getRange f
     getRange (Syntax n _)              = getRange n
+    getRange (PatternSyn r _ _ _)      = r
     getRange (Pragma p)		       = getRange p
 
 instance HasRange LHS where
   getRange (LHS p ps eqns ws) = fuseRange p (fuseRange ps (eqns ++ ws))
   getRange (Ellipsis r _ _ _) = r
 
+instance HasRange LHSCore where
+  getRange (LHSHead f ps) = fuseRange f ps
+  getRange (LHSProj d ps1 lhscore ps2) = d `fuseRange` ps1 `fuseRange` lhscore `fuseRange` ps2
+
 instance HasRange RHS where
     getRange AbsurdRHS = noRange
     getRange (RHS e)   = getRange e
@@ -469,6 +497,7 @@
     getRange (ImportPragma r _)           = r
     getRange (ImpossiblePragma r)         = r
     getRange (EtaPragma r _)              = r
+    getRange (NoTerminationCheckPragma r) = r
 
 instance HasRange UsingOrHiding where
     getRange (Using xs)	    = getRange xs
@@ -500,3 +529,139 @@
     getRange (HiddenP r _)	= r
     getRange (InstanceP r _)	= r
     getRange (DotP r _)		= r
+
+instance KillRange AsName where
+  killRange (AsName n _) = killRange1 (flip AsName noRange) n
+
+instance KillRange BoundName where
+  killRange (BName n f) = killRange2 BName n f
+
+instance KillRange Declaration where
+  killRange (TypeSig r n e)         = killRange2 (TypeSig r) n e
+  killRange (Field n a)             = killRange2 Field n a
+  killRange (FunClause l r w)       = killRange3 FunClause l r w
+  killRange (DataSig _ i n l e)     = killRange4 (DataSig noRange) i n l e
+  killRange (Data _ i n l e c)      = killRange4 (Data noRange i) n l e c
+  killRange (RecordSig _ n l e)     = killRange3 (RecordSig noRange) n l e
+  killRange (Record _ n mi mn k e d)= killRange6 (Record noRange) n mi mn k e d
+  killRange (Infix f n)             = killRange2 Infix f n
+  killRange (Syntax n no)           = killRange1 (\n -> Syntax n no) n
+  killRange (PatternSyn _ n ns p)   = killRange3 (PatternSyn noRange) n ns p
+  killRange (Mutual _ d)            = killRange1 (Mutual noRange) d
+  killRange (Abstract _ d)          = killRange1 (Abstract noRange) d
+  killRange (Private _ d)           = killRange1 (Private noRange) d
+  killRange (Postulate _ t)         = killRange1 (Postulate noRange) t
+  killRange (Primitive _ t)         = killRange1 (Primitive noRange) t
+  killRange (Open _ q i)            = killRange2 (Open noRange) q i
+  killRange (Import _ q a o i)      = killRange3 (\q a -> Import noRange q a o) q a i
+  killRange (ModuleMacro _ n m o i) = killRange3 (\n m -> ModuleMacro noRange n m o) n m i
+  killRange (Module _ q t d)        = killRange3 (Module noRange) q t d
+  killRange (Pragma p)              = killRange1 Pragma p
+
+instance KillRange Expr where
+  killRange (Ident q)           = killRange1 Ident q
+  killRange (Lit l)             = killRange1 Lit l
+  killRange (QuestionMark _ n)  = QuestionMark noRange n
+  killRange (Underscore _ n)    = Underscore noRange n
+  killRange (RawApp _ e)        = killRange1 (RawApp noRange) e
+  killRange (App _ e a)         = killRange2 (App noRange) e a
+  killRange (OpApp _ n o)       = killRange2 (OpApp noRange) n o
+  killRange (WithApp _ e es)    = killRange2 (WithApp noRange) e es
+  killRange (HiddenArg _ n)     = killRange1 (HiddenArg noRange) n
+  killRange (InstanceArg _ n)   = killRange1 (InstanceArg noRange) n
+  killRange (Lam _ l e)         = killRange2 (Lam noRange) l e
+  killRange (AbsurdLam _ h)     = killRange1 (AbsurdLam noRange) h
+  killRange (ExtendedLam _ lrw) = killRange1 (ExtendedLam noRange) lrw
+  killRange (Fun _ e1 e2)       = killRange2 (Fun noRange) e1 e2
+  killRange (Pi t e)            = killRange2 Pi t e
+  killRange (Set _)             = Set noRange
+  killRange (Prop _)            = Prop noRange
+  killRange (SetN _ n)          = SetN noRange n
+  killRange (Rec _ ne)          = killRange1 (Rec noRange) ne
+  killRange (RecUpdate _ e ne)  = killRange2 (RecUpdate noRange) e ne
+  killRange (Let _ d e)         = killRange2 (Let noRange) d e
+  killRange (Paren _ e)         = killRange1 (Paren noRange) e
+  killRange (Absurd _)          = Absurd noRange
+  killRange (As _ n e)          = killRange2 (As noRange) n e
+  killRange (Dot _ e)           = killRange1 (Dot noRange) e
+  killRange (ETel t)            = killRange1 ETel t
+  killRange (QuoteGoal _ n e)   = killRange2 (QuoteGoal noRange) n e
+  killRange (Quote _)           = Quote noRange
+  killRange (QuoteTerm _)       = QuoteTerm noRange
+  killRange (Unquote _)         = Unquote noRange
+  killRange (DontCare e)        = killRange1 DontCare e
+
+instance KillRange ImportDirective where
+  killRange (ImportDirective _ u r p) =
+    killRange2 (\u r -> ImportDirective noRange u r p) u r
+
+instance KillRange ImportedName where
+  killRange (ImportedModule n) = killRange1 ImportedModule n
+  killRange (ImportedName   n) = killRange1 ImportedName   n
+
+instance KillRange LamBinding where
+  killRange (DomainFree h r b) = killRange2 (\h -> DomainFree h r) h b
+  killRange (DomainFull t)     = killRange1 DomainFull t
+
+instance KillRange LHS where
+  killRange (LHS p ps r w)     = killRange4 LHS p ps r w
+  killRange (Ellipsis _ p r w) = killRange3 (Ellipsis noRange) p r w
+
+instance KillRange ModuleApplication where
+  killRange (SectionApp _ t e)    = killRange2 (SectionApp noRange) t e
+  killRange (RecordModuleIFS _ q) = killRange1 (RecordModuleIFS noRange) q
+
+instance KillRange e => KillRange (OpApp e) where
+  killRange (SyntaxBindingLambda _ l e) = killRange2 (SyntaxBindingLambda noRange) l e
+  killRange (Ordinary e)                = killRange1 Ordinary e
+
+instance KillRange Pattern where
+  killRange (IdentP q)      = killRange1 IdentP q
+  killRange (AppP p n)      = killRange2 AppP p n
+  killRange (RawAppP _ p)   = killRange1 (RawAppP noRange) p
+  killRange (OpAppP _ n p)  = killRange2 (OpAppP noRange) n p
+  killRange (HiddenP _ n)   = killRange1 (HiddenP noRange) n
+  killRange (InstanceP _ n) = killRange1 (InstanceP noRange) n
+  killRange (ParenP _ p)    = killRange1 (ParenP noRange) p
+  killRange (WildP _)       = WildP noRange
+  killRange (AbsurdP _)     = AbsurdP noRange
+  killRange (AsP _ n p)     = killRange2 (AsP noRange) n p
+  killRange (DotP _ e)      = killRange1 (DotP noRange) e
+  killRange (LitP l)        = killRange1 LitP l
+
+instance KillRange Pragma where
+  killRange (OptionsPragma _ s)           = OptionsPragma noRange s
+  killRange (BuiltinPragma _ s e)         = killRange1 (BuiltinPragma noRange s) e
+  killRange (CompiledDataPragma _ q s ss) = killRange1 (\q -> CompiledDataPragma noRange q s ss) q
+  killRange (CompiledTypePragma _ q s)    = killRange1 (\q -> CompiledTypePragma noRange q s) q
+  killRange (CompiledPragma _ q s)        = killRange1 (\q -> CompiledPragma noRange q s) q
+  killRange (CompiledEpicPragma _ q s)    = killRange1 (\q -> CompiledEpicPragma noRange q s) q
+  killRange (CompiledJSPragma _ q s)      = killRange1 (\q -> CompiledJSPragma noRange q s) q
+  killRange (StaticPragma _ q)            = killRange1 (StaticPragma noRange) q
+  killRange (ImportPragma _ s)            = ImportPragma noRange s
+  killRange (ImpossiblePragma _)          = ImpossiblePragma noRange
+  killRange (EtaPragma _ q)               = killRange1 (EtaPragma noRange) q
+  killRange (NoTerminationCheckPragma _)  = NoTerminationCheckPragma noRange
+
+instance KillRange Renaming where
+  killRange (Renaming i n _) = killRange2 (\i n -> Renaming i n noRange) i n
+
+instance KillRange RHS where
+  killRange AbsurdRHS = AbsurdRHS
+  killRange (RHS e)   = killRange1 RHS e
+
+instance KillRange TypedBinding where
+  killRange (TBind _ b e) = killRange2 (TBind noRange) b e
+  killRange (TNoBind e)   = killRange1 TNoBind e
+
+instance KillRange TypedBindings where
+  killRange (TypedBindings _ t) = killRange1 (TypedBindings noRange) t
+
+instance KillRange UsingOrHiding where
+  killRange (Hiding i) = killRange1 Hiding i
+  killRange (Using  i) = killRange1 Using  i
+
+instance KillRange WhereClause where
+  killRange NoWhere         = NoWhere
+  killRange (AnyWhere d)    = killRange1 AnyWhere d
+  killRange (SomeWhere n d) = killRange2 SomeWhere n d
diff --git a/src/full/Agda/Syntax/Concrete/Definitions.hs b/src/full/Agda/Syntax/Concrete/Definitions.hs
--- a/src/full/Agda/Syntax/Concrete/Definitions.hs
+++ b/src/full/Agda/Syntax/Concrete/Definitions.hs
@@ -7,18 +7,18 @@
     , DeclarationException(..)
     , Nice, runNice
     , niceDeclarations
-    , notSoNiceDeclarations
+    , notSoNiceDeclaration
     ) where
 
 import Control.Arrow ((***), (&&&))
 import Control.Applicative
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.Foldable hiding (concatMap, mapM_, notElem, elem, all)
 import qualified Data.Map as Map
 import Data.Map (Map)
 import Control.Monad.Error
 import Control.Monad.State
-import Data.List
+import Data.List as List
 import Data.Maybe
 import Data.Traversable (traverse)
 
@@ -56,7 +56,7 @@
             -- ^ Axioms and functions can be declared irrelevant.
         | NiceField Range Fixity' Access IsAbstract Name (Arg Expr)
         | PrimitiveFunction Range Fixity' Access IsAbstract Name Expr
-        | NiceMutual Range [NiceDeclaration]
+        | NiceMutual Range TerminationCheck [NiceDeclaration]
         | NiceModule Range Access IsAbstract QName Telescope [Declaration]
         | NiceModuleMacro Range Access IsAbstract Name ModuleApplication OpenShortHand ImportDirective
         | NiceOpen Range QName ImportDirective
@@ -64,12 +64,19 @@
         | NicePragma Range Pragma
         | NiceRecSig Range Fixity' Access Name [LamBinding] Expr
         | NiceDataSig Range Fixity' Access Name [LamBinding] Expr
-        | FunSig Range Fixity' Access Relevance Name Expr
-        | FunDef  Range [Declaration] Fixity' IsAbstract Name [Clause] -- ^ block of function clauses (we have seen the type signature before)
+        | NiceFunClause Range Access IsAbstract TerminationCheck Declaration
+          -- ^ a uncategorized function clause, could be a function clause
+          --   without type signature or a pattern lhs (e.g. for irrefutable let)x
+        | FunSig Range Fixity' Access Relevance TerminationCheck Name Expr
+        | FunDef  Range [Declaration] Fixity' IsAbstract TerminationCheck Name [Clause] -- ^ block of function clauses (we have seen the type signature before)
         | DataDef Range Fixity' IsAbstract Name [LamBinding] [NiceConstructor]
-        | RecDef Range Fixity' IsAbstract Name (Maybe (ThingWithFixity Name)) [LamBinding] [NiceDeclaration]
-    deriving (Typeable, Data, Show)
+        | RecDef Range Fixity' IsAbstract Name (Maybe Induction) (Maybe (ThingWithFixity Name)) [LamBinding] [NiceDeclaration]
+        | NicePatternSyn Range Fixity' Name [Name] Pattern
+    deriving (Typeable, Show)
 
+-- | Termination check? (Default = True).
+type TerminationCheck = Bool
+
 -- | Only 'Axiom's.
 type NiceConstructor = NiceTypeSignature
 
@@ -79,15 +86,17 @@
 -- | One clause in a function definition. There is no guarantee that the 'LHS'
 --   actually declares the 'Name'. We will have to check that later.
 data Clause = Clause Name LHS RHS WhereClause [Clause]
-    deriving (Typeable, Data, Show)
+    deriving (Typeable, Show)
 
 -- | The exception type.
 data DeclarationException
         = MultipleFixityDecls [(Name, [Fixity'])]
         | MissingDefinition Name
         | MissingWithClauses Name
-        | MissingTypeSignature LHS
+        | MissingTypeSignature LHS -- Andreas 2012-06-02: currently unused, remove after a while -- Fredrik 2012-09-20: now used, can we keep it?
         | MissingDataSignature Name
+        | WrongDefinition Name DataRecOrFun DataRecOrFun
+        | WrongParameters Name
         | NotAllowedInMutual NiceDeclaration
         | UnknownNamesInFixityDecl [Name]
         | Codata Range
@@ -95,6 +104,7 @@
         | UselessPrivate Range
         | UselessAbstract Range
         | AmbiguousFunClauses LHS [Name] -- ^ in a mutual block, a clause could belong to any of the @[Name]@ type signatures
+        | InvalidNoTerminationCheckPragma Range
     deriving (Typeable)
 
 instance HasRange DeclarationException where
@@ -103,6 +113,8 @@
     getRange (MissingWithClauses x)        = getRange x
     getRange (MissingTypeSignature x)      = getRange x
     getRange (MissingDataSignature x)      = getRange x
+    getRange (WrongDefinition x k k')      = getRange x
+    getRange (WrongParameters x)           = getRange x
     getRange (AmbiguousFunClauses lhs xs)  = getRange lhs
     getRange (NotAllowedInMutual x)        = getRange x
     getRange (UnknownNamesInFixityDecl xs) = getRange . head $ xs
@@ -110,23 +122,26 @@
     getRange (DeclarationPanic _)          = noRange
     getRange (UselessPrivate r)            = r
     getRange (UselessAbstract r)           = r
+    getRange (InvalidNoTerminationCheckPragma r) = r
 
 instance HasRange NiceDeclaration where
   getRange (Axiom r _ _ _ _ _)             = r
   getRange (NiceField r _ _ _ _ _)         = r
-  getRange (NiceMutual r _)                = r
+  getRange (NiceMutual r _ _)              = r
   getRange (NiceModule r _ _ _ _ _)        = r
   getRange (NiceModuleMacro r _ _ _ _ _ _) = r
   getRange (NiceOpen r _ _)                = r
   getRange (NiceImport r _ _ _ _)          = r
   getRange (NicePragma r _)                = r
   getRange (PrimitiveFunction r _ _ _ _ _) = r
-  getRange (FunSig r _ _ _ _ _)            = r
-  getRange (FunDef r _ _ _ _ _)            = r
+  getRange (FunSig r _ _ _ _ _ _)          = r
+  getRange (FunDef r _ _ _ _ _ _)          = r
   getRange (DataDef r _ _ _ _ _)           = r
-  getRange (RecDef r _ _ _ _ _ _)          = r
+  getRange (RecDef r _ _ _ _ _ _ _)        = r
   getRange (NiceRecSig r _ _ _ _ _)        = r
   getRange (NiceDataSig r _ _ _ _ _)       = r
+  getRange (NicePatternSyn r _ _ _ _)      = r
+  getRange (NiceFunClause r _ _ _ _)       = r
 
 instance Error DeclarationException where
   noMsg  = strMsg ""
@@ -147,6 +162,11 @@
     pwords "Missing type signature for left hand side" ++ [pretty x]
   show (MissingDataSignature x) = show $ fsep $
     pwords "Missing type signature for " ++ [pretty x]
+  show (WrongDefinition x k k') = show $ fsep $ pretty x :
+    pwords ("has been declared as a " ++ show k ++
+      ", but is being defined as a " ++ show k')
+  show (WrongParameters x) = show $ fsep $
+    pwords "List of parameters does not match previous signature for" ++ [pretty x]
   show (AmbiguousFunClauses lhs xs) = show $ fsep $
     pwords "More than one matching type signature for left hand side" ++ [pretty lhs] ++
     pwords "it could belong to any of:" ++ map pretty xs
@@ -156,6 +176,8 @@
     pwords "Using private here has no effect. Move it to the type signatures to make the definitions private."
   show (UselessAbstract _)      = show $ fsep $
     pwords "Using abstract here has no effect. Move it to the definitions to make them abstract."
+  show (InvalidNoTerminationCheckPragma _) = show $ fsep $
+    pwords "The NO_TERMINATION_CHECK pragma can only preceed a mutual block or a function definition."
   show (NotAllowedInMutual nd) = show $ fsep $
     [text $ decl nd] ++ pwords "are not allowed in mutual blocks"
     where
@@ -168,6 +190,7 @@
       decl (NiceImport{})        = "Import statements"
       decl (NicePragma{})        = "Pragmas"
       decl (PrimitiveFunction{}) = "Primitive declarations"
+      decl (NicePatternSyn{})    = "Pattern synonyms"
       decl _ = __IMPOSSIBLE__
   show (Codata _) =
     "The codata construction has been removed. " ++
@@ -183,11 +206,37 @@
   | NotInMutual -- ^ we are nicifying decls not in a mutual block
     deriving (Eq, Show)
 
-data DataRecOrFun = DataName | RecName | FunName
+-- | The kind of the forward declaration, remembering the parameters.
+data DataRecOrFun
+  = DataName Params           -- ^ name of a data with parameters
+  | RecName  Params           -- ^ name of a record with parameters
+  | FunName  TerminationCheck -- ^ name of a function
   deriving (Eq, Ord)
 
+type Params = [Hiding]
+
+instance Show DataRecOrFun where
+  show (DataName n) = "data type" --  "with " ++ show n ++ " visible parameters"
+  show (RecName n)  = "record type" -- "with " ++ show n ++ " visible parameters"
+  show (FunName{})  = "function"
+
+isFunName :: DataRecOrFun -> Bool
+isFunName (FunName{}) = True
+isFunName _           = False
+
+sameKind :: DataRecOrFun -> DataRecOrFun -> Bool
+sameKind DataName{} DataName{} = True
+sameKind RecName{} RecName{} = True
+sameKind FunName{} FunName{} = True
+sameKind _ _ = False
+
+terminationCheck :: DataRecOrFun -> Bool
+terminationCheck (FunName tc) = tc
+terminationCheck _            = True
+
+type LoneSigs = [(DataRecOrFun, Name)]
 data NiceEnv = NiceEnv
-  { loneSigs :: [(DataRecOrFun, Name)]   -- ^ lone type signatures that wait for their fun.clauses
+  { loneSigs :: LoneSigs -- ^ lone type signatures that wait for their definition
   , fixs     :: Map Name Fixity'
   }
 
@@ -199,24 +248,28 @@
 
 type Nice = StateT NiceEnv (Either DeclarationException)
 
+{- Andreas, 2012-04-30 MOVED to Utils.Monad
 localState :: Nice a -> Nice a
 localState m = bracket get put (const m)
+-}
 
 addLoneSig :: DataRecOrFun -> Name -> Nice ()
 addLoneSig k x = modify $ \ niceEnv -> niceEnv { loneSigs = (k, x) : loneSigs niceEnv }
 
-removeLoneSig :: DataRecOrFun -> Name -> Nice ()
-removeLoneSig k x = modify $ \ niceEnv -> niceEnv { loneSigs = delete (k, x) $ loneSigs niceEnv }
+removeLoneSig :: Name -> Nice ()
+removeLoneSig x = modify $ \ niceEnv ->
+  niceEnv { loneSigs = filter (\ (k', x') -> x /= x') $ loneSigs niceEnv }
 
-hasSig :: DataRecOrFun -> Name -> Nice Bool
-hasSig k x = gets $ elem (k, x) . loneSigs
+-- | Search for forward type signature that
+getSig :: Name -> Nice (Maybe DataRecOrFun)
+getSig n = gets $ fmap fst . List.find (\ (k, x) -> x == n) . loneSigs
 
 noLoneSigs :: Nice Bool
 noLoneSigs = gets $ null . loneSigs
 
-checkLoneSigs :: Nice ()
-checkLoneSigs = do
-  xs <- gets loneSigs
+-- | Ensure that all forward declarations have been given a definition.
+checkLoneSigs :: LoneSigs -> Nice ()
+checkLoneSigs xs =
   case xs of
     []       -> return ()
     (_, x):_ -> throwError $ MissingDefinition x
@@ -229,14 +282,39 @@
 
 data DeclKind = LoneSig DataRecOrFun Name | LoneDef DataRecOrFun Name | OtherDecl
 
-declKind (FunSig _ _ _ _ x _)      = LoneSig FunName x
-declKind (NiceRecSig _ _ _ x _ _)  = LoneSig RecName x
-declKind (NiceDataSig _ _ _ x _ _) = LoneSig DataName x
-declKind (FunDef _ _ _ _ x _)      = LoneDef FunName x
-declKind (DataDef _ _ _ x _ _)     = LoneDef DataName x
-declKind (RecDef _ _ _ x _ _ _)    = LoneDef RecName x
-declKind _                         = OtherDecl
+declKind (FunSig _ _ _ _ tc x _)      = LoneSig (FunName tc) x
+declKind (NiceRecSig _ _ _ x pars _)  = LoneSig (RecName $ parameters pars) x
+declKind (NiceDataSig _ _ _ x pars _) = LoneSig (DataName $ parameters pars) x
+declKind (FunDef _ _ _ _ tc x _)      = LoneDef (FunName tc) x
+declKind (DataDef _ _ _ x pars _)     = LoneDef (DataName $ parameters pars) x
+declKind (RecDef _ _ _ x _ _ pars _)  = LoneDef (RecName $ parameters pars) x
+declKind _                            = OtherDecl
 
+-- | Compute visible parameters of a data or record signature or definition.
+parameters :: [LamBinding] -> Params
+parameters = List.concat . List.map numP where
+  numP (DomainFree h _ _) = [h]
+  numP (DomainFull (TypedBindings _ (Arg h _ (TBind _ xs _)))) = List.replicate (length xs) h
+  numP (DomainFull (TypedBindings _ (Arg _ _ (TNoBind{})))) =  __IMPOSSIBLE__
+
+{- OLD:
+
+-- | Compute number of visible parameters of a data or record signature or definition.
+numberOfPars :: [LamBinding] -> Params
+numberOfPars = List.sum . List.map numP where
+  numP (DomainFree NotHidden _ _) = 1
+  numP (DomainFull (TypedBindings _ (Arg NotHidden _ (TBind _ xs _)))) = length xs
+  numP (DomainFull (TypedBindings _ (Arg _ _ (TNoBind{})))) =  __IMPOSSIBLE__
+  numP _ = 0  -- hidden / instance argument
+-- | Compute number of parameters of a data or record signature or definition.
+numberOfPars :: [LamBinding] -> Int
+numberOfPars = List.sum . List.map numP where
+  numP (DomainFree{}) = 1
+  numP (DomainFull (TypedBindings _ arg)) = nP $ unArg arg where
+    nP (TBind _ xs _) = length xs
+    nP (TNoBind _)    = __IMPOSSIBLE__
+-}
+
 niceDeclarations :: [Declaration] -> Nice [NiceDeclaration]
 niceDeclarations ds = do
   fixs <- fixities ds
@@ -244,7 +322,7 @@
     []  -> localState $ do
       put $ initNiceEnv { fixs = fixs }
       ds <- nice ds
-      checkLoneSigs
+      checkLoneSigs =<< gets loneSigs
       modify $ \s -> s { loneSigs = [] }
       inferMutualBlocks ds
     xs  -> throwError $ UnknownNamesInFixityDecl xs
@@ -260,9 +338,10 @@
       DataSig _ _ x _ _                            -> [x]
       Data _ _ x _ _ cs                            -> x : concatMap declaredNames cs
       RecordSig _ x _ _                            -> [x]
-      Record _ x c _ _ _                           -> x : foldMap (:[]) c
+      Record _ x _ c _ _ _                         -> x : foldMap (:[]) c
       Infix _ _                                    -> []
       Syntax _ _                                   -> []
+      PatternSyn _ x _ _                           -> [x]
       Mutual _ ds                                  -> concatMap declaredNames ds
       Abstract _ ds                                -> concatMap declaredNames ds
       Private _ ds                                 -> concatMap declaredNames ds
@@ -282,76 +361,65 @@
         LoneDef _ x -> __IMPOSSIBLE__
         LoneSig k x -> do
           addLoneSig k x
-          (ds0, ds1) <- untilAllDefined ds
-          (NiceMutual (getRange (d : ds0)) (d : ds0) :) <$> inferMutualBlocks ds1
+          (tc, (ds0, ds1)) <- untilAllDefined (terminationCheck k) ds
+
+          -- Record modules are, for performance reasons, not always
+          -- placed in mutual blocks.
+          let prefix = case (d, ds0) of
+                (NiceRecSig{}, [r@RecDef{}]) -> ([d, r] ++)
+                _                            ->
+                  (NiceMutual (getRange (d : ds0)) tc (d : ds0) :)
+          prefix <$> inferMutualBlocks ds1
       where
-        untilAllDefined ds = do
+        untilAllDefined :: TerminationCheck
+          -> [NiceDeclaration]
+          -> Nice (TerminationCheck, ([NiceDeclaration], [NiceDeclaration]))
+        untilAllDefined tc ds = do
           done <- noLoneSigs
-          if done then return ([], ds) else
+          if done then return (tc, ([], ds)) else
             case ds of
-              []     -> __IMPOSSIBLE__ <$ checkLoneSigs
+              []     -> __IMPOSSIBLE__ <$ (checkLoneSigs =<< gets loneSigs)
               d : ds -> case declKind d of
-                LoneSig k x -> addLoneSig    k x >> cons d (untilAllDefined ds)
-                LoneDef k x -> removeLoneSig k x >> cons d (untilAllDefined ds)
-                OtherDecl   -> cons d (untilAllDefined ds)
+                LoneSig k x -> addLoneSig  k x >> cons d (untilAllDefined (tc && terminationCheck k) ds)
+                LoneDef k x -> removeLoneSig x >> cons d (untilAllDefined (tc && terminationCheck k) ds)
+                OtherDecl   -> cons d (untilAllDefined tc ds)
           where
-            cons d = fmap ((d :) *** id)
+            cons d = fmap (id *** (d :) *** id)
 
     nice :: [Declaration] -> Nice [NiceDeclaration]
     nice [] = return []
+    nice (Pragma (NoTerminationCheckPragma r) : ds@(Mutual{} : _)) = do
+      ds <- nice ds
+      case ds of
+        NiceMutual r _ ds' : ds -> return $ NiceMutual r False ds' : ds
+        _ -> __IMPOSSIBLE__
+    nice (Pragma (NoTerminationCheckPragma r) : d@TypeSig{} : ds) =
+      niceTypeSig False d ds
+    nice (Pragma (NoTerminationCheckPragma r) : d@FunClause{} : ds) =
+      niceFunClause False d ds
     nice (d:ds) = do
       case d of
-        TypeSig rel x t -> do
-           fx <- getFixity x
-           -- register x as lone type signature, to recognize clauses later
-           addLoneSig FunName x
-           ds <- nice ds
-           return $ FunSig (getRange d) fx PublicAccess rel x t : ds
-        cl@(FunClause lhs _ _) -> do
-          xs <- gets $ map snd . filter ((== FunName) . fst) . loneSigs
-          -- for each type signature 'x' waiting for clauses, we try
-          -- if we have some clauses for 'x'
-          fixs <- gets fixs
-          case filter (\ (x,(fits,rest)) -> not $ null fits) $
-                  map (\ x -> (x, span (couldBeFunClauseOf (Map.lookup x fixs) x) $ d : ds)) xs of
-            -- case: clauses match none of the sigs
-            -- treat it as a function clause without a type signature
-            [] -> case lhs of
-              LHS p [] _ _ | IdentP (QName x) <- removeSingletonRawAppP p -> do
-                ds <- nice ds
-                d  <- mkFunDef Relevant x Nothing [cl] -- fun def without type signature is relevant
-                return $ d ++ ds
-              _ -> throwError $ MissingTypeSignature lhs
-            -- case: clauses match exactly one of the sigs
-            [(x,(fits,rest))] -> do
-               removeLoneSig FunName x
-               cs  <- mkClauses x $ expandEllipsis fits
-               ds1 <- nice rest
-               fx  <- getFixity x
-               d   <- return $ FunDef (getRange fits) fits fx ConcreteDef x cs
-               return $ d : ds1
-            -- case: clauses match more than one sigs (ambiguity)
-            l -> throwError $ AmbiguousFunClauses lhs (map fst l) -- "ambiguous function clause; cannot assign it uniquely to one type signature"
-
+        TypeSig{} -> niceTypeSig True d ds
+        FunClause{} -> niceFunClause True d ds
         Field x t                     -> (++) <$> niceAxioms [ d ] <*> nice ds
         DataSig r CoInductive x tel t -> throwError (Codata r)
         Data r CoInductive x tel t cs -> throwError (Codata r)
         DataSig r Inductive   x tel t -> do
-          addLoneSig DataName x
+          addLoneSig (DataName $ parameters tel) x
           (++) <$> dataOrRec DataDef NiceDataSig niceAxioms r x tel (Just t) Nothing
                <*> nice ds
         Data r Inductive x tel t cs -> do
-          t <- defaultTypeSig DataName x t
+          t <- defaultTypeSig (DataName $ parameters tel) x t
           (++) <$> dataOrRec DataDef NiceDataSig niceAxioms r x tel t (Just cs)
                <*> nice ds
         RecordSig r x tel t -> do
-          addLoneSig RecName x
+          addLoneSig (RecName $ parameters tel) x
           fx <- getFixity x
           (NiceRecSig r fx PublicAccess x tel t :) <$> nice ds
-        Record r x c tel t cs -> do
-          t <- defaultTypeSig RecName x t
+        Record r x i c tel t cs -> do
+          t <- defaultTypeSig (RecName $ parameters tel) x t
           c <- traverse (\c -> ThingWithFixity c <$> getFixity c) c
-          (++) <$> dataOrRec (\x1 x2 x3 x4 -> RecDef x1 x2 x3 x4 c) NiceRecSig
+          (++) <$> dataOrRec (\x1 x2 x3 x4 -> RecDef x1 x2 x3 x4 i c) NiceRecSig
                              niceDeclarations r x tel t (Just cs)
                <*> nice ds
         Mutual r ds' ->
@@ -376,18 +444,77 @@
 
         Infix _ _           -> nice ds
         Syntax _ _          -> nice ds
+        PatternSyn r n as p -> do
+          fx <- getFixity n
+          (NicePatternSyn r fx n as p :) <$> nice ds
         Open r x is         -> (NiceOpen r x is :) <$> nice ds
         Import r x as op is -> (NiceImport r x as op is :) <$> nice ds
 
+        Pragma (NoTerminationCheckPragma r) ->
+          throwError $ InvalidNoTerminationCheckPragma r
         Pragma p            -> (NicePragma (getRange p) p :) <$> nice ds
 
+    niceFunClause :: TerminationCheck -> Declaration -> [Declaration] -> Nice [NiceDeclaration]
+    niceFunClause termCheck d@(FunClause lhs _ _) ds = do
+          xs <- gets $ map snd . filter (isFunName . fst) . loneSigs
+          -- for each type signature 'x' waiting for clauses, we try
+          -- if we have some clauses for 'x'
+          fixs <- gets fixs
+{- OLD CODE, a bit dense
+          case filter (\ (x,(fits,rest)) -> not $ null fits) $
+                  map (\ x -> (x, span (couldBeFunClauseOf (Map.lookup x fixs) x) $ d : ds)) xs of
+-}
+          case [ (x, (fits, rest))
+               | x <- xs
+               , let (fits, rest) =
+                      span (couldBeFunClauseOf (Map.lookup x fixs) x) (d : ds)
+               , not (null fits)
+               ] of
+            -- case: clauses match none of the sigs
+            -- then the lhs can only be a single identifier
+            -- treat it as a function clause without a type signature
+            [] -> case lhs of
+              LHS p [] _ _ | IdentP (QName x) <- removeSingletonRawAppP p -> do
+                ds <- nice ds
+                d  <- mkFunDef Relevant termCheck x Nothing [d] -- fun def without type signature is relevant
+                return $ d ++ ds
+              _ -> do
+                ds <- nice ds
+                return $ NiceFunClause (getRange d) PublicAccess ConcreteDef termCheck d : ds
+-- OLD:             _ -> throwError $ MissingTypeSignature lhs
+-- error now raised in ConcreteToAbstract
+            -- case: clauses match exactly one of the sigs
+            [(x,(fits,rest))] -> do
+               removeLoneSig x
+               cs  <- mkClauses x $ expandEllipsis fits
+               ds1 <- nice rest
+               fx  <- getFixity x
+               d   <- return $ FunDef (getRange fits) fits fx ConcreteDef termCheck x cs
+               return $ d : ds1
+            -- case: clauses match more than one sigs (ambiguity)
+            l -> throwError $ AmbiguousFunClauses lhs (map fst l) -- "ambiguous function clause; cannot assign it uniquely to one type signature"
+    niceFunClause _ _ _ = __IMPOSSIBLE__
+
+    niceTypeSig :: TerminationCheck -> Declaration -> [Declaration] -> Nice [NiceDeclaration]
+    niceTypeSig termCheck d@(TypeSig rel x t) ds = do
+      fx <- getFixity x
+      -- register x as lone type signature, to recognize clauses later
+      addLoneSig (FunName termCheck) x
+      ds <- nice ds
+      return $ FunSig (getRange d) fx PublicAccess rel termCheck x t : ds
+    niceTypeSig _ _ _ = __IMPOSSIBLE__
+
     -- We could add a default type signature here, but at the moment we can't
     -- infer the type of a record or datatype, so better to just fail here.
+    defaultTypeSig :: DataRecOrFun -> Name -> Maybe Expr -> Nice (Maybe Expr)
     defaultTypeSig k x t@Just{} = return t
-    defaultTypeSig k x Nothing  =
-      ifM (hasSig k x)
-          (Nothing <$ removeLoneSig k x)
-          (throwError $ MissingDataSignature x)
+    defaultTypeSig k x Nothing  = do
+      mk <- getSig x
+      case mk of
+        Nothing -> throwError $ MissingDataSignature x
+        Just k' | k == k'       -> Nothing <$ removeLoneSig x
+                | sameKind k k' -> throwError $ WrongParameters x
+                | otherwise     -> throwError $ WrongDefinition x k' k
 
     dataOrRec mkDef mkSig niceD r x tel mt mcs = do
       mds <- traverse niceD mcs
@@ -420,11 +547,11 @@
     toPrim _                     = __IMPOSSIBLE__
 
     -- Create a function definition.
-    mkFunDef rel x mt ds0 = do
+    mkFunDef rel termCheck x mt ds0 = do
       cs <- mkClauses x $ expandEllipsis ds0
       f  <- getFixity x
-      return [ FunSig (fuseRange x t) f PublicAccess rel x t
-             , FunDef (getRange ds0) ds0 f ConcreteDef x cs ]
+      return [ FunSig (fuseRange x t) f PublicAccess rel termCheck x t
+             , FunDef (getRange ds0) ds0 f ConcreteDef termCheck x cs ]
         where
           t = case mt of
                 Just t  -> t
@@ -512,7 +639,7 @@
     isFunClauseOf x (FunClause (LHS p _ _ _) _ _) =
      -- p is the whole left hand side, excluding "with" patterns and clauses
       case removeSingletonRawAppP p of
-        IdentP (QName q)    -> x == q
+        IdentP (QName q)    -> x == q  -- lhs is just an identifier
         _                   -> True
             -- more complicated lhss must come with type signatures, so we just assume
             -- it's part of the current definition
@@ -526,22 +653,23 @@
     mkOldMutual :: Range -> [NiceDeclaration] -> Nice NiceDeclaration
     mkOldMutual r ds = do
         -- Check that there aren't any missing definitions
-        case filter (`notElem` defNames) sigNames of
-          []       -> return ()
-          (_, x):_ -> throwError $ MissingDefinition x
+        checkLoneSigs loneNames
         -- Check that there are no declarations that aren't allowed in old style mutual blocks
         case [ d | (d, OtherDecl) <- zip ds $ map declKind ds ] of
           []  -> return ()
+          (NiceFunClause _ _ _ _ (FunClause lhs _ _)):_ -> throwError $ MissingTypeSignature lhs
           d:_ -> throwError $ NotAllowedInMutual d
-        return $ NiceMutual r $ sigs ++ other
+        return $ NiceMutual r True $ sigs ++ other  -- termCheck is adjusted later
       where
         -- Pull type signatures to the top
         (sigs, other) = partition isTypeSig ds
         isTypeSig d | LoneSig{} <- declKind d = True
         isTypeSig _ = False
 
-        sigNames = [ (k, x) | LoneSig k x <- map declKind ds ]
-        defNames = [ (k, x) | LoneDef k x <- map declKind ds ]
+        sigNames  = [ (k, x) | LoneSig k x <- map declKind ds ]
+        defNames  = [ (k, x) | LoneDef k x <- map declKind ds ]
+        -- compute the set difference with equality just on names
+        loneNames = filter (\ (_, x) -> not (List.any (\ (_, x') -> x == x') defNames)) sigNames
 
     abstractBlock _ [] = return []
     abstractBlock r ds
@@ -572,11 +700,12 @@
         case d of
             NiceField r f a _ x e            -> NiceField r f a AbstractDef x e
             PrimitiveFunction r f a _ x e    -> PrimitiveFunction r f a AbstractDef x e
-            NiceMutual r ds                  -> NiceMutual r (map mkAbstract ds)
+            NiceMutual r termCheck ds        -> NiceMutual r termCheck (map mkAbstract ds)
             NiceModuleMacro r a _ x ma op is -> NiceModuleMacro r a AbstractDef x ma op is
-            FunDef r ds f _ x cs             -> FunDef r ds f AbstractDef x (map mkAbstractClause cs)
+            FunDef r ds f _ tc x cs          -> FunDef r ds f AbstractDef tc x (map mkAbstractClause cs)
             DataDef r f _ x ps cs            -> DataDef r f AbstractDef x ps $ map mkAbstract cs
-            RecDef r f _ x c ps cs           -> RecDef r f AbstractDef x c ps $ map mkAbstract cs
+            RecDef r f _ x i c ps cs         -> RecDef r f AbstractDef x i c ps $ map mkAbstract cs
+            NiceFunClause r a _ termCheck d  -> NiceFunClause r a AbstractDef termCheck d
             NiceModule{}                     -> d
             Axiom{}                          -> d
             NicePragma{}                     -> d
@@ -585,6 +714,7 @@
             FunSig{}                         -> d
             NiceRecSig{}                     -> d
             NiceDataSig{}                    -> d
+            NicePatternSyn{}                 -> d
 
     mkAbstractClause (Clause x lhs rhs wh with) =
         Clause x lhs rhs (mkAbstractWhere wh) (map mkAbstractClause with)
@@ -599,18 +729,20 @@
             Axiom r f _ rel x e              -> Axiom r f PrivateAccess rel x e
             NiceField r f _ a x e            -> NiceField r f PrivateAccess a x e
             PrimitiveFunction r f _ a x e    -> PrimitiveFunction r f PrivateAccess a x e
-            NiceMutual r ds                  -> NiceMutual r (map mkPrivate ds)
+            NiceMutual r termCheck ds        -> NiceMutual r termCheck (map mkPrivate ds)
             NiceModule r _ a x tel ds        -> NiceModule r PrivateAccess a x tel ds
             NiceModuleMacro r _ a x ma op is -> NiceModuleMacro r PrivateAccess a x ma op is
-            FunSig r f _ rel x e           -> FunSig r f PrivateAccess rel x e
-            NiceRecSig r f _ x ls t        -> NiceRecSig r f PrivateAccess x ls t
-            NiceDataSig r f _ x ls t       -> NiceDataSig r f PrivateAccess x ls t
+            FunSig r f _ rel tc x e          -> FunSig r f PrivateAccess rel tc x e
+            NiceRecSig r f _ x ls t          -> NiceRecSig r f PrivateAccess x ls t
+            NiceDataSig r f _ x ls t         -> NiceDataSig r f PrivateAccess x ls t
+            NiceFunClause r _ a termCheck d  -> NiceFunClause r PrivateAccess a termCheck d
             NicePragma _ _                   -> d
             NiceOpen _ _ _                   -> d
             NiceImport _ _ _ _ _             -> d
             FunDef{}                         -> d
             DataDef{}                        -> d
             RecDef{}                         -> d
+            NicePatternSyn _ _ _ _ _         -> d
 
     mkPrivateClause (Clause x lhs rhs wh with) =
         Clause x lhs rhs (mkPrivateWhere wh) (map mkPrivateClause with)
@@ -652,6 +784,36 @@
   _              -> fixities ds
 fixities [] = return $ Map.empty
 
+
+-- Andreas, 2012-04-07
+-- The following function is only used twice, for building a Let, and for
+-- printing an error message.
+notSoNiceDeclaration :: NiceDeclaration -> Declaration
+notSoNiceDeclaration d =
+    case d of
+      Axiom _ _ _ rel x e              -> TypeSig rel x e
+      NiceField _ _ _ _ x argt         -> Field x argt
+      PrimitiveFunction r _ _ _ x e    -> Primitive r [TypeSig Relevant x e]
+      NiceMutual r _ ds                -> Mutual r $ map notSoNiceDeclaration ds
+      NiceModule r _ _ x tel ds        -> Module r x tel ds
+      NiceModuleMacro r _ _ x ma o dir -> ModuleMacro r x ma o dir
+      NiceOpen r x dir                 -> Open r x dir
+      NiceImport r x as o dir          -> Import r x as o dir
+      NicePragma _ p                   -> Pragma p
+      NiceRecSig r _ _ x bs e          -> RecordSig r x bs e
+      NiceDataSig r _ _ x bs e         -> DataSig r Inductive x bs e
+      NiceFunClause _ _ _ _ d          -> d
+      FunSig _ _ _ rel tc x e          -> TypeSig rel x e
+      FunDef r [d] _ _ _ _ _           -> d
+      FunDef r ds _ _ _ _ _            -> Mutual r ds -- Andreas, 2012-04-07 Hack!
+      DataDef r _ _ x bs cs            -> Data r Inductive x bs Nothing $ map notSoNiceDeclaration cs
+      RecDef r _ _ x i c bs ds         -> Record r x i (unThing <$> c) bs Nothing $ map notSoNiceDeclaration ds
+        where unThing (ThingWithFixity c _) = c
+      NicePatternSyn r _ n as p        -> PatternSyn r n as p
+
+{-
+-- Andreas, 2012-03-08 the following function is only used twice,
+-- both just on a single declaration.
 notSoNiceDeclarations :: [NiceDeclaration] -> [Declaration]
 notSoNiceDeclarations = concatMap notNice
   where
@@ -659,7 +821,7 @@
       Axiom _ _ _ rel x e              -> [TypeSig rel x e]
       NiceField _ _ _ _ x argt         -> [Field x argt]
       PrimitiveFunction r _ _ _ x e    -> [Primitive r [TypeSig Relevant x e]]
-      NiceMutual _ ds                  -> concatMap notNice ds
+      NiceMutual _ _ ds                -> concatMap notNice ds
       NiceModule r _ _ x tel ds        -> [Module r x tel ds]
       NiceModuleMacro r _ _ x ma o dir -> [ModuleMacro r x ma o dir]
       NiceOpen r x dir                 -> [Open r x dir]
@@ -667,8 +829,10 @@
       NicePragma _ p                   -> [Pragma p]
       NiceRecSig r _ _ x bs e          -> [RecordSig r x bs e]
       NiceDataSig r _ _ x bs e         -> [DataSig r Inductive x bs e]
-      FunSig _ _ _ rel x e             -> [TypeSig rel x e]
-      FunDef _ ds _ _ _ _              -> ds
+      FunSig _ _ _ rel tc x e          -> [TypeSig rel x e]
+      FunDef _ ds _ _ _ _ _            -> ds
       DataDef r _ _ x bs cs            -> [Data r Inductive x bs Nothing $ concatMap notNice cs]
       RecDef r _ _ x c bs ds           -> [Record r x (unThing <$> c) bs Nothing $ concatMap notNice ds]
         where unThing (ThingWithFixity c _) = c
+      NicePatternSyn r _ n as p        -> [PatternSyn r n as p]
+-}
diff --git a/src/full/Agda/Syntax/Concrete/Name.hs b/src/full/Agda/Syntax/Concrete/Name.hs
--- a/src/full/Agda/Syntax/Concrete/Name.hs
+++ b/src/full/Agda/Syntax/Concrete/Name.hs
@@ -9,7 +9,7 @@
 
 import Data.List
 import Data.Maybe
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 
 import System.FilePath
 
@@ -33,10 +33,10 @@
 -}
 data Name = Name !Range [NamePart]
 	  | NoName !Range NameId
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 data NamePart = Hole | Id String
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 -- | @noName_ = 'noName' 'noRange'@
 noName_ :: Name
@@ -124,7 +124,7 @@
 --     lookup table for namespace names).
 data QName = Qual  Name QName
            | QName Name
-  deriving (Typeable, Data, Eq, Ord)
+  deriving (Typeable, Eq, Ord)
 
 -- | Top-level module names.
 --
@@ -132,7 +132,7 @@
 
 newtype TopLevelModuleName
   = TopLevelModuleName { moduleNameParts :: [String] }
-  deriving (Show, Eq, Ord, Typeable, Data)
+  deriving (Show, Eq, Ord, Typeable)
 
 -- | Turns a qualified name into a 'TopLevelModuleName'. The qualified
 -- name is assumed to represent a top-level module name.
@@ -205,6 +205,10 @@
 instance SetRange Name where
   setRange r (Name _ ps)  = Name r ps
   setRange r (NoName _ i) = NoName r i
+
+instance SetRange QName where
+  setRange r (QName x)  = QName (setRange r x)
+  setRange r (Qual n x) = Qual (setRange r n) (setRange r x)
 
 instance KillRange QName where
   killRange (QName x) = QName $ killRange x
diff --git a/src/full/Agda/Syntax/Concrete/Operators.hs b/src/full/Agda/Syntax/Concrete/Operators.hs
--- a/src/full/Agda/Syntax/Concrete/Operators.hs
+++ b/src/full/Agda/Syntax/Concrete/Operators.hs
@@ -3,7 +3,7 @@
 {-| The parser doesn't know about operators and parses everything as normal
     function application. This module contains the functions that parses the
     operators properly. For a stand-alone implementation of this see
-    @src\/prototyping\/mixfix@.
+    @src\/prototyping\/mixfix\/old@.
 
     It also contains the function that puts parenthesis back given the
     precedence of the context.
@@ -11,14 +11,28 @@
 module Agda.Syntax.Concrete.Operators
     ( parseApplication
     , parseLHS
+    , parsePattern
+    , parsePatternSyn
     , paren
     , mparen
+    -- exports for Copatterns
+    , validConPattern
+    , patternAppView
+    , fullParen
+    , buildParser
+    , parsePat
+    , getDefinedNames
+    , UseBoundNames(..)
+    , qualifierModules
+    , patternQNames
     ) where
 
 import Control.Applicative
+import Control.Monad
 import Control.Monad.Trans
 import Data.Typeable
 import Data.Traversable (traverse)
+import qualified Data.Traversable as Trav
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 import Data.Set (Set)
@@ -27,7 +41,7 @@
 
 import Agda.Syntax.Concrete.Pretty ()
 import Agda.Syntax.Common
-import Agda.Syntax.Concrete
+import Agda.Syntax.Concrete hiding (appView)
 import Agda.Syntax.Concrete.Operators.Parser
 import qualified Agda.Syntax.Abstract.Name as A
 import Agda.Syntax.Position
@@ -36,11 +50,12 @@
 import Agda.Syntax.Scope.Base
 import Agda.Syntax.Scope.Monad
 
-import Agda.TypeChecking.Monad.Base (typeError, TypeError(..))
+import Agda.TypeChecking.Monad.Base (typeError, TypeError(..), LHSOrPatSyn(..))
 import Agda.TypeChecking.Monad.State (getScope)
 import Agda.TypeChecking.Monad.Options
 import Agda.TypeChecking.Monad.Statistics
 
+import Agda.Utils.Either
 import Agda.Utils.ReadP
 import Agda.Utils.Monad
 import Agda.Utils.Tuple
@@ -55,47 +70,52 @@
 -- * Building the parser
 ---------------------------------------------------------------------------
 
-partsInScope :: ScopeM (Set Name)
-partsInScope = do
-    (names, ops) <- localNames
+partsInScope :: FlatScope -> ScopeM (Set QName)
+partsInScope flat = do
+    (names, ops) <- localNames flat
     let xs = concatMap parts names ++ concatMap notationNames ops
     return $ Set.fromList xs
     where
-        parts (NoName _ _)   = []
-        parts x@(Name _ [_]) = [x]
-        parts x@(Name _ xs)  = x : [ Name noRange [i] | i@(Id {}) <- xs ]
+        qual xs x = foldr Qual (QName x) xs
+        parts q = parts' (init $ qnameParts q) (unqualify q)
+        parts' ms (NoName _ _)   = []
+        parts' ms x@(Name _ [_]) = [qual ms x]
+                                   -- The first part should be qualified, but not the rest
+        parts' ms x@(Name _ xs)  = qual ms x : qual ms (Name noRange [first]) : [ QName $ Name noRange [i] | i <- iparts ]
+          where
+            first:iparts = [ i | i@(Id {}) <- xs ]
 
+type FlatScope = Map.Map QName [AbstractName]
+
 -- | Compute all unqualified defined names in scope and their fixities.
-getDefinedNames :: [KindOfName] -> ScopeM [(Name, Fixity')]
-getDefinedNames kinds = do
-  names <- nsNames . everythingInScope <$> getScope
-  reportSLn "scope.operators" 20 $ "everythingInScope: " ++ show names
-  return [ (x, A.nameFixity $ A.qnameName $ anameName d)
-         | (x, ds) <- Map.assocs names
-         , d       <- take 1 ds
-         , anameKind d `elem` kinds
-         ]
+getDefinedNames :: [KindOfName] -> FlatScope -> [(QName, Fixity')]
+getDefinedNames kinds names =
+  [ (x, A.nameFixity $ A.qnameName $ anameName d)
+  | (x, ds) <- Map.toList names
+  , d       <- take 1 ds
+  , anameKind d `elem` kinds
+  ]
 
 -- | Compute all names (first component) and operators (second component) in
 --   scope.
-localNames :: ScopeM ([Name], [NewNotation])
-localNames = do
-  defs   <- getDefinedNames [DefName, ConName]
+localNames :: FlatScope -> ScopeM ([QName], [NewNotation])
+localNames flat = do
+  let defs = getDefinedNames allKindsOfNames flat
   locals <- scopeLocals <$> getScope
   return $ split $ uniqBy fst $ map localOp locals ++ defs
   where
-    localOp (x, y) = (x, A.nameFixity y)
+    localOp (x, y) = (QName x, A.nameFixity y)
     split ops = ([ x | Left x <- zs], [ y | Right y <- zs ])
         where
             zs = concatMap opOrNot ops
 
-    opOrNot (x, Fixity' fx syn) = Left x
-                                :  case x of
+    opOrNot (q, Fixity' fx syn) = Left q
+                                :  case unqualify q of
                                       Name _ [_] -> []
-                                      _ -> [Right (x, fx, syntaxOf x)]
+                                      x -> [Right (q, fx, syntaxOf x)]
                                 ++ case syn of
                                     [] -> []
-                                    _ -> [Right (x, fx, syn)]
+                                    _ -> [Right (q, fx, syn)]
 
 data UseBoundNames = UseBoundNames | DontUseBoundNames
 
@@ -144,13 +164,20 @@
   (False,False) -> Nonfix
 
 
-notationNames :: NewNotation -> [Name]
-notationNames (_, _, ps) = [Name noRange [Id x] | IdPart x <- ps ]
+notationNames :: NewNotation -> [QName]
+notationNames (q, _, ps) = zipWith ($) (requal : repeat QName) [Name noRange [Id x] | IdPart x <- ps ]
+  where
+    ms       = init (qnameParts q)
+    requal x = foldr Qual (QName x) ms
 
-buildParser :: forall e. IsExpr e => Range -> UseBoundNames -> ScopeM (ReadP e e)
-buildParser r use = do
-    (names, ops) <- localNames
-    cons         <- getDefinedNames [ConName]
+buildParser :: forall e. IsExpr e => Range -> FlatScope -> UseBoundNames -> ScopeM (ReadP e e)
+buildParser r flat use = do
+    (names, ops) <- localNames flat
+    let cons = getDefinedNames [ConName, PatternSynName] flat
+    reportSLn "scope.operators" 50 $ unlines
+      [ "names = " ++ show names
+      , "ops   = " ++ show ops
+      , "cons  = " ++ show cons ]
     let conparts   = Set.fromList $ concatMap notationNames $ map oldToNewNotation cons
         opsparts   = Set.fromList $ concatMap notationNames $ ops
         allParts   = Set.union conparts opsparts
@@ -169,13 +196,9 @@
         ++ map (nonfixP . opP p) non -- for things with no outer "holes"
         ++ [ const $ atomP isAtom ]
     where
-
-
-        level :: NewNotation -> Nat
+        level :: NewNotation -> Integer
         level (_name, fixity, _syn) = fixityLevel fixity
 
-        on f g x y = f (g x) (g y)
-
         isinfixl, isinfixr, isinfix, nonfix, isprefix, ispostfix :: NewNotation -> Bool
 
         isinfixl (_, LeftAssoc _ _, syn)  = isInfix syn
@@ -222,7 +245,7 @@
 
 instance IsExpr Expr where
     exprView e = case e of
-        Ident (QName x) -> LocalV x
+        Ident x         -> LocalV x
         App _ e1 e2     -> AppV e1 e2
         OpApp r d es    -> OpAppV d es
         HiddenArg _ e   -> HiddenArgV e
@@ -232,7 +255,7 @@
         Underscore{}    -> WildV e
         _               -> OtherV e
     unExprView e = case e of
-        LocalV x      -> Ident (QName x)
+        LocalV x      -> Ident x
         AppV e1 e2    -> App (fuseRange e1 e2) e1 e2
         OpAppV d es   -> OpApp (fuseRange d es) d es
         HiddenArgV e  -> HiddenArg (getRange e) e
@@ -245,94 +268,281 @@
 
 instance IsExpr Pattern where
     exprView e = case e of
-        IdentP (QName x) -> LocalV x
-        AppP e1 e2       -> AppV e1 e2
-        OpAppP r d es    -> OpAppV d (map Ordinary es)
-        HiddenP _ e      -> HiddenArgV e
-        InstanceP _ e    -> InstanceArgV e
-        ParenP _ e       -> ParenV e
-        WildP{}          -> WildV e
-        _                -> OtherV e
+        IdentP x      -> LocalV x
+        AppP e1 e2    -> AppV e1 e2
+        OpAppP r d es -> OpAppV d (map Ordinary es)
+        HiddenP _ e   -> HiddenArgV e
+        InstanceP _ e -> InstanceArgV e
+        ParenP _ e    -> ParenV e
+        WildP{}       -> WildV e
+        _             -> OtherV e
     unExprView e = case e of
-        LocalV x         -> IdentP (QName x)
-        AppV e1 e2       -> AppP e1 e2
-        OpAppV d es      -> let ess :: [Pattern]
-                                ess = (map (fromOrdinary __IMPOSSIBLE__) es)
-                            in OpAppP (fuseRange d es) d ess
-        HiddenArgV e     -> HiddenP (getRange e) e
-        InstanceArgV e   -> InstanceP (getRange e) e
-        ParenV e         -> ParenP (getRange e) e
-        LamV _ _         -> __IMPOSSIBLE__
-        WildV e          -> e
-        OtherV e         -> e
+        LocalV x       -> IdentP x
+        AppV e1 e2     -> AppP e1 e2
+        OpAppV d es    -> let ess :: [Pattern]
+                              ess = (map (fromOrdinary __IMPOSSIBLE__) es)
+                          in OpAppP (fuseRange d es) d ess
+        HiddenArgV e   -> HiddenP (getRange e) e
+        InstanceArgV e -> InstanceP (getRange e) e
+        ParenV e       -> ParenP (getRange e) e
+        LamV _ _       -> __IMPOSSIBLE__
+        WildV e        -> e
+        OtherV e       -> e
 
+{- TRASH
+instance IsExpr LHSCore where
+    exprView e = case e of
+        LHSHead f ps -> foldl AppV (LocalV f) $ map exprView ps
+        LHSProj d ps1 e ps2 -> foldl AppV (LocalV d) $
+          map exprView ps1 ++ exprView e : map exprView ps2
+    unExprView e = LHSHead f ps
+      where p :: Pattern
+            p = unExprView
+            (f, ps) = lhsArgs p
+-}
 
+---------------------------------------------------------------------------
+-- * Helpers for pattern and lhs parsing
+---------------------------------------------------------------------------
 
+-- Andreas, 2011-11-24 moved here from ConcreteToAbstract
+lhsArgs :: Pattern -> (Name, [NamedArg Pattern])
+lhsArgs p = case lhsArgs' p of
+              Just (x, args) -> (x, args)
+              Nothing        -> __IMPOSSIBLE__
+
+-- | @lhsArgs' p@ splits a lhs @f ps@, given as a pattern @p@,
+--   into @(f, ps)@.
+lhsArgs' :: Pattern -> Maybe (Name, [NamedArg Pattern])
+lhsArgs' p = case patternAppView p of
+    Arg _ _ (Named _ (IdentP (QName x))) : ps -> Just (x, ps)
+    _                                         -> Nothing
+
+-- | View a pattern @p@ as a list @p0 .. pn@ where @p0@ is the identifier
+--   (in most cases a constructor).
+--
+--  Pattern needs to be parsed already (operators resolved).
+patternAppView :: Pattern -> [NamedArg Pattern]
+patternAppView p = case p of
+    AppP p arg    -> patternAppView p ++ [arg]
+    OpAppP _ x ps -> mkHead (IdentP x) : map notHidden ps
+    ParenP _ p    -> patternAppView p
+    RawAppP _ _   -> __IMPOSSIBLE__
+    _             -> [ mkHead p ]
+  where mkHead    = Arg NotHidden Relevant . unnamed
+        notHidden = Arg NotHidden Relevant . unnamed
+
+
 ---------------------------------------------------------------------------
 -- * Parse functions
 ---------------------------------------------------------------------------
 
 -- | Returns the list of possible parses.
-parsePattern :: ReadP Pattern Pattern -> Pattern -> [Pattern]
-parsePattern prs p = case p of
-    AppP p (Arg h r q) -> fullParen' <$> (AppP <$> parsePattern prs p <*> (Arg h r <$> traverse (parsePattern prs) q))
-    RawAppP _ ps     -> fullParen' <$> (parsePattern prs =<< parse prs ps)
-    OpAppP r d ps    -> fullParen' . OpAppP r d <$> mapM (parsePattern prs) ps
+parsePat :: ReadP Pattern Pattern -> Pattern -> [Pattern]
+parsePat prs p = case p of
+    AppP p (Arg h r q) -> fullParen' <$> (AppP <$> parsePat prs p <*> (Arg h r <$> traverse (parsePat prs) q))
+    RawAppP _ ps     -> fullParen' <$> (parsePat prs =<< parse prs ps)
+    OpAppP r d ps    -> fullParen' . OpAppP r d <$> mapM (parsePat prs) ps
     HiddenP _ _      -> fail "bad hidden argument"
     InstanceP _ _    -> fail "bad instance argument"
-    AsP r x p        -> AsP r x <$> parsePattern prs p
+    AsP r x p        -> AsP r x <$> parsePat prs p
     DotP r e         -> return $ DotP r e
-    ParenP r p       -> fullParen' <$> parsePattern prs p
+    ParenP r p       -> fullParen' <$> parsePat prs p
     WildP _          -> return p
     AbsurdP _        -> return p
     LitP _           -> return p
     IdentP _         -> return p
 
 
+{- Implement parsing of copattern left hand sides, e.g.
+
+  record Tree (A : Set) : Set where
+    field
+      label : A
+      child : Bool -> Tree A
+
+  -- corecursive function defined by copattern matching
+  alternate : {A : Set}(a b : A) -> Tree A
+  -- shallow copatterns
+         label (alternate a b)              = a
+         child (alternate a b) True         = alternate b a
+  -- deep copatterns:
+  label (child (alternate a b) False)       = b
+  child (child (alternate a b) False) True  = alternate a b
+  child (child (alternate a b) False) False = alternate a b
+
+  Delivers an infinite tree
+
+                   a
+              b        b
+            a   a    a   a
+           b b b b  b b b b
+                 ...
+
+  Each lhs is a pattern tree with a distinct path of destructors
+  ("child", "label") from the root to the defined symbol ("alternate").
+  All branches besides this distinct path are patterns.
+
+  Syntax.Concrete.LHSCore represents a lhs
+   - the destructor path
+   - the side patterns
+   - the defined function symbol
+   - the applied patterns
+-}
+
+type ParseLHS = Either Pattern (Name, LHSCore)
+
+parseLHS' :: LHSOrPatSyn -> Maybe Name -> Pattern -> ScopeM ParseLHS
+parseLHS' lhsOrPatSyn top p = do
+    let ms = qualifierModules $ patternQNames p
+    flat <- flattenScope ms <$> getScope
+    patP <- buildParser (getRange p) flat DontUseBoundNames
+    let cons = getNames [ConName, PatternSynName] flat
+    let flds = getNames [FldName] flat
+    case [ res | p' <- parsePat patP p
+               , res <- validPattern (PatternCheckConfig top cons flds) p' ] of
+        [(p,lhs)] -> return lhs
+        []        -> typeError $ NoParseForLHS lhsOrPatSyn p
+        rs        -> typeError $ AmbiguousParseForLHS lhsOrPatSyn p $
+                       map (fullParen . fst) rs
+    where
+        getNames kinds flat = map fst $ getDefinedNames kinds flat
+
+        -- validPattern returns an empty or singleton list (morally a Maybe)
+        validPattern :: PatternCheckConfig -> Pattern -> [(Pattern, ParseLHS)]
+        validPattern conf p = case (classifyPattern conf p, top) of
+            (Just r@(Left _), Nothing) -> [(p, r)] -- expect pattern
+            (Just r@(Right _), Just{}) -> [(p, r)] -- expect lhs
+            _ -> []
+
+-- | Name sets for classifying a pattern.
+data PatternCheckConfig = PatternCheckConfig
+  { topName  :: Maybe Name  -- ^ name of defined symbol
+  , conNames :: [QName]     -- ^ valid constructor names
+  , fldNames :: [QName]     -- ^ valid field names
+  }
+
+-- | Returns zero or one classified patterns.
+classifyPattern :: PatternCheckConfig -> Pattern -> Maybe ParseLHS
+classifyPattern conf p =
+  case patternAppView p of
+
+    -- case @f ps@
+    Arg _ _ (Named _ (IdentP x@(QName f))) : ps | Just f == topName conf -> do
+      guard $ all validPat ps
+      return $ Right (f, LHSHead f ps)
+
+    -- case @d ps@
+    Arg _ _ (Named _ (IdentP x)) : ps | x `elem` fldNames conf -> do
+      -- ps0 :: [NamedArg ParseLHS]
+      ps0 <- mapM classPat ps
+      let (ps1, rest) = span (isLeft . namedArg) ps0
+      (p2, ps3) <- uncons rest -- when (null rest): no field pattern or def pattern found
+      guard $ all (isLeft . namedArg) ps3
+      let (f, lhs)      = fromR p2
+          (ps', _:ps'') = splitAt (length ps1) ps
+      return $ Right (f, LHSProj x ps' lhs ps'')
+
+    -- case: ordinary pattern
+    _ -> do
+      guard $ validConPattern (conNames conf) p
+      return $ Left p
+
+  where -- allNames = conNames conf ++ fldNames conf
+        validPat = validConPattern (conNames conf) . namedArg
+        classPat :: NamedArg Pattern -> Maybe (NamedArg ParseLHS)
+        classPat = Trav.mapM (Trav.mapM (classifyPattern conf))
+        fromR :: NamedArg (Either a (b, c)) -> (b, NamedArg c)
+        fromR (Arg h r (Named n (Right (b, c)))) = (b, Arg h r (Named n c))
+        fromR (Arg h r (Named n (Left  a     ))) = __IMPOSSIBLE__
+
+
+
 -- | Parses a left-hand side, and makes sure that it defined the expected name.
 --   TODO: check the arities of constructors. There is a possible ambiguity with
 --   postfix constructors:
 --      Assume _ * is a constructor. Then 'true *' can be parsed as either the
 --      intended _* applied to true, or as true applied to a variable *. If we
 --      check arities this problem won't appear.
-parseLHS :: Maybe Name -> Pattern -> ScopeM Pattern
+parseLHS :: Name -> Pattern -> ScopeM LHSCore
 parseLHS top p = do
-    patP <- buildParser (getRange p) DontUseBoundNames
-    cons <- getNames [ConName]
-    case filter (validPattern top cons) $ parsePattern patP p of
-        [p] -> return p
-        []  -> typeError $ NoParseForLHS p
-        ps  -> typeError $ AmbiguousParseForLHS p $ map fullParen ps
-    where
-        getNames kinds = map fst <$> getDefinedNames kinds
+  res <- parseLHS' IsLHS (Just top) p
+  case res of
+    Right (f, lhs) -> return lhs
+    _ -> typeError $ NoParseForLHS IsLHS p
 
-        validPattern :: Maybe Name -> [Name] -> Pattern -> Bool
-        validPattern (Just top) cons p = case appView p of
-            IdentP (QName x) : ps -> x == top && all (validPat cons) ps
-            _                     -> False
-        validPattern Nothing cons p = validPat cons p
+-- | Parses a pattern.
+--   TODO: check the arities of constructors. There is a possible ambiguity with
+--   postfix constructors:
+--      Assume _ * is a constructor. Then 'true *' can be parsed as either the
+--      intended _* applied to true, or as true applied to a variable *. If we
+--      check arities this problem won't appear.
+parsePattern :: Pattern -> ScopeM Pattern
+parsePattern = parsePatternOrSyn IsLHS
 
-        validPat :: [Name] -> Pattern -> Bool
-        validPat cons p = case appView p of
-            [_]                   -> True
-            IdentP (QName x) : ps -> elem x cons && all (validPat cons) ps
-            ps                    -> all (validPat cons) ps
+parsePatternSyn :: Pattern -> ScopeM Pattern
+parsePatternSyn = parsePatternOrSyn IsPatSyn
 
-        appView :: Pattern -> [Pattern]
-        appView p = case p of
-            AppP p a         -> appView p ++ [namedThing (unArg a)]
-            OpAppP _ op ps   -> IdentP (QName op) : ps
-            ParenP _ p       -> appView p
-            RawAppP _ _      -> __IMPOSSIBLE__
-            HiddenP _ _      -> __IMPOSSIBLE__
-            InstanceP _ _    -> __IMPOSSIBLE__
-            _                -> [p]
+parsePatternOrSyn :: LHSOrPatSyn -> Pattern -> ScopeM Pattern
+parsePatternOrSyn lhsOrPatSyn p = do
+  res <- parseLHS' lhsOrPatSyn Nothing p
+  case res of
+    Left p -> return p
+    _      -> typeError $ NoParseForLHS lhsOrPatSyn p
 
+-- | Helper function for 'parseLHS' and 'parsePattern'.
+validConPattern :: [QName] -> Pattern -> Bool
+validConPattern cons p = case appView p of
+    [_]           -> True
+    IdentP x : ps -> elem x cons && all (validConPattern cons) ps
+    _             -> False
+-- Andreas, 2012-06-04: I do not know why the following line was
+-- the catch-all case.  It seems that the new catch-all works also
+-- and is more logical.
+--    ps            -> all (validConPattern cons) ps
+
+-- | Helper function for 'parseLHS' and 'parsePattern'.
+appView :: Pattern -> [Pattern]
+appView p = case p of
+    AppP p a         -> appView p ++ [namedThing (unArg a)]
+    OpAppP _ op ps   -> IdentP op : ps
+    ParenP _ p       -> appView p
+    RawAppP _ _      -> __IMPOSSIBLE__
+    HiddenP _ _      -> __IMPOSSIBLE__
+    InstanceP _ _    -> __IMPOSSIBLE__
+    _                -> [p]
+
+-- | Collect all names in a pattern into a list of qualified names.
+patternQNames :: Pattern -> [QName]
+patternQNames p = case p of
+  RawAppP _ ps     -> concatMap patternQNames ps
+  IdentP q         -> [q]
+  ParenP _ p       -> patternQNames p
+  HiddenP _ p      -> patternQNames (namedThing p)
+  InstanceP _ p    -> patternQNames (namedThing p)
+  OpAppP r d ps    -> __IMPOSSIBLE__
+  AppP{}           -> __IMPOSSIBLE__
+  AsP{}            -> __IMPOSSIBLE__
+  AbsurdP{}        -> []
+  WildP{}          -> []
+  DotP{}           -> []
+  LitP{}           -> []
+
+-- | Return all qualifiers occuring in a list of 'QName's.
+--   Each qualifier is returned as a list of names, e.g.
+--   for @Data.Nat._+_@ we return the list @[Data,Nat]@.
+qualifierModules :: [QName] -> [[Name]]
+qualifierModules qs =
+  nub $ filter (not . null) $ map (init . qnameParts) qs
+
+-- | Parse a list of expressions into an application.
 parseApplication :: [Expr] -> ScopeM Expr
 parseApplication [e] = return e
 parseApplication es = do
     -- Build the parser
-    p <- buildParser (getRange es) UseBoundNames
+    let ms = qualifierModules [ q | Ident q <- es ]
+    flat <- flattenScope ms <$> getScope
+    p <- buildParser (getRange es) flat UseBoundNames
 
     -- Parse
     case parse p es of
@@ -340,14 +550,16 @@
         []  -> do
           -- When the parser fails and a name is not in scope, it is more
           -- useful to say that to the user rather than just "failed".
-          inScope <- partsInScope
-          case [ QName x | Ident (QName x) <- es, not (Set.member x inScope) ] of
+          inScope <- partsInScope flat
+          case [ x | Ident x <- es, not (Set.member x inScope) ] of
                []  -> typeError $ NoParseForApplication es
                xs  -> typeError $ NotInScope xs
 
         es' -> typeError $ AmbiguousParseForApplication es $ map fullParen es'
 
--- Inserting parenthesis --------------------------------------------------
+---------------------------------------------------------------------------
+-- * Inserting parenthesis
+---------------------------------------------------------------------------
 
 fullParen :: IsExpr e => e -> e
 fullParen e = case exprView $ fullParen' e of
@@ -373,7 +585,7 @@
     where
         par = unExprView . ParenV
 
-paren :: Monad m => (Name -> m Fixity) -> Expr -> m (Precedence -> Expr)
+paren :: Monad m => (QName -> m Fixity) -> Expr -> m (Precedence -> Expr)
 paren _   e@(App _ _ _)        = return $ \p -> mparen (appBrackets p) e
 paren f   e@(OpApp _ op _)     = do fx <- f op; return $ \p -> mparen (opBrackets fx p) e
 paren _   e@(Lam _ _ _)        = return $ \p -> mparen (lamBrackets p) e
diff --git a/src/full/Agda/Syntax/Concrete/Operators/Parser.hs b/src/full/Agda/Syntax/Concrete/Operators/Parser.hs
--- a/src/full/Agda/Syntax/Concrete/Operators/Parser.hs
+++ b/src/full/Agda/Syntax/Concrete/Operators/Parser.hs
@@ -15,11 +15,11 @@
 import Agda.Utils.Impossible
 
 data ExprView e
-    = LocalV Name
+    = LocalV QName
     | WildV e
     | OtherV e
     | AppV e (NamedArg e)
-    | OpAppV Name [OpApp e]
+    | OpAppV QName [OpApp e]
     | HiddenArgV (Named String e)
     | InstanceArgV (Named String e)
     | LamV [LamBinding] e
@@ -63,16 +63,17 @@
 -- Specific combinators
 
 -- | Parse a specific identifier as a NamePart
-partP :: IsExpr e => String -> ReadP e (Range, NamePart)
-partP s = do
+partP :: IsExpr e => [Name] -> String -> ReadP e Range
+partP ms s = do
     tok <- get
-    case isLocal s tok of
+    case isLocal tok of
       Just p  -> return p
       Nothing -> pfail
     where
-	isLocal x e = case exprView e of
-	    LocalV (Name r [Id y]) | x == y -> Just (r, Id y)
-	    _			            -> Nothing
+        str = show (foldr Qual (QName (Name noRange [Id s])) ms)
+	isLocal e = case exprView e of
+	    LocalV y | str == show y -> Just (getRange y)
+	    _			     -> Nothing
 
 binop :: IsExpr e => ReadP e (NewNotation,Range,[e]) -> ReadP e (e -> e -> ReadP a e)
 binop middleP = do
@@ -97,16 +98,16 @@
 -- place as where the holes are discarded, however that would require a dependently
 -- typed function (or duplicated code)
 opP :: IsExpr e => ReadP e e -> NewNotation -> ReadP e (NewNotation,Range,[e])
-opP p nsyn@(_,_,syn) = do
-  (range,es) <- worker $ removeExternalHoles syn
+opP p nsyn@(q,_,syn) = do
+  (range,es) <- worker (init $ qnameParts q) $ removeExternalHoles syn
   return (nsyn,range,es)
- where worker [IdPart x] = do (r, part) <- partP x; return (r,[])
-       worker (IdPart x : _ : xs) = do
-            (r1, part)    <- partP x
-	    e             <- p
-	    (r2 , es) <- worker xs
+ where worker ms [IdPart x] = do r <- partP ms x; return (r,[])
+       worker ms (IdPart x : _ : xs) = do
+            r1        <- partP ms x
+	    e         <- p
+	    (r2 , es) <- worker [] xs -- only the first part is qualified
             return (fuseRanges r1 r2, e : es)
-       worker x = __IMPOSSIBLE__ -- holes and non-holes must be alternated.
+       worker _ x = __IMPOSSIBLE__ -- holes and non-holes must be alternated.
 
        removeExternalHoles = reverse . removeLeadingHoles . reverse . removeLeadingHoles
            where removeLeadingHoles = dropWhile isAHole
@@ -131,7 +132,7 @@
 
 rebuildBinding :: ExprView e -> ReadP a LamBinding
   -- Andreas, 2011-04-07 put just 'Relevant' here, is this correct?
-rebuildBinding (LocalV name) = return $ DomainFree NotHidden Relevant (mkBoundName_ name)
+rebuildBinding (LocalV (QName name)) = return $ DomainFree NotHidden Relevant (mkBoundName_ name)
 rebuildBinding (WildV e)     =
   return $ DomainFree NotHidden Relevant (mkBoundName_ $ Name noRange [Hole])
 rebuildBinding _ = fail "variable name expected"
@@ -201,7 +202,7 @@
 	    HiddenArgV e <- exprView <$> satisfy (isHidden . exprView)
 	    return $ Arg Hidden Relevant e
 
-atomP :: IsExpr e => (Name -> Bool) -> ReadP e e
+atomP :: IsExpr e => (QName -> Bool) -> ReadP e e
 atomP p = do
     e <- get
     case exprView e of
diff --git a/src/full/Agda/Syntax/Concrete/Pretty.hs b/src/full/Agda/Syntax/Concrete/Pretty.hs
--- a/src/full/Agda/Syntax/Concrete/Pretty.hs
+++ b/src/full/Agda/Syntax/Concrete/Pretty.hs
@@ -8,6 +8,7 @@
 import Data.Char
 
 import Agda.Syntax.Common
+import Agda.Syntax.Position
 import Agda.Syntax.Concrete
 import Agda.Syntax.Fixity
 import Agda.Syntax.Literal
@@ -46,7 +47,12 @@
 pHidden NotHidden   = pretty
 
 pRelevance :: Pretty a => Relevance -> a -> Doc
+pRelevance rel a =
+  let d = pretty a
+  in  if render d == "_" then d else pretty rel <> d
+{-
 pRelevance Forced     a = pretty a
+pRelevance UnusedArg  a = pretty a
 pRelevance Relevant   a = pretty a
 pRelevance Irrelevant a =
   let d = pretty a
@@ -54,11 +60,6 @@
 pRelevance NonStrict a =
   let d = pretty a
   in  if render d == "_" then d else text ".." <> d
-
-{- UNUSED
--- | Use for printing non-dependent function types
-prettyWithRelevance :: Pretty a => Arg a -> Doc
-prettyWithRelevance a = pRelevance (argRelevance a) a
 -}
 
 instance Pretty (ThingWithFixity Name) where
@@ -91,6 +92,7 @@
 
 instance Pretty Relevance where
   pretty Forced     = empty
+  pretty UnusedArg  = empty
   pretty Relevant   = empty
   pretty Irrelevant = text "."
   pretty NonStrict  = text ".."
@@ -109,7 +111,8 @@
 	    Ident x	     -> pretty x
 	    Lit l	     -> pretty l
 	    QuestionMark _ n -> text "?" <> maybe empty (text . show) n
-	    Underscore _ n   -> underscore <> maybe empty (text . show) n
+	    Underscore _ n   -> maybe underscore text n
+--	    Underscore _ n   -> underscore <> maybe empty (text . show) n
 	    App _ _ _	     ->
 		case appView e of
 		    AppView e1 args	->
@@ -118,13 +121,7 @@
 -- 			    , nest 2 $ fsep $ map pretty args
 -- 			    ]
 	    RawApp _ es   -> fsep $ map pretty es
-	    OpApp _ (Name _ xs) es -> fsep $ prOp xs es
-		where
-		    prOp (Hole : xs) (e : es) = pretty e : prOp xs es
-		    prOp (Hole : _)  []       = __IMPOSSIBLE__
-		    prOp (Id x : xs) es       = text x : prOp xs es
-		    prOp []	     es       = map pretty es
-	    OpApp _ (NoName _ _) _ -> __IMPOSSIBLE__
+	    OpApp _ q es -> fsep $ prettyOpApp q es
 
 	    WithApp _ e es -> fsep $
 	      pretty e : map ((text "|" <+>) . pretty) es
@@ -139,7 +136,7 @@
             AbsurdLam _ Instance -> lambda <+> text "{{}}"
             AbsurdLam _ Hidden -> lambda <+> text "{}"
 	    ExtendedLam _ pes ->
-		lambda <+> braces (fsep $ punctuate (text ";") (map (\(x,y,z) -> prettyClause x y z) pes))
+		lambda <+> braces' (fsep $ punctuate (text ";") (map (\(x,y,z) -> prettyClause x y z) pes))
                    where prettyClause lhs rhs wh = sep [ pretty lhs
                                                        , nest 2 $ pretty' rhs
                                                        ] $$ nest 2 (pretty wh)
@@ -247,6 +244,13 @@
       pThing thing (e : es) = fsep $ (text thing <+> pretty e)
 			           : map ((text "|" <+>) . pretty) es
 
+instance Show LHSCore where show = show . pretty
+instance Pretty LHSCore where
+  pretty (LHSHead f ps) = sep $ pretty f : map (parens . pretty) ps
+  pretty (LHSProj d ps lhscore ps') = sep $
+    pretty d : map (parens . pretty) ps ++
+    parens (pretty lhscore) : map (parens . pretty) ps'
+
 instance Pretty [Declaration] where
   pretty = vcat . map pretty
 
@@ -308,19 +312,25 @@
 			    , pretty e
 			    ]
 		    ]
-	    Record _ x con tel (Just e) cs ->
+	    Record _ x ind con tel me cs ->
 		sep [ hsep  [ text "record"
 			    , pretty x
 			    , fcat (map pretty tel)
 			    ]
-		    , nest 2 $ hsep
+		    , nest 2 $ pType me
+		    ] $$ nest 2 (vcat $ pInd ++
+                                        pCon ++
+                                        map pretty cs)
+              where pType (Just e) = hsep
 			    [ text ":"
 			    , pretty e
 			    , text "where"
 			    ]
-		    ] $$ nest 2 (vcat $ maybe [] (\c -> [text "constructor" <+> pretty c])
-                                              con ++
-                                        map pretty cs)
+                    pType Nothing  =
+                              text "where"
+                    pInd = maybe [] (\i -> [text $ show i]) ind
+                    pCon = maybe [] (\c -> [text "constructor" <+> pretty c]) con
+{- ELIMINATED CUT-AND-PASTE CODE
 	    Record _ x con tel Nothing cs ->
 		sep [ hsep  [ text "record"
 			    , pretty x
@@ -330,10 +340,12 @@
 		    ] $$ nest 2 (vcat $ maybe [] (\c -> [text "constructor" <+> pretty c])
                                               con ++
                                         map pretty cs)
-
+-}
             Infix f xs	->
 		pretty f <+> (fsep $ punctuate comma $ map pretty xs)
             Syntax n xs -> text "syntax" <+> pretty n <+> text "..."
+            PatternSyn _ n as p -> text "pattern" <+> pretty n <+> fsep (map pretty as)
+                                     <+> text "=" <+> pretty p
 	    Mutual _ ds	    -> namedBlock "mutual" ds
 	    Abstract _ ds   -> namedBlock "abstract" ds
 	    Private _ ds    -> namedBlock "private" ds
@@ -396,6 +408,7 @@
       hsep $ [text "IMPOSSIBLE"]
     pretty (EtaPragma _ x) =
       hsep $ [text "ETA", pretty x]
+    pretty (NoTerminationCheckPragma _) = text "NO_TERMINATION_CHECK"
 
 instance Pretty Fixity where
     pretty (LeftAssoc _ n)  = text "infixl" <+> text (show n)
@@ -418,25 +431,31 @@
 instance Pretty Pattern where
     pretty p =
 	case p of
-	    IdentP x	       -> pretty x
-	    AppP p1 p2	       -> sep [ pretty p1, nest 2 $ pretty p2 ]
-	    RawAppP _ ps       -> fsep $ map pretty ps
-	    OpAppP _ (Name _ xs) ps -> fsep $ prOp xs ps
-		where
-		    prOp (Hole : xs) (e : es) = pretty e : prOp xs es
-		    prOp (Hole : _)  []	      = __IMPOSSIBLE__
-		    prOp (Id x : xs) es       = text x : prOp xs es
-		    prOp []	     []       = []
-		    prOp []	     es       = map pretty es
-	    OpAppP _ (NoName _ _) _ -> __IMPOSSIBLE__
-	    HiddenP _ p	       -> braces' $ pretty p
-	    InstanceP _ p      -> dbraces $ pretty p
-	    ParenP _ p	       -> parens $ pretty p
-	    WildP _	       -> underscore
-	    AsP _ x p	       -> pretty x <> text "@" <> pretty p
-	    DotP _ p	       -> text "." <> pretty p
-	    AbsurdP _	       -> text "()"
-	    LitP l	       -> pretty l
+	    IdentP x      -> pretty x
+	    AppP p1 p2    -> sep [ pretty p1, nest 2 $ pretty p2 ]
+	    RawAppP _ ps  -> fsep $ map pretty ps
+	    OpAppP _ q ps -> fsep $ prettyOpApp q ps
+	    HiddenP _ p   -> braces' $ pretty p
+	    InstanceP _ p -> dbraces $ pretty p
+	    ParenP _ p    -> parens $ pretty p
+	    WildP _       -> underscore
+	    AsP _ x p     -> pretty x <> text "@" <> pretty p
+	    DotP _ p      -> text "." <> pretty p
+	    AbsurdP _     -> text "()"
+	    LitP l        -> pretty l
+
+prettyOpApp :: Pretty a => QName -> [a] -> [Doc]
+prettyOpApp q es = prOp ms xs es
+  where
+    ms = init (qnameParts q)
+    xs = case unqualify q of
+           Name _ xs -> xs
+           NoName{}  -> __IMPOSSIBLE__
+    prOp ms (Hole : xs) (e : es) = pretty e : prOp ms xs es
+    prOp _  (Hole : _)  []       = __IMPOSSIBLE__
+    prOp ms (Id x : xs) es       = pretty (foldr Qual (QName (Name noRange $ [Id x])) ms) : prOp [] xs es
+    prOp _  []	     []          = []
+    prOp _  []	     es          = map pretty es
 
 instance Pretty ImportDirective where
     pretty i =
diff --git a/src/full/Agda/Syntax/Fixity.hs b/src/full/Agda/Syntax/Fixity.hs
--- a/src/full/Agda/Syntax/Fixity.hs
+++ b/src/full/Agda/Syntax/Fixity.hs
@@ -4,7 +4,7 @@
 -}
 module Agda.Syntax.Fixity where
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.Foldable
 import Data.Traversable
 
@@ -18,15 +18,15 @@
 data Fixity' = Fixity'
     {theFixity :: Fixity,
      theNotation :: Notation}
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Typeable, Show, Eq)
 
-data ThingWithFixity x = ThingWithFixity x Fixity' deriving (Functor,Foldable,Traversable,Typeable,Data,Show)
+data ThingWithFixity x = ThingWithFixity x Fixity' deriving (Functor,Foldable,Traversable,Typeable,Show)
 -- | All the notation information related to a name.
-type NewNotation = (Name, Fixity, Notation)
+type NewNotation = (QName, Fixity, Notation)
 
 -- | If an operator has no specific notation, recover it from its name.
-oldToNewNotation :: (Name, Fixity') -> NewNotation
-oldToNewNotation (name, Fixity' f []) = (name, f, syntaxOf name)
+oldToNewNotation :: (QName, Fixity') -> NewNotation
+oldToNewNotation (name, Fixity' f []) = (name, f, syntaxOf $ unqualify name)
 oldToNewNotation (name, Fixity' f syn) = (name, f, syn)
 
 syntaxOf :: Name -> Notation
@@ -41,13 +41,13 @@
 
 defaultFixity' = Fixity' defaultFixity defaultNotation
 
-noFixity = NonAssoc noRange (negate 666)
+noFixity = NonAssoc noRange (negate 666) -- ts,ts,ts, why the number of the beast?  Revelation 13, 18
 
 -- | Fixity of operators.
-data Fixity = LeftAssoc  Range Nat
-	    | RightAssoc Range Nat
-	    | NonAssoc   Range Nat
-    deriving (Typeable, Data, Show)
+data Fixity = LeftAssoc  Range Integer
+	    | RightAssoc Range Integer
+	    | NonAssoc   Range Integer
+    deriving (Typeable, Show)
 
 instance Eq Fixity where
     LeftAssoc _ n   == LeftAssoc _ m	= n == m
@@ -55,7 +55,7 @@
     NonAssoc _ n    == NonAssoc _ m	= n == m
     _		    == _		= False
 
-fixityLevel :: Fixity -> Nat
+fixityLevel :: Fixity -> Integer
 fixityLevel (LeftAssoc	_ n) = n
 fixityLevel (RightAssoc _ n) = n
 fixityLevel (NonAssoc	_ n) = n
@@ -69,7 +69,7 @@
 		| LeftOperandCtx Fixity | RightOperandCtx Fixity
 		| FunctionCtx | ArgumentCtx | InsideOperandCtx
                 | WithFunCtx | WithArgCtx | DotPatternCtx
-    deriving (Show,Typeable,Data)
+    deriving (Show,Typeable)
 
 
 -- | The precedence corresponding to a possibly hidden argument.
@@ -135,3 +135,11 @@
     getRange (LeftAssoc  r _)	= r
     getRange (RightAssoc r _)	= r
     getRange (NonAssoc   r _)	= r
+
+instance KillRange Fixity where
+  killRange (LeftAssoc  _ n) = LeftAssoc  noRange n
+  killRange (RightAssoc _ n) = RightAssoc noRange n
+  killRange (NonAssoc   _ n) = NonAssoc   noRange n
+
+instance KillRange Fixity' where
+  killRange (Fixity' f n) = killRange1 (flip Fixity' n) f
diff --git a/src/full/Agda/Syntax/Info.hs b/src/full/Agda/Syntax/Info.hs
--- a/src/full/Agda/Syntax/Info.hs
+++ b/src/full/Agda/Syntax/Info.hs
@@ -7,7 +7,7 @@
 
 module Agda.Syntax.Info where
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Text.Show.Functions
 
 import qualified Agda.Syntax.Concrete.Name as C
@@ -15,7 +15,7 @@
 import Agda.Syntax.Position
 import Agda.Syntax.Concrete
 import Agda.Syntax.Fixity
-import Agda.Syntax.Scope.Base (ScopeInfo)
+import Agda.Syntax.Scope.Base (ScopeInfo, emptyScopeInfo)
 
 {--------------------------------------------------------------------------
     No information
@@ -31,9 +31,18 @@
 	MetaInfo { metaRange	:: Range
 		 , metaScope	:: ScopeInfo
 		 , metaNumber	:: Maybe Nat
+                 , metaNameSuggestion :: String
 		 }
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
+emptyMetaInfo :: MetaInfo
+emptyMetaInfo = MetaInfo
+  { metaRange          = noRange
+  , metaScope          = emptyScopeInfo
+  , metaNumber         = Nothing
+  , metaNameSuggestion = ""
+  }
+
 instance HasRange MetaInfo where
   getRange = metaRange
 
@@ -51,7 +60,7 @@
 	| ExprSource Range (Precedence -> Expr)
 	    -- ^ Even if we store the original expression we have to know
 	    --	 whether to put parenthesis around it.
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 instance HasRange ExprInfo where
   getRange (ExprRange  r  ) = r
@@ -77,13 +86,16 @@
                    , minfoDirective :: Maybe ImportDirective
                      -- Retained for abstractToConcrete of ModuleMacro
 		   }
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 deriving instance (Show OpenShortHand, Show ImportDirective) => Show ModuleInfo
 
 instance HasRange ModuleInfo where
   getRange = minfoRange
 
+instance SetRange ModuleInfo where
+  setRange r i = i { minfoRange = r }
+
 instance KillRange ModuleInfo where
   killRange m = m { minfoRange = killRange $ minfoRange m }
 
@@ -92,7 +104,7 @@
 ---------------------------------------------------------------------------
 
 newtype LetInfo = LetRange Range
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 instance HasRange LetInfo where
   getRange (LetRange r)   = r
@@ -110,7 +122,7 @@
 		, defAbstract :: IsAbstract
 		, defInfo     :: DeclInfo
 		}
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 mkDefInfo :: Name -> Fixity' -> Access -> IsAbstract -> Range -> DefInfo
 mkDefInfo x f a ab r = DefInfo f a ab (DeclInfo x r)
@@ -118,6 +130,9 @@
 instance HasRange DefInfo where
   getRange = getRange . defInfo
 
+instance SetRange DefInfo where
+  setRange r i = i { defInfo = setRange r (defInfo i) }
+
 instance KillRange DefInfo where
   killRange i = i { defInfo = killRange $ defInfo i }
 
@@ -129,20 +144,39 @@
 	DeclInfo { declName  :: Name
 		 , declRange :: Range
 		 }
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 instance HasRange DeclInfo where
   getRange = declRange
 
+instance SetRange DeclInfo where
+  setRange r i = i { declRange = r }
+
 instance KillRange DeclInfo where
   killRange i = i { declRange = killRange $ declRange i }
 
 {--------------------------------------------------------------------------
+    Mutual block information
+ --------------------------------------------------------------------------}
+
+data MutualInfo =
+     MutualInfo { mutualTermCheck :: Bool  -- ^ termination check (default=True)
+		, mutualRange     :: Range
+		}
+  deriving (Typeable, Show)
+
+instance HasRange MutualInfo where
+  getRange = mutualRange
+
+instance KillRange MutualInfo where
+  killRange i = i { mutualRange = killRange $ mutualRange i }
+
+{--------------------------------------------------------------------------
     Left hand side information
  --------------------------------------------------------------------------}
 
 newtype LHSInfo = LHSRange Range
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 instance HasRange LHSInfo where
   getRange (LHSRange r) = r
@@ -159,7 +193,7 @@
 
 data PatInfo = PatRange Range
 	     | PatSource Range (Precedence -> Pattern)
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 instance Show PatInfo where
   show (PatRange r) = "PatRange " ++ show r
diff --git a/src/full/Agda/Syntax/Internal.hs b/src/full/Agda/Syntax/Internal.hs
--- a/src/full/Agda/Syntax/Internal.hs
+++ b/src/full/Agda/Syntax/Internal.hs
@@ -1,17 +1,23 @@
 {-# LANGUAGE CPP, DeriveDataTypeable, GeneralizedNewtypeDeriving,
-             DeriveFunctor, DeriveFoldable, DeriveTraversable #-}
+             DeriveFunctor, DeriveFoldable, DeriveTraversable,
+             TemplateHaskell,
+             MultiParamTypeClasses, FlexibleInstances,
+             TypeSynonymInstances #-}
 
 module Agda.Syntax.Internal
     ( module Agda.Syntax.Internal
     , module Agda.Syntax.Abstract.Name
+    , module Agda.Utils.Pointer
     ) where
 
 import Prelude hiding (foldr)
 import Control.Applicative
-import Data.Generics (Typeable, Data)
+import Control.Parallel
+import Data.Typeable (Typeable)
 import Data.Foldable
 import Data.Traversable
 import Data.Function
+import Data.Maybe
 import qualified Data.List as List
 
 import Agda.Syntax.Position
@@ -19,9 +25,11 @@
 import Agda.Syntax.Literal
 import Agda.Syntax.Abstract.Name
 
+import Agda.Utils.Geniplate
 import Agda.Utils.Monad
 import Agda.Utils.Size
 import Agda.Utils.Permutation
+import Agda.Utils.Pointer
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
@@ -33,28 +41,58 @@
 --     every constant, even if the definition is an empty
 --     list of clauses.
 --
-data Term = Var Nat Args
-	  | Lam Hiding (Abs Term)   -- ^ terms are beta normal
+data Term = Var {-# UNPACK #-} !Int Args             -- ^ @x vs@ neutral
+	  | Lam Hiding (Abs Term)    -- ^ terms are beta normal
 	  | Lit Literal
-	  | Def QName Args
-	  | Con QName Args
-	  | Pi (Arg Type) (Abs Type)
+	  | Def QName Args           -- ^ @f vs@, possibly a redex
+	  | Con QName Args           -- ^ @c vs@
+	  | Pi (Dom Type) (Abs Type) -- ^ dependent or non-dependent function space
 	  | Sort Sort
           | Level Level
-	  | MetaV MetaId Args
-          | DontCare Term  -- ^ irrelevant stuff
-  deriving (Typeable, Data, Show)
+	  | MetaV {-# UNPACK #-} !MetaId Args
+          | DontCare Term
+            -- ^ Irrelevant stuff in relevant position, but created
+            --   in an irrelevant context.  Basically, an internal
+            --   version of the irrelevance axiom @.irrAx : .A -> A@.
+          | Shared !(Ptr Term)
+            -- ^ Explicit sharing
+  deriving (Typeable, Show)
 
-data Type = El Sort Term
-  deriving (Typeable, Data, Show)
+-- | Type of argument lists.
+--
+type Args = [Arg Term]
 
+-- | Eliminations, subsuming applications and projections.
+--   Used for a view which exposes the head of a neutral term.
+--
 data Elim = Apply (Arg Term) | Proj QName -- ^ name of a record projection
   deriving (Show)
 
--- | Top sort (Set\omega).
-topSort :: Type
-topSort = El Inf (Sort Inf)
+-- | Binder.
+--   'Abs': The bound variable might appear in the body.
+--   'NoAbs' is pseudo-binder, it does not introduce a fresh variable,
+--      similar to the @const@ of Haskell.
+data Abs a = Abs   { absName :: String, unAbs :: a }
+               -- ^ The body has (at least) one free variable.
+               --   Danger: 'unAbs' doesn't shift variables properly
+           | NoAbs { absName :: String, unAbs :: a }
+  deriving (Typeable, Functor, Foldable, Traversable)
 
+-- | Types are terms with a sort annotation.
+--
+data Type = El { getSort :: Sort, unEl :: Term }
+  deriving (Typeable, Show)
+
+-- | Sequence of types. An argument of the first type is bound in later types
+--   and so on.
+data Tele a = EmptyTel
+	    | ExtendTel a (Abs (Tele a))  -- ^ 'Abs' is never 'NoAbs'.
+  deriving (Typeable, Show, Functor, Foldable, Traversable)
+
+type Telescope = Tele (Dom Type)
+
+-- | Sorts.
+--
 data Sort = Type Level
 	  | Prop  -- ignore me
           | Inf
@@ -62,35 +100,266 @@
             -- ^ if the free variable occurs in the second sort
             --   the whole thing should reduce to Inf, otherwise
             --   it's the normal Lub
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
+-- | A level is a maximum expression of 0..n plus expressions
+--   each of which is a number or an atom plus a number.
+--
 newtype Level = Max [PlusLevel]
-  deriving (Show, Typeable, Data)
+  deriving (Show, Typeable)
 
 data PlusLevel = ClosedLevel Integer
                | Plus Integer LevelAtom
-  deriving (Show, Typeable, Data)
+  deriving (Show, Typeable)
 
 data LevelAtom = MetaLevel MetaId Args
                | BlockedLevel MetaId Term
                | NeutralLevel Term
                | UnreducedLevel Term
-  deriving (Show, Typeable, Data)
+  deriving (Show, Typeable)
 
+-- | A meta variable identifier is just a natural number.
+--
+newtype MetaId = MetaId Nat
+    deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable)
+
 -- | Something where a meta variable may block reduction.
 data Blocked t = Blocked MetaId t
                | NotBlocked t
-    deriving (Typeable, Data, Eq, Ord, Functor, Foldable, Traversable)
+    deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable)
 
+instance Applicative Blocked where
+  pure = notBlocked
+  Blocked x f  <*> e = Blocked x $ f (ignoreBlocking e)
+  NotBlocked f <*> e = f <$> e
+
+
+---------------------------------------------------------------------------
+-- * Definitions
+---------------------------------------------------------------------------
+
+-- | A clause is a list of patterns and the clause body should @Bind@.
+--
+--  The telescope contains the types of the pattern variables and the
+--  permutation is how to get from the order the variables occur in
+--  the patterns to the order they occur in the telescope. The body
+--  binds the variables in the order they appear in the patterns.
+--
+--  @clauseTel ~ permute clausePerm (patternVars clausPats)@
+--
+--  For the purpose of the permutation and the body dot patterns count
+--  as variables. TODO: Change this!
+data Clause = Clause
+    { clauseRange     :: Range
+    , clauseTel       :: Telescope
+    , clausePerm      :: Permutation
+    , clausePats      :: [Arg Pattern]
+    , clauseBody      :: ClauseBody
+    }
+  deriving (Typeable, Show)
+data ClauseBody = Body Term
+		| Bind (Abs ClauseBody)
+		| NoBody    -- ^ for absurd clauses.
+  deriving (Typeable, Show)
+
+instance HasRange Clause where
+  getRange = clauseRange
+
+-- | Patterns are variables, constructors, or wildcards.
+--   @QName@ is used in @ConP@ rather than @Name@ since
+--     a constructor might come from a particular namespace.
+--     This also meshes well with the fact that values (i.e.
+--     the arguments we are matching with) use @QName@.
+--
+data Pattern = VarP String  -- name suggestion
+             | DotP Term
+	     | ConP QName (Maybe (Arg Type)) [Arg Pattern]
+               -- ^ The type is @'Just' t@' iff the pattern is a
+               -- record pattern. The scope used for the type is given
+               -- by any outer scope plus the clause's telescope
+               -- ('clauseTel').
+	     | LitP Literal
+  deriving (Typeable, Show)
+
+-- | Extract pattern variables in left-to-right order.
+--   A 'DotP' is also treated as variable (see docu for 'Clause').
+patternVars :: Arg Pattern -> [Arg (Either String Term)]
+patternVars (Arg h r (VarP x)     ) = [Arg h r $ Left x]
+patternVars (Arg h r (DotP t)     ) = [Arg h r $ Right t]
+patternVars (Arg h r (ConP _ _ ps)) = List.concat $ map patternVars ps
+patternVars (Arg h r (LitP l)     ) = []
+
+-- | Does the pattern perform a match that could fail?
+properlyMatching :: Pattern -> Bool
+properlyMatching VarP{} = False
+properlyMatching DotP{} = False
+properlyMatching LitP{} = True
+properlyMatching (ConP _ mt ps) = List.or $ isNothing mt -- not a record cons
+  : map (properlyMatching . unArg) ps  -- or one of subpatterns is a proper m
+
+---------------------------------------------------------------------------
+-- * Smart constructors
+---------------------------------------------------------------------------
+
+ignoreSharing :: Term -> Term
+-- ignoreSharing (Shared p) = ignoreSharing $ derefPtr p
+ignoreSharing v          = v
+
+ignoreSharingType :: Type -> Type
+-- ignoreSharingType (El s v) = El s (ignoreSharing v)
+ignoreSharingType v = v
+
+shared :: Term -> Term
+-- shared v@Shared{}   = v
+-- shared v@(Var _ []) = v
+-- shared v            = Shared (newPtr v)
+shared v = v
+
+sharedType :: Type -> Type
+-- sharedType (El s v) = El s (shared v)
+sharedType v = v
+
+-- | Typically m would be TCM and f would be Blocked.
+updateSharedFM :: (Monad m, Applicative m, Traversable f) => (Term -> m (f Term)) -> Term -> m (f Term)
+updateSharedFM f v0@(Shared p) = do
+  fv <- f (derefPtr p)
+  flip traverse fv $ \v ->
+    case derefPtr (setPtr v p) of
+      Var _ [] -> return v
+      _        -> compressPointerChain v0 `pseq` return v0
+updateSharedFM f v = f v
+
+updateSharedM :: Monad m => (Term -> m Term) -> Term -> m Term
+updateSharedM f v0@(Shared p) = do
+  v <- f (derefPtr p)
+  case derefPtr (setPtr v p) of
+    Var _ [] -> return v
+    _        -> compressPointerChain v0 `pseq` return v0
+updateSharedM f v = f v
+
+updateShared :: (Term -> Term) -> Term -> Term
+updateShared f v0@(Shared p) =
+  case derefPtr (setPtr (f $ derefPtr p) p) of
+    v@(Var _ []) -> v
+    _            -> compressPointerChain v0 `pseq` v0
+updateShared f v = f v
+
+pointerChain :: Term -> [Ptr Term]
+pointerChain (Shared p) = p : pointerChain (derefPtr p)
+pointerChain _          = []
+
+-- Redirect all top-level pointers to point to the last pointer. So, after
+-- compression there are at most two top-level indirections.
+compressPointerChain :: Term -> Term
+compressPointerChain v =
+  case reverse $ pointerChain v of
+    p:_:ps@(_:_) -> setPointers (Shared p) ps
+    _            -> v
+  where
+    setPointers _ [] = v
+    setPointers u (p : ps) =
+      setPtr u p `seq` setPointers u ps
+
+-- | An unapplied variable.
+var :: Nat -> Term
+var i = Var i []
+
+-- | A dummy type.
+typeDontCare :: Type
+typeDontCare = El Prop (Sort Prop)
+
+-- | Top sort (Set\omega).
+topSort :: Type
+topSort = El Inf (Sort Inf)
+
+set0      = set 0
+set n     = sort $ mkType n
+prop      = sort Prop
+sort s    = El (sSuc s) $ Sort s
+varSort n = Type $ Max [Plus 0 $ NeutralLevel $ Var n []]
+
+-- | Get the next higher sort.
+sSuc :: Sort -> Sort
+sSuc Prop            = mkType 1
+sSuc Inf             = Inf
+sSuc (DLub a b)      = DLub (sSuc a) (fmap sSuc b)
+sSuc (Type l)        = Type $ levelSuc l
+
+levelSuc (Max []) = Max [ClosedLevel 1]
+levelSuc (Max as) = Max $ map inc as
+  where inc (ClosedLevel n) = ClosedLevel (n + 1)
+        inc (Plus n l)      = Plus (n + 1) l
+
+mkType n = Type $ Max [ClosedLevel n | n > 0]
+
+impossibleTerm :: String -> Int -> Term
+impossibleTerm file line = Lit $ LitString noRange $ unlines
+  [ "An internal error has occurred. Please report this as a bug."
+  , "Location of the error: " ++ file ++ ":" ++ show line
+  ]
+
+---------------------------------------------------------------------------
+-- * Handling blocked terms.
+---------------------------------------------------------------------------
+
+blockingMeta :: Blocked t -> Maybe MetaId
+blockingMeta (Blocked m _) = Just m
+blockingMeta (NotBlocked _) = Nothing
+
+blocked :: MetaId -> a -> Blocked a
+blocked x = Blocked x
+
+notBlocked :: a -> Blocked a
+notBlocked = NotBlocked
+
+ignoreBlocking :: Blocked a -> a
+ignoreBlocking (Blocked _ x) = x
+ignoreBlocking (NotBlocked x) = x
+
+---------------------------------------------------------------------------
+-- * Simple operations on terms and types.
+---------------------------------------------------------------------------
+
+-- | Removing a topmost 'DontCare' constructor.
+stripDontCare :: Term -> Term
+stripDontCare v = case ignoreSharing v of
+  DontCare v -> v
+  _          -> v
+
+-- | Doesn't do any reduction.
+arity :: Type -> Nat
+arity t = case ignoreSharing $ unEl t of
+  Pi  _ b -> 1 + arity (unAbs b)
+  _       -> 0
+
+-- | Suggest a name for the first argument of a function of the given type.
+argName :: Type -> String
+argName = argN . ignoreSharing . unEl
+    where
+	argN (Pi _ b)  = "." ++ absName b
+	argN _	  = __IMPOSSIBLE__
+
+---------------------------------------------------------------------------
+-- * Show instances.
+---------------------------------------------------------------------------
+
+instance Show a => Show (Abs a) where
+  showsPrec p (Abs x a) = showParen (p > 0) $
+    showString "Abs " . shows x . showString " " . showsPrec 10 a
+  showsPrec p (NoAbs x a) = showParen (p > 0) $
+    showString "NoAbs " . shows x . showString " " . showsPrec 10 a
+
+instance Show MetaId where
+    show (MetaId n) = "_" ++ show n
+
 instance Show t => Show (Blocked t) where
   showsPrec p (Blocked m x) = showParen (p > 0) $
     showString "Blocked " . shows m . showString " " . showsPrec 10 x
   showsPrec p (NotBlocked x) = showsPrec p x
 
-instance Applicative Blocked where
-  pure = notBlocked
-  Blocked x f  <*> e = Blocked x $ f (ignoreBlocking e)
-  NotBlocked f <*> e = f <$> e
+---------------------------------------------------------------------------
+-- * Sized instances.
+---------------------------------------------------------------------------
 
 instance Sized Term where
   size v = case v of
@@ -104,6 +373,7 @@
     Pi a b      -> 1 + size a + size b
     Sort s      -> 1
     DontCare mv -> size mv
+    Shared p    -> size (derefPtr p)
 
 instance Sized Type where
   size = size . unEl
@@ -113,14 +383,25 @@
 
 instance Sized PlusLevel where
   size (ClosedLevel _) = 1
-  size (Plus _ a) = size a
+  size (Plus _ a)      = size a
 
 instance Sized LevelAtom where
-  size (MetaLevel _ vs) = 1 + Prelude.sum (map size vs)
+  size (MetaLevel _   vs) = 1 + Prelude.sum (map size vs)
   size (BlockedLevel _ v) = size v
-  size (NeutralLevel v) = size v
+  size (NeutralLevel   v) = size v
   size (UnreducedLevel v) = size v
 
+instance Sized (Tele a) where
+  size  EmptyTel	 = 0
+  size (ExtendTel _ tel) = 1 + size tel
+
+instance Sized a => Sized (Abs a) where
+  size = size . unAbs
+
+---------------------------------------------------------------------------
+-- * KillRange instances.
+---------------------------------------------------------------------------
+
 instance KillRange Term where
   killRange v = case v of
     Var i vs    -> killRange1 (Var i) vs
@@ -133,6 +414,7 @@
     Pi a b      -> killRange2 Pi a b
     Sort s      -> killRange1 Sort s
     DontCare mv -> killRange1 DontCare mv
+    Shared p    -> Shared $ updatePtr killRange p
 
 instance KillRange Level where
   killRange (Max as) = killRange1 Max as
@@ -172,156 +454,12 @@
 instance KillRange a => KillRange (Abs a) where
   killRange = fmap killRange
 
--- | Type of argument lists.
---
-type Args = [Arg Term]
-
--- | Sequence of types. An argument of the first type is bound in later types
---   and so on.
-data Tele a = EmptyTel
-	    | ExtendTel a (Abs (Tele a))  -- ^ Abs is never NoAbs.
-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
-
-type Telescope = Tele (Arg Type)
-
-instance Sized (Tele a) where
-  size  EmptyTel	 = 0
-  size (ExtendTel _ tel) = 1 + size tel
-
--- | The body has (at least) one free variable.
-data Abs a = Abs String a
-           | NoAbs String a
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
-
--- | Danger: doesn't shift variables properly
-unAbs :: Abs a -> a
-unAbs (Abs   _ v) = v
-unAbs (NoAbs _ v) = v
-
-absName :: Abs a -> String
-absName (Abs   x _) = x
-absName (NoAbs x _) = x
-
-instance Show a => Show (Abs a) where
-  showsPrec p (Abs x a) = showParen (p > 0) $
-    showString "Abs " . shows x . showString " " . showsPrec 10 a
-  showsPrec p (NoAbs x a) = showParen (p > 0) $
-    showString "NoAbs " . shows x . showString " " . showsPrec 10 a
-
-instance Sized a => Sized (Abs a) where
-  size = size . unAbs
-
---
--- Definitions
---
-
--- | A clause is a list of patterns and the clause body should @Bind@.
---
---  The telescope contains the types of the pattern variables and the
---  permutation is how to get from the order the variables occur in
---  the patterns to the order they occur in the telescope. The body
---  binds the variables in the order they appear in the patterns.
---
---  For the purpose of the permutation and the body dot patterns count
---  as variables. TODO: Change this!
-data Clause = Clause
-    { clauseRange     :: Range
-    , clauseTel       :: Telescope
-    , clausePerm      :: Permutation
-    , clausePats      :: [Arg Pattern]
-    , clauseBody      :: ClauseBody
-    }
-  deriving (Typeable, Data, Show)
-data ClauseBody = Body Term
-		| Bind (Abs ClauseBody)
-		| NoBody    -- ^ for absurd clauses.
-  deriving (Typeable, Data, Show)
-
-instance HasRange Clause where
-  getRange = clauseRange
-
--- | Patterns are variables, constructors, or wildcards.
---   @QName@ is used in @ConP@ rather than @Name@ since
---     a constructor might come from a particular namespace.
---     This also meshes well with the fact that values (i.e.
---     the arguments we are matching with) use @QName@.
---
-data Pattern = VarP String  -- name suggestion
-             | DotP Term
-	     | ConP QName (Maybe (Arg Type)) [Arg Pattern]
-               -- ^ The type is @'Just' t@' iff the pattern is a
-               -- record pattern. The scope used for the type is given
-               -- by any outer scope plus the clause's telescope
-               -- ('clauseTel').
-	     | LitP Literal
-  deriving (Typeable, Data, Show)
-
-newtype MetaId = MetaId Nat
-    deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable, Data)
-
-instance Show MetaId where
-    show (MetaId n) = "_" ++ show n
-
--- | Doesn't do any reduction.
-arity :: Type -> Nat
-arity t = case unEl t of
-  Pi  _ b -> 1 + arity (unAbs b)
-  _       -> 0
-
--- | Suggest a name for the first argument of a function of the given type.
-argName :: Type -> String
-argName = argN . unEl
-    where
-	argN (Pi _ b)  = "." ++ absName b
-	argN _	  = __IMPOSSIBLE__
-
-
 ---------------------------------------------------------------------------
--- * Smart constructors
+-- * UniverseBi instances.
 ---------------------------------------------------------------------------
 
-blockingMeta :: Blocked t -> Maybe MetaId
-blockingMeta (Blocked m _) = Just m
-blockingMeta (NotBlocked _) = Nothing
-
-blocked :: MetaId -> a -> Blocked a
-blocked x = Blocked x
-
-notBlocked :: a -> Blocked a
-notBlocked = NotBlocked
-
-ignoreBlocking :: Blocked a -> a
-ignoreBlocking (Blocked _ x) = x
-ignoreBlocking (NotBlocked x) = x
-
-set0      = set 0
-set n     = sort $ mkType n
-prop      = sort Prop
-sort s    = El (sSuc s) $ Sort s
-varSort n = Type $ Max [Plus 0 $ NeutralLevel $ Var n []]
-
--- | Get the next higher sort.
-sSuc :: Sort -> Sort
-sSuc Prop            = mkType 1
-sSuc Inf             = Inf
-sSuc (DLub a b)      = DLub (sSuc a) (fmap sSuc b)
-sSuc (Type l)        = Type $ levelSuc l
-
-levelSuc (Max []) = Max [ClosedLevel 1]
-levelSuc (Max as) = Max $ map inc as
-  where inc (ClosedLevel n) = ClosedLevel (n + 1)
-        inc (Plus n l)      = Plus (n + 1) l
-
-mkType n = Type $ Max [ClosedLevel n | n > 0]
-
-getSort :: Type -> Sort
-getSort (El s _) = s
-
-unEl :: Type -> Term
-unEl (El _ t) = t
-
-impossibleTerm :: String -> Int -> Term
-impossibleTerm file line = Lit $ LitString noRange $ unlines
-  [ "An internal error has occurred. Please report this as a bug."
-  , "Location of the error: " ++ file ++ ":" ++ show line
-  ]
+instanceUniverseBiT' [] [t| (([Type], [Clause]), Pattern) |]
+instanceUniverseBiT' [] [t| (Args, Pattern)               |]
+instanceUniverseBiT' [] [t| (([Type], [Clause]), Term)    |]
+instanceUniverseBiT' [] [t| (Args, Term)                  |]
+instanceUniverseBiT' [] [t| ([Term], Term)                |]
diff --git a/src/full/Agda/Syntax/Internal/Generic.hs b/src/full/Agda/Syntax/Internal/Generic.hs
--- a/src/full/Agda/Syntax/Internal/Generic.hs
+++ b/src/full/Agda/Syntax/Internal/Generic.hs
@@ -22,6 +22,11 @@
   traverseTermM f = traverse (traverseTermM f)
   foldTerm f = foldMap (foldTerm f)
 
+instance TermLike a => TermLike (Dom a) where
+  traverseTerm  f = fmap (traverseTerm f)
+  traverseTermM f = traverse (traverseTermM f)
+  foldTerm f = foldMap (foldTerm f)
+
 instance TermLike a => TermLike [a] where
   traverseTerm f = fmap (traverseTerm f)
   traverseTermM f = traverse (traverseTermM f)
@@ -42,6 +47,11 @@
   traverseTermM f = traverse (traverseTermM f)
   foldTerm f = foldMap (foldTerm f)
 
+instance TermLike a => TermLike (Ptr a) where
+  traverseTerm f = fmap (traverseTerm f)
+  traverseTermM f = traverse (traverseTermM f)
+  foldTerm f = foldMap (foldTerm f)
+
 instance TermLike Term where
   traverseTerm f t = case t of
     Var i xs    -> f $ Var i $ traverseTerm f xs
@@ -54,6 +64,7 @@
     Lit _       -> f t
     Sort _      -> f t
     DontCare mv -> f $ DontCare $ traverseTerm f mv
+    Shared p    -> f $ Shared $ traverseTerm f p
 
   traverseTermM f t = case t of
     Var i xs    -> f =<< Var i <$> traverseTermM f xs
@@ -66,6 +77,7 @@
     Lit _       -> f t
     Sort _      -> f t
     DontCare mv -> f =<< DontCare <$> traverseTermM f mv
+    Shared p    -> f =<< Shared <$> traverseTermM f p
 
   foldTerm f t = f t `mappend` case t of
     Var i xs    -> foldTerm f xs
@@ -78,6 +90,7 @@
     Lit _       -> mempty
     Sort _      -> mempty
     DontCare mv -> foldTerm f mv
+    Shared p    -> foldTerm f p
 
 instance TermLike Level where
   traverseTerm f  (Max as) = Max $ traverseTerm f as
@@ -115,3 +128,8 @@
   traverseTerm f (El s t) = El s $ traverseTerm f t
   traverseTermM f (El s t) = El s <$> traverseTermM f t
   foldTerm f (El s t) = foldTerm f t
+
+-- | Put it in a monad to make it possible to do strictly.
+copyTerm :: (TermLike a, Applicative m, Monad m) => a -> m a
+copyTerm = traverseTermM return
+
diff --git a/src/full/Agda/Syntax/Literal.hs b/src/full/Agda/Syntax/Literal.hs
--- a/src/full/Agda/Syntax/Literal.hs
+++ b/src/full/Agda/Syntax/Literal.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 module Agda.Syntax.Literal where
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Agda.Syntax.Position
 import Agda.Syntax.Abstract.Name
 
@@ -10,7 +10,18 @@
 	     | LitString Range String
 	     | LitChar   Range Char
              | LitQName  Range QName
-  deriving (Typeable, Data, Show)
+  deriving (Typeable)
+
+instance Show Literal where
+  showsPrec p l = showParen (p > 9) $ case l of
+    LitInt _ n    -> sh "LitInt" n
+    LitFloat _ x  -> sh "LitFloat" x
+    LitString _ s -> sh "LitString" s
+    LitChar _ c   -> sh "LitChar" c
+    LitQName _ q  -> sh "LitQName" q
+    where
+      sh :: Show a => String -> a -> ShowS
+      sh c x = showString (c ++ " ") . shows x
 
 instance Eq Literal where
   LitInt _ n    == LitInt _ m    = n == m
diff --git a/src/full/Agda/Syntax/Notation.hs b/src/full/Agda/Syntax/Notation.hs
--- a/src/full/Agda/Syntax/Notation.hs
+++ b/src/full/Agda/Syntax/Notation.hs
@@ -8,7 +8,7 @@
 import Control.Monad.Error (throwError)
 import Data.List
 import Data.Maybe
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 
 import System.FilePath
 
@@ -46,7 +46,7 @@
 data GenPart = BindHole Int  -- ^ Argument is the position of the hole (with binding) where the binding should occur.
              | NormalHole Int -- ^ Argument is where the expression should go
              | IdPart String
-  deriving (Data, Typeable, Show, Eq)
+  deriving (Typeable, Show, Eq)
 
 -- | Get a flat list of identifier parts of a notation.
 stringParts :: Notation -> [String]
diff --git a/src/full/Agda/Syntax/Parser.hs b/src/full/Agda/Syntax/Parser.hs
--- a/src/full/Agda/Syntax/Parser.hs
+++ b/src/full/Agda/Syntax/Parser.hs
@@ -24,7 +24,6 @@
 import qualified Agda.Syntax.Parser.Monad as M
 import qualified Agda.Syntax.Parser.Parser as P
 import Agda.Syntax.Parser.Lexer
-import Agda.Syntax.Strict
 import Agda.Syntax.Concrete
 import Agda.Syntax.Parser.Tokens
 
@@ -33,11 +32,11 @@
 ------------------------------------------------------------------------
 -- Wrapping parse results
 
-wrap :: Strict a => ParseResult a -> a
+wrap :: ParseResult a -> a
 wrap (ParseOk _ x)	= x
 wrap (ParseFailed err)	= throw err
 
-wrapM:: (Strict a, Monad m) => m (ParseResult a) -> m a
+wrapM:: Monad m => m (ParseResult a) -> m a
 wrapM m =
     do	r <- m
 	case r of
@@ -54,25 +53,25 @@
   , parseFlags :: ParseFlags
   }
 
-parse :: Strict a => Parser a -> String -> IO a
+parse :: Parser a -> String -> IO a
 parse p = wrapM . return . M.parse (parseFlags p) [normal] (parser p)
 
-parseFile :: Strict a => Parser a -> AbsolutePath -> IO a
+parseFile :: Parser a -> AbsolutePath -> IO a
 parseFile p = wrapM . M.parseFile (parseFlags p) [normal] (parser p)
 
-parseLiterate :: Strict a => Parser a -> String -> IO a
+parseLiterate :: Parser a -> String -> IO a
 parseLiterate p =
   wrapM . return . M.parse (parseFlags p) [literate, code] (parser p)
 
-parseLiterateFile :: Strict a => Parser a -> AbsolutePath -> IO a
+parseLiterateFile :: Parser a -> AbsolutePath -> IO a
 parseLiterateFile p =
   wrapM . M.parseFile (parseFlags p) [literate, code] (parser p)
 
-parsePosString :: Strict a => Parser a -> Position -> String -> IO a
+parsePosString :: Parser a -> Position -> String -> IO a
 parsePosString p pos =
   wrapM . return . M.parsePosString pos (parseFlags p) [normal] (parser p)
 
-parseFile' :: Strict a => Parser a -> AbsolutePath -> IO a
+parseFile' :: Parser a -> AbsolutePath -> IO a
 parseFile' p file =
   if "lagda" `isSuffixOf` filePath file then
     Agda.Syntax.Parser.parseLiterateFile p file
diff --git a/src/full/Agda/Syntax/Parser/LexActions.hs b/src/full/Agda/Syntax/Parser/LexActions.hs
--- a/src/full/Agda/Syntax/Parser/LexActions.hs
+++ b/src/full/Agda/Syntax/Parser/LexActions.hs
@@ -215,7 +215,9 @@
 	    [x]	-> return $ tok $ Left  x
 	    xs	-> return $ tok $ Right xs
     where
-	-- Compute the ranges for the substrings (separated by '.') of a name.
+	-- Compute the ranges for the substrings (separated by '.') of
+	-- a name. Dots are included: the intervals generated for
+	-- "A.B.x" correspond to "A.", "B." and "x".
 	mkName :: Interval -> [String] -> [(Interval, String)]
 	mkName _ []	= []
 	mkName i [x]	= [(i, x)]
@@ -223,9 +225,9 @@
 	    where
 		p0 = iStart i
 		p1 = iEnd i
-		p' = movePosByString p0 x
+		p' = movePos (movePosByString p0 x) '.'
 		i0 = Interval p0 p'
-		i1 = Interval (movePos p' '.') p1
+		i1 = Interval p' p1
 
 
 {--------------------------------------------------------------------------
diff --git a/src/full/Agda/Syntax/Parser/Lexer.x b/src/full/Agda/Syntax/Parser/Lexer.x
--- a/src/full/Agda/Syntax/Parser/Lexer.x
+++ b/src/full/Agda/Syntax/Parser/Lexer.x
@@ -73,22 +73,23 @@
 <pragma_> $white_notab ;
 
 -- Pragmas
-<0,code>    "{-#"		{ begin pragma }
-<pragma_>   "{-#"		{ symbol SymOpenPragma }
-<pragma_>   "#-}"		{ endWith $ symbol SymClosePragma }
-<pragma_>   "OPTIONS"		{ keyword KwOPTIONS }
-<pragma_>   "BUILTIN"		{ keyword KwBUILTIN }
-<pragma_>   "COMPILED_DATA"	{ keyword KwCOMPILED_DATA }
-<pragma_>   "COMPILED_TYPE"	{ keyword KwCOMPILED_TYPE }
-<pragma_>   "COMPILED"	        { keyword KwCOMPILED }
-<pragma_>   "COMPILED_EPIC"     { keyword KwCOMPILED_EPIC }
-<pragma_>   "COMPILED_JS"       { keyword KwCOMPILED_JS }
-<pragma_>   "STATIC"            { keyword KwSTATIC }
-<pragma_>   "IMPORT"	        { keyword KwIMPORT }
-<pragma_>   "IMPOSSIBLE"	{ keyword KwIMPOSSIBLE }
-<pragma_>   "ETA"               { keyword KwETA }
-<pragma_>   "LINE"		{ keyword KwLINE }
-<pragma_>   . # [ $white ] +    { withInterval $ TokString }
+<0,code>    "{-#"		   { begin pragma }
+<pragma_>   "{-#"		   { symbol SymOpenPragma }
+<pragma_>   "#-}"		   { endWith $ symbol SymClosePragma }
+<pragma_>   "OPTIONS"              { keyword KwOPTIONS }
+<pragma_>   "BUILTIN"              { keyword KwBUILTIN }
+<pragma_>   "COMPILED_DATA"        { keyword KwCOMPILED_DATA }
+<pragma_>   "COMPILED_TYPE"        { keyword KwCOMPILED_TYPE }
+<pragma_>   "COMPILED"             { keyword KwCOMPILED }
+<pragma_>   "COMPILED_EPIC"        { keyword KwCOMPILED_EPIC }
+<pragma_>   "COMPILED_JS"          { keyword KwCOMPILED_JS }
+<pragma_>   "STATIC"               { keyword KwSTATIC }
+<pragma_>   "IMPORT"               { keyword KwIMPORT }
+<pragma_>   "IMPOSSIBLE"           { keyword KwIMPOSSIBLE }
+<pragma_>   "ETA"                  { keyword KwETA }
+<pragma_>   "NO_TERMINATION_CHECK" { keyword KwNO_TERMINATION_CHECK }
+<pragma_>   "LINE"                 { keyword KwLINE }
+<pragma_>   . # [ $white ] +       { withInterval $ TokString }
 
 -- Comments
     -- We need to rule out pragmas here. Usually longest match would take
@@ -142,6 +143,8 @@
 <0,code> codata		{ keyword KwCoData }
 <0,code> record		{ keyword KwRecord }
 <0,code> constructor    { keyword KwConstructor }
+<0,code> inductive      { keyword KwInductive }
+<0,code> coinductive    { keyword KwCoInductive }
 <0,code> infix		{ keyword KwInfix }
 <0,code> infixl		{ keyword KwInfixL }
 <0,code> infixr		{ keyword KwInfixR }
@@ -156,7 +159,8 @@
 <0,code> quote		{ keyword KwQuote }
 <0,code> quoteTerm	{ keyword KwQuoteTerm }
 <0,code> unquote	{ keyword KwUnquote }
-<0,code> syntax         { keyword KwSyntax }
+<0,code> syntax		{ keyword KwSyntax }
+<0,code> pattern	{ keyword KwPatternSyn }
 
 -- The parser is responsible to put the lexer in the imp_dir_ state when it
 -- expects an import directive keyword. This means that if you run the
diff --git a/src/full/Agda/Syntax/Parser/Parser.y b/src/full/Agda/Syntax/Parser/Parser.y
--- a/src/full/Agda/Syntax/Parser/Parser.y
+++ b/src/full/Agda/Syntax/Parser/Parser.y
@@ -1,9 +1,20 @@
 {
 {-# OPTIONS_GHC -fno-warn-incomplete-patterns
                 -fno-warn-deprecated-flags #-}
-{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE BangPatterns, PatternGuards #-}
 {-| The parser is generated by Happy (<http://www.haskell.org/happy>).
--}
+ -
+ - Ideally, ranges should be as precise as possible, to get messages that
+ - emphasize precisely the faulting term(s) upon error.
+ -
+ - However, interactive highlighting is only applied at the end of each
+ - mutual block, keywords are only highlighted once (see
+ - `TypeChecking.Rules.Decl'). So if the ranges of two declarations
+ - interleave, one must ensure that keyword ranges are not included in
+ - the intersection. (Otherwise they are uncolored by the interactive
+ - highlighting.)
+ -
+ -}
 module Agda.Syntax.Parser.Parser (
       moduleParser
     , exprParser
@@ -31,9 +42,11 @@
 import Agda.Syntax.Notation
 import Agda.Syntax.Literal
 
+import Agda.Utils.Hash
 import Agda.Utils.Monad
 import Agda.Utils.QuickCheck
 import Agda.Utils.TestHelpers
+import Agda.Utils.Tuple
 }
 
 %name tokensParser Tokens
@@ -69,6 +82,8 @@
     'codata'        { TokKeyword KwCoData $$ }
     'record'        { TokKeyword KwRecord $$ }
     'constructor'   { TokKeyword KwConstructor $$ }
+    'inductive'     { TokKeyword KwInductive $$ }
+    'coinductive'   { TokKeyword KwCoInductive $$ }
     'field'         { TokKeyword KwField $$ }
     'infix'         { TokKeyword KwInfix $$ }
     'infixl'        { TokKeyword KwInfixL $$ }
@@ -80,11 +95,13 @@
     'Set'           { TokKeyword KwSet $$ }
     'forall'        { TokKeyword KwForall $$ }
     'syntax'        { TokKeyword KwSyntax $$ }
+    'pattern'       { TokKeyword KwPatternSyn $$ }
     'OPTIONS'       { TokKeyword KwOPTIONS $$ }
     'BUILTIN'       { TokKeyword KwBUILTIN $$ }
     'IMPORT'        { TokKeyword KwIMPORT $$ }
     'IMPOSSIBLE'    { TokKeyword KwIMPOSSIBLE $$ }
     'ETA'           { TokKeyword KwETA $$ }
+    'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $$ }
     'COMPILED'      { TokKeyword KwCOMPILED $$ }
     'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $$ }
     'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $$ }
@@ -168,6 +185,8 @@
     | 'codata'	    { TokKeyword KwCoData $1 }
     | 'record'	    { TokKeyword KwRecord $1 }
     | 'constructor' { TokKeyword KwConstructor $1 }
+    | 'inductive'   { TokKeyword KwInductive $1 }
+    | 'coinductive' { TokKeyword KwCoInductive $1 }
     | 'field'       { TokKeyword KwField $1 }
     | 'infix'	    { TokKeyword KwInfix $1 }
     | 'infixl'	    { TokKeyword KwInfixL $1 }
@@ -179,6 +198,7 @@
     | 'Set'	    { TokKeyword KwSet $1 }
     | 'forall'	    { TokKeyword KwForall $1 }
     | 'syntax'      { TokKeyword KwSyntax $1 }
+    | 'pattern'     { TokKeyword KwPatternSyn $1 }
     | 'OPTIONS'	    { TokKeyword KwOPTIONS $1 }
     | 'BUILTIN'     { TokKeyword KwBUILTIN $1 }
     | 'IMPORT'      { TokKeyword KwIMPORT $1 }
@@ -190,6 +210,7 @@
     | 'STATIC'       { TokKeyword KwSTATIC $1 }
     | 'IMPOSSIBLE'    { TokKeyword KwIMPOSSIBLE $1 }
     | 'ETA'           { TokKeyword KwETA $1 }
+    | 'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $1 }
     | 'quoteGoal'     { TokKeyword KwQuoteGoal $1 }
     | 'quote'         { TokKeyword KwQuote $1 }
     | 'quoteTerm'     { TokKeyword KwQuoteTerm $1 }
@@ -315,7 +336,7 @@
 	 posPos (fromJust (rStart (getRange $1))) > 2
       then parseErrorAt (fromJust (rStart (getRange $2)))
 	 "Expecting '}}', found separated '}'s."
-      else return $ fuseRange (getRange $1) (getRange ($2))
+      else return $ getRange ($1, $2)
     }
 
 {- UNUSED
@@ -486,7 +507,9 @@
 Expr
   : TeleArrow Expr                      { Pi $1 $2 }
   | 'forall' ForallBindings Expr        { forallPi $2 $3 }
-  | Application3 '->' Expr              { Fun (fuseRange $1 $3) (RawApp (getRange $1) $1) $3 }
+  | Application3 '->' Expr              { Fun (getRange ($1,$2,$3))
+                                              (RawApp (getRange $1) $1)
+                                              $3 }
   | Expr1 %prec LOWEST                  { $1 }
 
 -- Level 1: Application
@@ -509,8 +532,15 @@
 
 -- Level 2: Lambdas and lets
 Expr2
-    : '\\' LamBindings Expr	   { Lam (fuseRange $1 $3) $2 $3 }
-    | '\\'  '{' LamClauses '}'     { ExtendedLam (fuseRange $1 (fuseRange $2 $4)) (reverse $3) }
+    : '\\' LamBindings Expr	   { Lam (getRange ($1,$2,$3)) $2 $3 }
+    | ExtendedOrAbsurdLam          { $1 }
+    | 'let' Declarations 'in' Expr { Let (getRange ($1,$2,$3,$4)) $2 $4 }
+    | Expr3			   { $1 }
+    | 'quoteGoal' Id 'in' Expr     { QuoteGoal (getRange ($1,$2,$3,$4)) $2 $4 }
+
+ExtendedOrAbsurdLam :: { Expr }
+ExtendedOrAbsurdLam
+    : '\\'  '{' LamClauses '}'     { ExtendedLam (getRange ($1,$2,$3,$4)) (reverse $3) }
     | '\\' AbsurdLamBindings       {% case $2 of
                                        Left (bs, h) -> if null bs then return $ AbsurdLam r h else
                                                        return $ Lam r bs (AbsurdLam r h)
@@ -520,9 +550,6 @@
                                                      return $ ExtendedLam (fuseRange $1 es)
                                                                      [(p [] [], AbsurdRHS, NoWhere)]
                                    }
-    | 'let' Declarations 'in' Expr { Let (fuseRange $1 $4) $2 $4 }
-    | Expr3			   { $1 }
-    | 'quoteGoal' Id 'in' Expr     { QuoteGoal (getRange ($1,$4)) $2 $4}
 
 Application3 :: { [Expr] }
 Application3
@@ -531,8 +558,9 @@
 
 -- Level 3: Atoms
 Expr3Curly
-    : '{' Expr '}'			{ HiddenArg (fuseRange $1 $3) (unnamed $2) }
-    | '{' Id '=' Expr '}'		{ HiddenArg (fuseRange $1 $5) (named (show $2) $4) }
+    : '{' Expr '}'			{ HiddenArg (getRange ($1,$2,$3)) (unnamed $2) }
+    | '{' Id '=' Expr '}'		{ HiddenArg (getRange ($1,$2,$3,$4,$5))
+                                            (named (show $2) $4) }
     | '{' '}'				{ let r = fuseRange $1 $2 in HiddenArg r $ unnamed $ Absurd r }
 
 Expr3NoCurly
@@ -546,15 +574,17 @@
     | 'quoteTerm'                       { QuoteTerm (getRange $1) }
     | 'unquote'                         { Unquote (getRange $1) }
     | setN				{ SetN (getRange (fst $1)) (snd $1) }
-    | '{{' Expr DoubleCloseBrace			{ InstanceArg (fuseRange $1 $3) (unnamed $2) }
-    | '{{' Id '=' Expr DoubleCloseBrace		{ InstanceArg (fuseRange $1 $5) (named (show $2) $4) }
-    | '(' Expr ')'			{ Paren (fuseRange $1 $3) $2 }
+    | '{{' Expr DoubleCloseBrace			{ InstanceArg (getRange ($1,$2,$3))
+                                                          (unnamed $2) }
+    | '{{' Id '=' Expr DoubleCloseBrace		{ InstanceArg (getRange ($1,$2,$3,$4,$5))
+                                                          (named (show $2) $4) }
+    | '(' Expr ')'			{ Paren (getRange ($1,$2,$3)) $2 }
     | '(' ')'				{ Absurd (fuseRange $1 $2) }
     | '{{' DoubleCloseBrace             { let r = fuseRange $1 $2 in InstanceArg r $ unnamed $ Absurd r }
-    | Id '@' Expr3			{ As (fuseRange $1 $3) $1 $3 }
+    | Id '@' Expr3			{ As (getRange ($1,$2,$3)) $1 $3 }
     | '.' Expr3				{ Dot (fuseRange $1 $2) $2 }
-    | 'record' '{' FieldAssignments '}' { Rec (getRange ($1,$4)) $3 }
-    | 'record' Expr3NoCurly '{' FieldAssignments '}' { RecUpdate (getRange ($1,$5)) $2 $4 }
+    | 'record' '{' FieldAssignments '}' { Rec (getRange ($1,$2,$3,$4)) $3 }
+    | 'record' Expr3NoCurly '{' FieldAssignments '}' { RecUpdate (getRange ($1,$2,$3,$4,$5)) $2 $4 }
 
 Expr3
     : Expr3Curly			{ $1 }
@@ -595,20 +625,21 @@
 -- Andreas, 2011-04-27: or ..(x1 .. xn : A) or ..{y1 .. ym : B}
 TypedBindings :: { TypedBindings }
 TypedBindings
-    : '.' '(' TBind ')'    { TypedBindings (fuseRange $2 $4) (Arg NotHidden         Irrelevant $3) }
-    | '.' '{' TBind '}'    { TypedBindings (fuseRange $2 $4) (Arg Hidden            Irrelevant $3) }
-    | '.' '{{' TBind DoubleCloseBrace  { TypedBindings (fuseRange $1 $3) (Arg Instance Irrelevant $3) }
-    | '..' '(' TBind ')'    { TypedBindings (fuseRange $2 $4) (Arg NotHidden         NonStrict $3) }
-    | '..' '{' TBind '}'    { TypedBindings (fuseRange $2 $4) (Arg Hidden            NonStrict $3) }
-    | '..' '{{' TBind DoubleCloseBrace  { TypedBindings (fuseRange $1 $3) (Arg Instance NonStrict $3) }
-    | '(' TBind ')'        { TypedBindings (fuseRange $1 $3) (Arg NotHidden         Relevant $2) }
-    | '{{' TBind DoubleCloseBrace      { TypedBindings (fuseRange $1 $3) (Arg Instance Relevant $2) }
-    | '{' TBind '}'        { TypedBindings (fuseRange $1 $3) (Arg Hidden            Relevant $2) }
+    : '.' '(' TBind ')'    { TypedBindings (getRange ($2,$3,$4)) (Arg NotHidden         Irrelevant $3) }
+    | '.' '{' TBind '}'    { TypedBindings (getRange ($2,$3,$4)) (Arg Hidden            Irrelevant $3) }
+    | '.' '{{' TBind DoubleCloseBrace  { TypedBindings (getRange ($2,$3,$4))
+                                         (Arg Instance Irrelevant $3) }
+    | '..' '(' TBind ')'    { TypedBindings (getRange ($2,$3,$4)) (Arg NotHidden         NonStrict $3) }
+    | '..' '{' TBind '}'    { TypedBindings (getRange ($2,$3,$4)) (Arg Hidden            NonStrict $3) }
+    | '..' '{{' TBind DoubleCloseBrace  { TypedBindings (getRange ($2,$3,$4)) (Arg Instance NonStrict $3) }
+    | '(' TBind ')'        { TypedBindings (getRange ($1,$2,$3)) (Arg NotHidden         Relevant $2) }
+    | '{{' TBind DoubleCloseBrace      { TypedBindings (getRange ($1,$2,$3)) (Arg Instance Relevant $2) }
+    | '{' TBind '}'        { TypedBindings (getRange ($1,$2,$3)) (Arg Hidden            Relevant $2) }
 
 
 -- x1 .. xn:A
 TBind :: { TypedBinding }
-TBind : CommaBIds ':' Expr  { TBind (fuseRange $1 $3) (map mkBoundName_ $1) $3 }
+TBind : CommaBIds ':' Expr  { TBind (getRange ($1,$2,$3)) (map mkBoundName_ $1) $3 }
 
 
 -- A non-empty sequence of lambda bindings.
@@ -747,11 +778,11 @@
  --------------------------------------------------------------------------}
 
 -- You can rename imports
-ImportImportDirective :: { (Maybe AsName, ImportDirective) }
-ImportImportDirective
-    : ImportDirective	    { (Nothing, $1) }
-    | id Id ImportDirective {% isName "as" $1 >>
-                               return (Just (AsName $2 (getRange (fst $1))), $3) }
+-- ImportImportDirective :: { (Maybe AsName, ImportDirective) }
+-- ImportImportDirective
+--     : ImportDirective	    { (Nothing, $1) }
+--     | id Id ImportDirective {% isName "as" $1 >>
+--                                return (Just (AsName $2 (getRange (fst $1))), $3) }
 
 -- Import directives
 ImportDirective :: { ImportDirective }
@@ -768,17 +799,17 @@
     : UsingOrHiding RenamingDir	{ ImportDirective (fuseRange (snd $1) (snd $2)) (fst $1) (fst $2) False }
     | RenamingDir		{ ImportDirective (getRange (snd $1)) (Hiding []) (fst $1) False }
     | UsingOrHiding		{ ImportDirective (getRange (snd $1)) (fst $1) [] False }
-    | {- empty -}		{ ImportDirective noRange (Hiding []) [] False }
+    | {- empty -}		{ defaultImportDir }
 
 UsingOrHiding :: { (UsingOrHiding , Range) }
 UsingOrHiding
-    : 'using' '(' CommaImportNames ')'   { (Using $3 , fuseRange $1 $4) }
+    : 'using' '(' CommaImportNames ')'   { (Using $3 , getRange ($1,$2,$3,$4)) }
 	-- only using can have an empty list
-    | 'hiding' '(' CommaImportNames1 ')' { (Hiding $3 , fuseRange $1 $4) }
+    | 'hiding' '(' CommaImportNames1 ')' { (Hiding $3 , getRange ($1,$2,$3,$4)) }
 
 RenamingDir :: { ([Renaming] , Range) }
 RenamingDir
-    : 'renaming' '(' Renamings ')'	{ ($3 , fuseRange $1 $4) }
+    : 'renaming' '(' Renamings ')'	{ ($3 , getRange ($1,$2,$3,$4)) }
 
 -- Renamings of the form 'x to y'
 Renamings :: { [Renaming] }
@@ -821,7 +852,7 @@
 LHS : Expr1 RewriteEquations WithExpressions
         {% exprToLHS $1 >>= \p -> return (p $2 $3) }
     | '...' WithPats RewriteEquations WithExpressions
-        { Ellipsis (fuseRange $1 $3) $2 $3 $4 }
+        { Ellipsis (getRange ($1,$2,$3,$4)) $2 $3 $4 }
 
 WithPats :: { [Pattern] }
 WithPats : {- empty -}	{ [] }
@@ -857,9 +888,8 @@
 -- Top-level definitions.
 Declaration :: { [Declaration] }
 Declaration
-    : RelTypeSig    { [$1] }  -- Possibly dotted type signature.
-    | Fields        { $1   }
-    | FunClause	    { [$1] }
+    : Fields	    {  $1  }
+    | FunClause     {  $1  }
     | Data	    { [$1] }
     | DataSig	    { [$1] }  -- lone data type signature in mutual block
     | Record	    { [$1] }
@@ -870,12 +900,13 @@
     | Private	    { [$1] }
     | Postulate	    { [$1] }
     | Primitive	    { [$1] }
-    | Open	    { [$1] }
-    | Import	    { [$1] }
+    | Open	    {  $1  }
+--    | Import	    { [$1] }
     | ModuleMacro   { [$1] }
     | Module	    { [$1] }
     | Pragma	    { [$1] }
     | Syntax        { [$1] }
+    | PatternSyn    { [$1] }
 
 
 {--------------------------------------------------------------------------
@@ -887,12 +918,6 @@
 TypeSigs :: { [Declaration] }
 TypeSigs : SpaceIds ':' Expr { map (flip (TypeSig Relevant) $3) $1 }
 
--- Some declaration can include relevance information (axioms, functions)
-RelTypeSig :: { Declaration }
-RelTypeSig
-    : '.' Id ':' Expr   { TypeSig Irrelevant $2 $4 }
-    | Id ':' Expr       { TypeSig Relevant $1 $3 }
-
 RelTypeSigs :: { [Declaration] }
 RelTypeSigs : MaybeDottedIds ':' Expr { map (\ (Arg _ rel x) -> TypeSig rel x $3) $1 }
 
@@ -904,44 +929,50 @@
 
 -- Function declarations. The left hand side is parsed as an expression to allow
 -- declarations like 'x::xs ++ ys = e', when '::' has higher precedence than '++'.
-FunClause :: { Declaration }
-FunClause : LHS RHS WhereClause	{ FunClause $1 $2 $3 }
+-- FunClause also handle possibly dotted type signatures.
+FunClause :: { [Declaration] }
+FunClause : LHS RHS WhereClause	{% funClauseOrTypeSigs $1 $2 $3 }
 
-RHS :: { RHS }
-RHS : '=' Expr	    { RHS $2 }
-    | {- empty -}   { AbsurdRHS }
+RHS :: { RHSOrTypeSigs }
+RHS : '=' Expr	    { JustRHS (RHS $2) }
+    | ':' Expr      { TypeSigsRHS $2 }
+    | {- empty -}   { JustRHS AbsurdRHS }
 
 -- Data declaration. Can be local.
 Data :: { Declaration }
 Data : 'data' Id TypedUntypedBindings ':' Expr 'where'
-            Constructors	{ Data (getRange ($1, $6, $7)) Inductive $2 $3 (Just $5) $7 }
+            Constructors	{ Data (getRange ($1,$2,$3,$4,$5,$6,$7)) Inductive $2 $3 (Just $5) $7 }
      | 'codata' Id TypedUntypedBindings ':' Expr 'where'
-            Constructors	{ Data (getRange ($1, $6, $7)) CoInductive $2 $3 (Just $5) $7 }
+            Constructors	{ Data (getRange ($1,$2,$3,$4,$5,$6,$7)) CoInductive $2 $3 (Just $5) $7 }
 
   -- New cases when we already had a DataSig.  Then one can omit the sort.
      | 'data' Id TypedUntypedBindings 'where'
-	    Constructors	{ Data (getRange ($1, $4, $5)) Inductive $2 $3 Nothing $5 }
+	    Constructors	{ Data (getRange ($1,$2,$3,$4,$5)) Inductive $2 $3 Nothing $5 }
      | 'codata' Id TypedUntypedBindings 'where'
-	    Constructors	{ Data (getRange ($1, $4, $5)) CoInductive $2 $3 Nothing $5 }
+	    Constructors	{ Data (getRange ($1,$2,$3,$4,$5)) CoInductive $2 $3 Nothing $5 }
 
 -- Data type signature. Found in mutual blocks.
 DataSig :: { Declaration }
 DataSig : 'data' Id TypedUntypedBindings ':' Expr
-  { DataSig (fuseRange $1 $5) Inductive $2 $3 $5 }
+  { DataSig (getRange ($1,$2,$3,$4,$5)) Inductive $2 $3 $5 }
 
+-- Andreas, 2012-03-16:  The Expr3NoCurly instead of Id in everything
+-- following 'record' is to remove the (harmless) shift/reduce conflict
+-- introduced by record update expressions.
+
 -- Record declarations.
 Record :: { Declaration }
-Record : 'record' Id TypedUntypedBindings ':' Expr 'where'
+Record : 'record' Expr3NoCurly TypedUntypedBindings ':' Expr 'where'
 	    RecordDeclarations
-         { Record (getRange ($1, $6, $7)) $2 (fst $7) $3 (Just $5) (snd $7) }
-       | 'record' Id TypedUntypedBindings 'where'
+         {% exprToName $2 >>= \ n -> return $ Record (getRange ($1,$2,$3,$4,$5,$6,$7)) n (fst3 $7) (snd3 $7) $3 (Just $5) (thd3 $7) }
+       | 'record' Expr3NoCurly TypedUntypedBindings 'where'
 	    RecordDeclarations
-         { Record (getRange ($1, $4, $5)) $2 (fst $5) $3 Nothing (snd $5) }
+         {% exprToName $2 >>= \ n -> return $ Record (getRange ($1,$2,$3,$4,$5)) n (fst3 $5) (snd3 $5) $3 Nothing (thd3 $5) }
 
 -- Record type signature. In mutual blocks.
 RecordSig :: { Declaration }
-RecordSig : 'record' Id TypedUntypedBindings ':' Expr
-  { RecordSig (fuseRange $1 $5) $2 $3 $5 }
+RecordSig : 'record' Expr3NoCurly TypedUntypedBindings ':' Expr
+  {% exprToName $2 >>= \ n -> return $ RecordSig (getRange ($1,$2,$3,$4,$5)) n $3 $5 }
 
 -- Declaration of record constructor name.
 RecordConstructorName :: { Name }
@@ -949,9 +980,9 @@
 
 -- Fixity declarations.
 Infix :: { Declaration }
-Infix : 'infix'  Int SpaceBIds  { Infix (NonAssoc (fuseRange $1 $3) $2) $3 }
-      | 'infixl' Int SpaceBIds  { Infix (LeftAssoc (fuseRange $1 $3) $2) $3 }
-      | 'infixr' Int SpaceBIds  { Infix (RightAssoc (fuseRange $1 $3) $2) $3 }
+Infix : 'infix'  Int SpaceBIds  { Infix (NonAssoc (getRange ($1,$3)) $2) $3 }
+      | 'infixl' Int SpaceBIds  { Infix (LeftAssoc (getRange ($1,$3)) $2) $3 }
+      | 'infixr' Int SpaceBIds  { Infix (RightAssoc (getRange ($1,$3)) $2) $3 }
 
 -- Field declarations.
 Fields :: { [Declaration] }
@@ -992,6 +1023,13 @@
     _ -> parseError "syntax declarations are allowed only for simple names (without holes)"
 }
 
+-- Pattern synonyms.
+PatternSyn :: { Declaration }
+PatternSyn : 'pattern' SpaceIds '=' Expr {% do
+  p <- exprToPattern $4
+  return (PatternSyn (getRange ($1,$2,$3,$4)) (head $2) (tail $2) p)
+  }
+
 SimpleIds :: { [String] }
 SimpleIds : SimpleId { [$1] }
           | SimpleIds SimpleId {$1 ++ [$2]}
@@ -1009,29 +1047,80 @@
 SimpleId :: { String }
 SimpleId : id  { snd $1 }
 
+MaybeOpen :: { Maybe Range }
+MaybeOpen : 'open'      { Just (getRange $1) }
+          | {- empty -} { Nothing }
 
 -- Open
-Open :: { Declaration }
-Open : 'open' ModuleName OpenArgs ImportDirective {
+Open :: { [Declaration] }
+Open : MaybeOpen 'import' ModuleName OpenArgs ImportDirective {%
     let
+    { doOpen = maybe DontOpen (const DoOpen) $1
+    ; m   = $3
+    ; es  = $4
+    ; dir = $5
+    ; r   = getRange (m, es, dir)
+    ; mr  = getRange m
+    ; unique = hash $ show $ fmap (const (Nothing :: Maybe ())) r
+         -- turn range into unique id, but delete file path
+         -- which is absolute and messes up suite of failing tests
+         -- (different hashs on different installations)
+         -- TODO: Don't use (insecure) hashes in this way.
+    ; fresh = Name mr [ Id $ ".#" ++ show m ++ "-" ++ show unique ]
+    ; impStm asR = Import mr m (Just (AsName fresh asR)) DontOpen defaultImportDir
+    ; appStm m' es =
+        let r = getRange (m, es) in
+        Private r
+          [ ModuleMacro r m'
+             (SectionApp (getRange es) []
+               (RawApp (getRange es) (Ident (QName fresh) : es)))
+             doOpen dir
+          ]
+    ; (initArgs, last2Args) = splitAt (length es - 2) es
+    ; parseAsClause = case last2Args of
+      { [ Ident (QName (Name asR [Id x]))
+        , Ident (QName m')
+        ] | x == "as" -> Just (asR, m')
+      ; _ -> Nothing
+      }
+    } in
+    case es of
+      { [] -> return [Import mr m Nothing doOpen dir]
+      ; _ | Just (asR, m') <- parseAsClause ->
+              if null initArgs then return
+                 [ Import (getRange (m, asR, m', dir)) m
+                     (Just (AsName m' asR)) doOpen dir
+                 ]
+              else return [ impStm asR, appStm m' initArgs ]
+          | DontOpen <- doOpen -> parseErrorAt (fromJust $ rStart $ getRange $2) "An import statement with module instantiation does not actually import the module.  This statement achieves nothing.  Either add the `open' keyword or bind the instantiated module with an `as' clause."
+          | otherwise -> return
+              [ impStm noRange
+              , appStm (noName $ beginningOf $ getRange m) es
+              ]
+      }
+  }
+  |'open' ModuleName OpenArgs ImportDirective {
+    let
     { m   = $2
     ; es  = $3
     ; dir = $4
-    ; r   = getRange ($1, m, es, dir)
+    ; r   = getRange (m, es, dir)
     } in
-    case es of
-    { []  -> Open r m dir
-	; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2)
+    [ case es of
+      { []  -> Open r m dir
+      ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange m)
 			     (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))
 			     DoOpen dir
-                       ]
-    }
+                         ]
+      }
+    ]
   }
   | 'open' ModuleName '{{' '...' DoubleCloseBrace ImportDirective {
-    let r = getRange ($1, $2, $3, $4) in
-    Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2)
+    let r = getRange $2 in
+    [ Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2)
     	      	(RecordModuleIFS r $2) DoOpen $6
-        ]
+                ]
+    ]
   }
 
 OpenArgs :: { [Expr] }
@@ -1040,7 +1129,7 @@
 
 ModuleApplication :: { [TypedBindings] -> Parser ModuleApplication }
 ModuleApplication : ModuleName '{{' '...' DoubleCloseBrace { (\ts ->
-		    if null ts then return $ RecordModuleIFS (getRange ($1, $4)) $1
+		    if null ts then return $ RecordModuleIFS (getRange ($1,$2,$3,$4)) $1
 		    else parseError "No bindings allowed for record module with non-canonical implicits" )
 		    }
 		  | ModuleName OpenArgs {
@@ -1050,32 +1139,30 @@
 -- Module instantiation
 ModuleMacro :: { Declaration }
 ModuleMacro : 'module' Id TypedUntypedBindings '=' ModuleApplication ImportDirective
-		    {% do {ma <- $5 (map addType $3); return $ ModuleMacro (getRange ($1, ma, $6)) $2 ma DontOpen $6 } }
+		    {% do {ma <- $5 (map addType $3); return $ ModuleMacro (getRange ($1, $2, ma, $6)) $2 ma DontOpen $6 } }
 	    | 'open' 'module' Id TypedUntypedBindings '=' ModuleApplication ImportDirective
-		    {% do {ma <- $6 (map addType $4); return $ ModuleMacro (getRange ($1, ma, $7)) $3 ma DoOpen $7 } }
-
--- Import
-Import :: { Declaration }
-Import : 'import' ModuleName ImportImportDirective
-	    { Import (getRange ($1,$2,snd $3)) $2 (fst $3) DontOpen (snd $3) }
-       | 'open' 'import' ModuleName ImportImportDirective
-	    { Import (getRange ($1,$3,snd $4)) $3 (fst $4) DoOpen (snd $4) }
+		    {% do {ma <- $6 (map addType $4); return $ ModuleMacro (getRange ($1, $2, $3, ma, $7)) $3 ma DoOpen $7 } }
 
 -- Module
 Module :: { Declaration }
 Module : 'module' Id TypedUntypedBindings 'where' Declarations0
-		    { Module (getRange ($1,$4,$5)) (QName $2) (map addType $3) $5 }
+		    { Module (getRange ($1,$2,$3,$4,$5)) (QName $2) (map addType $3) $5 }
+       | 'module' Underscore TypedUntypedBindings 'where' Declarations0
+		    { Module (getRange ($1,$2,$3,$4,$5)) (QName $2) (map addType $3) $5 }
 
+Underscore :: { Name }
+Underscore : '_' { noName (getRange $1) }
+
 -- The top-level consist of a bunch of import and open followed by a top-level module.
 TopLevel :: { [Declaration] }
 TopLevel : TopModule       { [$1] }
-	 | Import TopLevel { $1 : $2 }
-	 | Open   TopLevel { $1 : $2 }
+--	 | Import TopLevel { $1 : $2 }
+	 | Open   TopLevel { $1 ++ $2 }
 
 -- The top-level module can have a qualified name.
 TopModule :: { Declaration }
 TopModule : 'module' ModuleName TypedUntypedBindings 'where' Declarations0
-		    { Module (getRange ($1,$4,$5)) $2 (map addType $3) $5 }
+		    { Module (getRange ($1,$2,$3,$4,$5)) $2 (map addType $3) $5 }
 
 Pragma :: { Declaration }
 Pragma : DeclarationPragma  { Pragma $1 }
@@ -1086,71 +1173,77 @@
 
 DeclarationPragma :: { Pragma }
 DeclarationPragma
-  : BuiltinPragma      { $1 }
-  | CompiledPragma     { $1 }
-  | CompiledDataPragma { $1 }
-  | CompiledTypePragma { $1 }
-  | CompiledEpicPragma { $1 }
-  | CompiledJSPragma   { $1 }
-  | StaticPragma       { $1 }
-  | ImportPragma       { $1 }
-  | ImpossiblePragma   { $1 }
-  | RecordEtaPragma    { $1 }
+  : BuiltinPragma            { $1 }
+  | CompiledPragma           { $1 }
+  | CompiledDataPragma       { $1 }
+  | CompiledTypePragma       { $1 }
+  | CompiledEpicPragma       { $1 }
+  | CompiledJSPragma         { $1 }
+  | StaticPragma             { $1 }
+  | ImportPragma             { $1 }
+  | ImpossiblePragma         { $1 }
+  | RecordEtaPragma          { $1 }
+  | NoTerminationCheckPragma { $1 }
 
 OptionsPragma :: { Pragma }
-OptionsPragma : '{-#' 'OPTIONS' PragmaStrings '#-}' { OptionsPragma (fuseRange $1 $4) $3 }
+OptionsPragma : '{-#' 'OPTIONS' PragmaStrings '#-}' { OptionsPragma (getRange ($1,$2,$4)) $3 }
 
 BuiltinPragma :: { Pragma }
 BuiltinPragma
     : '{-#' 'BUILTIN' string PragmaName '#-}'
-      { BuiltinPragma (fuseRange $1 $5) (snd $3) (Ident $4) }
+      { BuiltinPragma (getRange ($1,$2,fst $3,$4,$5)) (snd $3) (Ident $4) }
 
 CompiledPragma :: { Pragma }
 CompiledPragma
   : '{-#' 'COMPILED' PragmaName PragmaStrings '#-}'
-    { CompiledPragma (fuseRange $1 $5) $3 (unwords $4) }
+    { CompiledPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }
 
 CompiledTypePragma :: { Pragma }
 CompiledTypePragma
   : '{-#' 'COMPILED_TYPE' PragmaName PragmaStrings '#-}'
-    { CompiledTypePragma (fuseRange $1 $5) $3 (unwords $4) }
+    { CompiledTypePragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }
 
 CompiledDataPragma :: { Pragma }
 CompiledDataPragma
   : '{-#' 'COMPILED_DATA' PragmaName string PragmaStrings '#-}'
-    { CompiledDataPragma (fuseRange $1 $6) $3 (snd $4) $5 }
+    { CompiledDataPragma (getRange ($1,$2,$3,fst $4,$6)) $3 (snd $4) $5 }
 
 CompiledEpicPragma :: { Pragma }
 CompiledEpicPragma
   : '{-#' 'COMPILED_EPIC' PragmaName PragmaStrings '#-}'
-    { CompiledEpicPragma (fuseRange $1 $5) $3 (unwords $4) }
+    { CompiledEpicPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }
 
 CompiledJSPragma :: { Pragma }
 CompiledJSPragma
   : '{-#' 'COMPILED_JS' PragmaName PragmaStrings '#-}'
-    { CompiledJSPragma (fuseRange $1 $5) $3 (unwords $4) }
+    { CompiledJSPragma (getRange ($1,$2,$3,$5)) $3 (unwords $4) }
 
 StaticPragma :: { Pragma }
 StaticPragma
   : '{-#' 'STATIC' PragmaName '#-}'
-    { StaticPragma (fuseRange $1 $4) $3 }
+    { StaticPragma (getRange ($1,$2,$3,$4)) $3 }
 
 RecordEtaPragma :: { Pragma }
 RecordEtaPragma
   : '{-#' 'ETA' PragmaName '#-}'
-    { EtaPragma (fuseRange $1 $4) $3 }
+    { EtaPragma (getRange ($1,$2,$3,$4)) $3 }
 
+NoTerminationCheckPragma :: { Pragma }
+NoTerminationCheckPragma
+  : '{-#' 'NO_TERMINATION_CHECK' '#-}'
+    { NoTerminationCheckPragma (getRange ($1,$2,$3)) }
+
 ImportPragma :: { Pragma }
 ImportPragma
   : '{-#' 'IMPORT' string '#-}'
     {% let s = snd $3 in
        if validHaskellModuleName s
-       then return $ ImportPragma (fuseRange $1 $4) s
+       then return $ ImportPragma (getRange ($1,$2,fst $3,$4)) s
        else parseError $ "Malformed module name: " ++ s ++ "."
     }
 
 ImpossiblePragma :: { Pragma }
-  : '{-#' 'IMPOSSIBLE' '#-}'  { ImpossiblePragma (fuseRange $1 $3) }
+  : '{-#' 'IMPOSSIBLE' '#-}'  { ImpossiblePragma (getRange ($1,$2,$3)) }
 
 {--------------------------------------------------------------------------
     Sequences of declarations
@@ -1198,13 +1291,23 @@
     | TypeSignatures { $1 }
 
 -- Record declarations, including an optional record constructor name.
-RecordDeclarations :: { (Maybe Name, [Declaration]) }
+RecordDeclarations :: { (Maybe Induction, Maybe Name, [Declaration]) }
 RecordDeclarations
-    : vopen                                          close { (Nothing, []) }
-    | vopen RecordConstructorName                    close { (Just $2, []) }
-    | vopen RecordConstructorName semi Declarations1 close { (Just $2, reverse $4) }
-    | vopen                            Declarations1 close { (Nothing, reverse $2) }
+    : vopen                                          close { (Nothing, Nothing, []) }
+    | vopen RecordConstructorName                    close { (Nothing, Just $2, []) }
+    | vopen RecordConstructorName semi Declarations1 close { (Nothing, Just $2, reverse $4) }
+    | vopen                            Declarations1 close { (Nothing, Nothing, reverse $2) }
+    | vopen RecordInduction                                               close { (Just $2, Nothing, []) }
+    | vopen RecordInduction semi RecordConstructorName                    close { (Just $2, Just $4, []) }
+    | vopen RecordInduction semi RecordConstructorName semi Declarations1 close { (Just $2, Just $4, reverse $6) }
+    | vopen RecordInduction semi                            Declarations1 close { (Just $2, Nothing, reverse $4) }
 
+-- Declaration of record as 'inductive' or 'coinductive'.
+RecordInduction :: { Induction }
+RecordInduction
+   : 'inductive'   { Inductive }
+   | 'coinductive' { CoInductive }
+
 -- Arbitrary declarations
 Declarations :: { [Declaration] }
 Declarations
@@ -1395,7 +1498,34 @@
 opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "syntax binding lambda cannot appear in a pattern"
 opAppExprToPattern (Ordinary e) = exprToPattern e
 
+-- | Turn an expression into a name. Fails if the expression is not a
+--   valid identifier.
+exprToName :: Expr -> Parser Name
+exprToName (Ident (QName x)) = return x
+exprToName e =
+  let Just pos = rStart $ getRange e in
+  parseErrorAt pos $ "Not a valid identifier: " ++ show e
+
 parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."
+
+{- RHS or type signature -}
+
+data RHSOrTypeSigs = JustRHS RHS
+                   | TypeSigsRHS Expr
+
+namesOfPattern :: Pattern -> Maybe [(Relevance, Name)]
+namesOfPattern (IdentP (QName i))         = Just [(Relevant, i)]
+namesOfPattern (DotP _ (Ident (QName i))) = Just [(Irrelevant, i)]
+namesOfPattern (RawAppP _ ps)             = fmap concat $ mapM namesOfPattern ps
+namesOfPattern _                          = Nothing
+
+funClauseOrTypeSigs :: LHS -> RHSOrTypeSigs -> WhereClause -> Parser [Declaration]
+funClauseOrTypeSigs lhs (JustRHS   rhs) wh = return [FunClause lhs rhs wh]
+funClauseOrTypeSigs lhs (TypeSigsRHS e) wh
+  | NoWhere <- wh,
+    LHS p [] [] [] <- lhs,
+    Just names <- namesOfPattern p = return $ map (\(x,y) -> TypeSig x y e) names
+  | otherwise                      = parseError "Illegal function clause or type signature"
 
 {--------------------------------------------------------------------------
     Tests
diff --git a/src/full/Agda/Syntax/Parser/Tokens.hs b/src/full/Agda/Syntax/Parser/Tokens.hs
--- a/src/full/Agda/Syntax/Parser/Tokens.hs
+++ b/src/full/Agda/Syntax/Parser/Tokens.hs
@@ -16,11 +16,12 @@
 	| KwOpen | KwImport | KwModule | KwPrimitive
 	| KwInfix | KwInfixL | KwInfixR | KwWith | KwRewrite
 	| KwSet | KwProp | KwForall | KwRecord | KwConstructor | KwField
+        | KwInductive | KwCoInductive
 	| KwHiding | KwUsing | KwRenaming | KwTo | KwPublic
 	| KwOPTIONS | KwBUILTIN | KwLINE
 	| KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EPIC | KwCOMPILED_JS
-	| KwIMPORT | KwIMPOSSIBLE | KwETA | KwSTATIC
-	| KwQuoteGoal | KwQuote | KwQuoteTerm | KwUnquote | KwSyntax
+	| KwIMPORT | KwIMPOSSIBLE | KwETA | KwNO_TERMINATION_CHECK | KwSTATIC
+	| KwQuoteGoal | KwQuote | KwQuoteTerm | KwUnquote | KwSyntax | KwPatternSyn
     deriving (Eq, Show)
 
 layoutKeywords :: [Keyword]
@@ -43,7 +44,9 @@
 	= TokKeyword Keyword Interval
 	  -- Identifiers and operators
 	| TokId		(Interval, String)
-	| TokQId	[(Interval, String)] -- non empty namespace
+	| TokQId	[(Interval, String)]
+                        -- Non-empty namespace. The intervals for
+                        -- "A.B.x" correspond to "A.", "B." and "x".
 	  -- Literals
 	| TokLiteral	Literal
 	  -- Special symbols
diff --git a/src/full/Agda/Syntax/Position.hs b/src/full/Agda/Syntax/Position.hs
--- a/src/full/Agda/Syntax/Position.hs
+++ b/src/full/Agda/Syntax/Position.hs
@@ -1,11 +1,12 @@
-{-# LANGUAGE CPP, DeriveDataTypeable #-}
+{-# LANGUAGE CPP, DeriveDataTypeable, DeriveFunctor, TypeSynonymInstances, FlexibleInstances, ScopedTypeVariables #-}
 
 {-| Position information for syntax. Crucial for giving good error messages.
 -}
 
 module Agda.Syntax.Position
   ( -- * Positions
-    Position(..)
+    Position
+  , Position'(..)
   , positionInvariant
   , startPos
   , movePos
@@ -13,13 +14,15 @@
   , backupPos
 
     -- * Intervals
-  , Interval(..)
+  , Interval
+  , Interval'(..)
   , intervalInvariant
   , takeI
   , dropI
 
     -- * Ranges
-  , Range(..)
+  , Range
+  , Range'(..)
   , rangeInvariant
   , noRange
   , posToRange
@@ -42,7 +45,7 @@
   , tests
   ) where
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.List
 import Data.Function
 import Data.Set (Set, (\\))
@@ -70,35 +73,41 @@
 -- messages for the user.
 --
 -- Note the invariant which positions have to satisfy: 'positionInvariant'.
-data Position = Pn { srcFile :: Maybe AbsolutePath
-                     -- ^ File.
-                   , posPos  :: !Int32
-                     -- ^ Position.
-		   , posLine :: !Int32
-                     -- ^ Line number, counting from 1.
-		   , posCol  :: !Int32
-                     -- ^ Column number, counting from 1.
-		   }
-    deriving (Typeable, Data)
+data Position' a = Pn
+  { srcFile :: a
+    -- ^ File.
+  , posPos  :: !Int32
+    -- ^ Position.
+  , posLine :: !Int32
+    -- ^ Line number, counting from 1.
+  , posCol  :: !Int32
+    -- ^ Column number, counting from 1.
+  }
+    deriving (Typeable, Functor)
 
+type SrcFile  = Maybe AbsolutePath
+type Position = Position' SrcFile
+
 positionInvariant :: Position -> Bool
 positionInvariant p =
   posPos p > 0 && posLine p > 0 && posCol p > 0
 
 importantPart p = (srcFile p, posPos p)
 
-instance Eq Position where
+instance Eq a => Eq (Position' a) where
   (==) = (==) `on` importantPart
 
-instance Ord Position where
+instance Ord a => Ord (Position' a) where
   compare = compare `on` importantPart
 
 -- | An interval. The @iEnd@ position is not included in the interval.
 --
 -- Note the invariant which intervals have to satisfy: 'intervalInvariant'.
-data Interval = Interval { iStart, iEnd :: !Position }
-    deriving (Typeable, Data, Eq, Ord)
+data Interval' a = Interval { iStart, iEnd :: !(Position' a) }
+    deriving (Typeable, Eq, Ord, Functor)
 
+type Interval = Interval' SrcFile
+
 intervalInvariant :: Interval -> Bool
 intervalInvariant i =
   all positionInvariant [iStart i, iEnd i] &&
@@ -113,9 +122,11 @@
 -- consecutive and separated.
 --
 -- Note the invariant which ranges have to satisfy: 'rangeInvariant'.
-newtype Range = Range [Interval]
-  deriving (Typeable, Data, Eq, Ord)
+newtype Range' a = Range [Interval' a]
+  deriving (Typeable, Eq, Ord, Functor)
 
+type Range = Range' SrcFile
+
 rangeInvariant :: Range -> Bool
 rangeInvariant (Range []) = True
 rangeInvariant (Range is) =
@@ -142,8 +153,17 @@
     getRange (x,y,z) = getRange (x,(y,z))
 
 instance (HasRange a, HasRange b, HasRange c, HasRange d) => HasRange (a,b,c,d) where
-    getRange (x,y,z,w) = getRange (x,(y,(z, w)))
+    getRange (x,y,z,w) = getRange (x,(y,(z,w)))
 
+instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e) => HasRange (a,b,c,d,e) where
+    getRange (x,y,z,w,v) = getRange (x,(y,(z,(w,v))))
+
+instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e, HasRange f) => HasRange (a,b,c,d,e,f) where
+    getRange (x,y,z,w,v,u) = getRange (x,(y,(z,(w,(v,u)))))
+
+instance (HasRange a, HasRange b, HasRange c, HasRange d, HasRange e, HasRange f, HasRange g) => HasRange (a,b,c,d,e,f,g) where
+    getRange (x,y,z,w,v,u,t) = getRange (x,(y,(z,(w,(v,(u,t))))))
+
 instance HasRange a => HasRange (Maybe a) where
     getRange Nothing  = noRange
     getRange (Just a) = getRange a
@@ -178,6 +198,10 @@
 instance (KillRange a, KillRange b) => KillRange (a, b) where
   killRange (x, y) = (killRange x, killRange y)
 
+instance (KillRange a, KillRange b, KillRange c) =>
+         KillRange (a, b, c) where
+  killRange (x, y, z) = killRange3 (,,) x y z
+
 instance KillRange a => KillRange (Maybe a) where
   killRange = fmap killRange
 
@@ -189,11 +213,11 @@
     Pretty printing
  --------------------------------------------------------------------------}
 
-instance Show Position where
+instance Show a => Show (Position' (Maybe a)) where
     show (Pn Nothing  _ l c) = show l ++ "," ++ show c
-    show (Pn (Just f) _ l c) = filePath f ++ ":" ++ show l ++ "," ++ show c
+    show (Pn (Just f) _ l c) = show f ++ ":" ++ show l ++ "," ++ show c
 
-instance Show Interval where
+instance Show a => Show (Interval' (Maybe a)) where
     show (Interval s e) = file ++ start ++ "-" ++ end
 	where
 	    f	= srcFile s
@@ -203,13 +227,13 @@
 	    ec	= posCol e
 	    file = case f of
                      Nothing -> ""
-                     Just f  -> filePath f ++ ":"
+                     Just f  -> show f ++ ":"
 	    start = show sl ++ "," ++ show sc
 	    end
 		| sl == el  = show ec
 		| otherwise = show el ++ "," ++ show ec
 
-instance Show Range where
+instance Show a => Show (Range' (Maybe a)) where
   show r = case rangeToInterval r of
     Nothing -> ""
     Just i  -> show i
@@ -269,7 +293,7 @@
                  | otherwise = Range [Interval p2 p1]
 
 -- | Converts a range to an interval, if possible.
-rangeToInterval :: Range -> Maybe Interval
+rangeToInterval :: Range' a -> Maybe (Interval' a)
 rangeToInterval (Range [])   = Nothing
 rangeToInterval (Range is)   = Just $ Interval { iStart = iStart (head is)
                                                , iEnd   = iEnd   (last is)
@@ -284,7 +308,7 @@
 -- | Removes gaps between intervals on the same line.
 continuousPerLine :: Range -> Range
 continuousPerLine (Range [])     = Range []
-continuousPerLine (Range (i:is)) = Range $ fuse i $ sortBy (compare `on` iStart) is
+continuousPerLine (Range (i:is)) = Range $ fuse i is
   where
     fuse i [] = [i]
     fuse i (j:is)
@@ -339,7 +363,7 @@
   Just (Pn { srcFile = f }) -> posToRange p p
     where p = startPos f
 
--- | @x `withRangeOf` y@ sets the range of @x@ to the range of @y@.
+-- | @x \`withRangeOf\` y@ sets the range of @x@ to the range of @y@.
 withRangeOf :: (SetRange t, HasRange u) => t -> u -> t
 x `withRangeOf` y = setRange (getRange y) x
 
@@ -409,7 +433,7 @@
 
 prop_beginningOfFile r = rangeInvariant (beginningOfFile r)
 
-instance Arbitrary Position where
+instance Arbitrary a => Arbitrary (Position' a) where
   arbitrary = do
     srcFile                    <- arbitrary
     NonZero (NonNegative pos') <- arbitrary
@@ -421,7 +445,7 @@
 
 -- | Sets the 'srcFile' components of the interval.
 
-setFile :: Maybe AbsolutePath -> Interval -> Interval
+setFile :: SrcFile -> Interval -> Interval
 setFile f (Interval p1 p2) =
   Interval (p1 { srcFile = f }) (p2 { srcFile = f })
 
@@ -435,9 +459,9 @@
     intervalInvariant i' &&
     srcFile (iStart i) == srcFile (iStart i')
 
-instance Arbitrary Interval where
+instance (Arbitrary a, Ord a) => Arbitrary (Interval' a) where
   arbitrary = do
-    (p1, p2) <- liftM2 (,) arbitrary arbitrary
+    (p1, p2 :: Position' a) <- liftM2 (,) arbitrary arbitrary
     let [p1', p2'] = sort [p1, p2 { srcFile = srcFile p1 }]
     return (Interval p1' p2')
 
diff --git a/src/full/Agda/Syntax/Scope/Base.hs b/src/full/Agda/Syntax/Scope/Base.hs
--- a/src/full/Agda/Syntax/Scope/Base.hs
+++ b/src/full/Agda/Syntax/Scope/Base.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, DeriveDataTypeable, GADTs, ScopedTypeVariables, TupleSections #-}
+{-# LANGUAGE CPP, DeriveDataTypeable, GADTs, ScopedTypeVariables, TupleSections, RankNTypes #-}
 
 {-| This module defines the notion of a scope and operations on scopes.
 -}
@@ -6,7 +6,7 @@
 
 import Control.Arrow ((***), (&&&))
 import Control.Applicative
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.List
 import Data.Map (Map)
 import qualified Data.Map as Map
@@ -31,15 +31,16 @@
 -- | A scope is a named collection of names partitioned into public and private
 --   names.
 data Scope = Scope
-      { scopeName          :: A.ModuleName
-      , scopeParents       :: [A.ModuleName]
-      , scopeNameSpaces    :: [(NameSpaceId, NameSpace)]
-      , scopeImports       :: Map C.QName A.ModuleName
+      { scopeName           :: A.ModuleName
+      , scopeParents        :: [A.ModuleName]
+      , scopeNameSpaces     :: [(NameSpaceId, NameSpace)]
+      , scopeImports        :: Map C.QName A.ModuleName
+      , scopeDatatypeModule :: Bool
       }
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 data NameSpaceId = PrivateNS | PublicNS | ImportedNS | OnlyQualifiedNS
-  deriving (Typeable, Data, Eq, Bounded, Enum)
+  deriving (Typeable, Eq, Bounded, Enum)
 
 localNameSpace :: Access -> NameSpaceId
 localNameSpace PublicAccess  = PublicNS
@@ -61,7 +62,7 @@
       , scopeLocals	:: LocalVars
       , scopePrecedence :: Precedence
       }
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 -- | Local variables
 type LocalVars = [(C.Name, A.Name)]
@@ -73,7 +74,7 @@
       { nsNames	  :: NamesInScope
       , nsModules :: ModulesInScope
       }
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 type ThingsInScope a = Map C.Name [a]
 type NamesInScope    = ThingsInScope AbstractName
@@ -101,22 +102,25 @@
   inScopeTag = ModuleTag
 
 -- | We distinguish constructor names from other names.
-data KindOfName = ConName | DefName
-  deriving (Eq, Show, Typeable, Data)
+data KindOfName = ConName | FldName | DefName | PatternSynName
+  deriving (Eq, Show, Typeable, Enum, Bounded)
 
+allKindsOfNames :: [KindOfName]
+allKindsOfNames = [minBound..maxBound]
+
 -- | Apart from the name, we also record whether it's a constructor or not and
 --   what the fixity is.
 data AbstractName = AbsName
       { anameName   :: A.QName
       , anameKind   :: KindOfName
       }
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 -- | For modules we record the arity. I'm not sure that it's every used anywhere.
 data AbstractModule = AbsModule
       { amodName    :: A.ModuleName
       }
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 instance Eq AbstractName where
   (==) = (==) `on` anameName
@@ -234,11 +238,12 @@
 
 -- | The empty scope.
 emptyScope :: Scope
-emptyScope = Scope { scopeName	     = noModuleName
-                   , scopeParents    = []
-		   , scopeNameSpaces = [ (nsid, emptyNameSpace) | nsid <- [minBound..maxBound] ]
-                   , scopeImports    = Map.empty
-		   }
+emptyScope = Scope { scopeName	         = noModuleName
+                   , scopeParents        = []
+		   , scopeNameSpaces     = [ (nsid, emptyNameSpace) | nsid <- [minBound..maxBound] ]
+                   , scopeImports        = Map.empty
+		   , scopeDatatypeModule = False
+                   }
 
 -- | The empty scope info.
 emptyScopeInfo :: ScopeInfo
@@ -473,6 +478,45 @@
       Just s  -> scopeParents s
       Nothing -> __IMPOSSIBLE__
     current = this : parents
+
+-- | Compute a flattened scope. Only include unqualified names or names
+-- qualified by modules in the first argument.
+flattenScope :: [[C.Name]] -> ScopeInfo -> Map C.QName [AbstractName]
+flattenScope ms scope =
+  -- Map.filterKeys (\q -> elem (init $ C.qnameParts q) ([]:ms)) $
+  Map.unionWith (++)
+    (build ms allNamesInScope root)
+    imported
+  where
+    current = moduleScope $ scopeCurrent scope
+    root    = mergeScopes $ current : map moduleScope (scopeParents current)
+
+    imported = Map.unionsWith (++)
+               [ qual c (build ms' exportedNamesInScope $ moduleScope a)
+               | (c, a) <- Map.toList $ scopeImports root
+               , let m   = C.qnameParts c
+                     ms' = map (drop (length m)) $ filter (m `isPrefixOf`) ms
+               , not $ null ms' ]
+    qual c = Map.mapKeys (q c)
+      where
+        q (C.QName x)  = C.Qual x
+        q (C.Qual m x) = C.Qual m . q x
+
+    build :: [[C.Name]] -> (forall a. InScope a => Scope -> ThingsInScope a) -> Scope -> Map C.QName [AbstractName]
+    build ms getNames s =
+      Map.unionWith (++)
+        (Map.mapKeys (\x -> C.QName x) (getNames s))
+        $ Map.unionsWith (++) $
+          [ Map.mapKeys (\y -> C.Qual x y) $ build ms' exportedNamesInScope $ moduleScope m
+          | (x, mods) <- Map.toList (getNames s)
+          , let ms' = [ ms' | m':ms' <- ms, m' == x ]
+          , not $ null ms'
+          , AbsModule m <- mods ]
+
+    moduleScope :: A.ModuleName -> Scope
+    moduleScope name = case Map.lookup name (scopeModules scope) of
+      Nothing -> __IMPOSSIBLE__
+      Just s  -> s
 
 -- | Look up a name in the scope
 scopeLookup :: InScope a => C.QName -> ScopeInfo -> [a]
diff --git a/src/full/Agda/Syntax/Scope/Monad.hs b/src/full/Agda/Syntax/Scope/Monad.hs
--- a/src/full/Agda/Syntax/Scope/Monad.hs
+++ b/src/full/Agda/Syntax/Scope/Monad.hs
@@ -46,6 +46,11 @@
 notInScope :: C.QName -> ScopeM a
 notInScope x = typeError $ NotInScope [x]
 
+isDatatypeModule :: A.ModuleName -> ScopeM Bool
+isDatatypeModule m = do
+   sc <- getScope
+   return $ maybe __IMPOSSIBLE__ scopeDatatypeModule (Map.lookup m (scopeModules sc))
+
 -- * General operations
 
 getCurrentModule :: ScopeM A.ModuleName
@@ -82,12 +87,14 @@
 getCurrentScope :: ScopeM Scope
 getCurrentScope = getNamedScope =<< getCurrentModule
 
--- | Create a new module with an empty scope
-createModule :: A.ModuleName -> ScopeM ()
-createModule m = do
+-- | Create a new module with an empty scope (Bool is True if it is a datatype module)
+createModule :: Bool -> A.ModuleName -> ScopeM ()
+createModule b m = do
   s <- getCurrentScope
   let parents = scopeName s : scopeParents s
-  modifyScopes $ Map.insert m emptyScope { scopeName = m, scopeParents = parents }
+  modifyScopes $ Map.insert m emptyScope { scopeName           = m
+                                         , scopeParents        = parents
+                                         , scopeDatatypeModule = b }
 
 -- | Apply a function to the scope info.
 modifyScopeInfo :: (ScopeInfo -> ScopeInfo) -> ScopeM ()
@@ -184,7 +191,9 @@
 
 data ResolvedName = VarName A.Name
                   | DefinedName Access AbstractName
+                  | FieldName AbstractName           -- ^ record fields names need to be distinguished to parse copatterns
                   | ConstructorName [AbstractName]
+                  | PatternSynResName AbstractName
                   | UnknownName
   deriving (Show)
 
@@ -200,6 +209,9 @@
       ds | all ((==ConName) . anameKind . fst) ds ->
         return $ ConstructorName
                $ map (\ (d, _) -> updateConcreteName d $ unqualify x) ds
+      [(d, a)] | anameKind d == FldName -> return $ FieldName $ updateConcreteName d (unqualify x)
+      [(d, a)] | anameKind d == PatternSynName ->
+                  return $ PatternSynResName (updateConcreteName d $ unqualify x)
       [(d, a)] -> return $ DefinedName a $ updateConcreteName d (unqualify x)
       ds  -> typeError $ AmbiguousName x (map (anameName . fst) ds)
   where
@@ -223,13 +235,15 @@
   case r of
     VarName y          -> return $ nameFixity y
     DefinedName _ d    -> return $ nameFixity $ qnameName $ anameName d
+    FieldName d        -> return $ nameFixity $ qnameName $ anameName d
     ConstructorName ds
       | null fs        -> __IMPOSSIBLE__
       | allEqual fs    -> return $ head fs
       | otherwise      -> return defaultFixity'
       where
         fs = map (nameFixity . qnameName . anameName) ds
-    UnknownName        -> __IMPOSSIBLE__
+    PatternSynResName n -> return $ nameFixity $ qnameName $ anameName n
+    UnknownName         -> __IMPOSSIBLE__
 
 -- * Binding names
 
@@ -244,13 +258,15 @@
 bindName acc kind x y = do
   r  <- resolveName (C.QName x)
   ys <- case r of
+    FieldName d        -> typeError $ ClashingDefinition (C.QName x) $ anameName d
     DefinedName _ d    -> typeError $ ClashingDefinition (C.QName x) $ anameName d
     VarName z          -> typeError $ ClashingDefinition (C.QName x) $ A.qualify (mnameFromList []) z
     ConstructorName [] -> __IMPOSSIBLE__
     ConstructorName ds
       | kind == ConName && all ((==ConName) . anameKind) ds -> return [ AbsName y kind ]
       | otherwise -> typeError $ ClashingDefinition (C.QName x) $ anameName (head' ds)
-    UnknownName        -> return [AbsName y kind]
+    PatternSynResName n -> typeError $ ClashingDefinition (C.QName x) $ anameName n
+    UnknownName         -> return [AbsName y kind]
   modifyCurrentScope $ addNamesToScope (localNameSpace acc) x ys
   where
     head' []    = {- ' -} __IMPOSSIBLE__
@@ -355,7 +371,7 @@
           addMod x y
 
           -- We need to copy the contents of included modules recursively
-          s0 <- lift $ createModule y >> getNamedScope x
+          s0 <- lift $ createModule False y >> getNamedScope x
           s  <- withCurrentModule' y $ copy y s0
           lift $ modifyNamedScope y (const s)
           return y
diff --git a/src/full/Agda/Syntax/Strict.hs b/src/full/Agda/Syntax/Strict.hs
deleted file mode 100644
--- a/src/full/Agda/Syntax/Strict.hs
+++ /dev/null
@@ -1,100 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module Agda.Syntax.Strict where
-
-import Data.Generics (everything)
-
-import Agda.Syntax.Common
-import Agda.Syntax.Internal
-import Agda.Syntax.Parser.Tokens
-import qualified Agda.Syntax.Concrete as C
-import qualified Agda.Syntax.Concrete.Definitions as C
-
-#include "../undefined.h"
-import Agda.Utils.Impossible
-
--- | @force@ is the recursive @const 0@ function, to force Haskell to evaluate.
-class Strict a where
-    force :: a -> Int
-
-instance Strict Term where
-    force t = case t of
-	Var _ ts    -> force ts
-	Def _ ts    -> force ts
-	Con _ ts    -> force ts
-	Lam _ t     -> force t
-	Lit _	    -> 0
-        Level l     -> force l
-	Pi a b	    -> force (a,b)
-	Sort s	    -> force s
-	MetaV _ ts  -> force ts
-        DontCare mt -> force mt
-
-instance Strict Type where
-    force (El s t) = force (s,t)
-
-instance Strict Sort where
-    force s = case s of
-	Type n     -> force n
-	Prop       -> 0
-        Inf        -> 0
-        DLub s1 s2 -> force (s1, s2)
-
-instance Strict Level where
-  force (Max as) = force as
-
-instance Strict PlusLevel where
-  force ClosedLevel{} = 0
-  force (Plus _ l) = force l
-
-instance Strict LevelAtom where
-  force l = case l of
-    MetaLevel _ vs   -> force vs
-    NeutralLevel v   -> force v
-    BlockedLevel _ v -> force v
-    UnreducedLevel v -> force v
-
-instance Strict ClauseBody where
-    force (Body t)   = force t
-    force (Bind b)   = force b
-    force  NoBody    = 0
-
-instance Strict C.Expr where
-    force e = everything (+) (const 1) e
-
-instance Strict C.Declaration where
-    force e = everything (+) (const 1) e
-
-instance Strict C.Pragma where
-    force e = everything (+) (const 1) e
-
-instance Strict C.NiceDeclaration where
-    force d = everything (+) (const 1) d
-
-instance (Strict a, Strict b) => Strict (a,b) where
-    force (x,y) = force x + force y
-
-instance Strict a => Strict (Arg a) where
-    force = force . unArg
-
-instance Strict a => Strict [a] where
-    force = sum . map force
-
-instance Strict a => Strict (Maybe a) where
-    force = maybe 0 force
-
-instance Strict a => Strict (Abs a) where
-    force = force . unAbs
-
-instance Strict Token where
-  -- TODO: This is just a dummy instance. Why can't we just use the
-  -- NFData derivation provided by Drift?
-  force = (`seq` 0)
-
-infixr 0 $!!
-
-($!!) :: Strict a => (a -> b) -> a -> b
-f $!! x = force x `seq` f x
-
-strict :: Strict a => a -> a
-strict x = id $!! x
diff --git a/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs b/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs
--- a/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs
+++ b/src/full/Agda/Syntax/Translation/AbstractToConcrete.hs
@@ -35,6 +35,7 @@
 import Agda.Syntax.Common
 import Agda.Syntax.Position
 import Agda.Syntax.Info
+import Agda.Syntax.Internal (MetaId(..))
 import Agda.Syntax.Fixity
 import Agda.Syntax.Concrete as C
 import Agda.Syntax.Concrete.Pretty
@@ -43,7 +44,7 @@
 import Agda.Syntax.Scope.Base
 
 import Agda.TypeChecking.Monad.State (getScope)
-import Agda.TypeChecking.Monad.Base  (TCM)
+import Agda.TypeChecking.Monad.Base  (TCM, NamedMeta(..))
 
 import Agda.Utils.Maybe
 import Agda.Utils.Monad hiding (bracket)
@@ -311,9 +312,9 @@
     toConcrete (A.QuestionMark i)   = return $ C.QuestionMark
                                                 (getRange i)
                                                 (metaNumber i)
-    toConcrete (A.Underscore i)     = return $ C.Underscore
-                                                (getRange i)
-                                                (metaNumber i)
+    toConcrete (A.Underscore i)     = return $
+      C.Underscore (getRange i) $
+       fmap (show . NamedMeta (metaNameSuggestion i) . MetaId) (metaNumber i)
 
     toConcrete e@(A.App i e1 e2)    =
         tryToRecoverOpApp e
@@ -350,10 +351,14 @@
                     (bs@(A.DomainFull _ : _), e)   -> (b:bs, e)
                     _                              -> ([b], e)
             lamView e = ([], e)
-    toConcrete (A.ExtendedLam i di qname cs) = do
+    toConcrete (A.ExtendedLam i di qname cs) =
+        bracket lamBrackets $ do
           decls <- toConcrete cs
-          let removeApp (C.RawAppP r (lam:es)) = C.RawAppP r es
-              removeApp (C.AppP p np) = namedThing $ unArg np
+              -- we know all lhs are of the form `.extlam p1 p2 ... pn`,
+              -- with the name .extlam leftmost. It is our mission to remove it.
+          let removeApp (C.RawAppP r (_:es)) = C.RawAppP r es
+              removeApp (C.AppP (C.IdentP _) np) = namedArg np
+              removeApp (C.AppP p np) = (C.AppP (removeApp p) np)
               removeApp _ = __IMPOSSIBLE__
           let decl2clause (C.FunClause lhs rhs wh) = (lhs {lhsOriginalPattern = removeApp $ lhsOriginalPattern lhs},rhs,wh)
               decl2clause _ = __IMPOSSIBLE__
@@ -373,10 +378,14 @@
         bracket piBrackets
         $ do a' <- toConcreteCtx (if irr then DotPatternCtx else FunctionSpaceDomainCtx) a
              b' <- toConcreteCtx TopCtx b
-             return $ C.Fun (getRange i) (addDot a' $ mkArg a') b'
+             return $ C.Fun (getRange i) (addRel a' $ mkArg a') b'
         where
-            irr        = argRelevance a == Irrelevant
-            addDot a e = if irr then Dot (getRange a) e else e
+            irr        = argRelevance a `elem` [Irrelevant, NonStrict]
+            addRel a e = case argRelevance a of
+                           Irrelevant -> addDot a e
+                           NonStrict  -> addDot a (addDot a e)
+                           _          -> e
+            addDot a e = Dot (getRange a) e
             mkArg (Arg Hidden    r e) = HiddenArg (getRange e) (unnamed e)
             mkArg (Arg Instance  r e) = InstanceArg (getRange e) (unnamed e)
             mkArg (Arg NotHidden r e) = e
@@ -419,13 +428,16 @@
     toConcrete (A.QuoteTerm i) = return $ C.QuoteTerm (getRange i)
     toConcrete (A.Unquote i) = return $ C.Unquote (getRange i)
 
+    -- Andreas, 2012-04-02: TODO!  print DontCare as irrAxiom
     -- Andreas, 2010-10-05 print irrelevant things as ordinary things
-    toConcrete (A.DontCare e) = toConcrete e
+    toConcrete (A.DontCare e) = C.Dot r . C.Paren r  <$> toConcrete e
+       where r = getRange e
 --    toConcrete (A.DontCare e) = C.DontCare <$> toConcreteCtx TopCtx e
 {-
     -- Andreas, 2010-09-21 abuse C.Underscore to print irrelevant things
     toConcrete (A.DontCare) = return $ C.Underscore noRange Nothing
 -}
+    toConcrete (A.PatternSyn n) = C.Ident <$> toConcrete n
 
 makeDomainFree :: A.LamBinding -> A.LamBinding
 makeDomainFree b@(A.DomainFull (A.TypedBindings r (Arg h rel (A.TBind _ [x] t)))) =
@@ -465,12 +477,17 @@
                 , C.FunClause (C.LHS (C.IdentP $ C.QName x) [] [] [])
                               e C.NoWhere
                 ]
+    -- TODO: bind variables
+    bindToConcrete (LetPatBind i p e) ret = do
+        p <- toConcrete p
+        e <- toConcrete e
+        ret [ C.FunClause (C.LHS p [] [] []) (C.RHS e) NoWhere ]
     bindToConcrete (LetApply i x modapp _ _) ret = do
       x' <- unqualify <$> toConcrete x
       modapp <- toConcrete modapp
       let r = getRange modapp
           open = maybe DontOpen id $ minfoOpenShort i
-          dir  = maybe (ImportDirective r (Hiding []) [] False) id $ minfoDirective i
+          dir  = maybe defaultImportDir{ importDirRange = r } id $ minfoDirective i
       -- This is no use since toAbstract LetDefs is in localToAbstract.
       local (openModule' x dir id) $
         ret [ C.ModuleMacro (getRange i) x' modapp open dir ]
@@ -493,8 +510,8 @@
     ret . AnyWhere =<< declsToConcrete ds
 
 mergeSigAndDef :: [C.Declaration] -> [C.Declaration]
-mergeSigAndDef (C.RecordSig _ x bs e : C.Record r y c _ Nothing fs : ds)
-  | x == y = C.Record r y c bs (Just e) fs : mergeSigAndDef ds
+mergeSigAndDef (C.RecordSig _ x bs e : C.Record r y ind c _ Nothing fs : ds)
+  | x == y = C.Record r y ind c bs (Just e) fs : mergeSigAndDef ds
 mergeSigAndDef (C.DataSig _ _ x bs e : C.Data r i y _ Nothing cs : ds)
   | x == y = C.Data r i y bs (Just e) cs : mergeSigAndDef ds
 mergeSigAndDef (d : ds) = d : mergeSigAndDef ds
@@ -610,7 +627,7 @@
       return [C.Primitive (getRange i) [C.TypeSig Relevant x' t']]
         -- Primitives are always relevant.
 
-  toConcrete (A.FunDef i _ cs) =
+  toConcrete (A.FunDef i _ _ cs) =
     withAbstractPrivate i $ concat <$> toConcrete cs
 
   toConcrete (A.DataSig i x bs t) =
@@ -633,11 +650,11 @@
       t' <- toConcreteCtx TopCtx t
       return [ C.RecordSig (getRange i) x' (map C.DomainFull tel') t' ]
 
-  toConcrete (A.RecDef  i x c bs t cs) =
+  toConcrete (A.RecDef  i x ind c bs t cs) =
     withAbstractPrivate i $
     bindToConcrete (map makeDomainFree bs) $ \tel' -> do
       (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)
-      return [ C.Record (getRange i) x' Nothing tel' Nothing cs' ]
+      return [ C.Record (getRange i) x' ind Nothing tel' Nothing cs' ]
 
   toConcrete (A.Mutual i ds) = declsToConcrete ds
 
@@ -652,7 +669,7 @@
     modapp <- toConcrete modapp
     let r = getRange modapp
         open = maybe DontOpen id $ minfoOpenShort i
-        dir  = maybe (ImportDirective r (Hiding []) [] False) id $ minfoDirective i
+        dir  = maybe defaultImportDir{ importDirRange = r } id $ minfoDirective i
     return [ C.ModuleMacro (getRange i) x modapp open dir ]
 
   toConcrete (A.Import i x) = do
@@ -669,6 +686,7 @@
     x <- toConcrete x
     return [C.Open (getRange i) x defaultImportDir]
 
+
 data RangeAndPragma = RangeAndPragma Range A.Pragma
 
 instance ToConcrete RangeAndPragma C.Pragma where
@@ -699,19 +717,40 @@
 
 -- Left hand sides --------------------------------------------------------
 
-noImplicitArgs = filter (noImplicit . namedThing . unArg)
+noImplicitArgs = filter (noImplicit . namedArg)
 noImplicitPats = filter noImplicit
 
 noImplicit (A.ImplicitP _) = False
 noImplicit _               = True
 
 instance ToConcrete A.LHS C.LHS where
-    bindToConcrete (A.LHS i x args wps) ret = do
+    bindToConcrete (A.LHS i lhscore wps) ret = do
+      bindToConcreteCtx TopCtx lhscore $ \lhs ->
+        bindToConcreteCtx TopCtx (noImplicitPats wps) $ \wps ->
+          ret $ C.LHS lhs wps [] []
+{-
+    bindToConcrete (A.LHS i (A.LHSHead x args) wps) ret = do
       bindToConcreteCtx TopCtx (A.DefP info x args) $ \lhs ->
         bindToConcreteCtx TopCtx (noImplicitPats wps) $ \wps ->
           ret $ C.LHS lhs wps [] []
       where info = PatRange (getRange i)
+-}
 
+instance ToConcrete A.LHSCore C.Pattern where
+    bindToConcrete = bindToConcrete . lhsCoreToPattern
+{-
+    bindToConcrete (A.LHSHead x args) ret = do
+      bindToConcreteCtx TopCtx (A.DefP info x args) $ \ lhs ->
+        ret $ lhs
+      where info = PatRange noRange -- seems to be unused anyway
+    bindToConcrete (A.LHSProj d ps1 lhscore ps2) ret = do
+      d <- toConcrete d
+      bindToConcrete ps1 $ \ ps1 ->
+        bindToConcrete lhscore $ \ p ->
+          bindToConcrete ps2 $ \ ps2 ->
+            ret $ makePattern d ps1 p ps2
+  -}
+
 appBrackets' :: [arg] -> Precedence -> Bool
 appBrackets' []    _   = False
 appBrackets' (_:_) ctx = appBrackets ctx
@@ -744,12 +783,14 @@
         return $ C.DotP (getRange i) e
     -- just for debugging purposes (shouldn't show up in practise)
     toConcrete (A.ImplicitP i) = return $ C.IdentP (C.QName $ C.Name noRange [C.Id "(implicit)"])
+    toConcrete (A.PatternSynP i n _) = IdentP <$> toConcrete n
 
+
 -- Helpers for recovering C.OpApp ------------------------------------------
 
 data Hd = HdVar A.Name | HdCon A.QName | HdDef A.QName
 
-cOpApp :: Range -> C.Name -> [C.Expr] -> C.Expr
+cOpApp :: Range -> C.QName -> [C.Expr] -> C.Expr
 cOpApp r n es = C.OpApp r n (map Ordinary es)
 
 tryToRecoverOpApp :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr
@@ -771,83 +812,96 @@
       DefP _ f            ps -> Just (HdDef f, ps)
       _                      -> Nothing
 
-recoverOpApp :: (ToConcrete a c, HasRange c) =>
-                ((Precedence -> Bool) -> AbsToCon c -> AbsToCon c) ->
-                (Range -> C.Name -> [c] -> c) -> (a -> Maybe (Hd, [NamedArg a])) -> a ->
-                AbsToCon c -> AbsToCon c
-recoverOpApp bracket opApp view e mdefault = case view e of
-  Nothing -> mdefault
+recoverOpApp :: (ToConcrete a c, HasRange c)
+  => ((Precedence -> Bool) -> AbsToCon c -> AbsToCon c)
+  -> (Range -> C.QName -> [c] -> c)
+  -> (a -> Maybe (Hd, [NamedArg a]))
+  ->  a
+  -> AbsToCon c
+  -> AbsToCon c
+recoverOpApp bracket opApp view e mDefault = case view e of
+  Nothing -> mDefault
   Just (hd, args)
     | all notHidden args  -> do
-      let  args' = map (namedThing . unArg) args
+      let  args' = map namedArg args
       case hd of
-        HdVar n | isNoName n -> mdefault
-                | otherwise  -> do
-          x <- toConcrete n
-          doCName (theFixity $ nameFixity n) x args'
-        HdDef qn -> doQName qn args'
-        HdCon qn -> doQName qn args'
-    | otherwise -> mdefault
+        HdVar  n
+          | isNoName n    -> mDefault
+          | otherwise     -> doQNameHelper id        C.QName  n args'
+        HdDef qn          -> doQNameHelper qnameName id      qn args'
+        HdCon qn          -> doQNameHelper qnameName id      qn args'
+    | otherwise           -> mDefault
   where
 
-  isNoName x = C.isNoName $ A.nameConcrete x
+  isNoName :: A.Name -> Bool
+  isNoName  x = C.isNoName $ A.nameConcrete x
 
+  notHidden :: NamedArg a -> Bool
   notHidden a = argHiding a == NotHidden
 
-  -- qualified names can't use mixfix syntax
-  doQName qn as = do
-    x <- toConcrete qn
-    case x of
-      C.QName x -> doCName (theFixity $ nameFixity $ qnameName qn) x as
-      _         -> mdefault
+  doQNameHelper fixityHelper conHelper n as = do
+    x <- toConcrete n
+    doQName (theFixity $ nameFixity $ fixityHelper n) (conHelper x) as
 
   -- fall-back (wrong number of arguments or no holes)
-  doCName _ cn@(C.Name _ xs) es
-    | length xs == 1        = mdefault
-    | length es /= numHoles = mdefault
-    | List.null es          = mdefault
-    where numHoles = length [ () | Hole <- xs ]
-          msg = "doCName " ++ showList xs "" ++ " on " ++ show (length es) ++ " args"
+  doQName _ n es
+    | length xs == 1        = mDefault
+    | length es /= numHoles = mDefault
+    | List.null es          = mDefault
+    where
+      xs       = C.nameParts $ C.unqualify n
+      numHoles = length (filter (== Hole) xs)
+      msg      = concat [ "doQName "
+                        , showList xs ""
+                        , " on "
+                        , show (length es)
+                        , " args" ]
 
   -- binary case
-  doCName fixity cn@(C.Name _ xs) as
+  doQName fixity n as
     | Hole <- head xs
     , Hole <- last xs = do
-        let a1     = head as
-            an     = last as
-            as'    = case as of
-                       as@(_:_:_) -> init $ tail as
-                       _          -> __IMPOSSIBLE__
+        let a1  = head as
+            an  = last as
+            as' = case as of
+                    as@(_ : _ : _) -> init $ tail as
+                    _              -> __IMPOSSIBLE__
         e1 <- toConcreteCtx (LeftOperandCtx fixity) a1
         es <- mapM (toConcreteCtx InsideOperandCtx) as'
         en <- toConcreteCtx (RightOperandCtx fixity) an
         bracket (opBrackets fixity)
-            $ return $ opApp (getRange (e1,en)) cn ([e1] ++ es ++ [en])
+          $ return $ opApp (getRange (e1, en)) n ([e1] ++ es ++ [en])
+    where
+      xs = C.nameParts $ C.unqualify n
 
   -- prefix
-  doCName fixity cn@(C.Name _ xs) as
+  doQName fixity n as
     | Hole <- last xs = do
         let an  = last as
             as' = case as of
-                    as@(_:_) -> init as
-                    _        -> __IMPOSSIBLE__
+                    as@(_ : _) -> init as
+                    _          -> __IMPOSSIBLE__
         es <- mapM (toConcreteCtx InsideOperandCtx) as'
         en <- toConcreteCtx (RightOperandCtx fixity) an
         bracket (opBrackets fixity)
-            $ return $ opApp (getRange (cn,en)) cn (es ++ [en])
+          $ return $ opApp (getRange (n, en)) n (es ++ [en])
+    where
+      xs = C.nameParts $ C.unqualify n
 
   -- postfix
-  doCName fixity cn@(C.Name _ xs) as
+  doQName fixity n as
     | Hole <- head xs = do
-        let a1     = head as
-            as'    = tail as
+        let a1  = head as
+            as' = tail as
         e1 <- toConcreteCtx (LeftOperandCtx fixity) a1
         es <- mapM (toConcreteCtx InsideOperandCtx) as'
         bracket (opBrackets fixity)
-            $ return $ opApp (getRange (e1,cn)) cn ([e1] ++ es)
+          $ return $ opApp (getRange (e1, n)) n ([e1] ++ es)
+    where
+      xs = C.nameParts $ C.unqualify n
 
   -- roundfix
-  doCName _ cn as = do
+  doQName _ n as = do
     es <- mapM (toConcreteCtx InsideOperandCtx) as
     bracket roundFixBrackets
-      $ return $ opApp (getRange cn) cn es
+      $ return $ opApp (getRange n) n es
diff --git a/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs b/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs
--- a/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs
+++ b/src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE CPP, MultiParamTypeClasses, FunctionalDependencies,
-             FlexibleInstances, UndecidableInstances, OverlappingInstances
+             FlexibleInstances, UndecidableInstances, OverlappingInstances,
+             ScopedTypeVariables
   #-}
 
 {-| Translation from "Agda.Syntax.Concrete" to "Agda.Syntax.Abstract". Involves scope analysis,
@@ -26,28 +27,28 @@
 import Control.Monad.Reader hiding (mapM)
 import Control.Monad.Error hiding (mapM)
 import Data.Typeable
-import Data.Traversable (mapM)
-import Data.List ((\\), nub)
+import Data.Traversable (mapM, traverse)
+import Data.List ((\\), nub, foldl')
 import qualified Data.Map as Map
 
 import Agda.Syntax.Concrete as C hiding (topLevelModuleName)
 import Agda.Syntax.Concrete.Operators
+-- import qualified Agda.Syntax.Concrete.Copatterns as Cop -- merged into Operators
 import Agda.Syntax.Abstract as A
+import Agda.Syntax.Abstract.Copatterns
 import Agda.Syntax.Position
 import Agda.Syntax.Common
 import Agda.Syntax.Info
 import Agda.Syntax.Concrete.Definitions as C
-import Agda.Syntax.Concrete.Operators
 import Agda.Syntax.Concrete.Pretty
 import Agda.Syntax.Abstract.Pretty
 import Agda.Syntax.Fixity
 import Agda.Syntax.Notation
 import Agda.Syntax.Scope.Base
 import Agda.Syntax.Scope.Monad
-import Agda.Syntax.Strict
 
 import Agda.TypeChecking.Monad.Base (TypeError(..), Call(..), typeError,
-                                     TCErr(..), TCErr'(..), extendlambdaname)
+                                     TCErr(..), extendlambdaname)
 import Agda.TypeChecking.Monad.Trace (traceCall, traceCallCPS, setCurrentRange)
 import Agda.TypeChecking.Monad.State
 import Agda.TypeChecking.Monad.Options
@@ -85,26 +86,12 @@
 printScope :: String -> Int -> String -> ScopeM ()
 printScope tag v s = verboseS ("scope." ++ tag) v $ do
   scope <- getScope
-  reportSLn "" 0 $ s ++ " " ++ show scope
+  reportSDoc "" 0 $ return $ vcat [ text s, text $ show scope ]
 
 {--------------------------------------------------------------------------
     Helpers
  --------------------------------------------------------------------------}
 
-lhsArgs :: C.Pattern -> (C.Name, [NamedArg C.Pattern])
-lhsArgs p = case appView p of
-    Arg _ _ (Named _ (IdentP (C.QName x))) : ps -> (x, ps)
-    _                                         -> __IMPOSSIBLE__
-    where
-        mkHead    = Arg NotHidden Relevant . unnamed
-        notHidden = Arg NotHidden Relevant . unnamed
-        appView p = case p of
-            AppP p arg    -> appView p ++ [arg]
-            OpAppP _ x ps -> mkHead (IdentP $ C.QName x) : map notHidden ps
-            ParenP _ p    -> appView p
-            RawAppP _ _   -> __IMPOSSIBLE__
-            _             -> [ mkHead p ]
-
 annotateDecl :: ScopeM A.Declaration -> ScopeM A.Declaration
 annotateDecl m = annotateDecls $ (:[]) <$> m
 
@@ -134,15 +121,18 @@
     xs = concatMap vars ps
     vars :: A.Pattern' e -> [C.Name]
     vars p = case p of
-      A.VarP x        -> [nameConcrete x]
-      A.ConP _ _ args -> concatMap (vars . namedThing . unArg) args
-      A.WildP _       -> []
-      A.AsP _ x p     -> nameConcrete x : vars p
-      A.DotP _ _      -> []
-      A.AbsurdP _     -> []
-      A.LitP _        -> []
-      A.DefP _ _ args -> __IMPOSSIBLE__
-      A.ImplicitP _   -> __IMPOSSIBLE__
+      A.VarP x               -> [nameConcrete x]
+      A.ConP _ _ args        -> concatMap (vars . namedArg) args
+      A.WildP _              -> []
+      A.AsP _ x p            -> nameConcrete x : vars p
+      A.DotP _ _             -> []
+      A.AbsurdP _            -> []
+      A.LitP _               -> []
+      A.DefP _ _ args        -> concatMap (vars . namedArg) args
+        -- Projection pattern, @args@ should be empty unless we have
+        -- indexed records.
+      A.ImplicitP _          -> __IMPOSSIBLE__
+      A.PatternSynP _ _ args -> concatMap (vars . namedArg) args
 
 -- | Compute the type of the record constructor (with bogus target type)
 recordConstructorType :: [NiceDeclaration] -> C.Expr
@@ -156,7 +146,8 @@
     build (NiceField r f _ _ x (Arg h rel e) : fs) =
         C.Pi [C.TypedBindings r $ Arg h rel (C.TBind r [BName x f] e)] $ build fs
       where r = getRange x
-    build (d : fs)                     = C.Let noRange (notSoNiceDeclarations [d]) $ build fs
+    build (d : fs)                     = C.Let noRange [killRange $ notSoNiceDeclaration d] $
+                                           build fs
     build []                           = C.SetN noRange 0 -- todo: nicer
 
 checkModuleApplication (C.SectionApp _ tel e) m0 x dir' =
@@ -180,12 +171,12 @@
     printScope "mod.inst" 20 "copied source module"
     reportSLn "scope.mod.inst" 30 $ "renamings:\n  " ++ show renD ++ "\n  " ++ show renM
     return ((A.SectionApp tel' m1 args'), renD, renM)
-checkModuleApplication (C.RecordModuleIFS _ rec) m0 x dir' =
+checkModuleApplication (C.RecordModuleIFS _ recN) m0 x dir' =
   withCurrentModule m0 $ do
-    m1 <- toAbstract $ OldModuleName rec
+    m1 <- toAbstract $ OldModuleName recN
     s <- getNamedScope m1
     (s', (renM, renD)) <- copyScope m0 s
-    s' <- applyImportDirectiveM rec dir' s'
+    s' <- applyImportDirectiveM recN dir' s'
     modifyCurrentScope $ const s'
 
     printScope "mod.inst" 20 "copied record module"
@@ -318,21 +309,26 @@
 nameExpr :: AbstractName -> A.Expr
 nameExpr d = mk (anameKind d) $ anameName d
   where
-    mk DefName = Def
-    mk ConName = Con . AmbQ . (:[])
+    mk DefName        = Def
+    mk FldName        = Def
+    mk ConName        = Con . AmbQ . (:[])
+    mk PatternSynName = A.PatternSyn
 
 instance ToAbstract OldQName A.Expr where
   toAbstract (OldQName x) = do
     qx <- resolveName x
     reportSLn "scope.name" 10 $ "resolved " ++ show x ++ ": " ++ show qx
     case qx of
-      VarName x'         -> return $ A.Var x'
-      DefinedName _ d    -> return $ nameExpr d
-      ConstructorName ds -> return $ A.Con $ AmbQ (map anameName ds)
-      UnknownName        -> notInScope x
+      VarName x'          -> return $ A.Var x'
+      DefinedName _ d     -> return $ nameExpr d
+      FieldName     d     -> return $ nameExpr d
+      ConstructorName ds  -> return $ A.Con $ AmbQ (map anameName ds)
+      UnknownName         -> notInScope x
+      PatternSynResName d -> return $ nameExpr d
 
 data APatName = VarPatName A.Name
               | ConPatName [AbstractName]
+              | PatternSynPatName AbstractName
 
 instance ToAbstract PatName APatName where
   toAbstract (PatName x) = do
@@ -341,9 +337,11 @@
     z  <- case (rx, x) of
       -- TODO: warn about shadowing
       (VarName y,       C.QName x)                          -> return $ Left x -- typeError $ RepeatedVariableInPattern y x
+      (FieldName d,     C.QName x)                          -> return $ Left x
       (DefinedName _ d, C.QName x) | DefName == anameKind d -> return $ Left x
       (UnknownName,     C.QName x)                          -> return $ Left x
-      (ConstructorName ds, _)                               -> return $ Right ds
+      (ConstructorName ds, _)                               -> return $ Right (Left ds)
+      (PatternSynResName d, _)                              -> return $ Right (Right d)
       _                                                     ->
         typeError $ GenericError $
           "Cannot pattern match on " ++ show x ++ ", because it is not a constructor"
@@ -353,10 +351,14 @@
         p <- VarPatName <$> toAbstract (NewName x)
         printLocals 10 "bound it:"
         return p
-      Right cs -> do
-        reportSLn "scope.pat" 10 $ "it was a con: " ++ show (map anameName cs)
-        return $ ConPatName cs
+      Right (Left ds) -> do
+        reportSLn "scope.pat" 10 $ "it was a con: " ++ show (map anameName ds)
+        return $ ConPatName ds
+      Right (Right d) -> do
+        reportSLn "scope.pat" 10 $ "it was a pat syn: " ++ show (anameName d)
+        return $ PatternSynPatName d
 
+
 -- Should be a defined name.
 instance ToAbstract OldName A.QName where
   toAbstract (OldName x) = do
@@ -375,9 +377,10 @@
 checkForModuleClash :: C.Name -> ScopeM ()
 checkForModuleClash x = do
   ms <- scopeLookup (C.QName x) <$> getScope
-  unless (null ms) $
+  unless (null ms) $ do
+    reportSLn "scope.clash" 20 $ "clashing modules ms = " ++ show ms
     setCurrentRange (getRange x) $
-    typeError $ ShadowedModule $
+      typeError $ ShadowedModule x $
                 map ((`withRangeOf` x) . amodName) ms
 
 instance ToAbstract NewModuleName A.ModuleName where
@@ -385,7 +388,7 @@
     checkForModuleClash x
     m <- getCurrentModule
     y <- freshQModule m x
-    createModule y
+    createModule False y
     return y
 
 instance ToAbstract NewModuleQName A.ModuleName where
@@ -393,7 +396,7 @@
     where
       toAbs m (C.QName x)  = do
         y <- freshQModule m x
-        createModule y
+        createModule False y
         return y
       toAbs m (C.Qual x q) = do
         m' <- freshQModule m x
@@ -477,13 +480,15 @@
                     { metaRange  = r
                     , metaScope  = scope
                     , metaNumber = n
+                    , metaNameSuggestion = ""
                     }
       C.Underscore r n -> do
         scope <- getScope
         return $ A.Underscore $ MetaInfo
                     { metaRange  = r
                     , metaScope  = scope
-                    , metaNumber = n
+                    , metaNumber = maybe Nothing __IMPOSSIBLE__ n
+                    , metaNameSuggestion = maybe "" id n
                     }
 
   -- Raw application
@@ -537,11 +542,11 @@
             insertApp _ = __IMPOSSIBLE__
             insertHead (C.LHS p wps eqs with) = C.LHS (insertApp p) wps eqs with
             insertHead (C.Ellipsis r wps eqs with) = C.Ellipsis r wps eqs with
-        scdef <- toAbstract (C.FunDef r [] defaultFixity' ConcreteDef cname
+        scdef <- toAbstract (C.FunDef r [] defaultFixity' ConcreteDef True cname
                                (map (\(lhs,rhs,wh) -> -- wh = NoWhere, see parser for more info
                                       C.Clause cname (insertHead lhs) rhs wh []) cs))
         case scdef of
-          (A.ScopedDecl si [A.FunDef di qname' cs]) -> do
+          (A.ScopedDecl si [A.FunDef di qname' NotDelayed cs]) -> do
             setScope si
             return $ A.ExtendedLam (ExprRange r) di qname' cs
           _ -> __IMPOSSIBLE__
@@ -557,7 +562,7 @@
 -- Irrelevant non-dependent function type
 
       C.Fun r e1 e2 -> do
-        Arg h rel (e0, dotted) <- fmapM (toAbstractDot FunctionSpaceDomainCtx) $ mkArg e1
+        Arg h rel (e0, dotted) <- traverse (toAbstractDot FunctionSpaceDomainCtx) $ mkArg e1
         let e1 = Arg h (if dotted then Irrelevant else rel) e0
         e2 <- toAbstractCtx TopCtx e2
         let info = ExprRange r
@@ -698,11 +703,18 @@
 -- | runs Syntax.Concrete.Definitions.niceDeclarations on main module
 niceDecls :: [C.Declaration] -> ScopeM [NiceDeclaration]
 niceDecls ds = case runNice $ niceDeclarations ds of
-  Left e   -> throwError $ TCErr Nothing $ Exception (getRange e) (show e)
+  Left e   -> throwError $ Exception (getRange e) (show e)
   Right ds -> return ds
 
 instance ToAbstract [C.Declaration] [A.Declaration] where
-  toAbstract ds = toAbstract =<< niceDecls ds
+  toAbstract ds = do
+    -- don't allow to switch off termination checker in --safe mode
+    ds <- ifM (optSafe <$> commandLineOptions) (mapM noNoTermCheck ds) (return ds)
+    toAbstract =<< niceDecls ds
+   where
+    noNoTermCheck (C.Pragma (NoTerminationCheckPragma r)) =
+      typeError $ SafeFlagNoTerminationCheck
+    noNoTermCheck d = return d
 
 newtype LetDefs = LetDefs [C.Declaration]
 newtype LetDef = LetDef NiceDeclaration
@@ -714,7 +726,7 @@
 instance ToAbstract LetDef [A.LetBinding] where
     toAbstract (LetDef d) =
         case d of
-            NiceMutual _ d@[C.FunSig _ fx _ rel x t, C.FunDef _ _ _ abstract _ [cl]] ->
+            NiceMutual _ _ d@[C.FunSig _ fx _ rel _ x t, C.FunDef _ _ _ abstract _ _ [cl]] ->
                 do  when (abstract == AbstractDef) $ do
                       typeError $ GenericError $ "abstract not allowed in let expressions"
                     e <- letToAbstract cl
@@ -722,6 +734,15 @@
                     x <- toAbstract (NewName $ C.BName x fx)
                     return [ A.LetBind (LetRange $ getRange d) rel x t e ]
 
+            -- irrefutable let binding, like  (x , y) = rhs
+            NiceFunClause r PublicAccess ConcreteDef termCheck d@(C.FunClause (C.LHS p [] [] []) (C.RHS rhs) NoWhere) -> do
+              rhs <- toAbstract rhs
+              p   <- parsePattern p
+              p   <- toAbstract p
+              checkPatternLinearity [p]
+              p   <- toAbstract p
+              return [ A.LetPatBind (LetRange r) p rhs ]
+
             -- You can't open public in a let
             NiceOpen r x dirs | not (C.publicOpen dirs) -> do
               m       <- toAbstract (OldModuleName x)
@@ -743,8 +764,17 @@
             _   -> notAValidLetBinding d
         where
             letToAbstract (C.Clause top clhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere []) = do
-                p    <- parseLHS (Just top) p
+{-
+                p    <- parseLHS top p
                 localToAbstract (snd $ lhsArgs p) $ \args ->
+-}
+                (x, args) <- do
+                  res <- parseLHS top p
+                  case res of
+                    C.LHSHead x args -> return (x, args)
+                    C.LHSProj{} -> typeError $ GenericError $ "copatterns not allowed in let bindings"
+
+                localToAbstract args $ \args ->
                     do  rhs <- toAbstract rhs
                         foldM lambda rhs (reverse args)  -- just reverse because these DomainFree
             letToAbstract _ = notAValidLetBinding d
@@ -770,15 +800,15 @@
 
   -- Axiom
     C.Axiom r f p rel x t -> do
+      -- check that we do not postulate in --safe mode
       clo <- commandLineOptions
       when (optSafe clo) (typeError (SafeFlagPostulate x))
-      t' <- toAbstractCtx TopCtx t
-      y  <- freshAbstractQName f x
-      bindName p DefName x y
-      return [ A.Axiom (mkDefInfo x f p ConcreteDef r) rel y t' ]
+      -- check the postulate
+      toAbstractNiceAxiom d
 
   -- Fields
     C.NiceField r f p a x t -> do
+      unless (p == PublicAccess) $ typeError $ GenericError "Record fields can not be private"
       t' <- toAbstractCtx TopCtx t
       y  <- freshAbstractQName f x
       irrProj <- optIrrelevantProjections <$> pragmaOptions
@@ -786,7 +816,7 @@
         -- Andreas, 2010-09-24: irrelevant fields are not in scope
         -- this ensures that projections out of irrelevant fields cannot occur
         -- Ulf: unless you turn on --irrelevant-projections
-        bindName p DefName x y
+        bindName p FldName x y
       return [ A.Field (mkDefInfo x f p a r) y t' ]
 
   -- Primitive function
@@ -797,10 +827,9 @@
       return [ A.Primitive (mkDefInfo x f p a r) y t' ]
 
   -- Definitions (possibly mutual)
-    NiceMutual r ds -> do
+    NiceMutual r termCheck ds -> do
       ds' <- toAbstract ds
-      return [ A.Mutual (DeclInfo C.noName_ r) ds' ]
-                          -- TODO: what does the info mean here?
+      return [ A.Mutual (MutualInfo termCheck r) ds' ]
 
     C.NiceRecSig r f a x ls t -> withLocalVars $ do
         let toTypeBinding :: C.LamBinding -> C.TypedBindings
@@ -820,17 +849,26 @@
                _            -> __IMPOSSIBLE__
         ls' <- toAbstract (map toTypeBinding ls)
         x'  <- freshAbstractQName f x
+        {- -- Andreas, 2012-01-16: remember number of parameters
+        bindName a (DataName (length ls)) x x' -}
         bindName a DefName x x'
         t' <- toAbstract t
         return [ A.DataSig (mkDefInfo x f a ConcreteDef r) x' ls' t' ]
   -- Type signatures
-    C.FunSig r f p rel x t -> (:[]) <$> toAbstract (C.Axiom r f p rel x t)
+    C.FunSig r f p rel tc x t -> toAbstractNiceAxiom (C.Axiom r f p rel x t)
   -- Function definitions
-    C.FunDef r ds f a x cs -> do
+    C.FunDef r ds f a tc x cs -> do
         printLocals 10 $ "checking def " ++ show x
-        (x',cs') <- toAbstract (OldName x,cs)
-        return [ A.FunDef (mkDefInfo x f PublicAccess a r) x' cs' ]
+        (x',cs) <- toAbstract (OldName x,cs)
+        (delayed, cs) <- translateCopatternClauses cs
+        return [ A.FunDef (mkDefInfo x f PublicAccess a r) x' delayed cs ]
 
+  -- Uncategorized function clauses
+    C.NiceFunClause r acc abs termCheck (C.FunClause lhs rhs wcls) ->
+      typeError $ GenericError $
+        "Missing type signature for left hand side " ++ show lhs
+    C.NiceFunClause{} -> __IMPOSSIBLE__
+
   -- Data definitions
     C.DataDef r f a x pars cons -> withLocalVars $ do
         printScope "scope.data.def" 20 ("checking DataDef for " ++ show x)
@@ -848,7 +886,7 @@
         -- Create the module for the qualified constructors
         checkForModuleClash x -- disallow shadowing previously defined modules
         let m = mnameFromList $ qnameToList x'
-        createModule m
+        createModule True m
         bindModule p x m  -- make it a proper module
         cons <- toAbstract (map (ConstrDecl NoRec m a p) cons)
         -- Open the module
@@ -860,7 +898,7 @@
         conName _ = __IMPOSSIBLE__
 
   -- Record definitions (mucho interesting)
-    C.RecDef r f a x cm pars fields ->
+    C.RecDef r f a x ind cm pars fields ->
       withLocalVars $ do
         -- Check that the generated module doesn't clash with a previously
         -- defined module
@@ -872,7 +910,7 @@
         m0     <- getCurrentModule
         let m = A.qualifyM m0 $ mnameFromList $ (:[]) $ last $ qnameToList x'
         printScope "rec" 15 "before record"
-        createModule m
+        createModule False m
         afields <- withCurrentModule m $ do
           afields <- toAbstract fields
           printScope "rec" 15 "checked fields"
@@ -880,14 +918,24 @@
         bindModule p x m
         cm' <- mapM (\(ThingWithFixity c f) -> bindConstructorName m c f a p YesRec) cm
         printScope "rec" 15 "record complete"
-        return [ A.RecDef (mkDefInfo x f PublicAccess a r) x' cm' pars contel afields ]
+        return [ A.RecDef (mkDefInfo x f PublicAccess a r) x' ind cm' pars contel afields ]
 
+    -- Andreas, 2012-10-30 anonymous modules are like Coq sections
     NiceModule r p a (C.QName name) tel ds ->
       traceCall (ScopeCheckDeclaration $ NiceModule r p a (C.QName name) tel []) $ do
+      (name, p, isSection) <- if not (C.isNoName name)
+        then return (name, p, False)
+        else do
+          (i :: NameId) <- fresh
+          return (C.NoName (getRange name) i, PrivateAccess, True)
       aname <- toAbstract (NewModuleName name)
-      x <- snd <$> scopeCheckModule r (C.QName name) aname tel ds
+      ds <- snd <$> scopeCheckModule r (C.QName name) aname tel ds
       bindModule p name aname
-      return x
+      -- if the module was anonymous open it public
+      when isSection $
+        openModule_ (C.QName name) $
+          defaultImportDir { publicOpen = True }
+      return ds
 
     NiceModule _ _ _ C.Qual{} _ _ -> __IMPOSSIBLE__
 
@@ -962,11 +1010,38 @@
                            })
                         m ]
 
+    NicePatternSyn r fx n as p -> do
+      reportSLn "scope.pat" 10 $ "found nice pattern syn: " ++ show r
 
+      isparameterised <- not . null <$> getLocalVars
+      when isparameterised $ typeError $ NotSupported
+          "pattern synonym in parameterised module"
+
+      y <- freshAbstractQName fx n
+      bindName PublicAccess PatternSynName n y
+      defn <- withLocalVars $ do
+               p'   <- killRange <$> (toAbstract =<< toAbstract =<< parsePatternSyn p)
+               as'  <- mapM (\a -> unVarName =<< resolveName (C.QName a)) as
+               return (as', p')
+      modifyPatternSyns (Map.insert y defn)
+      return []
+      where unVarName (VarName a) = return a
+            unVarName _           = typeError $ UnusedVariableInPatternSynonym
+
+    where
+      -- checking postulate or type sig. without checking safe flag
+      toAbstractNiceAxiom (C.Axiom r f p rel x t) = do
+        t' <- toAbstractCtx TopCtx t
+        y  <- freshAbstractQName f x
+        bindName p DefName x y
+        return [ A.Axiom (mkDefInfo x f p ConcreteDef r) rel y t' ]
+      toAbstractNiceAxiom _ = __IMPOSSIBLE__
+
+
 data IsRecordCon = YesRec | NoRec
 data ConstrDecl = ConstrDecl IsRecordCon A.ModuleName IsAbstract Access C.NiceDeclaration
 
-bindConstructorName m x f a p rec = do
+bindConstructorName m x f a p record = do
   -- The abstract name is the qualified one
   y <- withCurrentModule m $ freshAbstractQName f x
   -- Bind it twice, once unqualified and once qualified
@@ -979,17 +1054,17 @@
     p' = case a of
            AbstractDef -> PrivateAccess
            _           -> p
-    p'' = case (a, rec) of
+    p'' = case (a, record) of
             (AbstractDef, _) -> PrivateAccess
             (_, YesRec)      -> OnlyQualified   -- record constructors aren't really in the record module
             _                -> PublicAccess
 
 instance ToAbstract ConstrDecl A.Declaration where
-  toAbstract (ConstrDecl rec m a p (C.Axiom r f _ rel x t)) = do -- rel==Relevant
+  toAbstract (ConstrDecl record m a p (C.Axiom r f _ rel x t)) = do -- rel==Relevant
     t' <- toAbstractCtx TopCtx t
     -- The abstract name is the qualified one
     -- Bind it twice, once unqualified and once qualified
-    y <- bindConstructorName m x f a p rec
+    y <- bindConstructorName m x f a p record
     printScope "con" 15 "bound constructor"
     return $ A.Axiom (mkDefInfo x f p ConcreteDef r) rel y t'
 
@@ -1046,11 +1121,16 @@
       case e of
         A.Def x -> return [ A.EtaPragma x ]
         _       -> fail "Bad ETA pragma"
+    -- NO_TERMINATION_CHECK is handled by the nicifier
+    toAbstract (C.NoTerminationCheckPragma _) = __IMPOSSIBLE__
 
 instance ToAbstract C.Clause A.Clause where
     toAbstract (C.Clause top C.Ellipsis{} _ _ _) = fail "bad '...'" -- TODO: errors message
     toAbstract (C.Clause top lhs@(C.LHS p wps eqs with) rhs wh wcs) = withLocalVars $ do
-      let wcs' = map (expandEllipsis p wps) wcs
+-- WAS:     let wcs' = map (expandEllipsis p wps) wcs
+      -- Andreas, 2012-02-14: need to reset local vars before checking subclauses
+      vars <- getLocalVars
+      let wcs' = map (\ c -> setLocalVars vars >> do return $ expandEllipsis p wps c) wcs
       lhs' <- toAbstract (LeftHandSide top p wps)
       printLocals 10 "after lhs:"
       let (whname, whds) = case wh of
@@ -1085,9 +1165,16 @@
   bindModule acc m am
   return (x, ds)
 
-data RightHandSide = RightHandSide [C.Expr] [C.Expr] [C.Clause] C.RHS [C.Declaration]
+data RightHandSide = RightHandSide
+  { rhsRewriteEqn :: [C.RewriteEqn]  -- ^ @rewrite e@ (many)
+  , rhsWithExpr   :: [C.WithExpr]    -- ^ @with e@ (many)
+  , rhsSubclauses :: [ScopeM C.Clause] -- ^ the subclauses spawned by a with (monadic because we need to reset the local vars before checking these clauses)
+  , rhs           :: C.RHS
+  , rhsWhereDecls :: [C.Declaration]
+  }
+
 data AbstractRHS = AbsurdRHS'
-                 | WithRHS' [A.Expr] [C.Clause]  -- ^ The with clauses haven't been translated yet
+                 | WithRHS' [A.Expr] [ScopeM C.Clause]  -- ^ The with clauses haven't been translated yet
                  | RHS' A.Expr
                  | RewriteRHS' [A.Expr] AbstractRHS [A.Declaration]
 
@@ -1110,7 +1197,7 @@
     return $ RewriteRHS auxs eqs rhs wh
   toAbstract (WithRHS' es cs) = do
     aux <- withFunctionName "with-"
-    A.WithRHS aux es <$> toAbstract cs
+    A.WithRHS aux es <$> do toAbstract =<< sequence cs
 
 instance ToAbstract RightHandSide AbstractRHS where
   toAbstract (RightHandSide eqs@(_:_) es cs rhs wh) = do
@@ -1139,67 +1226,132 @@
 instance ToAbstract LeftHandSide A.LHS where
     toAbstract (LeftHandSide top lhs wps) =
       traceCall (ScopeCheckLHS top lhs) $ do
-        p <- parseLHS (Just top) lhs
+        lhscore <- parseLHS top lhs
+        reportSLn "scope.lhs" 5 $ "parsed lhs: " ++ show lhscore
         printLocals 10 "before lhs:"
-        let (x, ps) = lhsArgs p
-        x    <- withLocalVars $ setLocalVars [] >> toAbstract (OldName x)
-        args <- toAbstract ps
-        wps  <- toAbstract =<< mapM (parseLHS Nothing) wps
-        checkPatternLinearity (map (namedThing . unArg) args ++ wps)
+        -- error if copattern parsed but no --copatterns option
+        haveCoPats <- optCopatterns <$> pragmaOptions
+        unless haveCoPats $
+          case lhscore of
+            C.LHSHead x ps -> return ()
+            C.LHSProj{} -> typeError $ NeedOptionCopatterns
+        -- scope check patterns except for dot patterns
+        lhscore <- toAbstract lhscore
+        reportSLn "scope.lhs" 5 $ "parsed lhs patterns: " ++ show lhscore
+        wps  <- toAbstract =<< mapM parsePattern wps
+        checkPatternLinearity $ lhsCoreAllPatterns lhscore ++ wps
         printLocals 10 "checked pattern:"
-        args <- toAbstract args -- take care of dot patterns
-        wps  <- toAbstract wps
+        -- scope check dot patterns
+        lhscore <- toAbstract lhscore
+        reportSLn "scope.lhs" 5 $ "parsed lhs dot patterns: " ++ show lhscore
+        wps     <- toAbstract wps
         printLocals 10 "checked dots:"
-        return $ A.LHS (LHSRange $ getRange (lhs, wps)) x args wps
+        return $ A.LHS (LHSRange $ getRange (lhs, wps)) lhscore wps
 
+-- does not check pattern linearity
+instance ToAbstract C.LHSCore (A.LHSCore' C.Expr) where
+    toAbstract (C.LHSHead x ps) = do
+        x    <- withLocalVars $ setLocalVars [] >> toAbstract (OldName x)
+        args <- toAbstract ps
+        return $ A.LHSHead x args
+    toAbstract (C.LHSProj d ps1 l ps2) = do
+        qx <- resolveName d
+        d  <- case qx of
+                FieldName d -> return $ anameName d
+                UnknownName -> notInScope d
+                _           -> typeError $ GenericError $
+                  "head of copattern needs to be a field identifier, but "
+                  ++ show d ++ " isn't one"
+        args1 <- toAbstract ps1
+        l     <- toAbstract l
+        args2 <- toAbstract ps2
+        return $ A.LHSProj d args1 l args2
+
 instance ToAbstract c a => ToAbstract (Arg c) (Arg a) where
     toAbstract (Arg h r e) = Arg h r <$> toAbstractCtx (hiddenArgumentCtx h) e
 
 instance ToAbstract c a => ToAbstract (Named name c) (Named name a) where
     toAbstract (Named n e) = Named n <$> toAbstract e
 
+{- DOES NOT WORK ANYMORE with pattern synonyms
+instance ToAbstract c a => ToAbstract (A.LHSCore' c) (A.LHSCore' a) where
+    toAbstract = mapM toAbstract
+-}
+
+instance ToAbstract (A.LHSCore' C.Expr) (A.LHSCore' A.Expr) where
+    toAbstract (A.LHSHead f ps)             = A.LHSHead f <$> mapM toAbstract ps
+    toAbstract (A.LHSProj d ps lhscore ps') = A.LHSProj d <$> mapM toAbstract ps
+      <*> mapM toAbstract lhscore <*> mapM toAbstract ps'
+
 -- Patterns are done in two phases. First everything but the dot patterns, and
 -- then the dot patterns. This is because dot patterns can refer to variables
 -- bound anywhere in the pattern.
 
-instance ToAbstract c a => ToAbstract (A.Pattern' c) (A.Pattern' a) where
-    toAbstract = mapM toAbstract
+instance ToAbstract (A.Pattern' C.Expr) (A.Pattern' A.Expr) where
+    toAbstract (A.VarP x)             = return $ A.VarP x
+    toAbstract (A.ConP i ds as)       = A.ConP i ds <$> mapM toAbstract as
+    toAbstract (A.DefP i x as)        = A.DefP i x <$> mapM toAbstract as
+    toAbstract (A.WildP i)            = return $ A.WildP i
+    toAbstract (A.AsP i x p)          = A.AsP i x <$> toAbstract p
+    toAbstract (A.DotP i e)           = A.DotP i <$> toAbstract e
+    toAbstract (A.AbsurdP i)          = return $ A.AbsurdP i
+    toAbstract (A.LitP l)             = return $ A.LitP l
+    toAbstract (A.ImplicitP i)        = return $ A.ImplicitP i
+    toAbstract (A.PatternSynP i x as) = do
+        p   <- lookupPatternSyn x
+        as' <- mapM toAbstract as
+        instPatternSyn p as'
+      where
+        instPatternSyn :: A.PatternSynDefn -> [NamedArg A.Pattern] -> ScopeM A.Pattern
+        instPatternSyn (ns, p) as
+            | length ns == length as = return $ substPattern s $ setRange (getRange i) p
+            | otherwise              = typeError $ PatternSynonymArityMismatch x
+          where
+          s = zipWith' (\n a -> (n, namedThing (unArg a))) ns as
 
+
 instance ToAbstract C.Pattern (A.Pattern' C.Expr) where
 
     toAbstract p@(C.IdentP x) = do
         px <- toAbstract (PatName x)
         case px of
-            VarPatName y  -> return $ VarP y
-            ConPatName ds -> return $ ConP (PatRange (getRange p))
-                                           (AmbQ $ map anameName ds)
-                                           []
+            VarPatName y        -> return $ VarP y
+            ConPatName ds       -> return $ ConP (PatRange (getRange p))
+                                                 (AmbQ $ map anameName ds)
+                                                 []
+            PatternSynPatName d -> return $ PatternSynP (PatRange (getRange p))
+                                                        (anameName d) []
 
     toAbstract p0@(AppP p q) = do
         (p', q') <- toAbstract (p,q)
         case p' of
-            ConP _ x as -> return $ ConP info x (as ++ [q'])
-            DefP _ x as -> return $ DefP info x (as ++ [q'])
-            _           -> typeError $ InvalidPattern p0
+            ConP _ x as        -> return $ ConP info x (as ++ [q'])
+            DefP _ x as        -> return $ DefP info x (as ++ [q'])
+            PatternSynP _ x as -> return $ PatternSynP info x (as ++ [q'])
+            _                  -> typeError $ InvalidPattern p0
         where
             r = getRange p0
             info = PatSource r $ \pr -> if appBrackets pr then ParenP r p0 else p0
 
     toAbstract p0@(OpAppP r op ps) = do
-        p <- toAbstract (IdentP $ C.QName op)
+        p <- toAbstract (IdentP op)
         ps <- toAbstract ps
         case p of
-          ConP _ x as -> return $ ConP info x (as ++ map (Arg NotHidden Relevant . unnamed) ps)
-          DefP _ x as -> return $ DefP info x (as ++ map (Arg NotHidden Relevant. unnamed) ps)
-          _           -> __IMPOSSIBLE__
+          ConP        _ x as -> return $ ConP info x
+                                    (as ++ map (Arg NotHidden Relevant . unnamed) ps)
+          DefP        _ x as -> return $ DefP info x
+                                    (as ++ map (Arg NotHidden Relevant . unnamed) ps)
+          PatternSynP _ x as -> return $ PatternSynP info x
+                                    (as ++ map (Arg NotHidden Relevant . unnamed) ps)
+          _                  -> __IMPOSSIBLE__
         where
-            r = getRange p0
+            r    = getRange p0
             info = PatSource r $ \pr -> if appBrackets pr then ParenP r p0 else p0
 
     -- Removed when parsing
-    toAbstract (HiddenP _ _) = __IMPOSSIBLE__
+    toAbstract (HiddenP _ _)   = __IMPOSSIBLE__
     toAbstract (InstanceP _ _) = __IMPOSSIBLE__
-    toAbstract (RawAppP _ _) = __IMPOSSIBLE__
+    toAbstract (RawAppP _ _)   = __IMPOSSIBLE__
 
     toAbstract p@(C.WildP r)    = return $ A.WildP (PatSource r $ const p)
     toAbstract (C.ParenP _ p)   = toAbstract p
@@ -1216,18 +1368,16 @@
     toAbstract p0@(C.DotP r e) = return $ A.DotP info e
         where info = PatSource r $ \_ -> p0
     toAbstract p0@(C.AbsurdP r) = return $ A.AbsurdP info
-        where
-            info = PatSource r $ \_ -> p0
+        where info = PatSource r $ \_ -> p0
 
 -- | Turn an operator application into abstract syntax. Make sure to record the
 -- right precedences for the various arguments.
-toAbstractOpApp :: C.Name -> [OpApp C.Expr] -> ScopeM A.Expr
-toAbstractOpApp op@(C.NoName _ _) es = __IMPOSSIBLE__
-toAbstractOpApp op@(C.Name _ _) es = do
-    f  <- getFixity (C.QName op)
+toAbstractOpApp :: C.QName -> [OpApp C.Expr] -> ScopeM A.Expr
+toAbstractOpApp op es = do
+    f  <- getFixity op
     let (_,_,parts) = oldToNewNotation $ (op, f)
-    op <- toAbstract (OldQName $ C.QName op)
-    foldl app op <$> left (theFixity f) [p | p <- parts, not (isBindingHole p)] es
+    op <- toAbstract (OldQName op)
+    foldl' app op <$> left (theFixity f) [p | p <- parts, not (isBindingHole p)] es
     where
         app e arg = A.App (ExprRange (fuseRange e arg)) e
                   $ Arg NotHidden Relevant $ unnamed arg
diff --git a/src/full/Agda/Syntax/Translation/InternalToAbstract.hs b/src/full/Agda/Syntax/Translation/InternalToAbstract.hs
--- a/src/full/Agda/Syntax/Translation/InternalToAbstract.hs
+++ b/src/full/Agda/Syntax/Translation/InternalToAbstract.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE CPP, MultiParamTypeClasses, FunctionalDependencies,
-             UndecidableInstances, TypeSynonymInstances, FlexibleInstances
+             UndecidableInstances, TypeSynonymInstances, FlexibleInstances,
+             ScopedTypeVariables
   #-}
 
 {-|
@@ -13,7 +14,12 @@
         - meta parameters
         - shadowing
 -}
-module Agda.Syntax.Translation.InternalToAbstract where
+module Agda.Syntax.Translation.InternalToAbstract
+  ( Reify(..)
+  , ReifyWhen(..)
+  , NamedClause
+  , reifyPatterns
+  ) where
 
 import Prelude hiding (mapM_, mapM)
 import Control.Applicative
@@ -26,7 +32,7 @@
 import qualified Data.Map as Map
 import Data.Map (Map)
 import Data.List hiding (sort)
-import Data.Traversable
+import Data.Traversable as Trav
 
 import Agda.Syntax.Literal
 import Agda.Syntax.Position
@@ -39,7 +45,7 @@
 import Agda.Syntax.Scope.Base
 import Agda.Syntax.Scope.Monad
 
-import Agda.TypeChecking.Monad as M
+import Agda.TypeChecking.Monad as M hiding (MetaInfo)
 import Agda.TypeChecking.Reduce
 import {-# SOURCE #-} Agda.TypeChecking.Records
 import Agda.TypeChecking.DisplayForm
@@ -49,6 +55,7 @@
 import Agda.TypeChecking.Free
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Telescope
+import Agda.TypeChecking.DropArgs
 
 import Agda.Utils.Monad
 import Agda.Utils.Tuple
@@ -58,30 +65,66 @@
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
-apps :: (Expr, [Arg Expr]) -> TCM Expr
-apps (e, []) = return e
-apps (e, arg : args) | isHiddenArg arg =
-    do  showImp <- showImplicitArguments
-        if showImp then apps (App exprInfo e (unnamed <$> arg), args)
-                   else apps (e, args)
-apps (e, arg:args)          =
-    apps (App exprInfo e (unnamed <$> arg), args)
+-- Composition reified applications ---------------------------------------
 
+napps :: Expr -> [NamedArg Expr] -> TCM Expr
+napps e args = do
+  dontShowImp <- not <$> showImplicitArguments
+  let apply1 e arg | isHiddenArg arg && dontShowImp = e
+                   | otherwise = App exprInfo e arg
+  return $ foldl' apply1 e args
+
+apps :: Expr -> [Arg Expr] -> TCM Expr
+apps e args = napps e $ map (fmap unnamed) args
+
+reifyApp :: Expr -> [Arg Term] -> TCM Expr
+reifyApp e vs = apps e =<< reify vs
+
+-- Omitting information ---------------------------------------------------
+
 exprInfo :: ExprInfo
 exprInfo = ExprRange noRange
 
-reifyApp :: Expr -> [Arg Term] -> TCM Expr
-reifyApp e vs = curry apps e =<< reify vs
+underscore :: Expr
+underscore = A.Underscore $ Info.emptyMetaInfo
 
+-- Conditional reification to omitt terms that are not shown --------------
+
+-- | @ReifyWhen@ is a auxiliary type class to reify 'Arg'.
+--
+--   @reifyWhen False@ should produce an 'underscore'.
+--   This function serves to reify hidden/irrelevant things.
+class Reify i a => ReifyWhen i a where
+    reifyWhen :: Bool -> i -> TCM a
+    reifyWhen _ = reify
+
+instance Reify i Expr => ReifyWhen i Expr where
+  reifyWhen True  i = reify i
+  reifyWhen False t = return underscore
+
+instance ReifyWhen i a => ReifyWhen (Arg i) (Arg a) where
+  reifyWhen b = traverse (reifyWhen b)
+
+instance ReifyWhen i a => ReifyWhen (Named n i) (Named n a) where
+  reifyWhen b = traverse (reifyWhen b)
+
+-- Reification ------------------------------------------------------------
+
 class Reify i a | i -> a where
-    reify :: i -> TCM a
+    reify     ::         i -> TCM a
 
+instance Reify Expr Expr where
+    reify = return
+
 instance Reify MetaId Expr where
     reify x@(MetaId n) = liftTCM $ do
-      mi  <- getMetaInfo <$> lookupMeta x
-      let mi' = Info.MetaInfo (getRange mi)
-                              (M.clScope mi)
-                              (Just n)
+      mi  <- mvInfo <$> lookupMeta x
+      let mi' = Info.MetaInfo
+                 { metaRange          = getRange $ miClosRange mi
+                 , metaScope          = M.clScope $ miClosRange mi
+                 , metaNumber         = Just n
+                 , metaNameSuggestion = miNameSuggestion mi
+                 }
       ifM shouldReifyInteractionPoints
           (do iis <- map (snd /\ fst) . Map.assocs
                       <$> gets stInteractionPoints
@@ -93,10 +136,10 @@
 
 instance Reify DisplayTerm Expr where
   reify d = case d of
-    DTerm v -> reify v
+    DTerm v -> reifyTerm False v
     DDot  v -> reify v
-    DCon c vs -> curry apps (A.Con (AmbQ [c])) =<< reify vs
-    DDef f vs -> curry apps (A.Def f) =<< reify vs
+    DCon c vs -> apps (A.Con (AmbQ [c])) =<< reify vs
+    DDef f vs -> apps (A.Def f) =<< reify vs
     DWithApp us vs -> do
       us <- reify us
       let wapp [e] = e
@@ -116,15 +159,17 @@
     else fallback
 
 reifyDisplayFormP :: A.LHS -> TCM A.LHS
-reifyDisplayFormP lhs@(A.LHS i x ps wps) =
+reifyDisplayFormP lhs@(A.LHS i A.LHSProj{} wps) =
+  typeError $ NotImplemented "reifyDisplayForm for copatterns"
+reifyDisplayFormP lhs@(A.LHS i (A.LHSHead x ps) wps) =
   ifM (not <$> displayFormsEnabled) (return lhs) $ do
-    let vs = [ Arg h Relevant $ I.Var n [] | (n, h) <- zip [0..] $ map argHiding ps]
+    let vs = [ Arg h Relevant $ I.var n | (n, h) <- zip [0..] $ map argHiding ps]
     md <- liftTCM $ displayForm x vs
     reportSLn "syntax.reify.display" 20 $
       "display form of " ++ show x ++ " " ++ show ps ++ " " ++ show wps ++ ":\n  " ++ show md
     case md of
       Just d  | okDisplayForm d ->
-        reifyDisplayFormP =<< displayLHS (map (namedThing . unArg) ps) wps d
+        reifyDisplayFormP =<< displayLHS (map namedArg ps) wps d
       _ -> return lhs
   where
     okDisplayForm (DWithApp (d : ds) []) =
@@ -160,7 +205,7 @@
       (f, vs, ds) -> do
         ds <- mapM termToPat ds
         vs <- mapM argToPat vs
-        return $ LHS i f vs (ds ++ wps)
+        return $ LHS i (LHSHead f vs) (ds ++ wps)
       where
         info = PatRange noRange
         argToPat arg = fmap unnamed <$> traverse termToPat arg
@@ -168,7 +213,7 @@
         len = genericLength ps
 
         termToPat :: DisplayTerm -> TCM A.Pattern
-        termToPat (DTerm (I.Var n [])) = return $ ps !! fromIntegral n
+        termToPat (DTerm (I.Var n [])) = return $ ps !! n
         termToPat (DCon c vs) = A.ConP info (AmbQ [c]) <$> mapM argToPat vs
         termToPat (DDot v) = A.DotP info <$> termToExpr v
         termToPat (DDef _ []) = return $ A.WildP info
@@ -181,51 +226,136 @@
         -- TODO: restructure this to avoid having to repeat the code for reify
         termToExpr :: Term -> TCM A.Expr
         termToExpr (I.Var n [])
-          | n < len = return $ patToTerm $ ps !! fromIntegral n
+          | n < len = return $ A.patternToExpr $ ps !! n
         termToExpr (I.Con c vs) =
-          curry apps (A.Con (AmbQ [c])) =<< argsToExpr vs
+          apps (A.Con (AmbQ [c])) =<< argsToExpr vs
         termToExpr (I.Def f vs) =
-          curry apps (A.Def f) =<< argsToExpr vs
+          apps (A.Def f) =<< argsToExpr vs
         termToExpr (I.Var n vs) =
-          apps =<< (,) <$> reify (I.Var (n - len) []) <*> argsToExpr vs
-        termToExpr _ = return $ A.Underscore minfo
-
-        minfo = MetaInfo noRange emptyScopeInfo Nothing
-        einfo = ExprRange noRange
-        app = foldl (App einfo)
-
-        patToTerm :: A.Pattern -> A.Expr
-        patToTerm (A.VarP x)      = A.Var x
-        patToTerm (A.ConP _ c ps) =
-          A.Con c `app` map (fmap (fmap patToTerm)) ps
-        patToTerm (A.DefP _ f ps) =
-          A.Def f `app` map (fmap (fmap patToTerm)) ps
-        patToTerm (A.WildP _)     = A.Underscore minfo
-        patToTerm (A.AsP _ _ p)   = patToTerm p
-        patToTerm (A.DotP _ e)    = e
-        patToTerm (A.AbsurdP _)   = A.Underscore minfo  -- TODO: could this happen?
-        patToTerm (A.LitP l)      = A.Lit l
-        patToTerm (A.ImplicitP _) = A.Underscore minfo
+          uncurry apps =<< (,) <$> reify (I.var (n - len)) <*> argsToExpr vs
+        termToExpr _ = return underscore
 
 instance Reify Literal Expr where
   reify l@(LitInt    {}) = return (A.Lit l)
   reify l@(LitFloat  {}) = return (A.Lit l)
   reify l@(LitString {}) = return (A.Lit l)
   reify l@(LitChar   {}) = return (A.Lit l)
-  reify l@(LitQName   {}) = return (A.Lit l)
+  reify l@(LitQName  {}) = return (A.Lit l)
 
 instance Reify Term Expr where
-  reify v = do
+  reify v = reifyTerm True v
+
+reifyTerm :: Bool -> Term -> TCM Expr
+reifyTerm expandAnonDefs v = do
     v <- instantiate v
     case v of
       I.Var n vs   -> do
           x  <- liftTCM $ nameOfBV n `catchError` \_ -> freshName_ ("@" ++ show n)
           reifyApp (A.Var x) vs
-      I.Def x@(QName _ name) vs -> reifyDisplayForm x vs $ do
+      I.Def x vs   -> reifyDisplayForm x vs $ reifyDef expandAnonDefs x vs
+      I.Con x vs   -> do
+        isR <- isGeneratedRecordConstructor x
+        case isR of
+          True -> do
+            showImp <- showImplicitArguments
+            let keep (a, v) = showImp || argHiding a == NotHidden
+            r  <- getConstructorData x
+            xs <- getRecordFieldNames r
+            vs <- map unArg <$> reify vs
+            return $ A.Rec exprInfo $ map (unArg *** id) $ filter keep $ zip xs vs
+          False -> reifyDisplayForm x vs $ do
+            ci <- getConstInfo x
+            let Constructor{conPars = np} = theDef ci
+            -- if we are the the module that defines constructor x
+            -- then we have to drop at least the n module parameters
+            n  <- getDefFreeVars x
+            -- the number of parameters is greater (if the data decl has
+            -- extra parameters) or equal (if not) to n
+            when (n > np) __IMPOSSIBLE__
+            let h = A.Con (AmbQ [x])
+            if null vs then return h else do
+            es <- reify vs
+            -- Andreas, 2012-04-20: do not reify parameter arguments of constructor
+            -- if the first regular constructor argument is hidden
+            -- we turn it into a named argument, in order to avoid confusion
+            -- with the parameter arguments which can be supplied in abstract syntax
+            --
+            -- Andreas, 2012-09-17: this does not remove all sources of confusion,
+            -- since parameters could have the same name as regular arguments
+            -- (see for example the parameter {i} to Data.Star.Star, which is also
+            -- the first argument to the cons).
+            -- @data Star {i}{I : Set i} ... where cons : {i :  I} ...@
+            if (np == 0) then apps h es  -- if np==0 then n==0
+            -- WAS: if (np == 0) then apps h $ genericDrop n es
+             else do   -- get name of argument from type of constructor
+              TelV tel _ <- telView (defType ci) -- need reducing version of telView because target of constructor could be a definition expanding into a function type
+              let -- TelV tel _ = telView' (defType ci) -- WRONG, see test/suceed/NameFirstIfHidden
+                  doms       = genericDrop np $ telToList tel
+              case doms of
+                -- Andreas, 2012-09-18
+                -- If the first regular constructor argument is hidden,
+                -- we keep the parameters to avoid confusion.
+                (Dom Hidden _ _ : _) -> do
+                  let us = genericReplicate (np - n) $ Arg Hidden Relevant underscore
+                  apps h $ us ++ es
+                -- otherwise, we drop all parameters
+                _ -> apps h es
+{- CODE FROM 2012-04-xx
+              reportSLn "syntax.reify.con" 30 $ unlines
+                [ "calling nameFirstIfHidden"
+                , "doms = " ++ show doms
+                , "es   = " ++ show es
+                , "n    = " ++ show n
+                , "np   = " ++ show np
+                ]
+              napps h $ genericDrop (n - np) $ nameFirstIfHidden doms es
+-}
+      I.Lam h b    -> do
+        (x,e) <- reify b
+        return $ A.Lam exprInfo (DomainFree h Relevant x) e
+        -- Andreas, 2011-04-07 we do not need relevance information at internal Lambda
+      I.Lit l        -> reify l
+      I.Level l      -> reify l
+      I.Pi a b       -> case b of
+        NoAbs _ b -> uncurry (A.Fun $ exprInfo) <$> reify (a,b)
+        b         -> do
+          Arg h r a <- reify a
+          (x, b)    <- reify b
+          return $ A.Pi exprInfo [TypedBindings noRange $ Arg h r (TBind noRange [x] a)] b
+      I.Sort s     -> reify s
+      I.MetaV x vs -> uncurry apps =<< reify (x,vs)
+      I.DontCare v -> A.DontCare <$> reifyTerm expandAnonDefs v
+      I.Shared p   -> reifyTerm expandAnonDefs $ derefPtr p
+
+    where
+      -- Andreas, 2012-10-20  expand a copy in an anonymous module
+      -- to improve error messages.
+      -- Don't do this if we have just expanded into a display form,
+      -- otherwise we loop!
+      reifyDef True x@(QName m name) vs | A.isAnonymousModuleName m = do
+        r <- reduceDefCopy x vs
+        case r of
+          YesReduction v -> do
+            reportSLn "reify.anon" 20 $ unlines
+              [ "reduction on defined ident. in anonymous module"
+              , "x = " ++ show x
+              , "v = " ++ show v
+              ]
+            reify v
+          NoReduction () -> do
+            reportSLn "reify.anon" 20 $ unlines
+              [ "no reduction on defined ident. in anonymous module"
+              , "x  = " ++ show x
+              , "vs = " ++ show vs
+              ]
+            reifyDef' x vs
+      reifyDef _ x vs = reifyDef' x vs
+
+      reifyDef' x@(QName _ name) vs = do
         mdefn <- liftTCM $ (Just <$> getConstInfo x) `catchError` \_ -> return Nothing
-        (pad, vs) <-
+        (pad, vs :: [NamedArg Term]) <-
           case mdefn of
-            Nothing -> (,) [] <$> (flip genericDrop vs <$> getDefFreeVars x)
+            Nothing -> (,) [] <$> do map (fmap unnamed) <$> (flip genericDrop vs <$> getDefFreeVars x)
             Just defn -> do
               let def = theDef defn
               -- This is tricky:
@@ -239,77 +369,59 @@
               -- We should drop this many arguments from the local context.
               n <- getDefFreeVars x
               -- These are the dropped projection arguments
-              pad <- case def of
+              (np, pad, dom) <-
+                  case def of
                       Function{ funProjection = Just (_, np) } -> do
                         TelV tel _ <- telView (defType defn)
                         scope <- getScope
-                        let as       = take (np - 1) $ telToList tel
-                            whocares = A.Underscore (Info.MetaInfo noRange scope Nothing)
-                        return $ map (fmap $ const whocares) as
-                      _ -> return []
+                        let (as, dom:_) = splitAt (np - 1) $ telToList tel
+                            whocares = A.Underscore $ Info.emptyMetaInfo { metaScope = scope }
+                        return (np, map (argFromDom . (fmap $ const whocares)) as, dom)
+                      _ -> return (0, [], __IMPOSSIBLE__)
               -- Now pad' ++ vs' = drop n (pad ++ vs)
               let pad' = genericDrop n pad
+                  vs'  :: [Arg Term]
                   vs'  = genericDrop (max 0 (n - size pad)) vs
-              -- If showImplicit then keep the padding otherwise ignore it
-              ifM showImplicitArguments
-                  (return (pad', vs'))
-                  (return ([], vs'))
+              -- Andreas, 2012-04-21: get rid of hidden underscores {_}
+              -- Keep non-hidden arguments of the padding
+              showImp <- showImplicitArguments
+              return (filter (not . isHiddenArg) pad',
+                if not (null pad) && showImp && isHiddenArg (last pad)
+                   then nameFirstIfHidden [dom] vs'
+                   else map (fmap unnamed) vs')
         df <- displayFormsEnabled
         if df && isPrefixOf extendlambdaname (show name)
           then do
            reportSLn "int2abs.reifyterm.def" 10 $ "reifying extended lambda with definition: " ++ show x
            info <- getConstInfo x
-           cls <- mapM (reify . (NamedClause x)) $ defClauses info
+           --drop lambda lifted arguments
+           Just (h , nh) <- Map.lookup x <$> getExtLambdaTele
+           let n = h + nh
+           cls <- mapM (reify . (QNamed x) . (dropArgs n)) $ defClauses info
            -- Karim: Currently Abs2Conc does not require a DefInfo thus we
            -- use __IMPOSSIBLE__.
-           reifyApp (A.ExtendedLam exprInfo __IMPOSSIBLE__ x cls) vs
-          else
-           let apps = foldl (\e a -> A.App exprInfo e (fmap unnamed a)) in
-           reifyApp (A.Def x `apps` pad) vs
-      I.Con x vs   -> do
-        isR <- isGeneratedRecordConstructor x
-        case isR of
-          True -> do
-            showImp <- showImplicitArguments
-            let keep (a, v) = showImp || argHiding a == NotHidden
-            r  <- getConstructorData x
-            xs <- getRecordFieldNames r
-            vs <- reify $ map unArg vs
-            return $ A.Rec exprInfo $ map (unArg *** id) $ filter keep $ zip xs vs
-          False -> reifyDisplayForm x vs $ do
-            -- let hide a = a { argHiding = Hidden }
-            Constructor{conPars = np} <- theDef <$> getConstInfo x
-            scope <- getScope
-            let whocares = A.Underscore (Info.MetaInfo noRange scope Nothing)
-                us = replicate (fromIntegral np) $ Arg Hidden Relevant whocares
-            n  <- getDefFreeVars x
-            es <- reify vs
-            apps (A.Con (AmbQ [x]), genericDrop n $ us ++ es)
-      I.Lam h b    -> do
-        (x,e) <- reify b
-        return $ A.Lam exprInfo (DomainFree h Relevant x) e
-        -- Andreas, 2011-04-07 we do not need relevance information at internal Lambda
-      I.Lit l        -> reify l
-      I.Level l      -> reify l
-      I.Pi a b       -> case b of
-        NoAbs _ b -> uncurry (A.Fun $ exprInfo) <$> reify (a,b)
-        b         -> do
-          Arg h r a <- reify a
-          (x, b)    <- reify b
-          return $ A.Pi exprInfo [TypedBindings noRange $ Arg h r (TBind noRange [x] a)] b
-      I.Sort s     -> reify s
-      I.MetaV x vs -> apps =<< reify (x,vs)
-      I.DontCare v -> A.DontCare <$> reify v
-{- Andreas: I want to see irrelevant, but not implicit arguments
-        ifM showImplicitArguments
-            (reify v)
-            (return A.DontCare)
--}
-{- Andreas, 2011-09-09
-      I.DontCare Nothing  -> return A.DontCare
-      I.DontCare (Just v) -> reify v  -- leads to paradox error msg in test/fail/UnifyWithIrrelevantArgument
--}
+           napps (A.ExtendedLam exprInfo __IMPOSSIBLE__ x cls) =<< reify vs
+          else do
+           let apps = foldl' (\e a -> A.App exprInfo e (fmap unnamed a))
+           napps (A.Def x `apps` pad) =<< reify vs
 
+-- | @nameFirstIfHidden n (a1->...an->{x:a}->b) ({e} es) = {x = e} es@
+nameFirstIfHidden :: [Dom (String, t)] -> [Arg a] -> [NamedArg a]
+nameFirstIfHidden _         []                    = []
+nameFirstIfHidden []        (_ : _)               = __IMPOSSIBLE__
+nameFirstIfHidden (dom : _) (Arg Hidden r e : es) =
+  Arg Hidden r (Named (Just $ fst $ unDom dom) e) : map (fmap unnamed) es
+nameFirstIfHidden _         es                    = map (fmap unnamed) es
+
+instance Reify i a => Reify (Named n i) (Named n a) where
+  reify = traverse reify
+
+-- | Skip reification of implicit and irrelevant args if option is off.
+instance (ReifyWhen i a) => Reify (Arg i) (Arg a) where
+  reify (Arg h r i) = Arg h r <$> do flip reifyWhen i =<< condition
+    where condition = (return (h /= Hidden) `or2M` showImplicitArguments)
+              `and2M` (return (r /= Irrelevant) `or2M` showIrrelevantArguments)
+
 instance Reify Elim Expr where
   reify e = case e of
     I.Apply v -> appl "apply" <$> reify v
@@ -318,9 +430,8 @@
       appl :: String -> Arg Expr -> Expr
       appl s v = A.App exprInfo (A.Lit (LitString noRange s)) $ fmap unnamed v
 
-data NamedClause = NamedClause QName I.Clause
--- Named clause does not need 'Recursion' flag since I.Clause has it
--- data NamedClause = NamedClause QName Recursion I.Clause
+type NamedClause = QNamed I.Clause
+-- data NamedClause = NamedClause QName I.Clause
 
 instance Reify ClauseBody RHS where
   reify NoBody     = return AbsurdRHS
@@ -338,17 +449,17 @@
     , "  wps  = " ++ show wps
     , "  vars = " ++ show vars
     ]
-  let allps       = ps ++ map (defaultArg . unnamed) wps
+  let allps       = ps ++ map defaultNamedArg wps
       sps         = foldl (.) (strip vars) (map rearrangeBinding $ Set.toList vars) $ allps
       (ps', wps') = splitAt (length sps - length wps) sps
   reportSLn "syntax.reify.implicit" 30 $ unlines
     [ "  ps'  = " ++ show ps'
-    , "  wps' = " ++ show (map (namedThing . unArg) wps')
+    , "  wps' = " ++ show (map namedArg wps')
     ]
-  return (ps', map (namedThing . unArg) wps')
+  return (ps', map namedArg wps')
   where
     argsVars = Set.unions . map argVars
-    argVars = patVars . namedThing . unArg
+    argVars = patVars . namedArg
     patVars p = case p of
       A.VarP x      -> Set.singleton x
       A.ConP _ _ ps -> argsVars ps
@@ -359,6 +470,7 @@
       A.LitP _      -> Set.empty
       A.ImplicitP _ -> Set.empty
       A.AsP _ _ p   -> patVars p
+      A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- Set.empty
 
     -- Pick the "best" place to bind the variable. Best in this case
     -- is the left-most explicit binding site. But, of course we can't
@@ -379,7 +491,7 @@
           , noInterestingBindings p
           , all (flip canStrip []) $ takeWhile ((Hidden ==) . argHiding) as
           ]
-          where p = namedThing $ unArg a
+          where p = namedArg a
 
         stripArg a = fmap (fmap stripPat) a
 
@@ -393,6 +505,7 @@
           A.LitP _      -> p
           A.ImplicitP _ -> p
           A.AsP i x p   -> A.AsP i x $ stripPat p
+          A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- p
 
         noInterestingBindings p =
           Set.null $ dvs `Set.intersection` patVars p
@@ -438,37 +551,39 @@
     A.LitP _      -> Set.empty
     A.ImplicitP _ -> Set.empty
     A.AsP _ _ p   -> dotVars p
+    A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- Set.empty
 
 -- | Getting all(!) variables of an expression.
 --   It should only get free ones, but it does not matter to include
 --   the bound ones.
 instance DotVars A.Expr where
   dotVars e = case e of
-    A.ScopedExpr _ e -> dotVars e
-    A.Var x          -> Set.singleton x -- add any expression variable
-    A.Def _          -> Set.empty
-    A.Con _          -> Set.empty
-    A.Lit _          -> Set.empty
-    A.QuestionMark _ -> Set.empty
-    A.Underscore _   -> Set.empty
-    A.App _ e1 e2    -> dotVars (e1, e2)
-    A.WithApp _ e es -> dotVars (e, es)
-    A.Lam _ _ e      -> dotVars e
-    A.AbsurdLam _ _  -> Set.empty
+    A.ScopedExpr _ e       -> dotVars e
+    A.Var x                -> Set.singleton x -- add any expression variable
+    A.Def _                -> Set.empty
+    A.Con _                -> Set.empty
+    A.Lit _                -> Set.empty
+    A.QuestionMark _       -> Set.empty
+    A.Underscore _         -> Set.empty
+    A.App _ e1 e2          -> dotVars (e1, e2)
+    A.WithApp _ e es       -> dotVars (e, es)
+    A.Lam _ _ e            -> dotVars e
+    A.AbsurdLam _ _        -> Set.empty
     A.ExtendedLam _ _ _ cs -> dotVars cs
-    A.Pi _ tel e     -> dotVars (tel, e)
-    A.Fun _ a b      -> dotVars (a, b)
-    A.Set _ _        -> Set.empty
-    A.Prop _         -> Set.empty
-    A.Let _ _ _      -> __IMPOSSIBLE__
-    A.Rec _ es       -> dotVars $ map snd es
-    A.RecUpdate _ e es -> dotVars (e, map snd es)
-    A.ETel _         -> __IMPOSSIBLE__
-    A.QuoteGoal {}   -> __IMPOSSIBLE__
-    A.Quote {}       -> __IMPOSSIBLE__
-    A.QuoteTerm {}   -> __IMPOSSIBLE__
-    A.Unquote {}     -> __IMPOSSIBLE__
-    A.DontCare v     -> dotVars v
+    A.Pi _ tel e           -> dotVars (tel, e)
+    A.Fun _ a b            -> dotVars (a, b)
+    A.Set _ _              -> Set.empty
+    A.Prop _               -> Set.empty
+    A.Let _ _ _            -> __IMPOSSIBLE__
+    A.Rec _ es             -> dotVars $ map snd es
+    A.RecUpdate _ e es     -> dotVars (e, map snd es)
+    A.ETel _               -> __IMPOSSIBLE__
+    A.QuoteGoal {}         -> __IMPOSSIBLE__
+    A.Quote {}             -> __IMPOSSIBLE__
+    A.QuoteTerm {}         -> __IMPOSSIBLE__
+    A.Unquote {}           -> __IMPOSSIBLE__
+    A.DontCare v           -> dotVars v
+    A.PatternSyn n         -> Set.empty
 
 instance DotVars RHS where
   dotVars (RHS e) = dotVars e
@@ -505,28 +620,40 @@
         let vars = Set.map show (dotVars t)
         tick
         if Set.member "()" vars
-          then return $ A.DotP i $ A.Underscore mi
+          then return $ A.DotP i $ underscore
           else return $ A.DotP i t
       I.LitP l             -> return (A.LitP l)
       I.ConP c _ ps -> A.ConP i (AmbQ [c]) <$> reifyArgs ps
       where
         i = PatRange noRange
-        mi = MetaInfo noRange emptyScopeInfo Nothing
 
 instance Reify NamedClause A.Clause where
-  reify (NamedClause f (I.Clause _ tel perm ps body)) = addCtxTel tel $ do
+  reify (QNamed f (I.Clause _ tel perm ps body)) = addCtxTel tel $ do
     ps  <- reifyPatterns tel perm ps
-    lhs <- liftTCM $ reifyDisplayFormP $ LHS info f ps []
+    lhs <- liftTCM $ reifyDisplayFormP $ LHS info (LHSHead f ps) []
     nfv <- getDefFreeVars f
     lhs <- stripImps $ dropParams nfv lhs
     rhs <- reify body
     return $ A.Clause lhs rhs []
     where
       info = LHSRange noRange
-      dropParams n (LHS i f ps wps) = LHS i f (genericDrop n ps) wps
-      stripImps (LHS i f ps wps) = do
+      dropParams n (LHS i lhscore wps) =
+        LHS i (mapLHSHead (\ f ps -> LHSHead f (genericDrop n ps)) lhscore) wps
+      stripImps (LHS i lhscore wps) = do
+          (wps', lhscore) <- stripIs lhscore
+          return $ LHS i lhscore wps'
+        where stripIs (LHSHead f ps) = do
+                (ps, wps) <- stripImplicits ps wps
+                return (wps, LHSHead f ps)
+              stripIs (LHSProj d ps1 l ps2) = do
+                Arg h r (Named n (wps, l)) <- Trav.mapM (Trav.mapM stripIs) l
+                return (wps, LHSProj d ps1 (Arg h r (Named n l)) ps2)
+{-
+      dropParams n (LHS i (LHSHead f ps) wps) = LHS i (LHSHead f (genericDrop n ps)) wps
+      stripImps (LHS i (LHSHead f ps) wps) = do
         (ps, wps) <- stripImplicits ps wps
-        return $ LHS i f ps wps
+        return $ LHS i (LHSHead f ps) wps
+-}
 
 instance Reify Type Expr where
     reify (I.El _ t) = reify t
@@ -539,14 +666,13 @@
                 I.Type (I.Max [I.ClosedLevel n]) -> return $ A.Set exprInfo n
                 I.Type a -> do
                   a <- reify a
-                  return $ A.App exprInfo (A.Set exprInfo 0)
-                                          (defaultArg (unnamed a))
+                  return $ A.App exprInfo (A.Set exprInfo 0) (defaultNamedArg a)
                 I.Prop       -> return $ A.Prop exprInfo
                 I.Inf       -> A.Var <$> freshName_ "Setω"
                 I.DLub s1 s2 -> do
                   lub <- freshName_ "dLub" -- TODO: hack
                   (e1,e2) <- reify (s1, I.Lam NotHidden $ fmap Sort s2)
-                  let app x y = A.App exprInfo x (defaultArg $ unnamed y)
+                  let app x y = A.App exprInfo x (defaultNamedArg y)
                   return $ A.Var lub `app` e1 `app` e2
 
 instance Reify Level Expr where
@@ -561,7 +687,7 @@
     s <- return $ if s == "_" && 0 `freeIn` v then "z" else s
 
     x <- freshName_ s
-    e <- addCtx x (defaultArg $ sort I.Prop) -- type doesn't matter
+    e <- addCtx x dummyDom -- type doesn't matter
          $ reify v
     return (x,e)
 
@@ -573,8 +699,8 @@
     let r = getRange e
     return $ TypedBindings r (Arg h rel (TBind r [x] e)) : bs
 
-instance Reify i a => Reify (Arg i) (Arg a) where
-    reify = traverse reify
+instance Reify i a => Reify (Dom i) (Arg a) where
+    reify (Dom h r i) = Arg h r <$> reify i
 
 instance Reify i a => Reify [i] [a] where
     reify = traverse reify
diff --git a/src/full/Agda/Termination/CallGraph.hs b/src/full/Agda/Termination/CallGraph.hs
--- a/src/full/Agda/Termination/CallGraph.hs
+++ b/src/full/Agda/Termination/CallGraph.hs
@@ -9,6 +9,7 @@
 module Agda.Termination.CallGraph
   ( -- * Structural orderings
     Order(Mat), decr
+  , increase, decrease
   , (.*.)
   , supremum, infimum
   , decreasing, le, lt, unknown, orderMat
@@ -89,6 +90,17 @@
 instance HasZero Order where
   zeroElement = Unknown
 
+-- | Raw increase which does not cut off.
+increase :: Int -> Order -> Order
+increase i o = case o of
+  Unknown -> Unknown
+  Decr k  -> Decr $ k - i
+  Mat m   -> Mat $ fmap (increase i) m
+
+-- | Raw decrease which does not cut off.
+decrease :: Int -> Order -> Order
+decrease i o = increase (-i) o
+
 -- | Smart constructor for @Decr k :: Order@ which cuts off too big values.
 --
 -- Possible values for @k@: @- ?cutoff '<=' k '<=' ?cutoff + 1@.
@@ -214,10 +226,14 @@
 okM m1 m2 = (rows $ size m2) == (cols $ size m1)
 
 -- | The supremum of a (possibly empty) list of 'Order's.
-
+--   More information (i.e., more decrease) is bigger.
+--   'Unknown' is no information, thus, smallest.
 supremum :: (?cutoff :: Int) => [Order] -> Order
 supremum = foldr maxO Unknown
 
+-- | @('Order', 'maxO', '.*.')@ forms a semiring, with 'Unknown' as
+-- zero and 'Le' as one.
+
 maxO :: (?cutoff :: Int) => Order -> Order -> Order
 maxO o1 o2 = case (o1,o2) of
                (Decr k, Decr l) -> Decr (max k l) -- cut off not needed
@@ -227,14 +243,11 @@
                (Mat m,_) -> maxO (collapse m) o2
                (_,Mat m) ->  maxO o1 (collapse m)
 
--- | @('Order', 'max', '.*.')@ forms a semiring, with 'Unknown' as
--- zero and 'Le' as one.
-
 -- | The infimum of a (non empty) list of 'Order's.
-
+--  'Unknown' is the least element, thus, dominant.
 infimum :: (?cutoff :: Int) => [Order] -> Order
-infimum (o:l) = foldl minO o l
-infimum [] = __IMPOSSIBLE__
+infimum (o:l) = foldl' minO o l
+infimum []    = __IMPOSSIBLE__
 
 minO :: (?cutoff :: Int) => Order -> Order -> Order
 minO o1 o2 = case (o1,o2) of
@@ -435,6 +448,12 @@
 union :: Monoid meta
       => CallGraph meta -> CallGraph meta -> CallGraph meta
 union cs1 cs2 = CallGraph $ (Map.unionWith mappend `on` cg) cs1 cs2
+
+-- | 'CallGraph' is a monoid under 'union'.
+
+instance Monoid meta => Monoid (CallGraph meta) where
+  mempty  = empty
+  mappend = union
 
 -- | Inserts a call into a call graph.
 
diff --git a/src/full/Agda/Termination/Lexicographic.hs b/src/full/Agda/Termination/Lexicographic.hs
--- a/src/full/Agda/Termination/Lexicographic.hs
+++ b/src/full/Agda/Termination/Lexicographic.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 -- | Lexicographic order search, more or less as defined in
 --      \"A Predicative Analysis of Structural Recursion\" by
 --      Andreas Abel and Thorsten Altenkirch.
@@ -230,7 +231,11 @@
   , quickCheck' prop_fromDiagonals
   , quickCheck' prop_newBehaviour
   , quickCheckWith' stdArgs{ maxSuccess = 50
+#if MIN_VERSION_QuickCheck(2,5,0)
+                           , maxDiscardRatio = 4
+#else
                            , maxDiscard = 200
+#endif
                            , maxSize    = 20
                            }
                     prop_lexOrder
diff --git a/src/full/Agda/Termination/Matrix.hs b/src/full/Agda/Termination/Matrix.hs
--- a/src/full/Agda/Termination/Matrix.hs
+++ b/src/full/Agda/Termination/Matrix.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 -- | Naive implementation of simple matrix library.
 
 -- Originally copied from Agda1 sources.
@@ -96,7 +97,7 @@
 -- | Type of matrices, parameterised on the type of values.
 
 newtype Matrix i b = M { unM :: Array (MIx i) b }
-  deriving (Eq, Ord)
+  deriving (Eq, Ord, Functor)
 
 matrixInvariant :: (Num i, Ix i) => Matrix i b -> Bool
 matrixInvariant m =
diff --git a/src/full/Agda/Termination/SparseMatrix.hs b/src/full/Agda/Termination/SparseMatrix.hs
--- a/src/full/Agda/Termination/SparseMatrix.hs
+++ b/src/full/Agda/Termination/SparseMatrix.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, DeriveFunctor #-}
 
 {- | Sparse matrices.
 
@@ -108,7 +108,7 @@
 -- | Type of matrices, parameterised on the type of values.
 
 data Matrix i b = M { size :: Size i, unM :: [(MIx i, b)] }
-  deriving (Eq, Ord)
+  deriving (Eq, Ord, Functor)
 
 matrixInvariant :: (Num i, Ix i) => Matrix i b -> Bool
 matrixInvariant m = all (\ (MIx i j, b) -> 1 <= i && i <= rows sz
@@ -334,7 +334,7 @@
     => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a
 mul semiring m1 m2 = M (Size { rows = rows (size m1), cols = cols (size m2) }) $
   filter (\ (i,b) -> b /= Semiring.zero semiring) $
-  [ (MIx i j, foldl (Semiring.add semiring) (Semiring.zero semiring) $
+  [ (MIx i j, List.foldl' (Semiring.add semiring) (Semiring.zero semiring) $
                 map snd $ interAssocWith (Semiring.mul semiring) v w)
     | (i,v) <- toSparseRows m1
     , (j,w) <- toSparseRows $ transpose m2 ]
diff --git a/src/full/Agda/Termination/TermCheck.hs b/src/full/Agda/Termination/TermCheck.hs
--- a/src/full/Agda/Termination/TermCheck.hs
+++ b/src/full/Agda/Termination/TermCheck.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, PatternGuards, ImplicitParams #-}
+{-# LANGUAGE CPP, PatternGuards, ImplicitParams, TupleSections #-}
 
 {- Checking for Structural recursion
    Authors: Andreas Abel, Nils Anders Danielsson, Ulf Norell,
@@ -8,25 +8,30 @@
  -}
 
 module Agda.Termination.TermCheck
-    ( termDecls
+    ( termDecl
     , Result, DeBruijnPat
     ) where
 
 import Control.Applicative
 import Control.Monad.Error
+import Control.Monad.State
+
 import Data.List as List
 import qualified Data.Map as Map
 import Data.Map (Map)
 import qualified Data.Maybe as Maybe
+import Data.Monoid
 import qualified Data.Set as Set
 import Data.Set (Set)
 
 import qualified Agda.Syntax.Abstract as A
+-- import Agda.Syntax.Abstract.Pretty (prettyA)
 import Agda.Syntax.Internal
 import qualified Agda.Syntax.Info as Info
 import Agda.Syntax.Position
 import Agda.Syntax.Common
 import Agda.Syntax.Literal (Literal(LitString))
+import Agda.Syntax.Translation.InternalToAbstract
 
 import Agda.Termination.CallGraph   as Term
 import qualified Agda.Termination.SparseMatrix as Term
@@ -35,23 +40,28 @@
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Reduce (reduce, normalise, instantiate, instantiateFull)
-import Agda.TypeChecking.Records (isRecordConstructor)
+import Agda.TypeChecking.Records (isRecordConstructor, isRecord, isInductiveRecord)
 import Agda.TypeChecking.Rules.Builtin.Coinduction
 import Agda.TypeChecking.Rules.Term (isType_)
-import Agda.TypeChecking.Substitute (abstract,raise,substs)
+import Agda.TypeChecking.Substitute (abstract,raise)
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.EtaContract
 import Agda.TypeChecking.Monad.Builtin
-import Agda.TypeChecking.Monad.Signature (isProjection)
+import Agda.TypeChecking.Monad.Signature (isProjection, mutuallyRecursive)
 import Agda.TypeChecking.Primitive (constructorForm)
 import Agda.TypeChecking.Level (reallyUnLevelView)
 import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.SizedTypes
 
 import qualified Agda.Interaction.Highlighting.Range as R
 import Agda.Interaction.Options
 
+import Agda.Utils.List
 import Agda.Utils.Size
-import Agda.Utils.Monad (thread, (<$>), ifM)
+import Agda.Utils.Monad ((<$>), mapM', forM', ifM)
+-- import Agda.Utils.NubList
+import Agda.Utils.Pointed
+import Agda.Utils.Permutation
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
@@ -60,12 +70,15 @@
 type MutualNames = [QName]
 
 -- | The result of termination checking a module.
-
+--   Must be 'Pointed' and a 'Monoid'.
 type Result = [TerminationError]
 
+-- use of a NubList did not achieve the desired effect, now unnecessary
+-- type Result = NubList TerminationError
+
 -- | Termination check a sequence of declarations.
 termDecls :: [A.Declaration] -> TCM Result
-termDecls ds = fmap concat $ mapM termDecl ds
+termDecls ds = concat <$> mapM termDecl ds
 
 -- | Termination check a single declaration.
 termDecl :: A.Declaration -> TCM Result
@@ -73,30 +86,27 @@
   setScope scope
   termDecls ds
 termDecl d = case d of
-    A.Axiom {}            -> return []
-    A.Field {}            -> return []
-    A.Primitive {}        -> return []
+    A.Axiom {}            -> return mempty
+    A.Field {}            -> return mempty
+    A.Primitive {}        -> return mempty
     A.Mutual _ ds
-      | [A.RecSig{}, A.RecDef _ r _ _ _ rds] <- unscopeDefs ds
-                          -> do
-        let m = mnameFromList $ qnameToList r
-        setScopeFromDefs ds
-        termSection m rds
-    A.Mutual i ds  -> termMutual i ds
+      | [A.RecSig{}, A.RecDef _ r _ _ _ _ rds] <- unscopeDefs ds
+                          -> checkRecDef ds r rds
+    A.Mutual i ds         -> termMutual i ds
     A.Section _ x _ ds    -> termSection x ds
-    A.Apply {}            -> return []
-    A.Import {}           -> return []
-    A.Pragma {}           -> return []
-    A.Open {}             -> return []
+    A.Apply {}            -> return mempty
+    A.Import {}           -> return mempty
+    A.Pragma {}           -> return mempty
+    A.Open {}             -> return mempty
         -- open is just an artifact from the concrete syntax
     A.ScopedDecl{}        -> __IMPOSSIBLE__
         -- taken care of above
+    A.RecSig{}            -> return mempty
+    A.RecDef _ r _ _ _ _ ds -> checkRecDef [] r ds
     -- These should all be wrapped in mutual blocks
     A.FunDef{}  -> __IMPOSSIBLE__
     A.DataSig{} -> __IMPOSSIBLE__
     A.DataDef{} -> __IMPOSSIBLE__
-    A.RecSig{}  -> __IMPOSSIBLE__
-    A.RecDef{}  -> __IMPOSSIBLE__
   where
     setScopeFromDefs = mapM_ setScopeFromDef
     setScopeFromDef (A.ScopedDecl scope d) = setScope scope
@@ -107,32 +117,36 @@
     unscopeDef (A.ScopedDecl _ ds) = unscopeDefs ds
     unscopeDef d = [d]
 
-collectCalls :: (a -> TCM Calls) -> [a] -> TCM Calls
-collectCalls f [] = return Term.empty
-collectCalls f (a : as) = do c1 <- f a
-                             c2 <- collectCalls f as
-                             return (c1 `Term.union` c2)
+    checkRecDef ds r rds = do
+      setScopeFromDefs ds
+      termSection (mnameFromList $ qnameToList r) rds
 
 -- | Termination check a bunch of mutually inductive recursive definitions.
-termMutual :: Info.DeclInfo -> [A.Declaration] -> TCM Result
-termMutual i ds = if names == [] then return [] else
-  do -- get list of sets of mutually defined names from the TCM
+termMutual :: Info.MutualInfo -> [A.Declaration] -> TCM Result
+termMutual i ds = if names == [] then return mempty else
+  -- we set the range to avoid panics when printing error messages
+  traceCall (SetRange (Info.mutualRange i)) $ do
+
+  mutualBlock <- findMutualBlock (head names)
+  let allNames = Set.elems mutualBlock
+
+  if not (Info.mutualTermCheck i) then do
+      reportSLn "term.warn.yes" 2 $ "Skipping termination check for " ++ show names
+      forM_ allNames $ \ q -> setTerminates q True -- considered terminating!
+      return mempty
+   else do
+     -- get list of sets of mutually defined names from the TCM
      -- this includes local and auxiliary functions introduced
      -- during type-checking
 
      cutoff <- optTerminationDepth <$> pragmaOptions
-     let ?cutoff = cutoff
+     let ?cutoff = cutoff -- needed for Term.terminates
 
      reportSLn "term.top" 10 $ "Termination checking " ++ show names ++
        " with cutoff=" ++ show cutoff ++ "..."
-     mutualBlock <- findMutualBlock (head names)
-     let allNames = Set.elems mutualBlock
 
-     -- collect all recursive calls in the block
-     let collect use = collectCalls (termDef use allNames) allNames
-
      -- Get the name of size suc (if sized types are enabled)
-     suc <- sizeSuc
+     suc <- sizeSucName
 
      -- The name of sharp (if available).
      sharp <- fmap nameOfSharp <$> coinductionKit
@@ -140,70 +154,143 @@
      guardingTypeConstructors <-
        optGuardingTypeConstructors <$> pragmaOptions
 
-     -- first try to termination check ignoring the dot patterns
      let conf = DBPConf
            { useDotPatterns           = False
            , guardingTypeConstructors = guardingTypeConstructors
            , withSizeSuc              = suc
            , sharp                    = sharp
+           , currentTarget            = Nothing
            }
+
+     -- new check currently only makes a difference for copatterns
+     -- since it is slow, only invoke it if --copatterns
+     res <- ifM (optCopatterns <$> pragmaOptions)
+       (forM' allNames $ termFunction conf names allNames) -- new check one after another
+       (termMutual' conf names allNames) -- old check, all at once
+
+     -- record result of termination check in signature
+     let terminates = null res
+     forM_ allNames $ \ q -> setTerminates q terminates
+     return res
+
+  where
+  getName (A.FunDef i x delayed cs) = [x]
+  getName (A.RecDef _ _ _ _ _ _ ds) = concatMap getName ds
+  getName (A.Mutual _ ds)       = concatMap getName ds
+  getName (A.Section _ _ _ ds)  = concatMap getName ds
+  getName (A.ScopedDecl _ ds)   = concatMap getName ds
+  getName _                     = []
+
+  -- the mutual names mentioned in the abstract syntax
+  names = concatMap getName ds
+
+
+-- | @termMutual' conf names allNames@ checks @allNames@ for termination.
+--
+--   @names@ is taken from the 'Abstract' syntax, so it contains only
+--   the names the user has declared.  This is for error reporting.
+--
+--   @allNames@ is taken from 'Internal' syntax, it contains also
+--   the definitions created by the type checker (e.g., with-functions).
+--
+termMutual' :: (?cutoff :: Int) => DBPConf -> [QName] -> MutualNames -> TCM Result
+termMutual' conf names allNames = do
+
+     -- collect all recursive calls in the block
+     let collect conf = mapM' (termDef conf allNames) allNames
+
+     -- first try to termination check ignoring the dot patterns
      calls1 <- collect conf{ useDotPatterns = False }
-     reportS "term.lex" 20 $ unlines
-       [ "Calls (no dot patterns): " ++ show calls1
-       ]
-     reportSDoc "term.behaviours" 20 $ vcat
-       [ text "Recursion behaviours (no dot patterns):"
-       , nest 2 $ return $ Term.prettyBehaviour (Term.complete calls1)
-       ]
-     reportSDoc "term.matrices" 30 $ vcat
-       [ text "Call matrices (no dot patterns):"
-       , nest 2 $ pretty $ Term.complete calls1
-       ]
-     r <- do let r = Term.terminates calls1
-             case r of
-               Right _ -> return r
-               Left _  -> do
-                 -- Try again, but include the dot patterns this time.
-                 calls2 <- collect conf{ useDotPatterns = True }
-                 reportS "term.lex" 20 $ unlines
-                   [ "Calls (dot patterns): " ++ show calls2
-                   ]
-                 reportSDoc "term.behaviours" 20 $ vcat
-                   [ text "Recursion behaviours (dot patterns):"
-                   , nest 2 $ return $
-                       Term.prettyBehaviour (Term.complete calls2)
-                   ]
-                 reportSDoc "term.matrices" 30 $ vcat
-                   [ text "Call matrices (dot patterns):"
-                   , nest 2 $ pretty $ Term.complete calls2
-                   ]
-                 return $ Term.terminates calls2
+     reportCalls "no " calls1
+
+     r <- case Term.terminates calls1 of
+            r@Right{} -> return r
+            Left{}    -> do
+              -- Try again, but include the dot patterns this time.
+              calls2 <- collect conf{ useDotPatterns = True }
+              reportCalls "" calls2
+              return $ Term.terminates calls2
      case r of
        Left calls -> do
-         return [TerminationError
+         return $ point $ TerminationError
                    { termErrFunctions = names
-                     -- TODO: This could be changed to allNames.
                    , termErrCalls     = Set.toList calls
                    }
-                ]
        Right _ -> do
          reportSLn "term.warn.yes" 2
                      (show (names) ++ " does termination check")
-         return []
+         return mempty
   where
-  getName (A.FunDef i x cs)       = [x]
-  getName (A.RecDef _ _ _ _ _ ds) = concatMap getName ds
-  getName (A.Mutual _ ds)       = concatMap getName ds
-  getName (A.Section _ _ _ ds)  = concatMap getName ds
-  getName (A.ScopedDecl _ ds)   = concatMap getName ds
-  getName _                     = []
 
-  -- the mutual names mentioned in the abstract syntax
-  names = concatMap getName ds
+reportCalls no calls = do
+   reportS "term.lex" 20 $ unlines
+     [ "Calls (" ++ no ++ "dot patterns): " ++ show calls
+     ]
+   reportSDoc "term.behaviours" 20 $ vcat
+     [ text $ "Recursion behaviours (" ++ no ++ "dot patterns):"
+     , nest 2 $ return $ Term.prettyBehaviour (Term.complete calls)
+     ]
+   reportSDoc "term.matrices" 30 $ vcat
+     [ text $ "Call matrices (" ++ no ++ "dot patterns):"
+     , nest 2 $ pretty $ Term.complete calls
+     ]
 
-  concat' :: Ord a => [Set a] -> [a]
-  concat' = Set.toList . Set.unions
+-- | @termFunction conf names allNames name@ checks @name@ for termination.
+--
+--   @names@ is taken from the 'Abstract' syntax, so it contains only
+--   the names the user has declared.  This is for error reporting.
+--
+--   @allNames@ is taken from 'Internal' syntax, it contains also
+--   the definitions created by the type checker (e.g., with-functions).
+--
+termFunction :: (?cutoff :: Int) => DBPConf -> [QName] -> MutualNames -> QName -> TCM Result
+termFunction conf0 names allNames name = do
 
+     let index = toInteger $ maybe __IMPOSSIBLE__ id $
+           List.elemIndex name allNames
+
+     conf <- do
+       r <- typeEndsInDef =<< typeOfConst name
+       reportTarget r
+       return $ conf0 { currentTarget = r }
+
+     -- collect all recursive calls in the block
+     let collect conf = mapM' (termDef conf allNames) allNames
+
+     -- first try to termination check ignoring the dot patterns
+     calls1 <- collect conf{ useDotPatterns = False }
+     reportCalls "no " calls1
+
+     r <- case Term.terminatesFilter (== index) calls1 of
+            r@Right{} -> return r
+            Left{}    -> do
+              -- Try again, but include the dot patterns this time.
+              calls2 <- collect conf{ useDotPatterns = True }
+              reportCalls "" calls2
+              return $ Term.terminatesFilter (== index) calls2
+     case r of
+       Left calls -> do
+         return $ point $ TerminationError
+                   { termErrFunctions = if name `elem` names then [name] else []
+                   , termErrCalls     = Set.toList calls
+                   }
+       Right _ -> do
+         reportSLn "term.warn.yes" 2
+                     (show (name) ++ " does termination check")
+         return mempty
+  where
+    reportTarget r = reportSLn "term.target" 20 $ maybe
+      ("  target type not recognized")
+      (\ q -> "  target type ends in " ++ show q)
+      r
+
+typeEndsInDef :: Type -> TCM (Maybe QName)
+typeEndsInDef t = do
+  TelV _ core <- telView t
+  case ignoreSharing $ unEl core of
+    Def d vs -> return $ Just d
+    _        -> return Nothing
+
 -- | Termination check a module.
 termSection :: ModuleName -> [A.Declaration] -> TCM Result
 termSection x ds = do
@@ -228,8 +315,8 @@
 	      , nest 2 $ text ":" <+> (prettyTCM $ defType def)
 	      ]
         case (theDef def) of
-          Function{ funClauses = cls } ->
-            collectCalls (termClause use names name) cls
+          Function{ funClauses = cls, funDelayed = delayed } ->
+            mapM' (termClause use names name delayed) cls
           _ -> return Term.empty
 
 
@@ -286,16 +373,45 @@
 
 {- | Configuration parameters to termination checker.
 -}
-data DBPConf = DBPConf { useDotPatterns           :: Bool
-                       , guardingTypeConstructors :: Bool
-                         -- ^ Do we assume that record and data type
-                         --   constructors preserve guardedness?
-                       , withSizeSuc              :: Maybe QName
-                       , sharp                    :: Maybe QName
-                         -- ^ The name of the sharp constructor, if
-                         --   any.
-                       }
+data DBPConf = DBPConf
+  { useDotPatterns           :: Bool
+  , guardingTypeConstructors :: Bool
+    -- ^ Do we assume that record and data type constructors preserve guardedness?
+  , withSizeSuc              :: Maybe QName
+  , sharp                    :: Maybe QName
+    -- ^ The name of the sharp constructor, if any.
+  , currentTarget            :: Maybe Target
+    -- ^ Target type of the function we are currently termination checking.
+    --   Only the constructors of 'Target' are considered guarding.
+  }
 
+type Target = QName
+
+targetElem :: DBPConf -> [Target] -> Bool
+targetElem conf ds = maybe False (`elem` ds) (currentTarget conf)
+
+{-
+-- | Check wether a 'Target" corresponds to the current one.
+matchingTarget :: DBPConf -> Target -> TCM Bool
+matchingTarget conf d = maybe (return True) (mutuallyRecursive d) (currentTarget conf)
+-}
+
+{-
+-- | The target type of the considered recursive definition.
+data Target
+  = Set        -- ^ Constructing a Set (only meaningful with 'guardingTypeConstructors').
+  | Data QName -- ^ Constructing a coinductive or mixed type (could be data or record).
+  deriving (Eq, Show)
+
+-- | Check wether a 'Target" corresponds to the current one.
+matchingTarget :: DBPConf -> Target -> TCM Bool
+matchingTarget conf t = maybe (return True) (match t) (currentTarget conf)
+  where
+    match Set      Set       = return True
+    match (Data d) (Data d') = mutuallyRecursive d d'
+    match _ _                = return False
+-}
+
 {- | Convert a term (from a dot pattern) to a DeBruijn pattern.
 -}
 
@@ -304,7 +420,7 @@
   | not $ useDotPatterns conf = return $ unusedVar
   | otherwise                 = do
     t <- stripProjections =<< constructorForm t
-    case t of
+    case ignoreSharing t of
       Var i []    -> return $ VarDBP i
       Con c args  -> ConDBP c <$> mapM (termToDBP conf . unArg) args
       Def s [arg]
@@ -326,6 +442,7 @@
       Inductive   -> ConDBP c <$> mapM (stripCoConstructors conf) args
       CoInductive -> return unusedVar
 
+{- Andreas, 2012-09-19 BAD CODE, RETIRED
 {- | stripBind i p b = Just (i', dbp, b')
 
   converts a pattern into a de Bruijn pattern
@@ -367,23 +484,67 @@
         Just (i2, dbps, b2) -> return $ Just (i2, dbp:dbps, b2)
         Nothing -> return Nothing
     Nothing -> return Nothing
+-}
 
+-- | cf. 'TypeChecking.Coverage.Match.buildMPatterns'
+openClause :: DBPConf -> Permutation -> [Pattern] -> ClauseBody -> TCM ([DeBruijnPat], Maybe Term)
+openClause conf perm ps body = do
+  -- invariant: xs has enough variables for the body
+  unless (permRange perm == genericLength xs) __IMPOSSIBLE__
+  dbps <- evalStateT (mapM build ps) xs
+  return . (dbps,) $ case body `apply` map (defaultArg . var) xs of
+    NoBody -> Nothing
+    Body v -> Just v
+    _      -> __IMPOSSIBLE__
+  where
+    -- length of the telescope
+    n    = size perm
+    -- the variables as a map from the body variables to the clause telescope
+    xs   = permute (invertP perm) $ downFrom (size perm)
+
+    tick = do x : xs <- get; put xs; return x
+
+    build :: Pattern -> StateT [Nat] TCM DeBruijnPat
+    build (VarP _)        = VarDBP <$> tick
+    build (ConP con _ ps) = ConDBP con <$> mapM (build . unArg) ps
+    build (DotP t)        = tick *> do lift $ termToDBP conf t
+    build (LitP l)        = return $ LitDBP l
+
+
 -- | Extract recursive calls from one clause.
-termClause :: DBPConf -> MutualNames -> QName -> Clause -> TCM Calls
-termClause use names name (Clause { clauseTel  = tel
-                                  , clausePerm = perm
-                                  , clausePats = argPats'
-                                  , clauseBody = body }) =
+termClause :: DBPConf -> MutualNames -> QName -> Delayed -> Clause -> TCM Calls
+termClause conf names name delayed
+    (Clause { clauseTel  = tel
+            , clausePerm = perm
+            , clausePats = argPats'
+            , clauseBody = body }) = do
+  reportSDoc "term.check.clause" 25 $ vcat
+    [ text "termClause"
+    , nest 2 $ text "tel      =" <+> prettyTCM tel
+    , nest 2 $ text ("perm     = " ++ show perm)
+    -- how to get the following right?
+    -- , nest 2 $ text "argPats' =" <+> do prettyA =<< reifyPatterns tel perm argPats'
+    ]
   addCtxTel tel $ do
+    ps <- normalise $ map unArg argPats'
+    (dbpats, res) <- openClause conf perm ps body
+    case res of
+       Nothing -> return Term.empty
+       Just t -> do
+          dbpats <- mapM (stripCoConstructors conf) dbpats
+          termTerm conf names name delayed dbpats t
+
+{-
+  addCtxTel tel $ do
     argPats' <- normalise argPats'
     -- The termination checker doesn't know about reordered telescopes
     let argPats = substs (renamingR perm) argPats'
-    dbs <- stripBinds use (nVars - 1) (map unArg argPats) body
+    dbs <- stripBinds conf (nVars - 1) (map unArg argPats) body
     case dbs of
        Nothing -> return Term.empty
        Just (-1, dbpats, Body t) -> do
-          dbpats <- mapM (stripCoConstructors use) dbpats
-          termTerm use names name dbpats t
+          dbpats <- mapM (stripCoConstructors conf) dbpats
+          termTerm conf names name delayed dbpats t
           -- note: convert dB levels into dB indices
        Just (n, dbpats, Body t) -> internalError $ "termClause: misscalculated number of vars: guess=" ++ show nVars ++ ", real=" ++ show (nVars - 1 - n)
        Just (n, dbpats, b)  -> internalError $ "termClause: not a Body" -- ++ show b
@@ -392,20 +553,35 @@
     boundVars (Bind b)   = 1 + boundVars (absBody b)
     boundVars NoBody     = 0
     boundVars (Body _)   = 0
+-}
 
 -- | Extract recursive calls from a term.
-termTerm :: DBPConf -> MutualNames -> QName -> [DeBruijnPat] -> Term -> TCM Calls
-termTerm conf names f pats0 t0 = do
+termTerm :: DBPConf -> MutualNames -> QName -> Delayed -> [DeBruijnPat] -> Term -> TCM Calls
+termTerm conf names f delayed pats0 t0 = do
  cutoff <- optTerminationDepth <$> pragmaOptions
  let ?cutoff = cutoff
  do
   reportSDoc "term.check.clause" 6
-    (sep [ text "termination checking clause of" <+> prettyTCM f
+    (sep [ text ("termination checking " ++
+             (if delayed == Delayed then "delayed " else "") ++ "clause of")
+           <+> prettyTCM f
          , nest 2 $ text "lhs:" <+> hsep (map prettyTCM pats0)
          , nest 2 $ text "rhs:" <+> prettyTCM t0
          ])
-  loop pats0 Term.le t0
+  {-
+  -- if we are checking a delayed definition, we treat it as if there were
+  -- a guarding coconstructor (sharp)
+  let guarded = case delayed of
+        Delayed    -> Term.lt
+        NotDelayed -> Term.le
+  -}
+  let guarded = Term.le -- not initially guarded
+  loop pats0 guarded t0
   where
+       -- only a delayed definition can be guarded
+       ifDelayed o | Term.decreasing o && delayed == NotDelayed = Term.le
+                   | otherwise                                  = o
+
        Just fInd = toInteger <$> List.elemIndex f names
 
        -- sorts can contain arb. terms of type Nat,
@@ -414,10 +590,18 @@
        -- a subgrammar of Term, then we would not need this boilerplate.
        loopSort :: (?cutoff :: Int) => [DeBruijnPat] -> Sort -> TCM Calls
        loopSort pats s = do
+         reportSDoc "term.sort" 20 $ text "extracting calls from sort" <+> prettyTCM s
+         reportSDoc "term.sort" 50 $ text ("s = " ++ show s)
+         -- s <- instantiateFull s -- Andreas, 2012-09-05 NOT NECESSARY
+         -- instantiateFull resolves problems with reallyUnLevelView
+         -- in the absense of level built-ins.
+         -- However, the termination checker should only receive terms
+         -- that are already fully instantiated.
+
          case s of
            Type (Max [])              -> return Term.empty
            Type (Max [ClosedLevel _]) -> return Term.empty
-           Type t -> loop pats Term.unknown (Level t)
+           Type t -> loop pats Term.unknown (Level t) -- no guarded levels
            Prop   -> return Term.empty
            Inf    -> return Term.empty
            DLub s1 (NoAbs x s2) -> Term.union <$> loopSort pats s1 <*> loopSort pats s2
@@ -438,7 +622,6 @@
          -> TCM Calls
        loop pats guarded t = do
          t <- instantiate t          -- instantiate top-level MetaVar
-         suc <- sizeSuc
 
              -- Handles constructor applications.
          let constructor
@@ -453,7 +636,7 @@
                   --   argument should be viewed as preserving
                   --   guardedness.
                -> TCM Calls
-             constructor c ind args = collectCalls loopArg args
+             constructor c ind args = mapM' loopArg args
                where
                loopArg (arg , preserves) = do
                  loop pats g' (unArg arg)
@@ -469,22 +652,22 @@
                args2 <- mapM instantiateFull args1
 
                -- We have to reduce constructors in case they're reexported.
-               let reduceCon (Con c vs) = (`apply` vs) <$> reduce (Con c [])  -- make sure we don't reduce the arguments
-                   reduceCon t          = return t
+               let reduceCon t = case ignoreSharing t of
+                      Con c vs -> (`apply` vs) <$> reduce (Con c [])  -- make sure we don't reduce the arguments
+                      _        -> return t
                args2 <- mapM reduceCon args2
                args  <- mapM etaContract args2
 
                -- If the function is a projection, then preserve guardedness
                -- for its principal argument.
-               isProj <- isProjection g
+               isProj <- isProjectionButNotFlat g
                let unguards = repeat Term.unknown
-               let guards = maybe unguards -- not a proj. ==> unguarded
-                              (\ _ -> guarded : unguards)
-                                -- proj. => preserve g. of princ. arg. (counting starts with 1)
-                              isProj
+               let guards = if isProj then guarded : unguards
+                                           -- proj => preserve guardedness of principal argument
+                                      else unguards -- not a proj ==> unguarded
                -- collect calls in the arguments of this call
-               calls <- collectCalls (uncurry (loop pats)) (zip guards args)
-               -- calls <- collectCalls (loop pats Term.unknown) args
+               calls <- mapM' (uncurry (loop pats)) (zip guards args)
+               -- calls <- mapM' (loop pats Term.unknown) args
 
 
                reportSDoc "term.found.call" 20
@@ -501,8 +684,9 @@
                   -- call is to one of the mutally recursive functions
                   Just gInd' -> do
 
-                     matrix <- compareArgs suc pats args
-                     let (nrows, ncols, matrix') = addGuardedness guarded
+                     matrix <- compareArgs (withSizeSuc conf) pats args
+                     let (nrows, ncols, matrix') = addGuardedness
+                            (ifDelayed guarded)  -- only delayed defs can be guarded
                             (genericLength args) -- number of rows
                             (genericLength pats) -- number of cols
                             matrix
@@ -530,58 +714,76 @@
                          calls)
 
 
-         case t of
+         case ignoreSharing t of
 
             -- Constructed value.
             Con c args
               | Just c == sharp conf ->
                 constructor c CoInductive $ zip args (repeat True)
-              | otherwise ->
-                constructor c Inductive $ zip args (repeat True)
+              | otherwise -> do
+                -- If we encounter a coinductive record constructor
+                -- in a type mutual with the current target
+                -- then we count it as guarding.
+                ind <- do
+                  r <- isRecordConstructor c
+                  case r of
+                    Nothing       -> return Inductive
+                    Just (q, def) -> return . (\ b -> if b then CoInductive else Inductive) $
+                      and [ recRecursive def
+                          , recInduction def == CoInductive
+                          , targetElem conf (q : recMutual def)
+                          ]
+                constructor c ind $ zip args (repeat True)
 
             Def g args0
               | guardingTypeConstructors conf -> do
-                gDef <- theDef <$> getConstInfo g
-                case gDef of
+                def <- getConstInfo g
+                let occs = defArgOccurrences def
+                case theDef def of
+{-
                   Datatype {dataArgOccurrences = occs} -> con occs
                   Record   {recArgOccurrences  = occs} -> con occs
-                  _                                    -> fun
+-}
+                  Datatype{} -> con occs
+                  Record{}   -> con occs
+                  _          -> fun
               | otherwise -> fun
               where
               -- Data or record type constructor.
               con occs =
                 constructor g Inductive $   -- guardedness preserving
-                -- constructor g CoInductive $ -- guarding! (Andreas, 2011-04-10) -- does not work, might lead to infinite unfolding in eq. checking (Ripley!)
                   zip args0 (map preserves occs ++ repeat False)
                 where
-                preserves Positive = True
-                preserves Negative = False
+                preserves = (StrictPos <=)   -- everything which is at least strictly positive
+{- SPELLED OUT, this means:
                 preserves Unused   = True
+                preserves GuardPos = True
+                preserves StrictPos = True
+                preserves Mixed = False
+-}
 
               -- Call to defined function.
               fun = function g args0
 
             -- Abstraction. Preserves guardedness.
-            Lam h (Abs x t) -> addCtxString x (Arg { argHiding    = h
-                                                   , argRelevance = __IMPOSSIBLE__
-                                                   , unArg        = __IMPOSSIBLE__
-                                                   }) $
+            Lam h (Abs x t) -> addCtxString_ x $
               loop (map liftDBP pats) guarded t
             Lam h (NoAbs _ t) -> loop pats guarded t
 
             -- Neutral term. Destroys guardedness.
-            Var i args -> collectCalls (loop pats Term.unknown) (map unArg args)
+            Var i args -> mapM' (loop pats Term.unknown) (map unArg args)
 
             -- Dependent function space.
             Pi a (Abs x b) ->
-               do g1 <- loopType pats Term.unknown (unArg a)
+               do g1 <- loopType pats Term.unknown (unDom a)
+                  a  <- maskSizeLt a
                   g2 <- addCtxString x a $
                         loopType (map liftDBP pats) piArgumentGuarded b
                   return $ g1 `Term.union` g2
 
             -- Non-dependent function space.
             Pi a (NoAbs _ b) ->
-               do g1 <- loopType pats Term.unknown (unArg a)
+               do g1 <- loopType pats Term.unknown (unDom a)
                   g2 <- loopType pats piArgumentGuarded b
                   return $ g1 `Term.union` g2
 
@@ -599,18 +801,37 @@
             DontCare t -> loop pats guarded t
 
             -- Level.
-            Level l -> loop pats guarded =<< reallyUnLevelView l
+            Level l -> do
+              l <- catchError (reallyUnLevelView l) $ const $ internalError $
+                "Termination checker: cannot view level expression, " ++
+                "probably due to missing level built-ins."
+              loop pats guarded l
 
+            Shared{} -> __IMPOSSIBLE__
+
          where
          -- Should function and Π type constructors be treated as
          -- preserving guardedness in their right arguments?
          piArgumentGuarded =
            if guardingTypeConstructors conf then
              guarded   -- preserving guardedness
-             -- Term.lt      -- guarding! (Andreas, 2011-04-10)  -- SEE ABOVE
             else
              Term.unknown
 
+-- | Rewrite type @tel -> Size< u@ to @tel -> Size@.
+maskSizeLt :: Dom Type -> TCM (Dom Type)
+maskSizeLt dom@(Dom h r a) = do
+  (msize, msizelt) <- getBuiltinSize
+  case (msize, msizelt) of
+    (_ , Nothing) -> return dom
+    (Nothing, _)  -> __IMPOSSIBLE__
+    (Just size, Just sizelt) -> do
+      TelV tel c <- telView a
+      case ignoreSharingType a of
+        El s (Def d [v]) | d == sizelt -> return $ Dom h r $
+          abstract tel $ El s $ Def size []
+        _ -> return dom
+
 {- | compareArgs suc pats ts
 
      compare a list of de Bruijn patterns (=parameters) @pats@
@@ -644,21 +865,9 @@
 
 -- | Stripping off a record constructor is not counted as decrease, in
 --   contrast to a data constructor.
-decreaseFromConstructor :: QName -> TCM Order
-decreaseFromConstructor c = do
-  isRC <- isRecordConstructor c
-  return $ if isRC then Term.le else Term.lt
-
-increaseFromConstructor :: (?cutoff :: Int) => QName -> TCM Order
-increaseFromConstructor c = do
-  isRC <- isRecordConstructor c
-  return $ if isRC then Term.le else Term.decr (-1)
-
-{-
-increaseFromConstructor c = negateOrder <$> decreaseFromConstructor c
-  where negateOrder (Decr k) = Decr (- k)
-        negateOrder _ = __IMPOSSIBLE__
--}
+--   A record constructor increases/decreases by 0, a data constructor by 1.
+offsetFromConstructor :: QName -> TCM Int
+offsetFromConstructor c = maybe 1 (const 0) <$> isRecordConstructor c
 
 -- | Compute the sub patterns of a 'DeBruijnPat'.
 subPatterns :: DeBruijnPat -> [DeBruijnPat]
@@ -678,16 +887,33 @@
     cmp p' = (Term..*.) Term.lt (compareTerm' t p')
 -}
 
+-- | For termination checking purposes flat should not be considered a
+--   projection. That is, it flat doesn't preserve either structural order
+--   or guardedness like other projections do.
+--   Andreas, 2012-06-09: the same applies to projections of recursive records.
+isProjectionButNotFlat :: QName -> TCM Bool
+isProjectionButNotFlat qn = do
+  flat <- fmap nameOfFlat <$> coinductionKit
+  if Just qn == flat
+    then return False
+    else do
+      mp <- isProjection qn
+      case mp of
+        Nothing     -> return False
+        Just (r, _) -> isInductiveRecord r
+
+
 -- | Remove projections until a term is no longer a projection.
 --   Also, remove 'DontCare's.
 stripProjections :: Term -> TCM Term
-stripProjections (DontCare t) = stripProjections t
-stripProjections t@(Def qn ts@(~(r : _))) = do
-  isProj <- isProjection qn
-  case isProj of
-    Just{} | not (null ts) -> stripProjections $ unArg r
-    _ -> return t
-stripProjections t = return t
+stripProjections t = case ignoreSharing t of
+  DontCare t -> stripProjections t
+  Def qn ts@(~(r : _)) -> do
+    isProj <- isProjectionButNotFlat qn
+    case isProj of
+      True | not (null ts) -> stripProjections $ unArg r
+      _ -> return t
+  _ -> return t
 
 -- | Remove all projections from an algebraic term (not going under binders).
 class StripAllProjections a where
@@ -702,62 +928,41 @@
 instance StripAllProjections Term where
   stripAllProjections t = do
     t <- stripProjections t
-    case t of
+    case ignoreSharing t of
       Con c ts -> Con c <$> stripAllProjections ts
       Def d ts -> Def d <$> stripAllProjections ts
       _ -> return t
 
-{-
--- | Remove all projections from an algebraic term (not going under binders).
-stripAllProjections :: Term -> TCM Term
-stripAllProjections t = do
-  t <- stripProjections t
-  case t of
-    Con c ts -> Con c <$> mapM stripAllProjections ts
-    Def d ts -> Def d <$> mapM stripAllProjections ts
-    _ -> return t
--}
-
 -- | compareTerm t dbpat
 --   Precondition: top meta variable resolved
 compareTerm' :: (?cutoff :: Int) => Maybe QName -> Term -> DeBruijnPat -> TCM Term.Order
-compareTerm' _ (Var i _)      p = compareVar i p
+compareTerm' suc (Shared x)   p = compareTerm' suc (derefPtr x) p
+compareTerm' suc (Var i _)    p = compareVar suc i p
 compareTerm' suc (DontCare t) p = compareTerm' suc t p
 compareTerm' _ (Lit l)    (LitDBP l')
   | l == l'   = return Term.le
   | otherwise = return Term.unknown
 compareTerm' suc (Lit l) p = do
   t <- constructorForm (Lit l)
-  case t of
+  case ignoreSharing t of
     Lit _ -> return Term.unknown
     _     -> compareTerm' suc t p
 -- Andreas, 2011-04-19 give subterm priority over matrix order
 compareTerm' _ t@Con{} (ConDBP c ps)
-  | any (isSubTerm t) ps = decreaseFromConstructor c
+  | any (isSubTerm t) ps = decrease <$> offsetFromConstructor c <*> return Term.le
 compareTerm' suc (Con c ts) (ConDBP c' ps)
   | c == c' = compareConArgs suc ts ps
 compareTerm' suc (Def s ts) (ConDBP s' ps)
   | s == s' && Just s == suc = compareConArgs suc ts ps
 -- new cases for counting constructors / projections
 -- register also increase
-compareTerm' suc (Def s ts) p | Just s == suc = do
-    os <- mapM (\ t -> compareTerm' suc (unArg t) p) ts
-    return $ decr (-1) .*. infimum os
-{- Andreas 2011-07-07 Projections are now being removed in a preprocess
--- projections are size preserving
-compareTerm' suc (Def qn ts) p = do
-    isProj <- isProjection qn
-    case isProj of
-      -- strip off projection (n is the number of the record argument, counting starts with 1)
-      Just n | length ts >= n && n >= 1 ->
-        compareTerm' suc (unArg (ts !! (n - 1))) p
-      -- not a projection or underapplied:
-      _ -> return Term.unknown
--}
+compareTerm' suc (Def s [t]) p | Just s == suc = do
+    -- Andreas, 2012-10-19 do not cut off here
+    increase 1 <$> compareTerm' suc (unArg t) p
+compareTerm' suc (Con c []) p = return Term.le
 compareTerm' suc (Con c ts) p = do
-    os <- mapM (\ t -> compareTerm' suc (unArg t) p) ts
-    oc <- increaseFromConstructor c
-    return $ if (null os) then Term.unknown else oc .*. infimum os
+    increase <$> offsetFromConstructor c
+             <*> (infimum <$> mapM (\ t -> compareTerm' suc (unArg t) p) ts)
 compareTerm' suc t p | isSubTerm t p = return Term.le
 compareTerm' _ _ _ = return Term.unknown
 
@@ -765,6 +970,7 @@
 isSubTerm :: Term -> DeBruijnPat -> Bool
 isSubTerm t p = equal t p || properSubTerm t p
   where
+    equal (Shared p) dbp = equal (derefPtr p) dbp
     equal (Con c ts) (ConDBP c' ps) =
       and $ (c == c')
           : (length ts == length ps)
@@ -797,11 +1003,19 @@
        -- allows examples like (x, y) < (Succ x, y)
 -}
 
-compareVar :: (?cutoff :: Int) => Nat -> DeBruijnPat -> TCM Term.Order
-compareVar i (VarDBP j)    = return $ if i == j then Term.le else Term.unknown
-compareVar i (LitDBP _)    = return $ Term.unknown
-compareVar i (ConDBP c ps) = do
-  os <- mapM (compareVar i) ps
-  let o = Term.supremum os
-  oc <- decreaseFromConstructor c
-  return $ (Term..*.) oc o
+compareVar :: (?cutoff :: Int) => Maybe QName -> Nat -> DeBruijnPat -> TCM Term.Order
+compareVar suc i (VarDBP j)    = compareVarVar suc i j
+compareVar suc i (LitDBP _)    = return $ Term.unknown
+compareVar suc i (ConDBP c ps) = do
+  decrease <$> offsetFromConstructor c
+           <*> (Term.supremum <$> mapM (compareVar suc i) ps)
+
+-- | Compare two variables
+compareVarVar :: (?cutoff :: Int) => Maybe QName -> Nat -> Nat -> TCM Term.Order
+compareVarVar suc i j
+  | i == j    = return Term.le
+  | otherwise = do
+      res <- isBounded i
+      case res of
+        BoundedNo  -> return Term.unknown
+        BoundedLt v -> decrease 1 <$> compareTerm' suc v (VarDBP j)
diff --git a/src/full/Agda/Termination/Termination.hs b/src/full/Agda/Termination/Termination.hs
--- a/src/full/Agda/Termination/Termination.hs
+++ b/src/full/Agda/Termination/Termination.hs
@@ -9,24 +9,27 @@
 
 module Agda.Termination.Termination
   ( terminates
+  , terminatesFilter
   , Agda.Termination.Termination.tests
   ) where
 
 import Agda.Termination.Lexicographic
 import Agda.Termination.CallGraph
 import Agda.Termination.SparseMatrix
+
 import Agda.Utils.Either
 import Agda.Utils.TestHelpers
-import Control.Arrow
 import Agda.Utils.QuickCheck
-import qualified Data.Set as Set
+
+import Control.Arrow
+
+import Data.Array (Array)
 import qualified Data.Array as Array
 import Data.Set (Set)
 import qualified Data.Set as Set
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.Monoid
-import Data.Array (Array)
 
 -- | TODO: This comment seems to be partly out of date.
 --
@@ -56,6 +59,11 @@
 terminates cs = let ccs = complete cs
                 in
                   checkIdems $ toList ccs
+
+terminatesFilter :: (Ord meta, Monoid meta, ?cutoff :: Int) =>
+  (Index -> Bool) -> CallGraph meta -> Either meta ()
+terminatesFilter f cs = checkIdems $ filter f' $ toList $ complete cs
+  where f' (c,m) = f (source c) && f (target c)
 
 checkIdems :: (Ord meta, Monoid meta, ?cutoff :: Int) => [(Call,meta)] -> Either meta ()
 checkIdems [] = Right ()
diff --git a/src/full/Agda/Tests.hs b/src/full/Agda/Tests.hs
--- a/src/full/Agda/Tests.hs
+++ b/src/full/Agda/Tests.hs
@@ -18,15 +18,18 @@
 import Agda.Termination.Matrix                as TermMatrix (tests)
 import Agda.Termination.Semiring	      as TermRing   (tests)
 import Agda.Termination.SparseMatrix          as TermSparse (tests)
+import Agda.TypeChecking.Irrelevance          as Irrel      (tests)
 import Agda.TypeChecking.Tests                as TypeChck   (tests)
 import Agda.Utils.Either	              as UtilEith   (tests)
 import Agda.Utils.FileName                    as UtilFile   (tests)
+import Agda.Utils.Graph                       as UtilGrap   (tests)
 import Agda.Utils.List                        as UtilList   (tests)
 import Agda.Utils.Warshall                    as UtilWarsh  (tests)
 
 testSuite :: IO Bool
 testSuite = runTests "QuickCheck test suite:"
-  [ CompEnco.tests
+  [ Irrel.tests
+  , CompEnco.tests
   , InteEmac.tests
   , InteGene.tests
   , IntePrec.tests
@@ -43,6 +46,7 @@
   , TypeChck.tests
   , UtilEith.tests
   , UtilFile.tests
+  , UtilGrap.tests
   , UtilList.tests
   , UtilWarsh.tests
   ]
diff --git a/src/full/Agda/TypeChecking/Abstract.hs b/src/full/Agda/TypeChecking/Abstract.hs
--- a/src/full/Agda/TypeChecking/Abstract.hs
+++ b/src/full/Agda/TypeChecking/Abstract.hs
@@ -14,7 +14,7 @@
 piAbstractTerm :: Term -> Type -> Type -> Type
 piAbstractTerm v a b = fun a (abstractTerm v b)
   where
-    fun a b = El s $ Pi (Arg NotHidden Relevant a) $ mkAbs "w" b
+    fun a b = El s $ Pi (Dom NotHidden Relevant a) $ mkAbs "w" b
       where s = (sLub `on` getSort) a b
 
 class AbstractTerm a where
@@ -34,9 +34,13 @@
     Sort s      -> Sort $ absT s
     MetaV m vs  -> MetaV m $ absT vs
     DontCare mv -> DontCare $ absT mv
+    Shared p    -> Shared $ absT p
     where
       absT x = abstractTerm u x
 
+instance AbstractTerm a => AbstractTerm (Ptr a) where
+  abstractTerm u = fmap (abstractTerm u)
+
 instance AbstractTerm Type where
   abstractTerm u (El s v) = El (abstractTerm u s) (abstractTerm u v)
 
@@ -65,19 +69,21 @@
 instance AbstractTerm a => AbstractTerm (Arg a) where
   abstractTerm = fmap . abstractTerm
 
+instance AbstractTerm a => AbstractTerm (Dom a) where
+  abstractTerm = fmap . abstractTerm
+
 instance AbstractTerm a => AbstractTerm [a] where
   abstractTerm = fmap . abstractTerm
 
 instance AbstractTerm a => AbstractTerm (Maybe a) where
   abstractTerm = fmap . abstractTerm
 
-instance (Raise a, AbstractTerm a) => AbstractTerm (Abs a) where
+instance (Subst a, AbstractTerm a) => AbstractTerm (Abs a) where
   abstractTerm u (NoAbs x v) = NoAbs x $ abstractTerm u v
-  abstractTerm u (Abs   x v) = Abs x $ rename swap $ abstractTerm (raise 1 u) v
+  abstractTerm u (Abs   x v) = Abs x $ applySubst swap $ abstractTerm (raise 1 u) v
     where
-      swap 0 = 1
-      swap 1 = 0
-      swap i = i
+      -- This swaps var 0 and var 1 (we hope)
+      swap = var 1 :# liftS 1 (raiseS 1)
 
 instance (AbstractTerm a, AbstractTerm b) => AbstractTerm (a, b) where
   abstractTerm u (x, y) = (abstractTerm u x, abstractTerm u y)
diff --git a/src/full/Agda/TypeChecking/CompiledClause.hs b/src/full/Agda/TypeChecking/CompiledClause.hs
--- a/src/full/Agda/TypeChecking/CompiledClause.hs
+++ b/src/full/Agda/TypeChecking/CompiledClause.hs
@@ -1,24 +1,33 @@
-{-# LANGUAGE TypeOperators, CPP, DeriveDataTypeable, DeriveFunctor #-}
+{-# LANGUAGE TypeOperators, CPP, DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable #-}
 module Agda.TypeChecking.CompiledClause where
 
 import qualified Data.Map as Map
 import Data.Map (Map)
 import Data.Monoid
-import Data.Generics
+import Data.Typeable (Typeable)
+import Data.Foldable (Foldable)
+import Data.Traversable (Traversable)
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.Syntax.Literal
+
 import Agda.Utils.Pretty
+import Agda.Utils.Impossible
+#include "../undefined.h"
 
 type key :-> value = Map key value
 
-data Case c = Branches { conBranches    :: QName   :-> c
-                       , litBranches    :: Literal :-> c
-                       , catchAllBranch :: Maybe c
-                       }
-  deriving (Typeable, Data, Functor)
+data WithArity c = WithArity { arity :: Int, content :: c }
+  deriving (Typeable, Functor, Foldable, Traversable)
 
+data Case c = Branches
+  { conBranches    :: QName :-> WithArity c -- ^ Map from constructor names to their arity and the case subtree
+  , litBranches    :: Literal :-> c         -- ^ Map from literal to case subtree
+  , catchAllBranch :: Maybe c               -- ^ (Possibly additional) catch-all clause
+  }
+  deriving (Typeable, Functor, Foldable, Traversable)
+
 data CompiledClauses
   = Case Int (Case CompiledClauses)
     -- ^ @Case n bs@ stands for a match on the @n@-th argument
@@ -30,12 +39,19 @@
     --   still reduce.
   | Fail
     -- ^ Absurd case.
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
+emptyBranches = Branches Map.empty Map.empty Nothing
 litCase l x = Branches Map.empty (Map.singleton l x) Nothing
 conCase c x = Branches (Map.singleton c x) Map.empty Nothing
 catchAll x  = Branches Map.empty Map.empty (Just x)
 
+instance Monoid c => Monoid (WithArity c) where
+ mempty = WithArity __IMPOSSIBLE__ mempty
+ mappend (WithArity n1 c1) (WithArity n2 c2)
+  | n1 == n2  = WithArity n1 $ mappend c1 c2
+  | otherwise = __IMPOSSIBLE__   -- arity must match!
+
 instance Monoid m => Monoid (Case m) where
   mempty = Branches Map.empty Map.empty Nothing
   mappend (Branches cs  ls  m)
@@ -49,6 +65,9 @@
 instance Show CompiledClauses where
   show = show . pretty
 
+instance Pretty a => Pretty (WithArity a) where
+  pretty = pretty . content
+
 instance Pretty a => Pretty (Case a) where
   prettyPrec p (Branches cs ls m) =
     mparens (p > 0) $ vcat $
@@ -61,7 +80,7 @@
              | (x, v) <- Map.toList m ]
 
 instance Pretty CompiledClauses where
-  pretty (Done hs t)  = text ("done" ++ show hs) <+> text (show t)
+  pretty (Done hs t) = text ("done" ++ show hs) <+> text (show t)
   pretty Fail        = text "fail"
   pretty (Case n bs) =
     sep [ text ("case " ++ show n ++ " of")
diff --git a/src/full/Agda/TypeChecking/CompiledClause/Compile.hs b/src/full/Agda/TypeChecking/CompiledClause/Compile.hs
--- a/src/full/Agda/TypeChecking/CompiledClause/Compile.hs
+++ b/src/full/Agda/TypeChecking/CompiledClause/Compile.hs
@@ -3,41 +3,102 @@
 
 import Data.Monoid
 import qualified Data.Map as Map
-import Data.List (genericReplicate, nubBy)
+import Data.List (genericReplicate, nubBy, findIndex)
 import Data.Function
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.TypeChecking.CompiledClause
+import Agda.TypeChecking.Coverage
+import Agda.TypeChecking.Coverage.SplitTree
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.RecordPatterns
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Pretty
-import Agda.Utils.List
 
+import Agda.Utils.List
 import Agda.Utils.Impossible
 #include "../../undefined.h"
 
+-- | Process function clauses into case tree.
+--   This involves:
+--   1. Coverage checking, generating a split tree.
+--   2. Translation of lhs record patterns into rhs uses of projection.
+--      Update the split tree.
+--   3. Generating a case tree from the split tree.
+--   Phases 1. and 2. are skipped if @Nothing@.
 compileClauses ::
-  Bool -- ^ Translate record patterns?
+  Maybe (QName, Type) -- ^ Translate record patterns and coverage check with given type?
   -> [Clause] -> TCM CompiledClauses
-compileClauses translate cs = do
-  cs <- if translate then
-          mapM translateRecordPatterns cs
-         else
-          return cs
-  return $ compile [(clausePats c, clauseBody c) | c <- cs]
+compileClauses mt cs = do
+  let cls = [(clausePats c, clauseBody c) | c <- cs]
+  case mt of
+    Nothing -> return $ compile cls
+    Just (q, t)  -> do
+      splitTree <- coverageCheck q t cs
+  {-
+      splitTree <- translateSplitTree splitTree
+      reportSDoc "tc.cc.splittree" 10 $ vcat
+        [ text "translated split tree for" <+> prettyTCM q
+        , text $ show splitTree
+        ]
+  -}
+      -- cs <- mapM translateRecordPatterns cs
+      reportSDoc "tc.cc" 50 $ do
+        sep [ text "clauses before compilation"
+            , (nest 2 . text . show) cs
+            ] -- ++ map (nest 2 . text . show) cs
+      let cc = compileWithSplitTree splitTree cls
+      reportSDoc "tc.cc" 12 $ sep
+        [ text "compiled clauses (still containing record splits)"
+        , nest 2 $ text (show cc)
+        ]
+      cc <- translateCompiledClauses cc
+      return cc
 
 type Cl  = ([Arg Pattern], ClauseBody)
 type Cls = [Cl]
 
+compileWithSplitTree :: SplitTree -> Cls -> CompiledClauses
+compileWithSplitTree t cs = case t of
+  SplitAt i ts ->
+    -- the coverage checker does not count dot patterns as variables
+    -- in case trees however, they count as variable patterns
+    let n = i -- countInDotPatterns i cs
+    in  Case n $ compiles ts $ splitOn n cs
+  SplittingDone n -> compile cs
+    -- after end of split tree, continue with left-to-right strategy
+
+  where
+
+    compiles :: SplitTrees -> Case Cls -> Case CompiledClauses
+    compiles ts br@Branches{ conBranches = cons
+                           , litBranches = lits
+                           , catchAllBranch = Nothing }
+      | Map.null lits = emptyBranches { conBranches = updCons cons }
+      where
+        updCons = Map.mapWithKey $ \ c cl -> case lookup c ts of
+                    Nothing -> __IMPOSSIBLE__
+                    Just t  -> fmap (compileWithSplitTree t) cl
+    compiles ts br    = fmap compile br
+
+    -- increase split index by number of dot patterns we have skipped
+    countInDotPatterns :: Int -> [Cl] -> Int
+    countInDotPatterns i [] = __IMPOSSIBLE__
+    countInDotPatterns i ((ps, _) : _) = i + loop i (map unArg ps) where
+      loop 0 ps            = 0
+      loop i []            = __IMPOSSIBLE__
+      loop i (DotP{} : ps) = 1 + loop i ps
+      loop i (_      : ps) = loop (i - 1) ps
+
+
 compile :: Cls -> CompiledClauses
 compile cs = case nextSplit cs of
   Just n  -> Case n $ fmap compile $ splitOn n cs
   Nothing -> case map getBody cs of
     -- It's possible to get more than one clause here due to
     -- catch-all expansion.
-    Just t : _  -> Done (map (fmap name) $ fst $ head cs) t
+    Just t : _  -> Done (map (fmap name) $ fst $ head cs) (shared t)
     Nothing : _ -> Fail
     []          -> __IMPOSSIBLE__
   where
@@ -50,9 +111,12 @@
     body (Body t)   = Just t
     body NoBody     = Nothing
 
+-- | Get the index of the next argument we need to split on.
+--   This the number of the first pattern that does a match in the first clause.
 nextSplit :: Cls -> Maybe Int
-nextSplit [] = __IMPOSSIBLE__
-nextSplit ((ps, _):_) = mhead [ n | (a, n) <- zip ps [0..], isPat (unArg a) ]
+nextSplit []          = __IMPOSSIBLE__
+nextSplit ((ps, _):_) = findIndex isPat $ map unArg ps
+  -- OLD, IDENTICAL: mhead [ n | (a, n) <- zip ps [0..], isPat (unArg a) ]
   where
     isPat VarP{} = False
     isPat DotP{} = False
@@ -64,7 +128,7 @@
 
 splitC :: Int -> Cl -> Case Cl
 splitC n (ps, b) = case unArg p of
-  ConP c _ qs -> conCase c (ps0 ++ qs ++ ps1, b)
+  ConP c _ qs -> conCase c $ WithArity (length qs) (ps0 ++ qs ++ ps1, b)
   LitP l      -> litCase l (ps0 ++ ps1, b)
   _           -> catchAll (ps, b)
   where
@@ -99,7 +163,7 @@
       case q of
         ConP c _ qs' -> (ps0 ++ [defaultArg $ ConP c Nothing (genericReplicate m $ defaultArg $ VarP "_")] ++ ps1,
                          substBody n' m (Con c (map var [m - 1, m - 2..0])) b)
-          where m = fromIntegral $ length qs'
+          where m = length qs'
         LitP l -> (ps0 ++ [defaultArg $ LitP l] ++ ps1, substBody n' 0 (Lit l) b)
         _ -> __IMPOSSIBLE__
       where
@@ -114,10 +178,10 @@
 
         var x = defaultArg $ Var x []
 
-substBody :: Int -> Integer -> Term -> ClauseBody -> ClauseBody
+substBody :: Int -> Int -> Term -> ClauseBody -> ClauseBody
 substBody _ _ _ NoBody = NoBody
 substBody 0 m v b = case b of
-  Bind   b -> foldr (.) id (genericReplicate m (Bind . Abs "_")) $ subst v (absBody $ raise m b)
+  Bind   b -> foldr (.) id (replicate m (Bind . Abs "_")) $ subst v (absBody $ raise m b)
   _        -> __IMPOSSIBLE__
 substBody n m v b = case b of
   Bind b   -> Bind $ fmap (substBody (n - 1) m v) b
diff --git a/src/full/Agda/TypeChecking/CompiledClause/Compile.hs-boot b/src/full/Agda/TypeChecking/CompiledClause/Compile.hs-boot
--- a/src/full/Agda/TypeChecking/CompiledClause/Compile.hs-boot
+++ b/src/full/Agda/TypeChecking/CompiledClause/Compile.hs-boot
@@ -4,4 +4,4 @@
 import Agda.TypeChecking.CompiledClause
 import Agda.TypeChecking.Monad.Base
 
-compileClauses :: Bool -> [Clause] -> TCM CompiledClauses
+compileClauses :: Maybe (QName, Type) -> [Clause] -> TCM CompiledClauses
diff --git a/src/full/Agda/TypeChecking/CompiledClause/Match.hs b/src/full/Agda/TypeChecking/CompiledClause/Match.hs
--- a/src/full/Agda/TypeChecking/CompiledClause/Match.hs
+++ b/src/full/Agda/TypeChecking/CompiledClause/Match.hs
@@ -29,14 +29,15 @@
 match :: CompiledClauses -> MaybeReducedArgs -> (Args -> Args) -> Stack -> TCM (Reduced (Blocked Args) Term)
 match Fail args patch stack = return $ NoReduction $ NotBlocked (patch $ map ignoreReduced args)
 match (Done xs t) args _ _
-  | m < n     = return $ YesReduction $ substs (reverse $ toTm args)
+  | m < n     = return $ YesReduction $ applySubst (parallelS $ reverse $ toTm args)
                                       $ foldr lam t (drop m xs)
-  | otherwise = return $ YesReduction $ substs (reverse $ toTm args0) t `apply` map ignoreReduced args1
+  | otherwise = return $ YesReduction $
+                  applySubst (parallelS $ reverse $ toTm args0) t `apply` map ignoreReduced args1
   where
     n              = length xs
     m              = length args
     toTm           = map (unArg . ignoreReduced)
-    (args0, args1) = splitAt n args
+    (args0, args1) = splitAt n $ map (fmap $ fmap shared) args
     lam x t        = Lam (argHiding x) (Abs (unArg x) t)
 match (Case n bs) args patch stack =
   case genericSplitAt n args of
@@ -56,22 +57,24 @@
           patchCon c m args = patch (args0 ++ [Arg h r $ Con c vs] ++ args1)
             where (args0, args1') = splitAt n args
                   (vs, args1)     = splitAt m args1'
-      case w of
+      case ignoreSharing <$> w of
         Blocked x _            -> return $ NoReduction $ Blocked x (patch $ map ignoreReduced args')
         NotBlocked (MetaV x _) -> return $ NoReduction $ Blocked x (patch $ map ignoreReduced args')
         NotBlocked (Lit l) -> case Map.lookup l (litBranches bs) of
           Nothing -> match' stack''
           Just cc -> match cc (args0 ++ args1) patchLit stack''
           where
-            stack'' = (++ stack') $ case cv of
+            stack'' = (++ stack') $ case ignoreSharing cv of
               Con c vs -> case Map.lookup c (conBranches bs) of
                 Nothing -> []
-                Just cc -> [(cc, args0 ++ map (MaybeRed red) vs ++ args1, patchCon c (length vs))]
+                Just cc -> [(content cc, args0 ++ map (MaybeRed red) vs ++ args1, patchCon c (length vs))]
               _        -> []
         NotBlocked (Con c vs) -> case Map.lookup c (conBranches bs) of
           Nothing -> match' stack'
-          Just cc -> match cc (args0 ++ map (MaybeRed red) vs ++ args1)
-                              (patchCon c (length vs)) stack'
+          Just cc -> match (content cc)
+                           (args0 ++ map (MaybeRed red) vs ++ args1)
+                           (patchCon c (length vs))
+                           stack'
         NotBlocked _ -> return $ NoReduction $ NotBlocked (patch $ map ignoreReduced args')
 
 match' :: Stack -> TCM (Reduced (Blocked Args) Term)
@@ -79,7 +82,6 @@
 match' [] = typeError $ GenericError "Incomplete pattern matching"
 
 unfoldCorecursion v = case v of
-  -- Andreas, 2011-10-03 removing DontCare here allow matching on irrelevant things
-  DontCare v -> unfoldCorecursion v
   Def f args -> unfoldDefinition True unfoldCorecursion (Def f []) f args
+  Shared{}   -> fmap shared <$> unfoldCorecursion (ignoreSharing v) -- don't update when unfolding corecursion!
   _          -> reduceB v
diff --git a/src/full/Agda/TypeChecking/Constraints.hs b/src/full/Agda/TypeChecking/Constraints.hs
--- a/src/full/Agda/TypeChecking/Constraints.hs
+++ b/src/full/Agda/TypeChecking/Constraints.hs
@@ -12,17 +12,22 @@
 import Data.Set as Set
 
 import Agda.Syntax.Common
+import Agda.Syntax.Position
 import Agda.Syntax.Internal
+import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Scope.Base
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Errors
+import Agda.TypeChecking.InstanceArguments
+import Agda.TypeChecking.Irrelevance (unusableRelevance)
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.LevelConstraints
+-- import Agda.TypeChecking.SizedTypes (solveSizeConstraints)
 import Agda.TypeChecking.MetaVars.Mention
 
-import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr)
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr, checkArguments)
 import {-# SOURCE #-} Agda.TypeChecking.Conversion
 import {-# SOURCE #-} Agda.TypeChecking.MetaVars
 import {-# SOURCE #-} Agda.TypeChecking.Empty
@@ -40,7 +45,7 @@
 catchConstraint :: Constraint -> TCM () -> TCM ()
 catchConstraint c v = liftTCM $
    catchError_ v $ \err ->
-   case errError err of
+   case err of
         -- Not putting s (which should really be the what's already there) makes things go
         -- a lot slower (+20% total time on standard library). How is that possible??
         -- The problem is most likely that there are internal catchErrors which forgets the
@@ -63,7 +68,13 @@
         reportSDoc "tc.constr.add" 20 $ text "  simplified:" <+> prettyTCM c'
         solveConstraint_ c'
       else addConstraint' c'
+    -- the added constraint can cause IFS constraints to be solved
+    unless (isIFSConstraint c) $
+       wakeConstraints (isIFSConstraint . clValue . theConstraint)
   where
+    isIFSConstraint :: Constraint -> Bool
+    isIFSConstraint FindInScope{} = True
+    isIFSConstraint _ = False
     simpl :: Constraint -> TCM Constraint
     simpl c = do
       n <- genericLength <$> getContext
@@ -103,9 +114,10 @@
 ifNoConstraints_ :: TCM () -> TCM a -> (ProblemId -> TCM a) -> TCM a
 ifNoConstraints_ check ifNo ifCs = ifNoConstraints check (const ifNo) (\pid _ -> ifCs pid)
 
--- | @guardConstraint cs c@ tries to solve constraints @cs@ first.
---   If successful, it moves on to solve @c@, otherwise it returns
---   a @Guarded c cs@.
+-- | @guardConstraint c blocker@ tries to solve @blocker@ first.
+--   If successful without constraints, it moves on to solve @c@, otherwise it
+--   adds a @Guarded c cs@ constraint
+--   to the @blocker@-generated constraints @cs@.
 guardConstraint :: Constraint -> TCM () -> TCM ()
 guardConstraint c blocker =
   ifNoConstraints_ blocker (solveConstraint_ c) (addConstraint . Guarded c)
@@ -119,7 +131,7 @@
 -- | Wake up the constraints depending on the given meta.
 wakeupConstraints :: MetaId -> TCM ()
 wakeupConstraints x = do
-  wakeConstraints (mentionsMeta x)
+  wakeConstraints (const True) -- (mentionsMeta x) -- TODO: needs fixing to cope with shared updates
   solveAwakeConstraints
 
 -- | Wake up all constraints.
@@ -129,9 +141,14 @@
   solveAwakeConstraints
 
 solveAwakeConstraints :: TCM ()
-solveAwakeConstraints = do
+solveAwakeConstraints = solveAwakeConstraints' False
+
+solveAwakeConstraints' :: Bool -> TCM ()
+solveAwakeConstraints' force = do
     verboseS "profile.constraints" 10 $ liftTCM $ tickMax "max-open-constraints" . genericLength =<< getAllConstraints
-    unlessM isSolvingConstraints $ nowSolvingConstraints solve
+    whenM ((force ||) . not <$> isSolvingConstraints) $ nowSolvingConstraints $ do
+     -- solveSizeConstraints -- Andreas, 2012-09-27 attacks size constrs too early
+     solve
   where
     solve = do
       reportSDoc "tc.constr.solve" 10 $ hsep [ text "Solving awake constraints."
@@ -150,6 +167,7 @@
       reportSDoc "tc.constr.solve" 20 $ text (show pids) <+> prettyTCM c
       solveConstraint_ c
 
+solveConstraint_ :: Constraint -> TCM ()
 solveConstraint_ (ValueCmp cmp a u v)       = compareTerm cmp a u v
 solveConstraint_ (ElimCmp cmp a e u v)      = compareElims cmp a e u v
 solveConstraint_ (TypeCmp cmp a b)          = compareType cmp a b
@@ -159,7 +177,7 @@
 solveConstraint_ c0@(Guarded c pid)         = do
   ifM (isProblemSolved pid) (solveConstraint_ c)
                             (addConstraint c0)
-solveConstraint_ (IsEmpty t)                = isEmptyType t
+solveConstraint_ (IsEmpty r t)              = isEmptyType r t
 solveConstraint_ (UnBlock m)                =
   ifM (isFrozen m) (addConstraint $ UnBlock m) $ do
     inst <- mvInstantiation <$> lookupMeta m
@@ -187,82 +205,4 @@
       -- Open (whatever that means)
       Open -> __IMPOSSIBLE__
       OpenIFS -> __IMPOSSIBLE__
-solveConstraint_ (FindInScope m)      =
-  ifM (isFrozen m) (addConstraint $ FindInScope m) $ do
-    reportSDoc "tc.constr.findInScope" 15 $ text ("findInScope constraint: " ++ show m)
-    mv <- lookupMeta m
-    let j = mvJudgement mv
-    case j of
-      IsSort{} -> __IMPOSSIBLE__
-      HasType _ tj -> do
-        ctx <- getContextVars
-        ctxArgs <- getContextArgs
-        t <- normalise $ tj `piApply` ctxArgs
-        reportSLn "tc.constr.findInScope" 15 $ "findInScope t: " ++ show t
-        let candsP1 = [(term, t) | (term, t, Instance) <- ctx]
-        let candsP2 = [(term, t) | (term, t, h) <- ctx, h /= Instance]
-        let scopeInfo = getMetaScope mv
-        let ns = everythingInScope scopeInfo
-        let nsList = Map.toList $ nsNames ns
-        -- try all abstract names in scope (even ones that you can't refer to
-        --  unambiguously)
-        let candsP3Names = nsList >>= snd
-        candsP3Types <- mapM (typeOfConst . anameName) candsP3Names
-        candsP3FV <- mapM (freeVarsToApply . anameName) candsP3Names
-        let candsP3 = [(Def (anameName an) vs, t) |
-                       (an, t, vs) <- zip3 candsP3Names candsP3Types candsP3FV]
-        let cands = [candsP1, candsP2, candsP3]
-        cands <- mapM (filterM (uncurry $ checkCandidateForMeta m t )) cands
-        let iterCands :: [(Int, [(Term, Type)])] -> TCM ()
-            iterCands [] = do reportSDoc "tc.constr.findInScope" 15 $ text "not a single candidate found..."
-                              typeError $ IFSNoCandidateInScope t
-            iterCands ((p, []) : cs) = do reportSDoc "tc.constr.findInScope" 15 $ text $
-                                            "no candidates found at p=" ++ show p ++ ", trying next p..."
-                                          iterCands cs
-            iterCands ((p, [(term, t')]):_) =
-              do reportSDoc "tc.constr.findInScope" 15 $ text (
-                   "one candidate at p=" ++ show p ++ " found for type '") <+>
-                   prettyTCM t <+> text "': '" <+> prettyTCM term <+>
-                   text "', of type '" <+> prettyTCM t' <+> text "'."
-                 leqType t t'
-                 assignV m ctxArgs term
-            iterCands ((p, cs):_) = do reportSDoc "tc.constr.findInScope" 15 $
-                                         text ("still more than one candidate at p=" ++ show p ++ ": ") <+>
-                                         prettyTCM (List.map fst cs)
-                                       addConstraint $ FindInScope m
-        iterCands [(1,concat cands)]
-      where
-        getContextVars :: TCM [(Term, Type, Hiding)]
-        getContextVars = do
-          ctx <- getContext
-          let ids = [0.. fromIntegral (length ctx) - 1] :: [Nat]
-          types <- mapM typeOfBV ids
-          return $ [ (Var i [], t, h) | (Arg h _ _, i, t) <- zip3 ctx [0..] types ]
-        checkCandidateForMeta :: MetaId -> Type -> Term -> Type -> TCM Bool
-        checkCandidateForMeta m t term t' =
-          liftTCM $ flip catchError (\err -> return False) $ do
-            reportSLn "tc.constr.findInScope" 20 $ "checkCandidateForMeta\n  t: " ++ show t ++ "\n  t':" ++ show t' ++ "\n  term: " ++ show term ++ "."
-            localState $ do
-               -- domi: we assume that nothing below performs direct IO (except
-               -- for logging and such, I guess)
-               leqType t t'
-               tel <- getContextTelescope
-               assignTerm m (teleLam tel term)
-               -- make a pass over constraints, to detect cases where some are made
-               -- unsolvable by the assignment, but don't do this for FindInScope's
-               -- to prevent loops. We currently also ignore UnBlock constraints
-               -- to be on the safe side.
-               wakeConstraints (isSimpleConstraint . clValue . theConstraint)
-               solveAwakeConstraints
-            return True
-        isSimpleConstraint :: Constraint -> Bool
-        isSimpleConstraint FindInScope{} = False
-        isSimpleConstraint UnBlock{}     = False
-        isSimpleConstraint _             = True
-
-localState :: MonadState s m => m a -> m a
-localState m = do
-  s <- get
-  x <- m
-  put s
-  return x
+solveConstraint_ (FindInScope m cands)      = findInScope m cands
diff --git a/src/full/Agda/TypeChecking/Constraints.hs-boot b/src/full/Agda/TypeChecking/Constraints.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Constraints.hs-boot
@@ -0,0 +1,9 @@
+module Agda.TypeChecking.Constraints where
+
+import Agda.TypeChecking.Monad.Base
+
+addConstraint          :: Constraint -> TCM ()
+solveConstraint        :: Constraint -> TCM ()
+solveAwakeConstraints' :: Bool -> TCM ()
+noConstraints          :: TCM a -> TCM a
+ifNoConstraints_       :: TCM () -> TCM a -> (ProblemId -> TCM a) -> TCM a
diff --git a/src/full/Agda/TypeChecking/Conversion.hs b/src/full/Agda/TypeChecking/Conversion.hs
--- a/src/full/Agda/TypeChecking/Conversion.hs
+++ b/src/full/Agda/TypeChecking/Conversion.hs
@@ -4,20 +4,24 @@
 
 import Control.Applicative
 import Control.Monad
+import Control.Monad.Reader
 import Control.Monad.State
 import Control.Monad.Error
 import Data.Traversable hiding (mapM, sequence)
 import Data.List hiding (sort)
 import qualified Data.List as List
 
+import Agda.Syntax.Abstract.Views (isSet)
 import Agda.Syntax.Literal
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+import Agda.Syntax.Translation.InternalToAbstract (reify)
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.MetaVars
 import Agda.TypeChecking.MetaVars.Occurs (killArgs,PruneResult(..))
-import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Errors
 import Agda.TypeChecking.Primitive (constructorForm)
@@ -25,15 +29,19 @@
 import Agda.TypeChecking.Records
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Injectivity
+import Agda.TypeChecking.Polarity
 import Agda.TypeChecking.SizedTypes
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Level
+import Agda.TypeChecking.Implicit (implicitArgs)
 import Agda.TypeChecking.Irrelevance
 import Agda.TypeChecking.EtaContract
 import Agda.TypeChecking.Eliminators
 -- import Agda.TypeChecking.UniversePolymorphism
 
+import Agda.Utils.Size
 import Agda.Utils.Monad
+import Agda.Utils.Maybe
 
 import Agda.TypeChecking.Monad.Debug
 
@@ -43,9 +51,6 @@
 mlevel :: TCM (Maybe Term)
 mlevel = liftTCM $ (Just <$> primLevel) `catchError` \_ -> return Nothing
 
-nextPolarity []       = (Invariant, [])
-nextPolarity (p : ps) = (p, ps)
-
 -- | Check if to lists of arguments are the same (and all variables).
 --   Precondition: the lists have the same length.
 sameVars :: Args -> Args -> Bool
@@ -73,37 +78,80 @@
 equalType :: Type -> Type -> TCM ()
 equalType = compareType CmpEq
 
+{- Comparing in irrelevant context always succeeds.
+
+   However, we might want to dig for solutions of irrelevant metas.
+
+   To this end, we can just ignore errors during conversion checking.
+ -}
+
+-- convError ::  MonadTCM tcm => TypeError -> tcm a
+-- | Ignore errors in irrelevant context.
+convError :: TypeError -> TCM ()
+convError err = ifM ((==) Irrelevant <$> asks envRelevance) (return ()) $ typeError err
+
 -- | Type directed equality on values.
 --
 compareTerm :: Comparison -> Type -> Term -> Term -> TCM ()
   -- If one term is a meta, try to instantiate right away. This avoids unnecessary unfolding.
-compareTerm cmp a u v = liftTCM $ do
-  (u, v) <- instantiate (u, v)
+  -- Andreas, 2012-02-14: This is UNSOUND for subtyping!
+compareTerm cmp a u v = do
+  -- Check syntactic equality first. This actually saves us quite a bit of work.
+  (u, v) <- instantiateFull (u, v)
+  if u == v then unifyPointers cmp u v $ verboseS "profile.sharing" 20 $ tick "equal terms" else do
+  verboseS "profile.sharing" 20 $ tick "unequal terms"
+  let checkPointerEquality def | not $ null $ List.intersect (pointerChain u) (pointerChain v) = do
+        verboseS "profile.sharing" 10 $ tick "pointer equality"
+        return ()
+      checkPointerEquality def = def
+  checkPointerEquality $ do
   reportSDoc "tc.conv.term" 10 $ sep [ text "compareTerm"
                                      , nest 2 $ prettyTCM u <+> prettyTCM cmp <+> prettyTCM v
                                      , nest 2 $ text ":" <+> prettyTCM a ]
   let fallback = compareTerm' cmp a u v
-  case (u, v) of
-    (u@(MetaV x us), v@(MetaV y vs))
-      | x /= y    -> solve1 `orelse` solve2 `orelse` compareTerm' cmp a u v
+      unlessSubtyping cont =
+          if cmp == CmpEq then cont else do
+            -- do not short circuit size comparison!
+            isSize <- isJust <$> do isSizeTypeTest <*> reduce a
+            if isSize then fallback else cont
+  case (ignoreSharing u, ignoreSharing v) of
+    (MetaV x us, MetaV y vs)
+      | x /= y    -> unlessSubtyping $ solve1 `orelse` solve2 `orelse` compareTerm' cmp a u v
       | otherwise -> fallback
       where
         (solve1, solve2) | x > y     = (assign x us v, assign y vs u)
                          | otherwise = (assign y vs u, assign x us v)
-    (u@(MetaV x us), v) -> assign x us v `orelse` fallback
-    (u, v@(MetaV y vs)) -> assign y vs u `orelse` fallback
-    _                   -> fallback
+    (MetaV x us, _) -> unlessSubtyping $ assign x us v `orelse` fallback
+    (_, MetaV y vs) -> unlessSubtyping $ assign y vs u `orelse` fallback
+    _               -> fallback
   where
     assign x us v = do
-      reportSDoc "tc.conv.term" 20 $ sep [ text "attempting shortcut"
-                                         , nest 2 $ prettyTCM (MetaV x us) <+> text ":=" <+> prettyTCM v ]
+      reportSDoc "tc.conv.term.shortcut" 20 $ sep
+        [ text "attempting shortcut"
+        , nest 2 $ prettyTCM (MetaV x us) <+> text ":=" <+> prettyTCM v
+        ]
       ifM (isInstantiatedMeta x) patternViolation (assignV x us v)
+      instantiate u
+      -- () <- seq u' $ return ()
+      reportSLn "tc.conv.term.shortcut" 50 $
+        "shortcut successful\n  result: " ++ show u
     -- Should be ok with catchError_ but catchError is much safer since we don't
     -- rethrow errors.
-    m `orelse` h = m `catchError` \err -> case errError err of
+    m `orelse` h = m `catchError` \err -> case err of
                     PatternErr s -> put s >> h
                     _            -> h
 
+unifyPointers _ _ _ action = action
+-- unifyPointers cmp _ _ action | cmp /= CmpEq = action
+-- unifyPointers _ u v action = do
+--   old <- gets stDirty
+--   modify $ \s -> s { stDirty = False }
+--   action
+--   (u, v) <- instantiate (u, v)
+--   dirty <- gets stDirty
+--   modify $ \s -> s { stDirty = old }
+--   when (not dirty) $ forceEqualTerms u v
+
 compareTerm' :: Comparison -> Type -> Term -> Term -> TCM ()
 compareTerm' cmp a m n =
   verboseBracket "tc.conv.term" 20 "compareTerm" $ do
@@ -112,18 +160,19 @@
     reportSDoc "tc.conv.term" 30 $ fsep
       [ text "compareTerm", prettyTCM m, prettyTCM cmp, prettyTCM n, text ":", prettyTCM a' ]
     proofIrr <- proofIrrelevance
-    isSize   <- isSizeType a'
+    isSize   <- isJust <$> isSizeType a'
     s        <- reduce $ getSort a'
     mlvl     <- mlevel
     case s of
       Prop | proofIrr -> return ()
       _    | isSize   -> compareSizes cmp m n
-      _               -> case unEl a' of
+      _               -> case ignoreSharing $ unEl a' of
         a | Just a == mlvl -> do
           a <- levelView m
           b <- levelView n
           equalLevel a b
-        Pi a _    -> equalFun (a,a') m n
+-- OLD:        Pi dom _  -> equalFun (dom, a') m n
+        a@Pi{}    -> equalFun a m n
         Lam _ _   -> __IMPOSSIBLE__
         Def r ps  -> do
           isrec <- isEtaRecord r
@@ -157,23 +206,40 @@
 -- Andreas, 2010-10-11: allowing neutrals to be blocked things does not seem
 -- to change Agda's behavior
 --    isNeutral Blocked{}          = False
-    isNeutral (NotBlocked Con{}) = False
-    isNeutral _                  = True
-    isMeta (NotBlocked MetaV{})  = True
-    isMeta _                     = False
+    isNeutral = isNeutral' . fmap ignoreSharing
+    isMeta    = isMeta'    . fmap ignoreSharing
+    isNeutral' (NotBlocked Con{}) = False
+    isNeutral' _                  = True
+    isMeta' (NotBlocked MetaV{})  = True
+    isMeta' _                     = False
 
-    equalFun (a,t) m n = do
+    -- equality at function type (accounts for eta)
+    equalFun :: Term -> Term -> Term -> TCM ()
+    equalFun (Shared p) m n = equalFun (derefPtr p) m n
+    equalFun (Pi dom@(Dom h r _) b) m n = do
+        name <- freshName_ $ properName $ absName b
+        addCtx name dom $ compareTerm cmp (absBody b) m' n'
+      where
+        (m',n') = raise 1 (m,n) `apply` [Arg h r $ var 0]
+        properName "_" = "x"
+        properName  x  =  x
+    equalFun _ _ _ = __IMPOSSIBLE__
+{- OLD CODE
+    equalFun :: (Dom Type, Type) -> Term -> Term -> TCM ()
+    equalFun (a@(Dom h r _), t) m n = do
         name <- freshName_ (suggest $ unEl t)
         addCtx name a $ compareTerm cmp t' m' n'
       where
-        p	= fmap (const $ Var 0 []) a
+        p	= Arg h r $ var 0
         (m',n') = raise 1 (m,n) `apply` [p]
         t'	= raise 1 t `piApply` [p]
         suggest (Pi _ b) = absName b
         suggest _	 = __IMPOSSIBLE__
+-}
 
--- | @compareTel t1 t2 cmp tel1 tel1@ checks whether pointwise @tel1 `cmp` tel2@
---   and complains that @t2 `cmp` t1@ failed if not.
+-- | @compareTel t1 t2 cmp tel1 tel1@ checks whether pointwise
+--   @tel1 \`cmp\` tel2@ and complains that @t2 \`cmp\` t1@ failed if
+--   not.
 compareTel :: Type -> Type ->
   Comparison -> Telescope -> Telescope -> TCM ()
 compareTel t1 t2 cmp tel1 tel2 =
@@ -182,17 +248,20 @@
     (EmptyTel, EmptyTel) -> return ()
     (EmptyTel, _)        -> bad
     (_, EmptyTel)        -> bad
-    (ExtendTel arg1@(Arg h1 r1 a1) tel1, ExtendTel arg2@(Arg h2 r2 a2) tel2)
+    (ExtendTel arg1@(Dom h1 r1 a1) tel1, ExtendTel arg2@(Dom h2 r2 a2) tel2)
       | h1 /= h2 -> bad
         -- Andreas, 2011-09-11 do not test r1 == r2 because they could differ
         -- e.g. one could be Forced and the other Relevant (see fail/UncurryMeta)
       | otherwise -> do
-          let (tel1', tel2') = raise 1 (tel1, tel2)
-              arg            = Var 0 []
           name <- freshName_ (suggest (absName tel1) (absName tel2))
           let checkArg = escapeContext 1 $ compareType cmp a1 a2
-          let c = TelCmp t1 t2 cmp (absApp tel1' arg) (absApp tel2' arg)
-          let r = max r1 r2  -- take "most irrelevant"
+{- OLD
+          let (tel1', tel2') = raise 1 (tel1, tel2)
+              arg            = var 0
+              c = TelCmp t1 t2 cmp (absApp tel1' arg) (absApp tel2' arg)
+-}
+              c = TelCmp t1 t2 cmp (absBody tel1) (absBody tel2)
+              r = max r1 r2  -- take "most irrelevant"
               dependent = (r /= Irrelevant) && isBinderUsed tel2
           addCtx name arg1 $
             if dependent
@@ -213,14 +282,25 @@
     verboseBracket "tc.conv.atom" 20 "compareAtom" $
     -- if a PatternErr is thrown, rebuild constraint!
     catchConstraint (ValueCmp cmp t m n) $ do
-      let unLevel (Level l) = reallyUnLevelView l
-          unLevel v = return v
-      -- constructorForm changes literal to constructors
+      reportSDoc "tc.conv.atom" 50 $
+	text "compareAtom" <+> fsep [ prettyTCM m <+> prettyTCM cmp
+                                    , prettyTCM n
+                                    , text ":" <+> prettyTCM t ]
       -- Andreas: what happens if I cut out the eta expansion here?
       -- Answer: Triggers issue 245, does not resolve 348
-      mb <- traverse unLevel =<< traverse constructorForm =<< etaExpandBlocked =<< reduceB m
-      nb <- traverse unLevel =<< traverse constructorForm =<< etaExpandBlocked =<< reduceB n
+      mb' <- etaExpandBlocked =<< reduceB m
+      nb' <- etaExpandBlocked =<< reduceB n
 
+      -- constructorForm changes literal to constructors
+      -- only needed if the other side is not a literal
+      (mb'', nb'') <- case (ignoreSharing $ ignoreBlocking mb', ignoreSharing $ ignoreBlocking nb') of
+	(Lit _, Lit _) -> return (mb', nb')
+        _ -> (,) <$> traverse constructorForm mb'
+                 <*> traverse constructorForm nb'
+
+      mb <- traverse unLevel mb''
+      nb <- traverse unLevel nb''
+
       let m = ignoreBlocking mb
           n = ignoreBlocking nb
 
@@ -233,11 +313,13 @@
                 then return ()	-- Check syntactic equality for blocked terms
                 else postpone
 
+      unifyPointers cmp (ignoreBlocking mb') (ignoreBlocking nb') $ do    -- this needs to go after eta expansion to avoid creating infinite terms
+
       reportSDoc "tc.conv.atom" 30 $
 	text "compareAtom" <+> fsep [ prettyTCM mb <+> prettyTCM cmp
                                     , prettyTCM nb
                                     , text ":" <+> prettyTCM t ]
-      case (mb, nb) of
+      case (ignoreSharing <$> mb, ignoreSharing <$> nb) of
         -- equate two metas x and y.  if y is the younger meta,
         -- try first y := x and then x := y
         (NotBlocked (MetaV x xArgs), NotBlocked (MetaV y yArgs))
@@ -265,7 +347,7 @@
                       where l = assignV x xArgs n
                             r = assignV y yArgs m
 
-                    try m h = m `catchError_` \err -> case errError err of
+                    try m h = m `catchError_` \err -> case err of
                       PatternErr s -> put s >> h
                       _            -> throwError err
 
@@ -280,7 +362,7 @@
         (Blocked{}, Blocked{})	-> checkSyntacticEquality
         (Blocked{}, _)    -> useInjectivity cmp t m n
         (_,Blocked{})     -> useInjectivity cmp t m n
-        _ -> case (m, n) of
+        _ -> case (ignoreSharing m, ignoreSharing n) of
 	    (Pi{}, Pi{}) -> equalFun m n
 
 	    (Sort s1, Sort s2) -> compareSort CmpEq s1 s2
@@ -293,11 +375,24 @@
             (Def{}, Def{}) -> do
               ev1 <- elimView m
               ev2 <- elimView n
+              reportSDoc "tc.conv.atom" 50 $
+                sep [ text $ "ev1 = " ++ show ev1
+                    , text $ "ev2 = " ++ show ev2 ]
               case (ev1, ev2) of
                 (VarElim x els1, VarElim y els2) | x == y -> cmpElim (typeOfBV x) (Var x []) els1 els2
-                (ConElim x els1, ConElim y els2) | x == y -> cmpElim (conType x t) (Con x []) els1 els2
+                (ConElim x els1, ConElim y els2) | x == y ->
+                  cmpElim (conType x t) (Con x []) els1 els2
+                  -- Andreas 2012-01-17 careful!  In the presence of
+                  -- projection eliminations, t is NOT the datatype x belongs to
+                  -- Ulf 2012-07-12: actually projection likeness is carefully
+                  -- set up so that there can't be any projections from
+                  -- constructor applications at this point, so t really is the
+                  -- datatype of x. See issue 676 for an example where it
+                  -- failed.
                 (DefElim x els1, DefElim y els2) | x == y ->
                   cmpElim (defType <$> getConstInfo x) (Def x []) els1 els2
+                (DefElim x els1, DefElim y els2) ->
+                  trySizeUniv cmp t m n x els1 y els2
                 (MetaElim{}, _) -> __IMPOSSIBLE__   -- projections from metas should have been eta expanded
                 (_, MetaElim{}) -> __IMPOSSIBLE__
                 _ -> typeError $ UnequalTerms cmp m n t
@@ -324,50 +419,44 @@
                     compareArgs [] a' (Con x []) xArgs yArgs
             _ -> typeError $ UnequalTerms cmp m n t
     where
-        conType c (El _ (Def d args)) = do
-          npars <- do
-            def <- theDef <$> getConstInfo d
-            return $ case def of Datatype{dataPars = n} -> n
-                                 Record{recPars = n}    -> n
-                                 _                      -> __IMPOSSIBLE__
-          a <- defType <$> getConstInfo c
-          return $ piApply a (genericTake npars args)
-        conType _ _ = __IMPOSSIBLE__
+        conType c (El _ v) = case ignoreSharing v of
+          Def d args -> do
+            npars <- do
+              def <- theDef <$> getConstInfo d
+              return $ case def of Datatype{dataPars = n} -> n
+                                   Record{recPars = n}    -> n
+                                   _                      -> __IMPOSSIBLE__
+            a <- defType <$> getConstInfo c
+            return $ piApply a (genericTake npars args)
+          _ -> __IMPOSSIBLE__
 
-	equalFun t1@(Pi arg1@(Arg h1 r1 a1) _) t2@(Pi (Arg h2 r2 a2) _)
-	    | h1 /= h2	= typeError $ UnequalHiding ty1 ty2
+        equalFun t1 t2 = case (ignoreSharing t1, ignoreSharing t2) of
+	  (Pi dom1@(Dom h1 r1 a1) b1, Pi (Dom h2 r2 a2) b2)
+	    | h1 /= h2	-> typeError $ UnequalHiding t1 t2
             -- Andreas 2010-09-21 compare r1 and r2, but ignore forcing annotations!
-	    | ignoreForced r1 /= ignoreForced r2 = typeError $ UnequalRelevance ty1 ty2
-	    | otherwise = verboseBracket "tc.conv.fun" 15 "compare function types" $ do
+	    | not (compareRelevance cmp (ignoreForced r2) (ignoreForced r1)) -> typeError $ UnequalRelevance cmp t1 t2
+	    | otherwise -> verboseBracket "tc.conv.fun" 15 "compare function types" $ do
                 reportSDoc "tc.conv.fun" 20 $ nest 2 $ vcat
                   [ text "t1 =" <+> prettyTCM t1
                   , text "t2 =" <+> prettyTCM t2 ]
-                let (ty1',ty2') = raise 1 (ty1,ty2)
-                    arg	    = Arg h1 r1 (Var 0 [])
-                name <- freshName_ (suggest t1 t2)
-                let checkArg = escapeContext 1 $ compareType cmp a2 a1
-                    c        = TypeCmp cmp (piApply ty1' [arg]) (piApply ty2' [arg])
-
+                let checkDom = escapeContext 1 $ compareType cmp a2 a1
+                    conCoDom = TypeCmp cmp (absBody b1) (absBody b2)
                 -- We only need to require a1 == a2 if t2 is a dependent function type.
                 -- If it's non-dependent it doesn't matter what we add to the context.
-                let dependent = case t2 of
-                                    Pi _ b  -> isBinderUsed b
-                                    _       -> __IMPOSSIBLE__
-                addCtx name arg1 $
-                  if dependent
-                  then guardConstraint c checkArg
-                  else checkArg >> solveConstraint_ c
+                name <- freshName_ (suggest b1 b2)
+                addCtx name dom1 $
+                  if isBinderUsed b2 -- dependent function type?
+                  then guardConstraint conCoDom checkDom
+                  else checkDom >> solveConstraint_ conCoDom
 	    where
-		ty1 = El (getSort a1) t1    -- TODO: wrong (but it doesn't matter)
-		ty2 = El (getSort a2) t2
-		suggest t1 t2 = case concatMap name [t1,t2] of
-				    []	-> "_"
-				    x:_	-> x
-		    where
-			name (Pi _ b) = filter (/= "_") [absName b]
-			name _        = __IMPOSSIBLE__
-	equalFun _ _ = __IMPOSSIBLE__
+		suggest b1 b2 = head $
+                  [ x | x <- map absName [b1,b2], x /= "_"] ++ ["_"]
+	  _ -> __IMPOSSIBLE__
 
+compareRelevance :: Comparison -> Relevance -> Relevance -> Bool
+compareRelevance CmpEq  = (==)
+compareRelevance CmpLeq = (<=)
+
 -- | Type-directed equality on eliminator spines
 compareElims :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()
 compareElims _ _ _ [] [] = return ()
@@ -380,29 +469,31 @@
   reportSDoc "tc.conv.elim" 25 $ nest 2 $ vcat
     [ text "a    =" <+> prettyTCM a
     , text "v    =" <+> prettyTCM v
-    , text "els1 =" <+> prettyTCM els01
-    , text "els2 =" <+> prettyTCM els02
+    , text "arg1 =" <+> prettyTCM arg1
+    , text "arg2 =" <+> prettyTCM arg2
     ]
+  reportSDoc "tc.conv.elim" 50 $ nest 2 $ vcat
+    [ text "v    =" <+> text (show v)
+    , text "arg1 =" <+> text (show arg1)
+    , text "arg2 =" <+> text (show arg2)
+    ]
   let (pol, pols) = nextPolarity pols0
   ab <- reduceB a
   let a = ignoreBlocking ab
   catchConstraint (ElimCmp pols0 a v els01 els02) $ do
-  case unEl <$> ab of
+  case ignoreSharing . unEl <$> ab of
     Blocked{}                     -> patternViolation
     NotBlocked MetaV{}            -> patternViolation
-    NotBlocked (Pi (Arg _ r b) _) -> do
-      let cmp x y = case pol of
-                      Invariant     -> compareTerm CmpEq  b x y
-                      Covariant     -> compareTerm CmpLeq b x y
-                      Contravariant -> compareTerm CmpLeq b y x
+    NotBlocked (Pi (Dom _ r b) _) -> do
       mlvl <- mlevel
-      let checkArg = case r of
+      let checkArg = applyRelevanceToContext r $ case r of
             Forced     -> return ()
-            Irrelevant -> return () -- Andreas: ignore irr. func. args.
-            _          -> applyRelevanceToContext r $
-                            cmp (unArg arg1) (unArg arg2)
-          dependent = case unEl a of
-            Pi (Arg _ _ (El _ lvl')) c -> 0 `freeInIgnoringSorts` absBody c
+            r | irrelevantOrUnused r ->
+                          compareIrrelevant b (unArg arg1) (unArg arg2)
+            _          -> compareWithPol pol (flip compareTerm b)
+                            (unArg arg1) (unArg arg2)
+          dependent = case ignoreSharing $ unEl a of
+            Pi (Dom _ _ (El _ lvl')) c -> 0 `freeInIgnoringSorts` absBody c
                                           && Just lvl' /= mlvl
             _ -> False
 
@@ -417,26 +508,74 @@
   | f /= f'   = typeError . GenericError . show =<< prettyTCM f <+> text "/=" <+> prettyTCM f'
   | otherwise = do
     a <- reduce a
-    case unEl a of
+    case ignoreSharing $ unEl a of
       Def r us -> do
         let (pol, _) = nextPolarity pols
-        ft <- defType <$> getConstInfo f
+        ft <- defType <$> getConstInfo f  -- get type of projection function
         let arg = Arg NotHidden Relevant v  -- TODO: not necessarily relevant?
         let c = piApply ft (us ++ [arg])
         (cmp, els1, els2) <- return $ case pol of
               Invariant     -> (CmpEq, els1, els2)
               Covariant     -> (CmpLeq, els1, els2)
-              Contravariant -> (CmpLeq, els2, els2)
+              Contravariant -> (CmpLeq, els2, els1)
+              Nonvariant    -> __IMPOSSIBLE__ -- the polarity should be Invariant
         pols' <- getPolarity' cmp f
         compareElims pols' c (Def f [arg]) els1 els2
       _ -> __IMPOSSIBLE__
 
+-- | "Compare" two terms in irrelevant position.  This always succeeds.
+--   However, we can dig for solutions of irrelevant metas in the
+--   terms we compare.
+--   (Certainly not the systematic solution, that'd be proof search...)
+compareIrrelevant :: Type -> Term -> Term -> TCM ()
+{- 2012-04-02 DontCare no longer present
+compareIrrelevant a (DontCare v) w = compareIrrelevant a v w
+compareIrrelevant a v (DontCare w) = compareIrrelevant a v w
+-}
+compareIrrelevant a v w = do
+  reportSDoc "tc.conv.irr" 20 $ vcat
+    [ text "compareIrrelevant"
+    , nest 2 $ text "v =" <+> prettyTCM v
+    , nest 2 $ text "w =" <+> prettyTCM w
+    ]
+  reportSDoc "tc.conv.irr" 50 $ vcat
+    [ nest 2 $ text $ "v = " ++ show v
+    , nest 2 $ text $ "w = " ++ show w
+    ]
+  try v w $ try w v $ return ()
+  where
+    try (Shared p) w fallback = try (derefPtr p) w fallback
+    try (MetaV x vs) w fallback = do
+      mv <- lookupMeta x
+      let rel  = getMetaRelevance mv
+          inst = case mvInstantiation mv of
+                   InstV{} -> True
+                   InstS{} -> True
+                   _       -> False
+      reportSDoc "tc.conv.irr" 20 $ vcat
+        [ nest 2 $ text $ "rel  = " ++ show rel
+        , nest 2 $ text $ "inst = " ++ show inst
+        ]
+      if not (irrelevantOrUnused rel) || inst then fallback else assignV x vs w
+        -- the value of irrelevant or unused meta does not matter
+    try v w fallback = fallback
+
+compareWithPol :: Polarity -> (Comparison -> a -> a -> TCM ()) -> a -> a -> TCM ()
+compareWithPol Invariant     cmp x y = cmp CmpEq x y
+compareWithPol Covariant     cmp x y = cmp CmpLeq x y
+compareWithPol Contravariant cmp x y = cmp CmpLeq y x
+compareWithPol Nonvariant    cmp x y = return ()
+
 -- | Type-directed equality on argument lists
 --
 compareArgs :: [Polarity] -> Type -> Term -> Args -> Args -> TCM ()
 compareArgs pol a v args1 args2 =
   compareElims pol a v (map Apply args1) (map Apply args2)
 
+---------------------------------------------------------------------------
+-- * Types
+---------------------------------------------------------------------------
+
 -- | Equality on Types
 compareType :: Comparison -> Type -> Type -> TCM ()
 compareType cmp ty1@(El s1 a1) ty2@(El s2 a2) =
@@ -449,35 +588,71 @@
           ]
 -- Andreas, 2011-4-27 should not compare sorts, but currently this is needed
 -- for solving sort and level metas
---        let cs1 = []
-	compareSort CmpEq s1 s2 `catchError` \err -> case errError err of
-                  TypeError _ _ -> do
-                    reportSDoc "tc.conv.type" 30 $ vcat
-                      [ text "sort comparison failed"
-                      , nest 2 $ vcat
-                        [ text "s1 =" <+> prettyTCM s1
-                        , text "s2 =" <+> prettyTCM s2
-                        ]
-                      ]
-                    -- This error will probably be more informative
-                    compareTerm cmp (sort s1) a1 a2
-                    -- Throw the original error if the above doesn't
-                    -- give an error (for instance, due to pending
-                    -- constraints).
-                    -- Or just ignore it... We run into this with irrelevant levels
-                    -- which may show up in sort constraints, causing them to fail.
-                    -- In any case it's not safe to ignore the error, for instance
-                    -- a1 might be Set and a2 a meta of type Set, in which case we
-                    -- really need the sort comparison to fail, instead of silently
-                    -- instantiating the meta.
-                    throwError err
-                  _             -> throwError err
+	compareSort CmpEq s1 s2 `catchError` \err -> case err of
+          TypeError _ e -> do
+            reportSDoc "tc.conv.type" 30 $ vcat
+              [ text "sort comparison failed"
+              , nest 2 $ vcat
+                [ text "s1 =" <+> prettyTCM s1
+                , text "s2 =" <+> prettyTCM s2
+                ]
+              ]
+            case clValue e of
+              -- Issue 659: Better error message
+              SetOmegaNotValidType -> typeError $ UnequalBecauseOfUniverseConflict cmp a1 a2
+              _ -> do
+                -- This error will probably be more informative
+                compareTerm cmp (sort s1) a1 a2
+                -- Throw the original error if the above doesn't
+                -- give an error (for instance, due to pending
+                -- constraints).
+                -- Or just ignore it... We run into this with irrelevant levels
+                -- which may show up in sort constraints, causing them to fail.
+                -- In any case it's not safe to ignore the error, for instance
+                -- a1 might be Set and a2 a meta of type Set, in which case we
+                -- really need the sort comparison to fail, instead of silently
+                -- instantiating the meta.
+                throwError err
+          _             -> throwError err
 	compareTerm cmp (sort s1) a1 a2
 	return ()
 
 leqType :: Type -> Type -> TCM ()
 leqType = compareType CmpLeq
 
+-- | @coerce v a b@ coerces @v : a@ to type @b@, returning a @v' : b@
+--   with maybe extra hidden applications or hidden abstractions.
+--
+--   In principle, this function can host coercive subtyping, but
+--   currently it only tries to fix problems with hidden function types.
+coerce :: Term -> Type -> Type -> TCM Term
+coerce v t1 t2 = blockTerm t2 $ do
+  verboseS "tc.conv.coerce" 10 $ do
+    (a1,a2) <- reify (t1,t2)
+    let dbglvl = if isSet a1 && isSet a2 then 50 else 10
+    reportSDoc "tc.conv.coerce" dbglvl $
+      text "coerce" <+> vcat
+        [ text "term      v  =" <+> prettyTCM v
+        , text "from type t1 =" <+> prettyTCM a1
+        , text "to type   t2 =" <+> prettyTCM a2
+        ]
+  -- v <$ do workOnTypes $ leqType t1 t2
+  -- take off hidden/instance domains from t1 and t2
+  TelV tel1 b1 <- telViewUpTo' (-1) ((NotHidden /=) . domHiding) t1
+  TelV tel2 b2 <- telViewUpTo' (-1) ((NotHidden /=) . domHiding) t2
+  let n = size tel1 - size tel2
+  -- the crude solution would be
+  --   v' = λ {tel2} → v {tel1}
+  -- however, that may introduce unneccessary many function types
+  -- If n  > 0 and b2 is not blocked, it is safe to
+  -- insert n many hidden args
+  if n <= 0 then fallback else do
+    ifBlockedType b2 (\ _ _ -> fallback) $ \ _ -> do
+      (args, t1') <- implicitArgs n (NotHidden /=) t1
+      v `apply` args <$ do workOnTypes $ leqType t1' t2
+  where
+    fallback = v <$ do workOnTypes $ leqType t1 t2
+
 ---------------------------------------------------------------------------
 -- * Sorts
 ---------------------------------------------------------------------------
@@ -497,7 +672,7 @@
               , nest 2 $ fsep [ prettyTCM s1 <+> text "=<"
                               , prettyTCM s2 ]
               ]
-	case (s1,s2) of
+	case (s1, s2) of
 
             (Type a, Type b) -> leqLevel a b
 
@@ -558,6 +733,9 @@
                         [n] -> Just n
                         _   -> Nothing
 
+        -- Andreas, 2012-10-02 raise error on unsolvable constraint
+        ([ClosedLevel n], [ClosedLevel m]) -> if n <= m then ok else notok
+
         -- closed ≤ bs
         ([ClosedLevel n], bs)
           | n <= maximum (map constant bs) -> ok
@@ -589,7 +767,7 @@
         postpone = patternViolation
 
         wrap m = catchError m $ \e ->
-          case errError e of
+          case e of
             TypeError{} -> notok
             _           -> throwError e
 
@@ -613,7 +791,7 @@
 
 --     choice []     = patternViolation
 --     choice (m:ms) = noConstraints m `catchError` \_ -> choice ms
---       case errError e of
+--       case e of
 --         PatternErr{} -> choice ms
 --         _            -> throwError e
 
@@ -680,7 +858,10 @@
         _ | any isMeta (as ++ bs) -> postpone
 
         -- neutral/closed == neutral/closed
-        _ | all isNeutralOrClosed (as ++ bs) -> as =!= bs
+        _ | all isNeutralOrClosed (as ++ bs) ->
+          if length as == length bs
+            then zipWithM_ (\a b -> [a] =!= [b]) as bs
+            else notok
 
         -- more cases?
         _ -> postpone
@@ -704,7 +885,7 @@
 
         -- Make sure to give a sensible error message
         wrap m = m `catchError` \err ->
-          case errError err of
+          case err of
             TypeError{} -> notok
             _           -> throwError err
 
@@ -750,7 +931,7 @@
                                      , text (show s2) ]
                      ]
               ]
-	case (s1,s2) of
+	case (s1, s2) of
 
             (Type a  , Type b  ) -> equalLevel a b
 
@@ -778,5 +959,6 @@
         isInf notok ClosedLevel{} = notok
         isInf notok (Plus _ l) = case l of
           MetaLevel x vs          -> assignV x vs (Sort Inf)
+          NeutralLevel (Shared p) -> isInf notok (Plus 0 $ NeutralLevel $ derefPtr p)
           NeutralLevel (Sort Inf) -> return ()
           _                       -> notok
diff --git a/src/full/Agda/TypeChecking/Coverage.hs b/src/full/Agda/TypeChecking/Coverage.hs
--- a/src/full/Agda/TypeChecking/Coverage.hs
+++ b/src/full/Agda/TypeChecking/Coverage.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, FlexibleContexts #-}
+{-# LANGUAGE CPP, PatternGuards, FlexibleContexts, TupleSections #-}
 
 module Agda.TypeChecking.Coverage where
 
@@ -15,6 +15,7 @@
 import Agda.Syntax.Internal.Pattern
 
 import Agda.TypeChecking.Monad.Base
+import Agda.TypeChecking.Monad.Closure
 import Agda.TypeChecking.Monad.Trace
 import Agda.TypeChecking.Monad.Signature
 import Agda.TypeChecking.Monad.Options
@@ -27,6 +28,7 @@
 import qualified Agda.TypeChecking.Rules.LHS.Split as Split
 
 import Agda.TypeChecking.Coverage.Match
+import Agda.TypeChecking.Coverage.SplitTree
 
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Substitute
@@ -40,40 +42,66 @@
 import Agda.Utils.Permutation
 import Agda.Utils.Size
 import Agda.Utils.Tuple
+import Agda.Utils.List
+import Agda.Utils.Maybe
 import Agda.Utils.Monad
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
 
 data SplitClause = SClause
-      { scTel   :: Telescope      -- ^ type of variables in scPats
-      , scPerm  :: Permutation    -- ^ how to get from the variables in the patterns to the telescope
-      , scPats  :: [Arg Pattern]
-      , scSubst :: [Term]         -- ^ substitution from scTel to old context
+      { scTel    :: Telescope      -- ^ Type of variables in @scPats@.
+      , scPerm   :: Permutation    -- ^ How to get from the variables in the patterns to the telescope.
+      , scPats   :: [Arg Pattern]  -- ^ The patterns leading to the currently considered branch of the split tree.
+      , scSubst  :: Substitution   -- ^ Substitution from @scTel@ to old context.
+      , scTarget :: Maybe Type     -- ^ The type of the rhs.
       }
 
-type Covering = [SplitClause]
+-- | A @Covering@ is the result of splitting a 'SplitClause'.
+data Covering = Covering
+  { covSplitArg     :: Nat  -- ^ De Bruijn level of argument we split on.
+  , covSplitClauses :: [(QName, SplitClause)]
+      -- ^ Covering clauses, indexed by constructor these clauses share.
+  }
 
-data SplitError = NotADatatype Type         -- ^ neither data type nor record
-                | IrrelevantDatatype Type   -- ^ data type, but in irrelevant position
-                | CoinductiveDatatype Type  -- ^ coinductive data type
+-- | Project the split clauses out of a covering.
+splitClauses :: Covering -> [SplitClause]
+splitClauses (Covering _ qcs) = map snd qcs
+
+-- | Create a split clause from a clause in internal syntax.
+clauseToSplitClause :: Clause -> SplitClause
+clauseToSplitClause cl = SClause
+  { scTel    = clauseTel  cl
+  , scPerm   = clausePerm cl
+  , scPats   = clausePats cl
+  , scSubst  = __IMPOSSIBLE__
+  , scTarget = Nothing
+  }
+
+data SplitError = NotADatatype (Closure Type) -- ^ neither data type nor record
+                | IrrelevantDatatype (Closure Type)   -- ^ data type, but in irrelevant position
+                | CoinductiveDatatype (Closure Type)  -- ^ coinductive data type
+{- UNUSED
                 | NoRecordConstructor Type  -- ^ record type, but no constructor
+ -}
                 | CantSplit QName Telescope Args Args [Term]
                 | GenericSplitError String
   deriving (Show)
 
 instance PrettyTCM SplitError where
   prettyTCM err = case err of
-    NotADatatype t -> fsep $
+    NotADatatype t -> enterClosure t $ \ t -> fsep $
       pwords "Cannot pattern match on non-datatype" ++ [prettyTCM t]
-    IrrelevantDatatype t -> fsep $
+    IrrelevantDatatype t -> enterClosure t $ \ t -> fsep $
       pwords "Cannot pattern match on datatype" ++ [prettyTCM t] ++
       pwords "since it is declared irrelevant"
-    CoinductiveDatatype t -> fsep $
+    CoinductiveDatatype t -> enterClosure t $ \ t -> fsep $
       pwords "Cannot pattern match on the coinductive type" ++ [prettyTCM t]
+{- UNUSED
     NoRecordConstructor t -> fsep $
       pwords "Cannot pattern match on record" ++ [prettyTCM t] ++
       pwords "because it has no constructor"
+ -}
     CantSplit c tel cIxs gIxs flex -> addCtxTel tel $ vcat
       [ fsep $ pwords "Cannot decide whether there should be a case for the constructor" ++ [prettyTCM c <> text ","] ++
                pwords "since the unification gets stuck on unifying the inferred indices"
@@ -90,50 +118,84 @@
 
 type CoverM = ExceptionT SplitError TCM
 
-typeOfVar :: Telescope -> Nat -> Arg Type
+{- UNUSED
+typeOfVar :: Telescope -> Nat -> Dom Type
 typeOfVar tel n
   | n >= len  = __IMPOSSIBLE__
   | otherwise = fmap snd  -- throw away name, keep Arg Type
-                  $ ts !! fromIntegral n
+                  $ ts !! fromIntegral (len - 1 - n)
   where
     len = genericLength ts
-    ts  = reverse $ telToList tel
+    ts  = telToList tel
+-}
 
--- | Top-level function for checking pattern coverage.
+-- | Old top-level function for checking pattern coverage.
+--   DEPRECATED
 checkCoverage :: QName -> TCM ()
 checkCoverage f = do
   d <- getConstInfo f
-  TelV gamma _ <- telView $ defType d
-  let defn = theDef d
-  case defn of
-    Function{ funProjection = proj, funClauses = cs@(_:_) } -> do
-      let n            = genericLength $ clausePats $ head cs
-          np           = maybe 0 snd proj
-          gamma'       = telFromList $ genericTake n $ genericDrop np $ telToList gamma
-          xs           = map (fmap $ const $ VarP "_") $ telToList gamma'
-      reportSDoc "tc.cover.top" 10 $ vcat
-        [ text "Coverage checking"
-        , nest 2 $ vcat $ map (text . show . clausePats) cs
-        ]
-      (used, pss) <- cover cs $ SClause gamma' (idP n) xs (idSub gamma')
-      whenM (optCompletenessCheck <$> pragmaOptions) $
-        case pss of
-          []  -> return ()
-          _   ->
-            setCurrentRange (getRange cs) $
-              typeError $ CoverageFailure f pss
-      case Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used of
-        []  -> return ()
-        is  -> do
-          let unreached = map ((cs !!) . fromIntegral) is
-          setCurrentRange (getRange unreached) $
-            typeError $ UnreachableClauses f (map clausePats unreached)
-    _             -> __IMPOSSIBLE__
+  case theDef d of
+    Function{ funProjection = Nothing, funClauses = cs@(_:_) } -> do
+      coverageCheck f (defType d) cs
+      return ()
+    Function{ funProjection = Just _ } -> __IMPOSSIBLE__
+    _ -> __IMPOSSIBLE__
 
--- | Check that the list of clauses covers the given split clause.
---   Returns the missing cases.
-cover :: [Clause] -> SplitClause -> TCM (Set Nat, [[Arg Pattern]])
-cover cs (SClause tel perm ps _) = do
+-- | Top-level function for checking pattern coverage.
+coverageCheck :: QName -> Type -> [Clause] -> TCM SplitTree
+coverageCheck f t cs = do
+  TelV gamma a <- telView t
+  let -- n             = arity
+      -- lgamma/gamma' = telescope of non-dropped arguments
+      -- xs            = variable patterns fitting lgamma
+      n            = size gamma
+      lgamma       = telToList gamma
+      xs           = map (argFromDom . fmap (const $ VarP "_")) $ lgamma
+      -- construct the initial split clause
+      sc           = SClause gamma (idP n) xs idS $ Just a
+{- OLD
+  let -- n             = arity
+      -- lgamma/gamma' = telescope of non-dropped arguments
+      -- xs            = variable patterns fitting lgamma
+      n            = genericLength $ clausePats $ head cs
+      (lgamma, rgamma) = genericSplitAt n $ telToList gamma
+      gamma'       = telFromList lgamma
+      xs           = map (argFromDom . fmap (const $ VarP "_")) $ lgamma
+      -- construct the initial split clause
+      b            = telePi (telFromList rgamma) a
+      sc           = SClause gamma' (idP n) xs idS $ Just b
+-}
+  reportSDoc "tc.cover.top" 10 $ vcat
+    [ text "Coverage checking"
+    , nest 2 $ vcat $ map (text . show . clausePats) cs
+    ]
+  -- used = actually used clauses for cover
+  -- pss  = uncovered cases
+  (splitTree, used, pss) <- cover cs sc
+  reportSDoc "tc.cover.splittree" 10 $ vcat
+    [ text "generated split tree for" <+> prettyTCM f
+    , text $ show splitTree
+    ]
+  whenM (optCompletenessCheck <$> pragmaOptions) $
+    -- report an error if there are uncovered cases
+    unless (null pss) $
+        setCurrentRange (getRange cs) $
+          typeError $ CoverageFailure f pss
+  -- is = indices of unreachable clauses
+  let is = Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used
+  -- report an error if there are unreachable clauses
+  unless (null is) $ do
+      let unreached = map (cs !!) is
+      setCurrentRange (getRange unreached) $
+        typeError $ UnreachableClauses f (map clausePats unreached)
+  return splitTree
+
+
+-- | @cover cs (SClause _ _ ps _) = return (splitTree, used, pss)@.
+--   checks that the list of clauses @cs@ covers the given split clause.
+--   Returns the @splitTree@, the @used@ clauses, and missing cases @pss@.
+cover :: [Clause] -> SplitClause -> TCM (SplitTree, Set Nat, [[Arg Pattern]])
+cover cs sc@(SClause tel perm ps _ target) = do
   reportSDoc "tc.cover.cover" 10 $ vcat
     [ text "checking coverage of pattern:"
     , nest 2 $ text "tel  =" <+> prettyTCM tel
@@ -144,67 +206,122 @@
     Yes i          -> do
       reportSLn "tc.cover.cover" 10 $ "pattern covered by clause " ++ show i
       -- Check if any earlier clauses could match with appropriate literals
-      let is = [ j | (j, c) <- zip [0..] (genericTake i cs), matchLits c ps perm ]
+      let is = [ j | (j, c) <- zip [0..i-1] cs, matchLits c ps perm ]
+      -- OLD: let is = [ j | (j, c) <- zip [0..] (genericTake i cs), matchLits c ps perm ]
       reportSLn "tc.cover.cover"  10 $ "literal matches: " ++ show is
-      return (Set.fromList (i : is), [])
-    No      -> return (Set.empty, [ps])
-    Block x -> do
-      r <- split Inductive tel perm ps x
+      return (SplittingDone (size tel), Set.fromList (i : is), [])
+    No       -> return (SplittingDone (size tel), Set.empty, [ps])
+    Block bs -> do
+      reportSLn "tc.cover.strategy" 20 $ "blocking vars = " ++ show bs
+      -- xs is a non-empty lists of blocking variables
+      -- try splitting on one of them
+      xs <- splitStrategy bs tel
+      r <- altM1 (split Inductive sc) xs
       case r of
         Left err  -> case err of
           CantSplit c tel us vs _ -> typeError $ CoverageCantSplitOn c tel us vs
-          NotADatatype a          -> typeError $ CoverageCantSplitType a
-          IrrelevantDatatype a    -> typeError $ CoverageCantSplitIrrelevantType a
-          CoinductiveDatatype a   -> typeError $ CoverageCantSplitType a
+          NotADatatype a          -> enterClosure a $ typeError . CoverageCantSplitType
+          IrrelevantDatatype a    -> enterClosure a $ typeError . CoverageCantSplitIrrelevantType
+          CoinductiveDatatype a   -> enterClosure a $ typeError . CoverageCantSplitType
+{- UNUSED
           NoRecordConstructor a   -> typeError $ CoverageCantSplitType a
+ -}
           GenericSplitError s     -> fail $ "failed to split: " ++ s
-        Right scs -> (Set.unions -*- concat) . unzip <$> mapM (cover cs) scs
+        -- If we get the empty covering, we have reached an impossible case
+        -- and are done.
+        Right (Covering n []) ->
+          return (SplittingDone (size tel), Set.empty, [])
+        Right (Covering n scs) -> do
+          (trees, useds, psss) <- unzip3 <$> mapM (cover cs) (map snd scs)
+          let tree = SplitAt n $ zipWith (\ (q,_) t -> (q,t)) scs trees
+          return (tree, Set.unions useds, concat psss)
 
+splitStrategy :: BlockingVars -> Telescope -> TCM BlockingVars
+splitStrategy bs tel = return $ updateLast (mapSnd (const Nothing)) xs
+  -- Make sure we do not insists on precomputed coverage when
+  -- we make our last try to split.
+  -- Otherwise, we will not get a nice error message.
+  where
+    xs       = bs
+{-
+--  Andreas, 2012-10-13
+--  The following split strategy which prefers all-constructor columns
+--  fails on test/fail/CoverStrategy
+    xs       = ys ++ zs
+    (ys, zs) = partition allConstructors bs
+    allConstructors :: BlockingVar -> Bool
+    allConstructors = isJust . snd
+-}
+
 -- | Check that a type is a non-irrelevant datatype or a record with
 -- named constructor. Unless the 'Induction' argument is 'CoInductive'
 -- the data type must be inductive.
 isDatatype :: (MonadTCM tcm, MonadException SplitError tcm) =>
-              Induction -> Arg Type ->
+              Induction -> Dom Type ->
               tcm (QName, [Arg Term], [Arg Term], [QName])
 isDatatype ind at = do
-  let t = unArg at
+  let t       = unDom at
+      throw f = throwException . f =<< do liftTCM $ buildClosure t
   t' <- liftTCM $ reduce t
-  case unEl t' of
+  case ignoreSharing $ unEl t' of
     Def d args -> do
       def <- liftTCM $ theDef <$> getConstInfo d
       splitOnIrrelevantDataAllowed <- liftTCM $ optExperimentalIrrelevance <$> pragmaOptions
       case def of
         Datatype{dataPars = np, dataCons = cs, dataInduction = i}
           | i == CoInductive && ind /= CoInductive ->
-              throwException $ CoinductiveDatatype t
-          -- Andreas, 2011-10-03 allow some splitting on data (if only one constr. matches)
-          | argRelevance at == Irrelevant && not splitOnIrrelevantDataAllowed ->
-              throwException $ IrrelevantDatatype t
+              throw CoinductiveDatatype
+          -- Andreas, 2011-10-03 allow some splitting on irrelevant data (if only one constr. matches)
+          | domRelevance at == Irrelevant && not splitOnIrrelevantDataAllowed ->
+              throw IrrelevantDatatype
           | otherwise -> do
               let (ps, is) = genericSplitAt np args
               return (d, ps, is, cs)
-        Record{recPars = np, recCon = c, recNamedCon = hasCon} ->
-          if hasCon then return (d, args, [], [c])
-           else throwException $ NoRecordConstructor t
-        _ -> throwException $ NotADatatype t
-    _ -> throwException $ NotADatatype t
+        Record{recPars = np, recCon = c} ->
+          return (d, args, [], [c])
+        _ -> throw NotADatatype
+    _ -> throw NotADatatype
 
--- | @dtype == d pars ixs@
-computeNeighbourhood :: Telescope -> Telescope -> Permutation -> QName -> Args -> Args -> Nat -> OneHolePatterns -> QName -> CoverM [SplitClause]
-computeNeighbourhood delta1 delta2 perm d pars ixs hix hps con = do
+-- | @computeNeighbourhood delta1 delta2 perm d pars ixs hix hps con@
+--
+--   @
+--      delta1   Telescope before split point
+--      n        Name of pattern variable at split point
+--      delta2   Telescope after split point
+--      d        Name of datatype to split at
+--      pars     Data type parameters
+--      ixs      Data type indices
+--      hix      Index of split variable
+--      hps      Patterns with hole at split point
+--      con      Constructor to fit into hole
+--   @
+--   @dtype == d pars ixs@
+computeNeighbourhood :: Telescope -> String -> Telescope -> Permutation -> QName -> Args -> Args -> Nat -> OneHolePatterns -> QName -> CoverM [SplitClause]
+computeNeighbourhood delta1 n delta2 perm d pars ixs hix hps con = do
 
   -- Get the type of the datatype
   dtype <- liftTCM $ (`piApply` pars) . defType <$> getConstInfo d
 
   -- Get the real constructor name
-  Con con [] <- liftTCM $ constructorForm =<< normalise (Con con [])
+  Con con [] <- liftTCM $ ignoreSharing <$> (constructorForm =<< normalise (Con con []))
 
   -- Get the type of the constructor
   ctype <- liftTCM $ defType <$> getConstInfo con
 
   -- Lookup the type of the constructor at the given parameters
-  TelV gamma (El _ (Def _ cixs)) <- liftTCM $ telView (ctype `piApply` pars)
+  (gamma0, cixs) <- do
+    TelV gamma0 (El _ d) <- liftTCM $ telView (ctype `piApply` pars)
+    let Def _ cixs = ignoreSharing d
+    return (gamma0, cixs)
 
+  -- Andreas, 2012-02-25 preserve name suggestion for recursive arguments
+  -- of constructor
+
+  let preserve (x, t@(El _ (Def d' _))) | d == d' = (n, t)
+      preserve (x, (El s (Shared p))) = preserve (x, El s $ derefPtr p)
+      preserve p = p
+      gamma = telFromList . map (fmap preserve) . telToList $ gamma0
+
   debugInit con ctype pars ixs cixs delta1 delta2 gamma hps hix
 
   -- All variables are flexible
@@ -224,7 +341,7 @@
     DontKnow _    -> do
       debugCantSplit
       throwException $ CantSplit con (delta1 `abstract` gamma) conIxs givenIxs
-                                 [ Var i [] | i <- flex ]
+                                 [ var i | i <- flex ]
     Unifies sub   -> do
       debugSubst "sub" sub
 
@@ -233,16 +350,17 @@
           delta2' = subst conv $ raiseFrom 1 (size gamma) delta2
       debugTel "delta2'" delta2'
 
-      -- Compute a substitution ρ : Δ₁ΓΔ₂' → Δ₁(x:D)Δ₂
-      let rho = [ Var i [] | i <- [0..size delta2' - 1] ]
-             ++ [ raise (size delta2') conv ]
-             ++ [ Var i [] | i <- [size delta2' + size gamma ..] ]
+      -- Compute a substitution ρ : Δ₁ΓΔ₂' → Δ₁(x:D)Δ₂'
+      let rho = liftS (size delta2') $ conv :# raiseS (size gamma)
+             --    [ Var i [] | i <- [0..size delta2' - 1] ]
+             -- ++ [ raise (size delta2') conv ]
+             -- ++ [ Var i [] | i <- [size delta2' + size gamma ..] ]
 
       -- Plug the hole with the constructor and apply ρ
       -- TODO: Is it really correct to use Nothing here?
       let conp = ConP con Nothing $ map (fmap VarP) $ teleArgNames gamma
           ps   = plugHole conp hps
-          ps'  = substs rho ps      -- Δ₁ΓΔ₂' ⊢ ps'
+          ps'  = applySubst rho ps      -- Δ₁ΓΔ₂' ⊢ ps'
       debugPlugged ps ps'
 
       -- Δ₁Γ ⊢ sub, we need something in Δ₁ΓΔ₂'
@@ -271,14 +389,14 @@
 
       -- Compute the final patterns
       let ps'' = instantiatePattern sub' perm' ps'
-          rps  = substs rho' ps''
+          rps  = applySubst rho' ps''
 
       -- Compute the final substitution
-      let rsub  = substs rho' rho
+      let rsub  = applySubst rho' rho
 
       debugFinal theta' rperm rps
 
-      return [SClause theta' rperm rps rsub]
+      return [SClause theta' rperm rps rsub Nothing] -- target fixed later
 
   where
     debugInit con ctype pars ixs cixs delta1 delta2 gamma hps hix =
@@ -332,43 +450,62 @@
         , text "rps    =" <+> text (show ps)
         ]
 
--- | split Δ x ps. Δ ⊢ ps, x ∈ Δ (deBruijn index)
-splitClause :: Clause -> Nat -> TCM (Either SplitError Covering)
-splitClause c x =
-  split Inductive (clauseTel c) (clausePerm c) (clausePats c) x
-
+-- | Entry point from @Interaction.MakeCase@.
+--   @Abs@ is for absurd clause.
 splitClauseWithAbs :: Clause -> Nat -> TCM (Either SplitError (Either SplitClause Covering))
-splitClauseWithAbs c x =
-  split' Inductive (clauseTel c) (clausePerm c) (clausePats c) x
+splitClauseWithAbs c x = split' Inductive (clauseToSplitClause c) (x, Nothing)
 
+-- | Entry point from @TypeChecking.Empty@ and @Interaction.BasicOps@.
+splitLast :: Induction -> Telescope -> [Arg Pattern] -> TCM (Either SplitError Covering)
+splitLast ind tel ps = split ind sc (0, Nothing)
+  where sc = SClause tel (idP $ size tel) ps __IMPOSSIBLE__ Nothing
+
+-- | @split _ Δ π ps x@. FIXME: Δ ⊢ ps, x ∈ Δ (deBruijn index)
 split :: Induction
          -- ^ Coinductive constructors are allowed if this argument is
          -- 'CoInductive'.
-      -> Telescope -> Permutation -> [Arg Pattern] -> Nat
+      -> SplitClause
+      -> BlockingVar
       -> TCM (Either SplitError Covering)
-split ind tel perm ps x = do
-  r <- split' ind tel perm ps x
+split ind sc x = fmap (blendInAbsurdClause (splitDbIndexToLevel sc x)) <$>
+   split' ind sc x
+{- OLD
+split ind sc@SClause{ scTel = tel, scPerm = perm, scPats = ps } x =
+  r <- split' ind sc x
   return $ case r of
     Left err        -> Left err
-    Right (Left _)  -> Right []
+    Right (Left _)  -> Right $ Covering (dbIndexToLevel tel perm $ fst x) []
     Right (Right c) -> Right c
+-}
 
+blendInAbsurdClause :: Nat -> Either SplitClause Covering -> Covering
+blendInAbsurdClause n = either (const $ Covering n []) id
+
+splitDbIndexToLevel :: SplitClause -> BlockingVar -> Nat
+splitDbIndexToLevel sc@SClause{ scTel = tel, scPerm = perm } x =
+  dbIndexToLevel tel perm $ fst x
+
+-- | Convert a de Bruijn index relative to a telescope to a de Buijn level.
+--   The result should be the argument (counted from left, starting with 0)
+--   to split at (dot patterns included!).
+dbIndexToLevel tel perm x = if n < 0 then __IMPOSSIBLE__ else n
+  where n = permute perm [0..] !! (size tel - x - 1)
+
 split' :: Induction
           -- ^ Coinductive constructors are allowed if this argument is
           -- 'CoInductive'.
-       -> Telescope -> Permutation -> [Arg Pattern] -> Nat
+       -> SplitClause
+       -> BlockingVar
        -> TCM (Either SplitError (Either SplitClause Covering))
-split' ind tel perm ps x = liftTCM $ runExceptionT $ do
+split' ind sc@(SClause tel perm ps _ target) (x, mcons) = liftTCM $ runExceptionT $ do
 
   debugInit tel perm x ps
 
   -- Split the telescope at the variable
-  (delta1, delta2) <- do
-    let (tel1, _ : tel2) = genericSplitAt (size tel - x - 1) $ telToList tel
-    return (telFromList tel1, telFromList tel2)
-
-  -- Get the type of the variable
-  let t = typeOfVar tel x  -- Δ₁ ⊢ t
+  -- t = type of the variable,  Δ₁ ⊢ t
+  (n, t, delta1, delta2) <- do
+    let (tel1, Dom h r (n, t) : tel2) = genericSplitAt (size tel - x - 1) $ telToList tel
+    return (n, Dom h r t, telFromList tel1, telFromList tel2)
 
   -- Compute the one hole context of the patterns at the variable
   (hps, hix) <- do
@@ -377,20 +514,25 @@
       fail "split: bad holes or tel"
 
     -- There is always a variable at the given hole.
-    let (hix, (VarP s, hps)) = holes !! fromIntegral x
+    let (hix, (VarP s, hps)) = holes !! x
     debugHoleAndType delta1 delta2 s hps t
 
     return (hps, hix)
 
   -- Check that t is a datatype or a record
   -- Andreas, 2010-09-21, isDatatype now directly throws an exception if it fails
+  -- cons = constructors of this datatype
   (d, pars, ixs, cons) <- inContextOfT $ isDatatype ind t
 
   liftTCM $ whenM (optWithoutK <$> pragmaOptions) $
-    inContextOfT $ Split.wellFormedIndices pars ixs
+    inContextOfT $ Split.wellFormedIndices (unDom t)
 
   -- Compute the neighbourhoods for the constructors
-  ns <- concat <$> mapM (computeNeighbourhood delta1 delta2 perm d pars ixs hix hps) cons
+  ns <- concat <$> do
+    forM cons $ \ con ->
+      map (con,) <$> do
+        mapM fixTarget =<<
+          computeNeighbourhood delta1 n delta2 perm d pars ixs hix hps con
   case ns of
     []  -> do
       let absurd = VarP "()"
@@ -400,26 +542,62 @@
                                         telToList delta2
                , scPerm = perm
                , scPats = plugHole absurd hps
-               , scSubst = [] -- not used anyway
+               , scSubst = idS -- not used anyway
+               , scTarget = Nothing -- not used
                }
 
     -- Andreas, 2011-10-03
     -- if more than one constructor matches, we cannot be irrelevant
     -- (this piece of code is unreachable if --experimental-irrelevance is off)
-    (_ : _ : _) | unusableRelevance (argRelevance t) ->
-      throwException $ IrrelevantDatatype (unArg t)
+    (_ : _ : _) | unusableRelevance (domRelevance t) ->
+      throwException . IrrelevantDatatype =<< do liftTCM $ buildClosure (unDom t)
 
-    _   -> return $ Right ns
+  -- Andreas, 2012-10-10 fail if precomputed constructor set does not cover
+  -- all the data type constructors
 
+    _ | Just pcons <- mcons,
+        let cons = (map fst ns),
+        let diff = Set.fromList cons Set.\\ Set.fromList pcons,
+        not (Set.null diff) -> do
+          liftTCM $ reportSDoc "tc.cover.precomputed" 10 $ vcat
+            [ hsep $ text "pcons =" : map prettyTCM pcons
+            , hsep $ text "cons  =" : map prettyTCM cons
+            ]
+          throwException (GenericSplitError "precomputed set of constructors does not cover all cases")
+
+    _  -> return $ Right $ Covering xDBLevel ns
+
   where
+    xDBLevel = dbIndexToLevel tel perm x
 
+    -- update the target type, add more patterns to split clause
+    -- if target becomes a function type.
+    fixTarget :: SplitClause -> CoverM SplitClause
+    fixTarget sc@SClause{ scSubst = sigma } =
+      flip (maybe $ return sc) target $ \ a -> do
+        TelV tel b <- lift $ telView $ applySubst sigma a
+        let n      = size tel
+            lgamma = telToList tel
+            xs     = map (argFromDom . fmap (const $ VarP "_")) $ lgamma
+        if (n == 0) then return sc { scTarget = Just b }
+         else return $ SClause
+          { scTel    = telFromList $ telToList (scTel sc) ++ lgamma
+          , scPerm   = liftP n $ scPerm sc
+          , scPats   = scPats sc ++ xs
+          , scSubst  = liftS n $ sigma
+          , scTarget = Just b
+          }
+
     inContextOfT :: MonadTCM tcm => tcm a -> tcm a
-    inContextOfT = escapeContext (fromIntegral x + 1)
+    inContextOfT = addCtxTel tel . escapeContext (x + 1)
 
+    inContextOfDelta2 :: MonadTCM tcm => tcm a -> tcm a
+    inContextOfDelta2 = addCtxTel tel . escapeContext x
+
     -- Debug printing
     debugInit tel perm x ps =
       liftTCM $ reportSDoc "tc.cover.top" 10 $ vcat
-        [ text "TypeChecking.Rules.LHS.Coverage.split': split"
+        [ text "TypeChecking.Coverage.split': split"
         , nest 2 $ vcat
           [ text "tel     =" <+> prettyTCM tel
           , text "perm    =" <+> text (show perm)
@@ -433,6 +611,6 @@
         [ text "p      =" <+> text s
         , text "hps    =" <+> text (show hps)
         , text "delta1 =" <+> prettyTCM delta1
-        , text "delta2 =" <+> prettyTCM delta2
+        , text "delta2 =" <+> inContextOfDelta2 (prettyTCM delta2)
         , text "t      =" <+> inContextOfT (prettyTCM t)
         ]
diff --git a/src/full/Agda/TypeChecking/Coverage/Match.hs b/src/full/Agda/TypeChecking/Coverage/Match.hs
--- a/src/full/Agda/TypeChecking/Coverage/Match.hs
+++ b/src/full/Agda/TypeChecking/Coverage/Match.hs
@@ -1,9 +1,12 @@
-{-# LANGUAGE CPP, DeriveFunctor #-}
+{-# LANGUAGE CPP, PatternGuards, DeriveFunctor #-}
 
 module Agda.TypeChecking.Coverage.Match where
 
 import Control.Applicative
 import Control.Monad.State
+
+import Data.Map (Map)
+import qualified Data.Map as Map
 import Data.Monoid
 import Data.Traversable (traverse)
 import Data.Function
@@ -15,10 +18,50 @@
 
 import Agda.Utils.Permutation
 import Agda.Utils.Size
+import Agda.Utils.List
 
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
+{-| Given
+
+    1. the function clauses @cs@
+    2. the patterns @ps@ and permutation @perm@ of a split clause
+
+we want to compute a variable index of the split clause to split on next.
+
+First, we find the set @cs'@ of all the clauses that are
+instances (via substitutions @rhos@) of the split clause.
+
+In these substitutions, we look for a column that has only constructor patterns.
+We try to split on this column first.
+-}
+{-
+nonOverlappingCompleteMatches :: [Clause] -> [Arg Pattern] -> Permutation -> Match Nat
+nonOverlappingCompleteMatches cs ps perm
+-}
+
+-- | Match the given patterns against a list of clauses
+match :: [Clause] -> [Arg Pattern] -> Permutation -> Match Nat
+match cs ps perm = foldr choice No $ zipWith matchIt [0..] cs
+  where
+    mps = buildMPatterns perm ps
+
+    -- If liberal matching on literals fails or blocks we go with that.
+    -- If it succeeds we use the result from conservative literal matching.
+    -- This is to make sure that we split enough when literals are involved.
+    -- For instance,
+    --    f ('x' :: 'y' :: _) = ...
+    --    f (c :: s) = ...
+    -- would never split the tail of the list if we only used conservative
+    -- literal matching.
+    matchIt i c = matchClause yesMatchLit mps i c +++
+                  matchClause noMatchLit  mps i c
+
+    Yes _   +++ m = m
+    No      +++ _ = No
+    Block x +++ _ = Block x
+
 -- | We use a special representation of the patterns we're trying to match
 --   against a clause. In particular we want to keep track of which variables
 --   are blocking a match.
@@ -27,7 +70,7 @@
 buildMPatterns :: Permutation -> [Arg Pattern] -> [Arg MPat]
 buildMPatterns perm ps = evalState (mapM (traverse build) ps) xs
   where
-    xs   = permute (invertP perm) $ reverse [0 .. size perm - 1]
+    xs   = permute (invertP perm) $ downFrom (size perm)  -- reverse [0 .. size perm - 1]
     tick = do x : xs <- get; put xs; return x
 
     build (VarP _)        = VarMP <$> tick
@@ -39,23 +82,44 @@
     buildT (Var i [])     = return (VarMP i)
     buildT _              = return WildMP
 
+
 -- | If matching is inconclusive (@Block@) we want to know which
---   variable is blocking the match.
-data Match a = Yes a | No | Block Nat
+--   variables are blocking the match.
+data Match a
+  = Yes a                -- ^ Matches unconditionally.
+  | No                   -- ^ Definitely does not match.
+  | Block BlockingVars   -- ^ Could match if non-empty list of blocking variables
+                         --   is instantiated properly.
   deriving (Functor)
 
-instance Monoid a => Monoid (Match a) where
-  mempty                    = Yes mempty
-  Yes a   `mappend` Yes b   = Yes $ mappend a b
-  Yes _   `mappend` No      = No
-  Yes _   `mappend` Block x = Block x
-  No      `mappend` _       = No
-  Block x `mappend` _       = Block x
+-- | @Nothing@ means there is an overlapping match for this variable.
+--   @Just cons@ means that it is an non-overlapping match and
+--   @cons@ are the encountered constructors.
+type BlockingVar  = (Nat, (Maybe [QName]))
+type BlockingVars = [BlockingVar]
 
+overlapping :: BlockingVars -> BlockingVars
+overlapping = map $ \ (x, _) -> (x, Nothing)
+
+-- | Left dominant merge of blocking vars.
+zipBlockingVars :: BlockingVars -> BlockingVars -> BlockingVars
+zipBlockingVars xs ys = map upd xs
+  where
+    upd (x, Just cons) | Just (Just cons') <- lookup x ys =
+     (x, Just $ cons ++ cons')
+    upd (x, _) = (x, Nothing)
+
+-- | @choice m m'@ combines the match results @m@ of a function clause
+--   with the (already combined) match results $m'$ of the later clauses.
+--   It is for skipping clauses that definitely do not match ('No').
+--   It is left-strict, to be used with @foldr@.
+--   If one clause unconditionally matches ('Yes') we do not look further.
 choice :: Match a -> Match a -> Match a
-choice (Yes a) _   = Yes a
-choice (Block x) _ = Block x
-choice No m        = m
+choice (Yes a)   _         = Yes a
+choice (Block x) (Block y) = Block (zipBlockingVars x y)
+choice (Block x) (Yes _)   = Block $ overlapping x
+choice (Block x) No        = Block x
+choice No        m         = m
 
 type MatchLit = Literal -> MPat -> Match ()
 
@@ -67,47 +131,79 @@
 yesMatchLit _ WildMP{} = Yes ()
 yesMatchLit _ _        = No
 
--- | Match the given patterns against a list of clauses
-match :: [Clause] -> [Arg Pattern] -> Permutation -> Match Nat
-match cs ps perm = foldr choice No $ zipWith matchIt [0..] cs
-  where
-    mps = buildMPatterns perm ps
-
-    -- If liberal matching on literals fails or blocks we go with that.
-    -- If it succeeds we use the result from conservative literal matching.
-    -- This is to make sure that we split enough when literals are involved.
-    -- For instance,
-    --    f ('x' :: 'y' :: _) = ...
-    --    f (c :: s) = ...
-    -- would never split the tail of the list if we only used conservative
-    -- literal matching.
-    matchIt i c = matchClause yesMatchLit mps i c +++
-                  matchClause noMatchLit  mps i c
-
-    Yes _   +++ m = m
-    No      +++ _ = No
-    Block x +++ _ = Block x
-
 -- | Check if a clause could match given generously chosen literals
 matchLits :: Clause -> [Arg Pattern] -> Permutation -> Bool
-matchLits c ps perm = case matchClause yesMatchLit (buildMPatterns perm ps) 0 c of
-  Yes _ -> True
-  _     -> False
+matchLits c ps perm =
+  case matchClause yesMatchLit (buildMPatterns perm ps) 0 c of
+    Yes _ -> True
+    _     -> False
 
+-- | @matchClause mlist qs i c@ checks whther clause @c@ number @i@
+--   covers a split clause with patterns @qs@.
 matchClause :: MatchLit -> [Arg MPat] -> Nat -> Clause -> Match Nat
 matchClause mlit qs i c = fmap (const i) $ matchPats mlit (clausePats c) qs
 
+-- | @matchPats mlist ps qs@ checks whether a function clause with patterns
+--   @ps@ covers a split clause with patterns @qs@
 matchPats :: MatchLit -> [Arg Pattern] -> [Arg MPat] -> Match ()
 matchPats mlit ps qs = mconcat $ zipWith (matchPat mlit) (map unArg ps) (map unArg qs)
 
+-- | Combine results of checking whether function clause patterns
+--   covers split clause patterns.
+--
+--   'No' is dominant: if one function clause pattern is disjoint to
+--   the corresponding split clause pattern, then
+--   the whole clauses are disjoint.
+--
+--   'Yes' is neutral: for a match, all patterns have to match.
+--
+--   'Block' accumulates variables of the split clause
+--   that have to be instantiated
+--   to make the split clause an instance of the function clause.
+instance Monoid a => Monoid (Match a) where
+  mempty                    = Yes mempty
+  Yes a   `mappend` Yes b   = Yes $ mappend a b
+  Yes _   `mappend` No      = No
+  Yes _   `mappend` Block x = Block x
+  No      `mappend` _       = No
+  Block x `mappend` Yes b   = Block x
+  Block x `mappend` No      = No
+  Block x `mappend` Block y = Block $ mappend x y
+
+-- | @matchPat mlit p q@ checks whether a function clause pattern @p@
+--   covers a split clause pattern @q@.  There are three results:
+--   @Yes ()@ means it covers, because @p@ is a variable
+--   pattern or @q@ is a wildcard.
+--   @No@ means it does not cover.
+--   @Block [x]@ means @p@ is a proper instance of @q@ and could become
+--   a cover if @q@ was split on variable @x@.
 matchPat :: MatchLit -> Pattern -> MPat -> Match ()
 matchPat _    (VarP _) _ = Yes ()
 matchPat _    (DotP _) _ = Yes ()
 matchPat mlit (LitP l) q = mlit l q
+-- matchPat mlit (ConP c (Just _) ps) q | recordPattern ps = Yes ()  -- Andreas, 2012-07-25 record patterns always match!
 matchPat mlit (ConP c _ ps) q = case q of
-  VarMP x -> Block x
+  VarMP x -> Block [(x, Just [c])]
   WildMP  -> Yes ()
   ConMP c' qs
     | c == c'   -> matchPats mlit ps qs
     | otherwise -> No
   LitMP _ -> __IMPOSSIBLE__
+
+{- UNUSED
+class RecordPattern a where
+  recordPattern :: a -> Bool
+
+instance RecordPattern Pattern where
+  recordPattern VarP{} = True
+  recordPattern DotP{} = False
+  recordPattern LitP{} = False
+  recordPattern (ConP _ Nothing _) = False
+  recordPattern (ConP _ (Just _) ps) = recordPattern ps
+
+instance RecordPattern a => RecordPattern [a] where
+  recordPattern = all recordPattern
+
+instance RecordPattern a => RecordPattern (Arg a) where
+  recordPattern = recordPattern . unArg
+-}
diff --git a/src/full/Agda/TypeChecking/Coverage/SplitTree.hs b/src/full/Agda/TypeChecking/Coverage/SplitTree.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Coverage/SplitTree.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE CPP #-}
+
+{-| Split tree for transforming pattern clauses into case trees.
+
+The coverage checker generates a split tree from the clauses.
+The clause compiler uses it to transform clauses to case trees.
+
+The initial problem is a set of clauses.  The root node designates
+on which argument to split and has subtrees for all the constructors.
+Splitting continues until there is only a single clause left at
+each leaf of the split tree.
+
+-}
+module Agda.TypeChecking.Coverage.SplitTree where
+
+import Data.Tree
+import Test.QuickCheck
+
+import Agda.Syntax.Common
+import Agda.Syntax.Abstract.Name
+
+import Agda.Utils.Monad
+import Agda.Utils.Impossible
+#include "../../undefined.h"
+
+type SplitTree  = SplitTree'  QName
+type SplitTrees = SplitTrees' QName
+
+-- | Abstract case tree shape.
+data SplitTree' a
+  = -- | No more splits coming. We are at a single, all-variable
+    -- clause.
+    SplittingDone
+    { splitBindings :: Int       -- ^  The number of variables bound in the clause
+    }
+  | -- | A split is necessary.
+    SplitAt
+    { splitArg   :: Int           -- ^ Arg. no to split at.
+    , splitTrees :: SplitTrees' a -- ^ Sub split trees.
+    }
+    deriving (Eq)
+
+-- | Split tree branching.  A finite map from constructor names to splittrees
+--   A list representation seems appropriate, since we are expecting not
+--   so many constructors per data type, and there is no need for
+--   random access.
+type SplitTrees' a = [(a, SplitTree' a)]
+
+-- * Printing a split tree
+
+data SplitTreeLabel a = SplitTreeLabel
+  { lblConstructorName :: Maybe a   -- ^ 'Nothing' for root of split tree
+  , lblSplitArg        :: Maybe Int
+  , lblBindings        :: Maybe Int
+  }
+instance Show a => Show (SplitTreeLabel a) where
+  show (SplitTreeLabel Nothing Nothing (Just n))  = "done, " ++ show n ++ " bindings"
+  show (SplitTreeLabel Nothing (Just n) Nothing)  = "split at " ++ show n
+  show (SplitTreeLabel (Just q) Nothing (Just n)) = show q ++ " -> done, " ++ show n ++ " bindings"
+  show (SplitTreeLabel (Just q) (Just n) Nothing) = show q ++ " -> split at " ++ show n
+  show _ = __IMPOSSIBLE__
+
+-- | Convert a split tree into a 'Data.Tree' (for printing).
+toTree :: SplitTree' a -> Tree (SplitTreeLabel a)
+toTree t = case t of
+  SplittingDone n -> Node (SplitTreeLabel Nothing Nothing (Just n)) []
+  SplitAt n ts    -> Node (SplitTreeLabel Nothing (Just n) Nothing) $ toTrees ts
+
+toTrees :: SplitTrees' a -> Forest (SplitTreeLabel a)
+toTrees = map (\ (c,t) -> setCons c $ toTree t)
+  where
+    setCons :: a -> Tree (SplitTreeLabel a) -> Tree (SplitTreeLabel a)
+    setCons c (Node l ts) = Node (l { lblConstructorName = Just c }) ts
+
+instance Show a => Show (SplitTree' a) where
+  show = drawTree . fmap show . toTree
+
+-- * Generating random split trees for testing
+
+instance Arbitrary a => Arbitrary (SplitTree' a) where
+  arbitrary = frequency
+    [ (5, return $ SplittingDone 0)
+    , (3, SplitAt <$> choose (1,5) <*> (take 3 <$> listOf1 arbitrary))
+    ]
+
+-- * Testing the printer
+
+newtype CName = CName String
+instance Show CName where
+  show (CName s) = s
+
+instance Arbitrary CName where
+  arbitrary = CName <$> elements
+    [ "zero", "suc", "nil", "cons", "left", "right", "just", "nothing" ]
+
+testSplitTreePrinting = sample (arbitrary :: Gen (SplitTree' CName))
diff --git a/src/full/Agda/TypeChecking/Datatypes.hs b/src/full/Agda/TypeChecking/Datatypes.hs
--- a/src/full/Agda/TypeChecking/Datatypes.hs
+++ b/src/full/Agda/TypeChecking/Datatypes.hs
@@ -2,6 +2,7 @@
 
 module Agda.TypeChecking.Datatypes where
 
+import Control.Applicative ((<$>))
 import Data.List
 
 import Agda.Syntax.Common
@@ -11,8 +12,8 @@
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Substitute
 
+import Agda.Utils.Size
 import Agda.Utils.Impossible
-
 #include "../undefined.h"
 
 -- | Get the name of the datatype constructed by a given constructor.
@@ -24,6 +25,30 @@
     Constructor{conData = d} -> return d
     _                        -> __IMPOSSIBLE__
 
+
+-- | Return the number of non-parameter arguments to a data constructor,
+--   or the field names of a record constructor.
+--
+--   For getting just the arity of constructor @c@,
+--   use @either id size <$> getConstructorArity c@.
+getConstructorArity :: QName -> TCM (Either Nat [Arg QName])
+getConstructorArity c = do
+  Defn{ defType = t, theDef = def } <- getConstInfo c
+  case def of
+    Constructor{ conData = d, conPars = n } -> do
+      def <- theDef <$> getConstInfo d
+      case def of
+        Record{ recFields = fs } ->
+           return $ Right fs
+        Datatype{} -> do
+          -- TODO: I do not want to take the type of constructor apart
+          -- to see its arity!
+          TelV tel _ <- telView t
+          return $ Left $ size tel - n
+        _ -> __IMPOSSIBLE__
+    _ -> __IMPOSSIBLE__
+
+
 -- | Check if a name refers to a datatype or a record with a named constructor.
 isDatatype :: QName -> TCM Bool
 isDatatype d = do
@@ -33,15 +58,32 @@
     Record{recNamedCon = namedC} -> return namedC
     _                            -> return False
 
+data DataOrRecord = IsData | IsRecord
+  deriving (Eq, Ord, Show)
+
 -- | Check if a name refers to a datatype or a record.
-isDataOrRecordType :: QName -> TCM Bool
+isDataOrRecordType :: QName -> TCM (Maybe DataOrRecord)
 isDataOrRecordType d = do
   def <- getConstInfo d
   case theDef def of
-    Datatype{} -> return True
-    Record{}   -> return True
-    _          -> return False
+    Datatype{} -> return $ Just IsData
+    Record{}   -> return $ Just IsRecord
+    _          -> return $ Nothing
 
+isDataOrRecord :: Term -> TCM (Maybe QName)
+isDataOrRecord (Def d _)  = fmap (const d) <$> isDataOrRecordType d
+isDataOrRecord (Shared p) = isDataOrRecord (derefPtr p)
+isDataOrRecord _          = return Nothing
+
+getNumberOfParameters :: QName -> TCM (Maybe Nat)
+getNumberOfParameters d = do
+  def <- getConstInfo d
+  case theDef def of
+    Datatype{ dataPars = n} -> return $ Just n
+    Record{ recPars = n}    -> return $ Just n
+    _                       -> return Nothing
+
+{- UNUSED
 data DatatypeInfo = DataInfo
   { datatypeName   :: QName
   , datatypeParTel :: Telescope
@@ -80,3 +122,4 @@
                           , datatypeIxs    = is
                           }
     _ -> return Nothing
+-}
diff --git a/src/full/Agda/TypeChecking/DisplayForm.hs b/src/full/Agda/TypeChecking/DisplayForm.hs
--- a/src/full/Agda/TypeChecking/DisplayForm.hs
+++ b/src/full/Agda/TypeChecking/DisplayForm.hs
@@ -5,12 +5,14 @@
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Error
+import Data.Traversable hiding (mapM)
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Level
 import Agda.Syntax.Scope.Base
 import Agda.Utils.Size
 
@@ -28,16 +30,19 @@
       xs <- mapM tryOpen odfs
       return [ df | Just df <- xs ]
     scope <- getScope
-    let matches dfs vs = [ m | Just m <- map (flip matchDisplayForm vs) dfs, inScope scope m ]
+    ms <- do
+      ms <- mapM (flip matchDisplayForm vs) dfs
+      return [ m | Just m <- ms, inScope scope m ]
     -- Not safe when printing non-terminating terms.
     -- (nfdfs, us) <- normalise (dfs, vs)
     unless (null odfs) $ reportSLn "tc.display.top" 100 $ unlines
-      [ "displayForms: " ++ show dfs
+      [ "name        : " ++ show c
+      , "displayForms: " ++ show dfs
       , "arguments   : " ++ show vs
-      , "matches     : " ++ show (matches dfs vs)
-      , "result      : " ++ show (foldr (const . Just) Nothing $ matches dfs vs)
+      , "matches     : " ++ show ms
+      , "result      : " ++ show (foldr (const . Just) Nothing ms)
       ]
-    return $ foldr (const . Just) Nothing $ matches dfs vs -- ++ matches nfdfs us
+    return $ foldr (const . Just) Nothing ms
   `catchError` \_ -> return Nothing
   where
     inScope _ _ = True  -- TODO: distinguish between with display forms and other display forms
@@ -46,35 +51,49 @@
 --       Nothing -> __IMPOSSIBLE__ -- TODO: currently all display forms have heads
     hd (DTerm (Def x _))    = Just x
     hd (DTerm (Con x _))    = Just x
+    hd (DTerm (Shared p))   = hd (DTerm $ derefPtr p)
     hd (DWithApp (d : _) _) = hd d
     hd _		    = Nothing
 
-matchDisplayForm :: DisplayForm -> Args -> Maybe DisplayTerm
+matchDisplayForm :: DisplayForm -> Args -> TCM (Maybe DisplayTerm)
 matchDisplayForm (Display n ps v) vs
-  | length ps > length vs = Nothing
+  | length ps > length vs = return Nothing
   | otherwise             = do
-    us <- match n ps $ raise 1 (map unArg vs0)
-    return $ substs (reverse us ++ ctx) v `apply` vs1
+    mus <- match n ps $ raise 1 (map unArg vs0)
+    return $ fmap (\us -> applySubst (parallelS (reverse us)) v `apply` vs1) mus
   where
-    -- TODO: figure out the length of the context
-    ctx = [ Var i [] | i <- [0..] ]
     (vs0, vs1) = splitAt (length ps) vs
 
 class Match a where
-  match :: Nat -> a -> a -> Maybe [Term]
+  match :: Nat -> a -> a -> TCM (Maybe [Term])
 
 instance Match a => Match [a] where
-  match n xs ys = concat <$> zipWithM (match n) xs ys
+  match n xs ys = fmap concat . traverse id <$> zipWithM (match n) xs ys
 
 instance Match a => Match (Arg a) where
   match n p v = match n (unArg p) (unArg v)
 
 instance Match Term where
-  match n p v = case (p, v) of
-    (Var 0 [], v)                  -> return [subst __IMPOSSIBLE__ v]
+  match n p v = case (ignoreSharing p, ignoreSharing v) of
+    (Var 0 [], v)                  -> return $ Just [subst __IMPOSSIBLE__ v]
     (Var i ps, Var j vs) | i == j  -> match n ps vs
     (Def c ps, Def d vs) | c == d  -> match n ps vs
     (Con c ps, Con d vs) | c == d  -> match n ps vs
-    (Lit l, Lit l')      | l == l' -> return []
-    (p, v)               | p == v  -> return []
-    _                              -> fail ""
+    (Lit l, Lit l')      | l == l' -> return $ Just []
+    (p, v)               | p == v  -> return $ Just []
+    (p, Level l)                   -> match n p =<< reallyUnLevelView l
+    (Sort ps, Sort pv)             -> match n ps pv
+    (p, Sort (Type v))             -> match n p =<< reallyUnLevelView v
+    _                              -> return Nothing
+
+instance Match Sort where
+  match n p v = case (p, v) of
+    (Type pl, Type vl) -> match n pl vl
+    _ | p == v -> return $ Just []
+    _          -> return Nothing
+
+instance Match Level where
+  match n p v = do
+    p <- reallyUnLevelView p
+    v <- reallyUnLevelView v
+    match n p v
diff --git a/src/full/Agda/TypeChecking/DropArgs.hs b/src/full/Agda/TypeChecking/DropArgs.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/DropArgs.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE CPP, PatternGuards, TypeSynonymInstances, FlexibleInstances #-}
+module Agda.TypeChecking.DropArgs where
+
+import Agda.Syntax.Internal
+import Agda.Syntax.Position
+
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Substitute
+
+import Agda.TypeChecking.CompiledClause
+-- import Agda.TypeChecking.CompiledClause.Compile
+
+import Agda.Utils.Permutation
+
+
+#include "../undefined.h"
+import Agda.Utils.Impossible
+
+---------------------------------------------------------------------------
+-- * Dropping initial arguments to create a projection-like function
+---------------------------------------------------------------------------
+
+-- | When making a function projection-like, we drop the first @n@
+--   arguments.
+class DropArgs a where
+  dropArgs :: Int -> a -> a
+
+-- | NOTE: This creates telescopes with unbound de Bruijn indices.
+instance DropArgs Telescope where
+  dropArgs n tel = telFromList $ drop n $ telToList tel
+
+instance DropArgs Permutation where
+  dropArgs n (Perm m p) = Perm (m - n) $ map (subtract n) $ drop n p
+
+-- | NOTE: does not go into the body, so does not work for recursive functions.
+instance DropArgs ClauseBody where
+  dropArgs 0 b        = b
+  dropArgs _ NoBody   = NoBody
+  dropArgs n (Bind b) = dropArgs (n - 1) (absBody b)
+  dropArgs n Body{}   = __IMPOSSIBLE__
+
+-- | NOTE: does not work for recursive functions.
+instance DropArgs Clause where
+  dropArgs n cl =
+      cl{ clausePerm = dropArgs n $ clausePerm cl
+        , clauseTel  = dropArgs n $ clauseTel cl
+          -- Andreas, 2012-09-25: just dropping the front of telescope
+          -- makes it ill-formed (unbound indices)
+          -- we should let the telescope intact!?
+        , clausePats = drop n $ clausePats cl
+        , clauseBody = dropArgs n $ clauseBody cl -- BUG: need to drop also from recursive calls!!
+        }
+
+instance DropArgs FunctionInverse where
+  dropArgs n finv = fmap (dropArgs n) finv
+
+{- UNUSED, but don't remove (Andreas, 2012-10-08)
+-- | Use for dropping initial lambdas in compiled clause bodies.
+--   NOTE: does not reduce term, need lambdas to be present.
+instance DropArgs Term where
+  dropArgs 0 v = v
+  dropArgs n v = case ignoreSharing v of
+    Lam h b -> dropArgs (n - 1) (absBody b)
+    _       -> __IMPOSSIBLE__
+-}
+
+-- | To drop the first @n@ arguments in a compiled clause,
+--   we reduce the split argument indices by @n@ and
+--   drop @n@ arguments from the bodies.
+--   NOTE: this only works for non-recursive functions, we
+--   are not dropping arguments to recursive calls in bodies.
+instance DropArgs CompiledClauses where
+  dropArgs n cc = case cc of
+    Case i br | i < n         -> __IMPOSSIBLE__
+              | otherwise     -> Case (i - n) $ fmap (dropArgs n) br
+    Done xs t | length xs < n -> __IMPOSSIBLE__
+              | otherwise     -> Done (drop n xs) t
+    Fail                      -> Fail
+
diff --git a/src/full/Agda/TypeChecking/Eliminators.hs b/src/full/Agda/TypeChecking/Eliminators.hs
--- a/src/full/Agda/TypeChecking/Eliminators.hs
+++ b/src/full/Agda/TypeChecking/Eliminators.hs
@@ -11,14 +11,17 @@
 import Agda.TypeChecking.Substitute
 import Agda.Utils.Impossible
 import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Level
 
 #include "../undefined.h"
 
-data ElimView = VarElim Nat [Elim]
-              | DefElim QName [Elim]
-              | ConElim QName [Elim]
-              | MetaElim MetaId [Elim]
-              | NoElim Term
+data ElimView
+  = VarElim Nat [Elim]
+  | DefElim QName [Elim]
+  | ConElim QName [Elim]
+  | MetaElim MetaId [Elim]
+  | NoElim Term
+  deriving (Show)
 
 elimView :: Term -> TCM ElimView
 elimView v = do
@@ -26,7 +29,12 @@
   -- since reducing a stuck application doesn't necessarily reduces all
   -- the arguments.
   v <- reduce v
-  case v of
+  -- domi 2012-7-24: Add unLevel to handle neutral levels. The problem is that reduce turns
+  -- suc (neutral) into Level (Max [Plus 1 (NeutralLevel neutral)]) which the below pattern
+  -- match does not handle.
+  v <- unLevel v
+  reportSLn "tc.conv.elim" 50 $ "v = " ++ show v
+  case ignoreSharing v of
     Def f vs -> do
       proj <- isProjection f
       case proj of
@@ -46,6 +54,7 @@
     Sort{}     -> noElim
     Pi{}       -> noElim
     DontCare{} -> noElim
+    Shared p   -> __IMPOSSIBLE__
     where
       noElim = return $ NoElim v
       app f vs = return $ f $ map Apply vs
@@ -56,6 +65,7 @@
       elim es2 (ConElim  x es1) = ConElim  x (es1 ++ es2)
       elim es2 (MetaElim x es1) = MetaElim x (es1 ++ es2)
 
+{- UNUSED
 -- | Only used when producing error messages.
 unElimView :: ElimView -> Term
 unElimView v = case v of
@@ -69,3 +79,4 @@
 unElim v [] = v
 unElim v (Apply u : es) = unElim (v `apply` [u]) es
 unElim v (Proj f : es)  = unElim (Def f [Arg NotHidden Relevant v]) es
+-}
diff --git a/src/full/Agda/TypeChecking/Empty.hs b/src/full/Agda/TypeChecking/Empty.hs
--- a/src/full/Agda/TypeChecking/Empty.hs
+++ b/src/full/Agda/TypeChecking/Empty.hs
@@ -2,9 +2,11 @@
 module Agda.TypeChecking.Empty where
 
 import Control.Applicative
+import Control.Monad
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+import Agda.Syntax.Position
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Coverage
@@ -15,31 +17,40 @@
 import Agda.Utils.Permutation
 import Agda.Utils.Size
 
+{- UNUSED
 -- | Make sure that a type is empty.
-isReallyEmptyType :: Type -> TCM ()
-isReallyEmptyType t = noConstraints $ isEmptyType t
+isReallyEmptyType :: Range -> Type -> TCM ()
+isReallyEmptyType r t = noConstraints $ isEmptyType r t
+-}
 
-isEmptyType :: Type -> TCM ()
-isEmptyType t = do
+-- | Check whether a type is empty.  Maybe postponed as emptyness constraint.
+isEmptyType :: Range -> Type -> TCM ()
+isEmptyType r t = do
   tb <- reduceB t
   let t = ignoreBlocking tb
-  case unEl <$> tb of
+      postpone = addConstraint (IsEmpty r t)
+  case ignoreSharing . unEl <$> tb of
     -- if t is blocked or a meta, we cannot decide emptyness now. postpone
-    NotBlocked MetaV{} -> addConstraint (IsEmpty t)
-    Blocked{}          -> addConstraint (IsEmpty t)
+    NotBlocked MetaV{} -> postpone
+    Blocked{}          -> postpone
     _                  -> do
     -- from the current context xs:ts, create a pattern list
     -- xs _ : ts t and try to split on _ (the last variable)
       tel0 <- getContextTelescope
-      let gamma = telToList tel0 ++ [defaultArg ("_", t)]
-          ps    = [ Arg h r $ VarP x | Arg h r (x, _) <- gamma ]
+      let gamma = telToList tel0 ++ [domFromArg $ defaultArg ("_", t)]
+          ps    = [ Arg h r $ VarP x | Dom h r (x, _) <- gamma ]
           tel   = telFromList gamma
 
-      r <- split Inductive tel (idP $ size tel) ps 0
+      dontAssignMetas $ do
+      r <- splitLast Inductive tel ps
 
       case r of
         Left err  -> case err of
-          CantSplit c tel us vs _ -> traceCall (CheckIsEmpty t) $ typeError $ CoverageCantSplitOn c tel us vs
+          CantSplit c tel us vs _ -> postpone
+          -- Andreas, 2012-03-15: allow postponement of emptyness check
+          -- OLD CODE: traceCall (CheckIsEmpty t) $ typeError $ CoverageCantSplitOn c tel us vs
           _                       -> typeError $ ShouldBeEmpty t []
-        Right []  -> return ()
-        Right cs  -> typeError $ ShouldBeEmpty t $ map (unArg . last . scPats) cs
+        Right cov -> do
+          let cs = splitClauses cov
+          unless (null cs) $
+            typeError $ ShouldBeEmpty t $ map (unArg . last . scPats) $ cs
diff --git a/src/full/Agda/TypeChecking/Empty.hs-boot b/src/full/Agda/TypeChecking/Empty.hs-boot
--- a/src/full/Agda/TypeChecking/Empty.hs-boot
+++ b/src/full/Agda/TypeChecking/Empty.hs-boot
@@ -3,6 +3,7 @@
 
 import Agda.TypeChecking.Monad (TCM)
 import Agda.Syntax.Internal (Type)
+import Agda.Syntax.Position (Range)
 
-isReallyEmptyType :: Type -> TCM ()
-isEmptyType       :: Type -> TCM ()
+-- isReallyEmptyType :: Type -> TCM ()
+isEmptyType       :: Range -> Type -> TCM ()
diff --git a/src/full/Agda/TypeChecking/Errors.hs b/src/full/Agda/TypeChecking/Errors.hs
--- a/src/full/Agda/TypeChecking/Errors.hs
+++ b/src/full/Agda/TypeChecking/Errors.hs
@@ -3,12 +3,17 @@
     ( prettyError
     , PrettyTCM(..)
     , tcErrString
+    , Warnings(..)
+    , warningsToError
     ) where
 
 import Control.Applicative ( (<$>) )
 import Control.Monad.State
 import Control.Monad.Error
+
+import Data.List (nub)
 import qualified Data.Map as Map (empty)
+
 import System.FilePath
 
 import Agda.Syntax.Common
@@ -24,8 +29,10 @@
 import Agda.Syntax.Translation.InternalToAbstract
 import Agda.Syntax.Translation.AbstractToConcrete
 import Agda.Syntax.Scope.Base (ScopeInfo(..))
-
-import Agda.TypeChecking.Monad
+import Agda.Syntax.Scope.Monad (isDatatypeModule)
+import Agda.TypeChecking.Monad.Base
+import Agda.TypeChecking.Monad.Context
+import Agda.TypeChecking.Monad.Options
 import Agda.TypeChecking.Pretty
 
 import Agda.Utils.FileName
@@ -50,6 +57,34 @@
 	$$ vcat (map (text . tcErrString) [err,err',err'',err'''])
 
 ---------------------------------------------------------------------------
+-- * Warnings
+---------------------------------------------------------------------------
+
+-- | Warnings.
+--
+-- Invariant: The fields are never empty at the same time.
+
+data Warnings = Warnings
+  { terminationProblems   :: [TerminationError]
+    -- ^ Termination checking problems are not reported if
+    -- 'optTerminationCheck' is 'False'.
+  , unsolvedMetaVariables :: [Range]
+    -- ^ Meta-variable problems are reported as type errors unless
+    -- 'optAllowUnsolved' is 'True'.
+  , unsolvedConstraints   :: Constraints
+    -- ^ Same as 'unsolvedMetaVariables'.
+  }
+
+-- | Turns warnings into an error. Even if several errors are possible
+-- only one is raised.
+
+warningsToError :: Warnings -> TypeError
+warningsToError (Warnings [] [] [])    = __IMPOSSIBLE__
+warningsToError (Warnings _ w@(_:_) _) = UnsolvedMetas w
+warningsToError (Warnings _ _ w@(_:_)) = UnsolvedConstraints w
+warningsToError (Warnings w@(_:_) _ _) = TerminationCheckFailed w
+
+---------------------------------------------------------------------------
 -- * Helpers
 ---------------------------------------------------------------------------
 
@@ -70,7 +105,7 @@
     r = nameBindingSite $ qnameName q
 
 tcErrString :: TCErr -> String
-tcErrString err = show (getRange err) ++ " " ++ case errError err of
+tcErrString err = show (getRange err) ++ " " ++ case err of
     TypeError _ cl  -> errorString $ clValue cl
     Exception r s   -> show r ++ " " ++ s
     IOException r e -> show r ++ " " ++ show e
@@ -83,6 +118,7 @@
     AmbiguousName{}                          -> "AmbiguousName"
     AmbiguousParseForApplication{}           -> "AmbiguousParseForApplication"
     AmbiguousParseForLHS{}                   -> "AmbiguousParseForLHS"
+--    AmbiguousParseForPatternSynonym{}        -> "AmbiguousParseForPatternSynonym"
     AmbiguousTopLevelModuleName {}           -> "AmbiguousTopLevelModuleName"
     BothWithAndRHS                           -> "BothWithAndRHS"
     BuiltinInParameterisedModule{}           -> "BuiltinInParameterisedModule"
@@ -100,6 +136,7 @@
     CoverageCantSplitType{}                  -> "CoverageCantSplitType"
     CyclicModuleDependency{}                 -> "CyclicModuleDependency"
     DataMustEndInSort{}                      -> "DataMustEndInSort"
+-- UNUSED:    DataTooManyParameters{}                  -> "DataTooManyParameters"
     DifferentArities                         -> "DifferentArities"
     DoesNotConstructAnElementOf{}            -> "DoesNotConstructAnElementOf"
     DuplicateBuiltinBinding{}                -> "DuplicateBuiltinBinding"
@@ -109,11 +146,12 @@
     FieldOutsideRecord                       -> "FieldOutsideRecord"
     FileNotFound{}                           -> "FileNotFound"
     GenericError{}                           -> "GenericError"
+    GenericDocError{}                        -> "GenericDocError"
     IFSNoCandidateInScope{}                  -> "IFSNoCandidateInScope"
     IlltypedPattern{}                        -> "IlltypedPattern"
     IncompletePatternMatching{}              -> "IncompletePatternMatching"
-    IndexFreeInParameter{}                   -> "IndexFreeInParameter"
     IndexVariablesNotDistinct{}              -> "IndexVariablesNotDistinct"
+    IndicesFreeInParameters{}                -> "IndicesFreeInParameters"
     IndicesNotConstructorApplications{}      -> "IndicesNotConstructorApplications"
     InternalError{}                          -> "InternalError"
     InvalidPattern{}                         -> "InvalidPattern"
@@ -124,9 +162,11 @@
     ModuleDefinedInOtherFile {}              -> "ModuleDefinedInOtherFile"
     ModuleDoesntExport{}                     -> "ModuleDoesntExport"
     ModuleNameDoesntMatchFileName {}         -> "ModuleNameDoesntMatchFileName"
+    NeedOptionCopatterns{}                   -> "NeedOptionCopatterns"
     NoBindingForBuiltin{}                    -> "NoBindingForBuiltin"
     NoParseForApplication{}                  -> "NoParseForApplication"
     NoParseForLHS{}                          -> "NoParseForLHS"
+--    NoParseForPatternSynonym{}               -> "NoParseForPatternSynonym"
     NoRHSRequiresAbsurdPattern{}             -> "NoRHSRequiresAbsurdPattern"
     NotInductive {}                          -> "NotInductive"
     AbsurdPatternRequiresNoRHS{}             -> "AbsurdPatternRequiresNoRHS"
@@ -135,6 +175,7 @@
     NoSuchPrimitiveFunction{}                -> "NoSuchPrimitiveFunction"
     NotAModuleExpr{}                         -> "NotAModuleExpr"
     NotAProperTerm                           -> "NotAProperTerm"
+    SetOmegaNotValidType                     -> "SetOmegaNotValidType"
     NotAValidLetBinding{}                    -> "NotAValidLetBinding"
     NotAnExpression{}                        -> "NotAnExpression"
     NotImplemented{}                         -> "NotImplemented"
@@ -146,10 +187,12 @@
     NothingAppliedToInstanceArg{}            -> "NothingAppliedToInstanceArg"
     OverlappingProjects {}                   -> "OverlappingProjects"
     PatternShadowsConstructor {}             -> "PatternShadowsConstructor"
+    PatternSynonymArityMismatch {}           -> "PatternSynonymArityMismatch"
     PropMustBeSingleton                      -> "PropMustBeSingleton"
     RepeatedVariablesInPattern{}             -> "RepeatedVariablesInPattern"
     SafeFlagPostulate{}                      -> "SafeFlagPostulate"
     SafeFlagPragma{}                         -> "SafeFlagPragma"
+    SafeFlagNoTerminationCheck{}             -> "SafeFlagNoTerminationCheck"
     SafeFlagPrimTrustMe{}                    -> "SafeFlagPrimTrustMe"
     ShadowedModule{}                         -> "ShadowedModule"
     ShouldBeASort{}                          -> "ShouldBeASort"
@@ -158,6 +201,7 @@
     ShouldBeEmpty{}                          -> "ShouldBeEmpty"
     ShouldBePi{}                             -> "ShouldBePi"
     ShouldBeRecordType{}                     -> "ShouldBeRecordType"
+    ShouldBeRecordPattern{}                  -> "ShouldBeRecordPattern"
     ShouldEndInApplicationOfTheDatatype{}    -> "ShouldEndInApplicationOfTheDatatype"
     TerminationCheckFailed{}                 -> "TerminationCheckFailed"
     TooFewFields{}                           -> "TooFewFields"
@@ -166,6 +210,7 @@
     SplitOnIrrelevant{}                      -> "SplitOnIrrelevant"
     DefinitionIsIrrelevant{}                 -> "DefinitionIsIrrelevant"
     VariableIsIrrelevant{}                   -> "VariableIsIrrelevant"
+    UnequalBecauseOfUniverseConflict{}       -> "UnequalBecauseOfUniverseConflict"
     UnequalRelevance{}                       -> "UnequalRelevance"
     UnequalHiding{}                          -> "UnequalHiding"
     UnequalLevel{}                           -> "UnequalLevel"
@@ -180,6 +225,7 @@
     UnreachableClauses{}                     -> "UnreachableClauses"
     UnsolvedConstraints{}                    -> "UnsolvedConstraints"
     UnsolvedMetas{}                          -> "UnsolvedMetas"
+    UnusedVariableInPatternSynonym           -> "UnusedVariableInPatternSynonym"
     WithClausePatternMismatch{}              -> "WithClausePatternMismatch"
     WrongHidingInApplication{}               -> "WrongHidingInApplication"
     WrongHidingInLHS{}                       -> "WrongHidingInLHS"
@@ -188,13 +234,10 @@
     WrongNumberOfConstructorArguments{}      -> "WrongNumberOfConstructorArguments"
 
 instance PrettyTCM TCErr where
-    prettyTCM err = case errError err of
-	TypeError s e -> do
-	    s0 <- get
+    prettyTCM err = case err of
+	TypeError s e -> localState $ do
 	    put s
-	    d <- sayWhen (envRange $ clEnv e) (envCall $ clEnv e) $ prettyTCM e
-	    put s0
-	    return d
+	    sayWhen (envRange $ clEnv e) (envCall $ clEnv e) $ prettyTCM e
 	Exception r s   -> sayWhere r $ fwords s
 	IOException r e -> sayWhere r $ fwords $ show e
 	PatternErr _    -> sayWhere err $ panic "uncaught pattern violation"
@@ -208,6 +251,7 @@
 	    NotSupported s -> fwords $ "Not supported: " ++ s
 	    CompilationError s -> sep [fwords "Compilation error:", text s]
 	    GenericError s   -> fwords s
+	    GenericDocError d   -> return d
 	    TerminationCheckFailed because ->
               fwords "Termination checking failed for the following functions:"
               $$ (nest 2 $
@@ -219,12 +263,15 @@
                                case show (callInfoRange c) of
                                  "" -> call
                                  r  -> call $$ nest 2 (text "(at" <+> text r <> text ")"))
-                        (concatMap termErrCalls because))
+                        (nub $ concatMap termErrCalls because))
 	    PropMustBeSingleton -> fwords
 		"Datatypes in Prop must have at most one constructor when proof irrelevance is enabled"
 	    DataMustEndInSort t -> fsep $
 		pwords "The type of a datatype must end in a sort."
 		++ [prettyTCM t] ++ pwords "isn't a sort."
+{- UNUSED:
+	    DataTooManyParameters -> fsep $ pwords "Too many parameters given to data type."
+-}
 	    ShouldEndInApplicationOfTheDatatype t -> fsep $
 		pwords "The target of a constructor must be the datatype applied to its parameters,"
 		++ [prettyTCM t] ++ pwords "isn't"
@@ -236,6 +283,8 @@
 		pwords "which is not the right datatype"
 	    ShouldBeRecordType t -> fsep $
 		pwords "Expected record type, found " ++ [prettyTCM t]
+	    ShouldBeRecordPattern p -> fsep $
+		pwords "Expected record pattern" -- ", found " ++ [prettyTCM p]
 	    DifferentArities ->
 		fwords "The number of arguments in the defining equations differ"
 	    WrongHidingInLHS t -> do
@@ -252,7 +301,7 @@
               pwords "Failed to infer the value of dotted pattern"
             IlltypedPattern p a -> fsep $
               pwords "Type mismatch"
-            TooManyArgumentsInLHS n a -> fsep $
+            TooManyArgumentsInLHS a -> fsep $
               pwords "Left hand side gives too many arguments to a function of type" ++ [prettyTCM a]
             WrongNumberOfConstructorArguments c expect given -> fsep $
               pwords "The constructor" ++ [prettyTCM c] ++ pwords "expects" ++
@@ -263,21 +312,33 @@
             ConstructorPatternInWrongDatatype c d -> fsep $
               [prettyTCM c] ++ pwords "is not a constructor of the datatype" ++ [prettyTCM d]
             IndicesNotConstructorApplications is ->
-              fsep (pwords "The following indices are not constructors" ++
-                    pwords "(or literals) applied to variables:")
+              fwords "The indices"
               $$ nest 2 (vcat $ map prettyTCM is)
-            IndexVariablesNotDistinct is ->
-              fsep (pwords "The variables in the following indices are not distinct:")
+              $$ fsep (pwords "are not constructors (or literals) applied to variables" ++
+                       pwords "(note that parameters count as constructor arguments)")
+            IndexVariablesNotDistinct vs is ->
+              fwords "The variables"
+              $$ nest 2 (vcat $ map (\v -> prettyTCM (I.Var v [])) vs)
+              $$ fwords "in the indices"
               $$ nest 2 (vcat $ map prettyTCM is)
-            IndexFreeInParameter i pars ->
-              fsep (pwords "The index" ++ [prettyTCM (I.Var i [])] ++
-                    pwords "is free in the following parameters:")
+              $$ fwords "are not distinct (note that parameters count as constructor arguments)"
+            IndicesFreeInParameters vs indices pars ->
+              fwords "The variables"
+              $$ nest 2 (vcat $ map (\v -> prettyTCM (I.Var v [])) vs)
+              $$ fwords "which are used (perhaps as constructor parameters) in the index expressions"
+              $$ nest 2 (vcat $ map prettyTCM indices)
+              $$ fwords "are free in the parameters"
               $$ nest 2 (vcat $ map prettyTCM pars)
-            ShadowedModule [] -> __IMPOSSIBLE__
-            ShadowedModule ms@(m : _) -> fsep $
-              pwords "Duplicate definition of module" ++ [prettyTCM m <> text "."] ++
-              pwords "Previous definition at" ++ [text $ show r]
+            ShadowedModule x [] -> __IMPOSSIBLE__
+            ShadowedModule x ms@(m : _) -> fsep $
+              pwords "Duplicate definition of module" ++ [prettyTCM x <> text "."] ++
+              pwords "Previous definition of" ++ [help m] ++ pwords "module" ++ [prettyTCM x] ++
+              pwords "at" ++ [text $ show r]
               where
+                help m = do
+                  b <- isDatatypeModule m
+                  if b then text "datatype" else empty
+
                 r = case [ r | r <- map (defSiteOfLast . mnameToList) ms
                              , r /= noRange ] of
                       []    -> noRange
@@ -304,6 +365,8 @@
 		[prettyTCM t] ++ pwords "should be a function type, but it isn't"
 	    NotAProperTerm ->
 		fwords "Found a malformed term"
+	    SetOmegaNotValidType ->
+		fwords "Setω is not a valid type"
             SplitOnIrrelevant p t -> fsep $
                 pwords "Cannot pattern match" ++ [prettyA p] ++
                 pwords "against irrelevant type" ++ [prettyTCM t]
@@ -311,40 +374,30 @@
                 text "Identifier" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"
             VariableIsIrrelevant x -> fsep $
                 text "Variable" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"
+	    UnequalBecauseOfUniverseConflict cmp s t -> fsep $
+		[prettyTCM s, notCmp cmp, prettyTCM t, text "because this would result in an invalid use of Setω" ]
  	    UnequalTerms cmp s t a -> fsep $
-		[prettyTCM s, f cmp, prettyTCM t] ++ pwords "of type" ++ [prettyTCM a]
-                where
-                  f CmpEq  = text "!="
-                  f CmpLeq = text "!=<"
+		[prettyTCM s, notCmp cmp, prettyTCM t] ++ pwords "of type" ++ [prettyTCM a]
 	    UnequalLevel cmp s t -> fsep $
-		[prettyTCM s, f cmp, prettyTCM t]
-                where
-                  f CmpEq  = text "!="
-                  f CmpLeq = text "!=<"
+		[prettyTCM s, notCmp cmp, prettyTCM t]
 	    UnequalTelescopes cmp a b -> fsep $
-		[prettyTCM a, f cmp, prettyTCM b]
-                where
-                  f CmpEq  = text "!="
-                  f CmpLeq = text "!=<"
+		[prettyTCM a, notCmp cmp, prettyTCM b]
 	    UnequalTypes cmp a b -> fsep $
-		[prettyTCM a, f cmp, prettyTCM b]
-                where
-                  f CmpEq  = text "!="
-                  f CmpLeq = text "!=<"
+		[prettyTCM a, notCmp cmp, prettyTCM b]
 	    HeterogeneousEquality u a v b -> fsep $
                 pwords "Refuse to solve heterogeneous constraint" ++
                 [prettyTCM u] ++ pwords ":" ++ [prettyTCM a] ++ pwords "=?=" ++
                 [prettyTCM v] ++ pwords ":" ++ [prettyTCM b]
-	    UnequalRelevance a b -> fsep $
-		[prettyTCM a] ++ pwords "!=" ++ [prettyTCM b] ++
+	    UnequalRelevance cmp a b -> fsep $
+		[prettyTCM a, notCmp cmp, prettyTCM b] ++
 -- Andreas 2010-09-21 to reveal Forced annotations, print also uglily
---		[text $ show a] ++ pwords "!=" ++ [text $ show b] ++
+--		[text $ show a, notCmp cmp, text $ show b] ++
 		pwords "because one is a relevant function type and the other is an irrelevant function type"
 	    UnequalHiding a b -> fsep $
-		[prettyTCM a] ++ pwords "!=" ++ [prettyTCM b] ++
+		[prettyTCM a, text "!=", prettyTCM b] ++
 		pwords "because one is an implicit function type and the other is an explicit function type"
 	    UnequalSorts s1 s2 -> fsep $
-		[prettyTCM s1] ++ pwords "!=" ++ [prettyTCM s2]
+		[prettyTCM s1, text "!=", prettyTCM s2]
 	    NotLeqSort s1 s2 -> fsep $
 		pwords "The type of the constructor does not fit in the sort of the datatype, since"
 		++ [prettyTCM s1] ++ pwords "is not less or equal than" ++ [prettyTCM s2]
@@ -460,8 +513,13 @@
 	    AmbiguousModule x ys -> vcat
 	      [ fsep $ pwords "Ambiguous module name" ++ [pretty x <> text "."] ++
 		       pwords "It could refer to any one of"
-	      , nest 2 $ vcat $ map prettyTCM ys
+	      , nest 2 $ vcat $ map help ys
 	      ]
+              where
+                help :: ModuleName -> TCM Doc
+                help m = do
+                  b <- isDatatypeModule m
+                  sep [prettyTCM m, if b then text "(datatype module)" else empty]
 	    UninstantiatedModule x -> fsep (
 		    pwords "Cannot access the contents of the parameterised module" ++ [pretty x <> text "."] ++
 		    pwords "To do this the module first has to be instantiated. For instance:"
@@ -509,12 +567,28 @@
 		    pwords "Don't know how to parse" ++ [pretty (C.RawApp noRange es) <> text "."] ++
 		    pwords "Could mean any one of:"
 		) $$ nest 2 (vcat $ map pretty es')
-	    NoParseForLHS p -> fsep $
+            UnusedVariableInPatternSynonym -> fsep $
+                pwords "Unused variable in pattern synonym."
+            PatternSynonymArityMismatch x -> fsep $
+                pwords "Arity mismatch when using pattern synonym" ++ [prettyTCM x]
+	    NoParseForLHS IsLHS p -> fsep $
 		pwords "Could not parse the left-hand side" ++ [pretty p]
-	    AmbiguousParseForLHS p ps -> fsep (
+	    NoParseForLHS IsPatSyn p -> fsep $
+		pwords "Could not parse the pattern synonym" ++ [pretty p]
+{- UNUSED
+	    NoParseForPatternSynonym p -> fsep $
+		pwords "Could not parse the pattern synonym" ++ [pretty p]
+-}
+	    AmbiguousParseForLHS lhsOrPatSyn p ps -> fsep (
 		    pwords "Don't know how to parse" ++ [pretty p <> text "."] ++
 		    pwords "Could mean any one of:"
 		) $$ nest 2 (vcat $ map pretty ps)
+{- UNUSED
+	    AmbiguousParseForPatternSynonym p ps -> fsep (
+		    pwords "Don't know how to parse" ++ [pretty p <> text "."] ++
+		    pwords "Could mean any one of:"
+		) $$ nest 2 (vcat $ map pretty ps)
+-}
 	    IncompletePatternMatching v args -> fsep $
 		pwords "Incomplete pattern matching for" ++ [prettyTCM v <> text "."] ++
 		pwords "No match for" ++ map prettyTCM args
@@ -585,21 +659,27 @@
                            | otherwise      = "s"
                 in fsep $ [fwords ("Cannot set OPTION pragma" ++ plural)]
                           ++ map text xs ++ [fwords "with safe flag."]
+            SafeFlagNoTerminationCheck -> fsep (pwords "Cannot use NO_TERMINATION_CHECK pragma with safe flag.")
             SafeFlagPrimTrustMe -> fsep (pwords "Cannot use primTrustMe with safe flag")
+            NeedOptionCopatterns -> fsep (pwords "Option --copatterns needed to enable destructor patterns")
           where
             mpar n args
               | n > 0 && not (null args) = parens
               | otherwise                = id
 
+            showArg :: Arg I.Pattern -> TCM Doc
             showArg (Arg Hidden r x)    = braces $ showPat 0 x
             showArg (Arg Instance r x)  = dbraces $ showPat 0 x
             showArg (Arg NotHidden r x) = showPat 1 x
 
+            showPat :: Integer -> I.Pattern -> TCM Doc
             showPat _ (I.VarP _)        = text "_"
             showPat _ (I.DotP _)        = text "._"
             showPat n (I.ConP c _ args) = mpar n args $ prettyTCM c <+> fsep (map showArg args)
             showPat _ (I.LitP l)        = text (show l)
 
+notCmp :: Comparison -> TCM Doc
+notCmp cmp = text $ "!" ++ show cmp
 
 
 instance PrettyTCM Call where
@@ -653,7 +733,7 @@
 	    fsep $ pwords "when inferring the type of" ++ [prettyTCM x]
 	InferDef _ x _ ->
 	    fsep $ pwords "when inferring the type of" ++ [prettyTCM x]
-        CheckIsEmpty t _ ->
+        CheckIsEmpty r t _ ->
             fsep $ pwords "when checking that" ++ [prettyTCM t] ++ pwords "has no constructors"
 	ScopeCheckExpr e _ ->
 	    fsep $ pwords "when scope checking" ++ [pretty e]
@@ -663,8 +743,7 @@
 	ScopeCheckLHS x p _ ->
 	    fsep $ pwords "when scope checking the left-hand side" ++ [pretty p] ++
 		   pwords "in the definition of" ++ [pretty x]
-	TermFunDef _ f _ _ ->
-	    fsep $ pwords "when termination checking the definition of" ++ [prettyTCM f]
+        NoHighlighting _ -> empty
 	SetRange r _ ->
 	    fsep $ pwords "when doing something at" ++ [text $ show r]
         CheckSectionApplication _ m1 modapp _ -> fsep $
@@ -676,6 +755,4 @@
 	where
 	    hPretty a = pretty =<< abstractToConcreteCtx (hiddenArgumentCtx (argHiding a)) a
 
-	    simpleDecl d = d'
-              where [d'] = D.notSoNiceDeclarations [d]
-
+	    simpleDecl = D.notSoNiceDeclaration
diff --git a/src/full/Agda/TypeChecking/Errors.hs-boot b/src/full/Agda/TypeChecking/Errors.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Errors.hs-boot
@@ -0,0 +1,5 @@
+module Agda.TypeChecking.Errors where
+
+import Agda.TypeChecking.Monad.Base
+
+prettyError :: TCErr -> TCM String
diff --git a/src/full/Agda/TypeChecking/EtaContract.hs b/src/full/Agda/TypeChecking/EtaContract.hs
--- a/src/full/Agda/TypeChecking/EtaContract.hs
+++ b/src/full/Agda/TypeChecking/EtaContract.hs
@@ -32,6 +32,7 @@
   Sort _     -> noApp
   MetaV _ _  -> noApp
   DontCare _ -> noApp
+  Shared p   -> binAppView (derefPtr p)  -- destroys sharing
   where
     noApp = NoApp t
     app f [] = noApp
@@ -39,21 +40,21 @@
 
 etaContract :: TermLike a => a -> TCM a
 etaContract = traverseTermM etaOnce
-  where
 
 etaOnce :: Term -> TCM Term
-etaOnce v = ignoreAbstractMode $ eta v
+etaOnce v = eta v
   where
+    eta v@Shared{} = updateSharedTerm eta v
     eta t@(Lam h (Abs _ b)) = do  -- NoAbs can't be eta'd
       imp <- shouldEtaContractImplicit
       case binAppView b of
         App u (Arg h' r v)
-          | isVar0 v && allowed imp h' && not (freeIn 0 u) ->
+          | (r == Irrelevant || isVar0 v) && allowed imp h' && not (freeIn 0 u) ->
             return $ subst __IMPOSSIBLE__ u
         _ -> return t
       where
+        isVar0 (Shared p)               = isVar0 (derefPtr p)
         isVar0 (Var 0 [])               = True
-        isVar0 (DontCare{})             = True  -- Andreas, 2011-10-01 eta-contract irrelevant functions also
         isVar0 (Level (Max [Plus 0 l])) = case l of
           NeutralLevel v   -> isVar0 v
           UnreducedLevel v -> isVar0 v
diff --git a/src/full/Agda/TypeChecking/Forcing.hs b/src/full/Agda/TypeChecking/Forcing.hs
--- a/src/full/Agda/TypeChecking/Forcing.hs
+++ b/src/full/Agda/TypeChecking/Forcing.hs
@@ -6,6 +6,7 @@
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Irrelevance
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
 import Agda.Utils.Size
@@ -43,9 +44,9 @@
         (forcedArgs vs)
         (return [])
   Pi a (NoAbs _ b) ->
-    (++) <$> forcedVariables (unEl $ unArg a)
+    (++) <$> forcedVariables (unEl $ unDom a)
          <*> forcedVariables (unEl b)
-  Pi a b -> (++) <$> forcedVariables (unEl $ unArg a)
+  Pi a b -> (++) <$> forcedVariables (unEl $ unDom a)
                  <*> (underBinder <$> forcedVariables (unEl $ absBody b))
   -- Sorts?
   _ -> return []
@@ -65,9 +66,9 @@
   where
     m = maximum (-1:xs)
     aux i t | i > m = t
-    aux i t = case t of
+    aux i t = case ignoreSharingType t of
       El s (Pi  a b) -> El s $ Pi  (upd a) (fmap (aux (i + 1)) b)
       _ -> __IMPOSSIBLE__
       where
-        upd a | i `elem` xs = a { argRelevance = Forced }
+        upd a | i `elem` xs = a { domRelevance = composeRelevance Forced (domRelevance a) }
               | otherwise   = a
diff --git a/src/full/Agda/TypeChecking/Free.hs b/src/full/Agda/TypeChecking/Free.hs
--- a/src/full/Agda/TypeChecking/Free.hs
+++ b/src/full/Agda/TypeChecking/Free.hs
@@ -9,8 +9,8 @@
     , relevantVars
     , rigidVars
     , freeIn, isBinderUsed
-    , freeInIgnoringSorts
-    , relevantIn
+    , freeInIgnoringSorts, freeInIgnoringSortAnn
+    , relevantIn, relevantInIgnoringSortAnn
     , Occurrence(..)
     , occurrence
     ) where
@@ -40,7 +40,8 @@
   { stronglyRigidVars :: VarSet -- ^ variables at top and under constructors
   , weaklyRigidVars   :: VarSet -- ^ ord. rigid variables, e.g., in arguments of variables
   , flexibleVars      :: VarSet -- ^ variables occuring in arguments of metas. These are potentially free, depending how the meta variable is instantiated.
-  , irrelevantVars    :: VarSet -- ^ variables under a @DontCare@, i.e., in irrelevant positions
+  , irrelevantVars    :: VarSet -- ^ variables in irrelevant arguments and under a @DontCare@, i.e., in irrelevant positions
+  , unusedVars        :: VarSet -- ^ variables in 'UnusedArg'uments
   }
 
 rigidVars :: FreeVars -> VarSet
@@ -48,7 +49,7 @@
 
 -- | @allVars fv@ includes irrelevant variables.
 allVars :: FreeVars -> VarSet
-allVars fv = Set.unions [rigidVars fv, flexibleVars fv, irrelevantVars fv]
+allVars fv = Set.unions [rigidVars fv, flexibleVars fv, irrelevantVars fv, unusedVars fv]
 
 -- | All but the irrelevant variables.
 relevantVars :: FreeVars -> VarSet
@@ -56,17 +57,23 @@
 
 data Occurrence
   = NoOccurrence
+  | Irrelevantly
   | StronglyRigid
   | WeaklyRigid
   | Flexible
+  | Unused
   deriving (Eq,Show)
 
+{- NO LONGER
 -- | @occurrence x fv@ ignores irrelevant variables in @fv@
+-}
 occurrence :: Nat -> FreeVars -> Occurrence
 occurrence x fv
   | x `Set.member` stronglyRigidVars fv = StronglyRigid
   | x `Set.member` weaklyRigidVars   fv = WeaklyRigid
   | x `Set.member` flexibleVars      fv = Flexible
+  | x `Set.member` irrelevantVars    fv = Irrelevantly
+  | x `Set.member` unusedVars        fv = Unused
   | otherwise                           = NoOccurrence
 
 -- | Mark variables as flexible.  Useful when traversing arguments of metas.
@@ -88,47 +95,56 @@
 irrelevantly :: FreeVars -> FreeVars
 irrelevantly fv = empty { irrelevantVars = allVars fv }
 
+-- | Mark all free variables as unused, except for irrelevant vars.
+unused :: FreeVars -> FreeVars
+unused fv = empty
+  { irrelevantVars = irrelevantVars fv
+  , unusedVars     = Set.unions [ rigidVars fv, flexibleVars fv, unusedVars fv ]
+  }
+
 -- | Pointwise union.
 union :: FreeVars -> FreeVars -> FreeVars
-union (FV sv1 rv1 fv1 iv1) (FV sv2 rv2 fv2 iv2) =
-  FV (Set.union sv1 sv2) (Set.union rv1 rv2) (Set.union fv1 fv2) (Set.union iv1 iv2)
+union (FV sv1 rv1 fv1 iv1 uv1) (FV sv2 rv2 fv2 iv2 uv2) =
+  FV (Set.union sv1 sv2) (Set.union rv1 rv2) (Set.union fv1 fv2) (Set.union iv1 iv2) (Set.union uv1 uv2)
 
 unions :: [FreeVars] -> FreeVars
 unions = foldr union empty
 
 empty :: FreeVars
-empty = FV Set.empty Set.empty Set.empty Set.empty
+empty = FV Set.empty Set.empty Set.empty Set.empty Set.empty
 
 -- | @delete x fv@ deletes variable @x@ from variable set @fv@.
 delete :: Nat -> FreeVars -> FreeVars
-delete n (FV sv rv fv iv) = FV (Set.delete n sv) (Set.delete n rv) (Set.delete n fv) (Set.delete n iv)
+delete n (FV sv rv fv iv uv) = FV (Set.delete n sv) (Set.delete n rv) (Set.delete n fv) (Set.delete n iv) (Set.delete n uv)
 
 -- | @subtractFV n fv@ subtracts $n$ from each free variable in @fv@.
 subtractFV :: Nat -> FreeVars -> FreeVars
-subtractFV n (FV sv rv fv iv) = FV (Set.subtract n sv) (Set.subtract n rv) (Set.subtract n fv) (Set.subtract n iv)
+subtractFV n (FV sv rv fv iv uv) = FV (Set.subtract n sv) (Set.subtract n rv) (Set.subtract n fv) (Set.subtract n iv) (Set.subtract n uv)
 
 -- | A single (strongly) rigid variable.
 singleton :: Nat -> FreeVars
-singleton x = FV { stronglyRigidVars = Set.singleton x
-		 , weaklyRigidVars   = Set.empty -- WAS: Set.singleton x
-		 , flexibleVars      = Set.empty
-                 , irrelevantVars    = Set.empty
-		 }
+singleton x = empty { stronglyRigidVars = Set.singleton x }
 
 -- * Collecting free variables.
 
 class Free a where
-  freeVars' :: FreeConf -> a -> FreeVars
+  freeVars'   :: FreeConf -> a -> FreeVars
 
+-- | Where should we skip sorts in free variable analysis?
+data IgnoreSorts
+  = IgnoreNot            -- ^ Do not skip.
+  | IgnoreInAnnotations  -- ^ Skip when annotation to a type.
+  | IgnoreAll            -- ^ Skip unconditionally.
+  deriving (Eq, Show)
+
 data FreeConf = FreeConf
-  { fcIgnoreSorts :: Bool
-    -- ^ Ignore free variables in sorts.
+  { fcIgnoreSorts   :: IgnoreSorts -- ^ Ignore free variables in sorts.
   }
 
 -- | Doesn't go inside solved metas, but collects the variables from a
 -- metavariable application @X ts@ as @flexibleVars@.
 freeVars :: Free a => a -> FreeVars
-freeVars = freeVars' FreeConf{ fcIgnoreSorts = False }
+freeVars = freeVars' FreeConf{ fcIgnoreSorts = IgnoreNot }
 
 instance Free Term where
   freeVars' conf t = case t of
@@ -145,14 +161,17 @@
     Level l    -> freeVars' conf l
     MetaV _ ts -> flexible $ freeVars' conf ts
     DontCare mt -> irrelevantly $ freeVars' conf mt
+    Shared p    -> freeVars' conf (derefPtr p)
 
 instance Free Type where
-  freeVars' conf (El s t) = freeVars' conf (s, t)
+  freeVars' conf (El s t)
+    | fcIgnoreSorts conf == IgnoreNot = freeVars' conf (s, t)
+    | otherwise                       = freeVars' conf t
 
 instance Free Sort where
   freeVars' conf s
-    | fcIgnoreSorts conf = empty
-    | otherwise          = case s of
+    | fcIgnoreSorts conf == IgnoreAll = empty
+    | otherwise                       = case s of
       Type a     -> freeVars' conf a
       Prop       -> empty
       Inf        -> empty
@@ -182,8 +201,13 @@
   freeVars' conf (x,y) = freeVars' conf x `union` freeVars' conf y
 
 instance Free a => Free (Arg a) where
-  freeVars' conf = freeVars' conf . unArg
+  freeVars' conf (Arg h Irrelevant a) = irrelevantly $ freeVars' conf a
+  freeVars' conf (Arg h UnusedArg  a) = unused $ freeVars' conf a
+  freeVars' conf (Arg h r          a) = freeVars' conf a
 
+instance Free a => Free (Dom a) where
+  freeVars' conf (Dom h r a) = freeVars' conf a
+
 instance Free a => Free (Abs a) where
   freeVars' conf (Abs   _ b) = subtractFV 1 $ delete 0 $ freeVars' conf b
   freeVars' conf (NoAbs _ b) = freeVars' conf b
@@ -202,10 +226,18 @@
 
 freeInIgnoringSorts :: Free a => Nat -> a -> Bool
 freeInIgnoringSorts v t =
-  v `Set.member` allVars (freeVars' FreeConf{ fcIgnoreSorts = True } t)
+  v `Set.member` allVars (freeVars' FreeConf{ fcIgnoreSorts = IgnoreAll } t)
 
+freeInIgnoringSortAnn :: Free a => Nat -> a -> Bool
+freeInIgnoringSortAnn v t =
+  v `Set.member` allVars (freeVars' FreeConf{ fcIgnoreSorts = IgnoreInAnnotations } t)
+
+relevantInIgnoringSortAnn :: Free a => Nat -> a -> Bool
+relevantInIgnoringSortAnn v t =
+  v `Set.member` relevantVars (freeVars' FreeConf{ fcIgnoreSorts = IgnoreInAnnotations } t)
+
 relevantIn :: Free a => Nat -> a -> Bool
-relevantIn v t = v `Set.member` relevantVars (freeVars' FreeConf{ fcIgnoreSorts = True } t)
+relevantIn v t = v `Set.member` relevantVars (freeVars' FreeConf{ fcIgnoreSorts = IgnoreAll } t)
 
 -- | Is the variable bound by the abstraction actually used?
 isBinderUsed :: Free a => Abs a -> Bool
diff --git a/src/full/Agda/TypeChecking/Implicit.hs b/src/full/Agda/TypeChecking/Implicit.hs
--- a/src/full/Agda/TypeChecking/Implicit.hs
+++ b/src/full/Agda/TypeChecking/Implicit.hs
@@ -4,11 +4,68 @@
 -}
 module Agda.TypeChecking.Implicit where
 
+import Control.Applicative
+import Control.Monad
+
 import Agda.Syntax.Common
+import Agda.Syntax.Internal
 
+import Agda.TypeChecking.Irrelevance
+import {-# SOURCE #-} Agda.TypeChecking.MetaVars
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Telescope
+import {-# SOURCE #-} Agda.TypeChecking.InstanceArguments
+
+import Agda.Utils.Size
+import Agda.Utils.Tuple
+
 #include "../undefined.h"
 import Agda.Utils.Impossible
-import Control.Applicative
+
+
+-- | @implicitArgs n expand t@ generates up to @n@ implicit arguments
+--   metas (unbounded if @n<0@), as long as @t@ is a function type
+--   and @expand@ holds on the hiding info of its domain.
+implicitArgs :: Int -> (Hiding -> Bool) -> Type -> TCM (Args, Type)
+implicitArgs 0 expand t0 = return ([], t0)
+implicitArgs n expand t0 = do
+    t0' <- reduce t0
+    case ignoreSharing $ unEl t0' of
+      Pi (Dom h rel a) b | expand h -> do
+          when (h == Instance) $ reportSLn "tc.term.args.ifs" 15 $
+            "inserting implicit meta for type " ++ show a
+          v  <- applyRelevanceToContext rel $ newMeta h (absName b) a
+          let arg = Arg h rel v
+          mapFst (arg:) <$> implicitArgs (n-1) expand (absApp b v)
+      _ -> return ([], t0')
+  where
+    newMeta Hidden   = newNamedValueMeta RunMetaOccursCheck
+    newMeta Instance = initializeIFSMeta
+    newMeta _        = __IMPOSSIBLE__
+
+{- UNUSED, BUT DONT REMOVE (Andreas, 2012-07-31)
+introImplicits :: (Hiding -> Bool) -> Type -> (Int -> Type -> TCM a) -> TCM a
+introImplicits expand t cont = do
+  TelV tel t0 <- telViewUpTo' (-1) (expand . domHiding) t
+  addCtxTel tel $ cont (size tel) t0
+-}
+
+{- POINTLESS, NEEDS TO BE CONTINUATION-PASSING
+-- | @introImplicits expand t@ introduces domain types of @t@
+--   into the context, as long as @expand@ holds on them.
+introImplicits :: (Hiding -> Bool) -> Type -> TCM (Int, Type)
+introImplicits expand t = do
+  t <- reduce t
+  case unEl t of
+    Pi dom@(Dom h rel a) b | expand h ->
+      addCtxString (absName b) dom $ do
+        mapFst (+1) <$> introImplicits expand (absBody b)
+    _ -> return (0, t)
+-}
+
+---------------------------------------------------------------------------
 
 data ImplicitInsertion
       = ImpInsert [Hiding]	  -- ^ this many implicits have to be inserted
diff --git a/src/full/Agda/TypeChecking/Injectivity.hs b/src/full/Agda/TypeChecking/Injectivity.hs
--- a/src/full/Agda/TypeChecking/Injectivity.hs
+++ b/src/full/Agda/TypeChecking/Injectivity.hs
@@ -25,6 +25,7 @@
 import {-# SOURCE #-} Agda.TypeChecking.Conversion
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Constraints
+import Agda.TypeChecking.Polarity
 import Agda.Utils.List
 import Agda.Utils.Monad
 import Agda.Utils.Permutation
@@ -38,20 +39,27 @@
   -- first, possibly rewrite literal v to constructor form
   v <- constructorForm v
   reportSDoc "tc.inj.reduce" 30 $ text "reduceHead" <+> prettyTCM v
-  case v of
+  case ignoreSharing v of
     Def f args -> do
+      let v0 = Def f []
       def <- theDef <$> getConstInfo f
       case def of
---         Function{ funClauses = [ _ ] }  -> unfoldDefinition False reduceHead v f args
-        Datatype{ dataClause = Just _ } -> unfoldDefinition False reduceHead v f args
-        Record{ recClause = Just _ }    -> unfoldDefinition False reduceHead v f args
+        -- Andreas, 2012-11-06 unfold aliases (single clause terminating functions)
+        -- see test/succeed/Issue747
+        -- We restrict this to terminating functions to not make the
+        -- type checker loop here on non-terminating functions.
+        -- see test/fail/TerminationInfiniteRecord
+        Function{ funClauses = [ _ ], funDelayed = NotDelayed, funTerminates = Just True }
+                                        -> unfoldDefinition False reduceHead v0 f args
+        Datatype{ dataClause = Just _ } -> unfoldDefinition False reduceHead v0 f args
+        Record{ recClause = Just _ }    -> unfoldDefinition False reduceHead v0 f args
         _                               -> return $ notBlocked v
     _ -> return $ notBlocked v
 
 headSymbol :: Term -> TCM (Maybe TermHead)
 headSymbol v = ignoreAbstractMode $ do
   v <- ignoreBlocking <$> reduceHead v
-  case v of
+  case ignoreSharing v of
     Def f _ -> do
       def <- theDef <$> getConstInfo f
       case def of
@@ -61,17 +69,24 @@
           -- Don't treat axioms in the current mutual block
           -- as constructors (they might have definitions we
           -- don't know about yet).
-          fs <- lookupMutualBlock =<< currentMutualBlock
+          fs <- lookupMutualBlock =<< currentOrFreshMutualBlock
           if Set.member f fs
             then return Nothing
             else return (Just $ ConHead f)
-        _           -> return Nothing
+        Function{}    -> return Nothing
+        Primitive{}   -> return Nothing
+        Constructor{} -> __IMPOSSIBLE__
     Con c _ -> return (Just $ ConHead c)
     Sort _  -> return (Just SortHead)
     Pi _ _  -> return (Just PiHead)
     Lit _   -> return Nothing -- handle literal heads as well? can't think of
                               -- any examples where it would be useful...
-    _       -> return Nothing
+    Lam{}   -> return Nothing
+    Var{}   -> return Nothing
+    Level{} -> return Nothing
+    MetaV{} -> return Nothing
+    DontCare{} -> return Nothing
+    Shared{}   -> __IMPOSSIBLE__
 
 checkInjectivity :: QName -> [Clause] -> TCM FunctionInverse
 checkInjectivity f cs
@@ -115,7 +130,7 @@
 
 -- | Argument should be on weak head normal form.
 functionInverse :: Term -> TCM InvView
-functionInverse v = case v of
+functionInverse v = case ignoreSharing v of
   Def f args -> do
     d <- theDef <$> getConstInfo f
     case d of
@@ -130,6 +145,10 @@
 
 useInjectivity :: Comparison -> Type -> Term -> Term -> TCM ()
 useInjectivity cmp a u v = do
+  reportSDoc "tc.inj.use" 30 $ fsep $
+    pwords "useInjectivity on" ++
+    [ prettyTCM u, prettyTCM cmp, prettyTCM v, text ":", prettyTCM a
+    ]
   uinv <- functionInverse u
   vinv <- functionInverse v
   case (uinv, vinv) of
@@ -183,8 +202,7 @@
             ]
           -- and this is the order the variables occur in the patterns
           let ms' = permute (invertP $ compactP perm) ms
-          cxt <- getContextTelescope
-          let sub = (reverse ms ++ idSub cxt)
+          let sub = parallelS (reverse ms)
           margs <- runReaderT (evalStateT (metaArgs ps) ms') sub
           reportSDoc "tc.inj.invert" 20 $ vcat
             [ text "inversion"
@@ -194,7 +212,10 @@
               , text "type =" <+> prettyTCM ftype
               ]
             ]
-          pol <- getPolarity' cmp f
+          -- Since we do not care for the value of non-variant metas here,
+          -- we can treat 'Nonvariant' as 'Invariant'.
+          -- That ensures these metas do not remain unsolved.
+          pol <- purgeNonvariant <$> getPolarity' cmp f
           -- The clause might not give as many patterns as there
           -- are arguments (point-free style definitions).
           let args' = take (length margs) args
@@ -219,7 +240,7 @@
                , text "which does not expose a constructor"
                ]
              patternViolation
-        `catchError` \err -> case errError err of
+        `catchError` \err -> case err of
           TypeError   {} -> throwError err
           Exception   {} -> throwError err
           IOException {} -> throwError err
@@ -234,7 +255,7 @@
     dotP :: Monad m => Term -> StateT [Term] (ReaderT Substitution m) Term
     dotP v = do
       sub <- ask
-      return $ substs sub v
+      return $ applySubst sub v
 
     metaArgs args = mapM metaArg args
     metaArg arg = traverse metaPat arg
diff --git a/src/full/Agda/TypeChecking/InstanceArguments.hs b/src/full/Agda/TypeChecking/InstanceArguments.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/InstanceArguments.hs
@@ -0,0 +1,274 @@
+{-# LANGUAGE CPP #-}
+
+module Agda.TypeChecking.InstanceArguments where
+
+import Control.Applicative
+import Control.Monad.Error
+import Control.Monad.Reader
+import Control.Monad.State
+import Data.Map as Map
+import Data.List as List
+
+import Agda.Syntax.Common
+import Agda.Syntax.Position
+import Agda.Syntax.Scope.Base
+import Agda.Syntax.Internal
+
+import Agda.TypeChecking.Implicit (implicitArgs)
+import Agda.TypeChecking.Irrelevance
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Reduce
+
+import {-# SOURCE #-} Agda.TypeChecking.Constraints
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkArguments)
+import {-# SOURCE #-} Agda.TypeChecking.MetaVars
+import {-# SOURCE #-} Agda.TypeChecking.Conversion
+
+import Agda.Utils.Monad
+
+#include "../undefined.h"
+import Agda.Utils.Impossible
+
+initialIFSCandidates :: TCM [(Term, Type)]
+initialIFSCandidates = do
+  cands1 <- getContextVars
+  cands2 <- getScopeDefs
+  return $ cands1 ++ cands2
+  where
+    -- get a list of variables with their type, relative to current context
+    getContextVars :: TCM [(Term, Type)]
+    getContextVars = do
+      ctx <- getContext
+      let vars = [ (var i, raise (i + 1) t)
+                 | (Dom h r (x, t), i) <- zip ctx [0..], not (unusableRelevance r)
+                 ]
+      -- get let bindings
+      env <- asks envLetBindings
+      env <- mapM (getOpen . snd) $ Map.toList env
+      let lets = [ (v,t) | (v, Dom h r t) <- env, not (unusableRelevance r) ]
+      return $ vars ++ lets
+
+    getScopeDefs :: TCM [(Term, Type)]
+    getScopeDefs = do
+      scopeInfo <- gets stScope
+      let ns = everythingInScope scopeInfo
+      let nsList = Map.toList $ nsNames ns
+      -- all abstract names in scope are candidates
+      -- (even ones that you can't refer to unambiguously)
+      let qs = List.map anameName $ snd =<< nsList
+      rel   <- asks envRelevance
+      cands <- mapM (candidate rel) qs
+      return $ concat cands
+
+    candidate :: Relevance -> QName -> TCM [(Term, Type)]
+    candidate rel q =
+      -- Andreas, 2012-07-07:
+      -- we try to get the info for q
+      -- while opening a module, q may be in scope but not in the signature
+      -- in this case, we just ignore q (issue 674)
+      flip catchError handle $ do
+        def <- getConstInfo q
+        let r = defRelevance def
+        if not (r `moreRelevant` rel) then return [] else do
+          t   <- defType <$> instantiateDef def
+          args <- freeVarsToApply q
+          let vs = case theDef def of
+               -- drop parameters if it's a projection function...
+               Function{ funProjection = Just (_,i) } -> genericDrop (i - 1) args
+               _                                      -> args
+          return [(Def q vs, t)]
+      where
+        -- unbound constant throws an internal error
+        handle (TypeError _ (Closure {clValue = InternalError _})) = return []
+        handle err                                                 = throwError err
+
+{- OLD CODE
+    getScopeDefs :: TCM [(Term, Type)]
+    getScopeDefs = do
+      scopeInfo <- gets stScope
+      let ns = everythingInScope scopeInfo
+      let nsList = Map.toList $ nsNames ns
+      -- all abstract names in scope are candidates
+      -- (even ones that you can't refer to unambiguously)
+      let cands2Names = nsList >>= snd
+      cands2Types <- mapM (typeOfConst . anameName) cands2Names
+      cands2Rel   <- mapM (relOfConst . anameName) cands2Names
+      cands2FV    <- mapM (constrFreeVarsToApply . anameName) cands2Names
+      rel         <- asks envRelevance
+      return $ [(Def (anameName an) vs, t) |
+                    (an, t, r, vs) <- zip4 cands2Names cands2Types cands2Rel cands2FV,
+                    r `moreRelevant` rel ]
+    constrFreeVarsToApply :: QName -> TCM Args
+    constrFreeVarsToApply n = do
+      args <- freeVarsToApply n
+      defn <- theDef <$> getConstInfo n
+      return $ case defn of
+        -- drop parameters if it's a projection function...
+        Function{ funProjection = Just (rn,i) } -> genericDrop (i - 1) args
+        _                                       -> args
+-}
+
+-- | @initializeIFSMeta s t@ generates an instance meta of type @t@
+--   with suggested name @s@.
+initializeIFSMeta :: String -> Type -> TCM Term
+initializeIFSMeta s t = do
+  cands <- initialIFSCandidates
+  newIFSMeta s t cands
+
+-- | @findInScope m (v,a)s@ tries to instantiate on of the types @a@s
+--   of the candidate terms @v@s to the type @t@ of the metavariable @m@.
+--   If successful, meta @m@ is solved with the instantiation of @v@.
+--   If unsuccessful, the constraint is regenerated, with possibly reduced
+--   candidate set.
+findInScope :: MetaId -> [(Term, Type)] -> TCM ()
+findInScope m cands = whenJustM (findInScope' m cands) $ addConstraint . FindInScope m
+{- SAME CODE, POINTFULL
+  do fisres <- findInScope' m cands
+     case fisres of
+       Nothing -> return ()
+       Just cs -> addConstraint $ FindInScope m cs
+-}
+
+-- Result says whether we need to add constraint, and if so, the set of
+-- remaining candidates
+findInScope' :: MetaId -> [(Term, Type)] -> TCM (Maybe [(Term, Type)])
+findInScope' m cands = ifM (isFrozen m) (return (Just cands)) $ do
+    reportSDoc "tc.constr.findInScope" 15 $ text ("findInScope 2: constraint: " ++ show m ++ "; candidates left: " ++ show (length cands))
+    t <- getMetaTypeInContext m
+    reportSDoc "tc.constr.findInScope" 15 $ text "findInScope 3: t =" <+> prettyTCM t
+    reportSLn "tc.constr.findInScope" 70 $ "findInScope 3: t: " ++ show t
+    mv <- lookupMeta m
+    cands <- checkCandidates m t cands
+    reportSLn "tc.constr.findInScope" 15 $ "findInScope 4: cands left: " ++ show (length cands)
+    case cands of
+
+      [] -> do
+        reportSDoc "tc.constr.findInScope" 15 $ text "findInScope 5: not a single candidate found..."
+        typeError $ IFSNoCandidateInScope t
+
+      [(term, t')] -> do
+        reportSDoc "tc.constr.findInScope" 15 $ text (
+          "findInScope 5: one candidate found for type '") <+>
+          prettyTCM t <+> text "': '" <+> prettyTCM term <+>
+          text "', of type '" <+> prettyTCM t' <+> text "'."
+
+        ca <- liftTCM $ runErrorT $ checkArguments ExpandLast DontExpandInstanceArguments (getRange mv) [] t' t
+        case ca of
+          Left _ -> __IMPOSSIBLE__
+          Right (args, t'') -> do
+{- TODO
+        (args, t'') <- implicitArgs (...) t'
+        do
+-}
+            leqType t'' t
+            ctxArgs <- getContextArgs
+            v <- (`applyDroppingParameters` args) =<< reduce term
+            assignV m ctxArgs v
+            reportSDoc "tc.constr.findInScope" 10 $
+              text "solved by instance search:" <+> prettyTCM m
+              <+> text ":=" <+> prettyTCM v
+            return Nothing
+
+      cs -> do
+        reportSDoc "tc.constr.findInScope" 15 $
+          text ("findInScope 5: more than one candidate found: ") <+>
+          prettyTCM (List.map fst cs)
+        return (Just cs)
+
+-- return the meta's type, applied to the current context
+getMetaTypeInContext :: MetaId -> TCM Type
+getMetaTypeInContext m = do
+  mv <- lookupMeta m
+  let j = mvJudgement mv
+  tj <- getMetaType m
+  ctxArgs <- getContextArgs
+  normalise $ tj `piApply` ctxArgs
+
+-- returns a refined list of valid candidates and the (normalised) type of the
+-- meta, applied to the context (for convenience)
+checkCandidates :: MetaId -> Type -> [(Term, Type)] -> TCM [(Term, Type)]
+checkCandidates m t cands = localState $ disableDestructiveUpdate $ do
+  -- for candidate checking, we don't take into account other IFS
+  -- constrains
+  dropConstraints (isIFSConstraint . clValue . theConstraint)
+  filterM (uncurry $ checkCandidateForMeta m t) cands
+  where
+    checkCandidateForMeta :: MetaId -> Type -> Term -> Type -> TCM Bool
+    checkCandidateForMeta m t term t' =
+      verboseBracket "tc.constr.findInScope" 20 ("checkCandidateForMeta " ++ show m) $ do
+      liftTCM $ flip catchError handle $ do
+        reportSLn "tc.constr.findInScope" 70 $ "  t: " ++ show t ++ "\n  t':" ++ show t' ++ "\n  term: " ++ show term ++ "."
+        reportSDoc "tc.constr.findInScope" 20 $ vcat
+          [ text "checkCandidateForMeta"
+          , text "t    =" <+> prettyTCM t
+          , text "t'   =" <+> prettyTCM t'
+          , text "term =" <+> prettyTCM term
+          ]
+        localState $ do
+           -- domi: we assume that nothing below performs direct IO (except
+           -- for logging and such, I guess)
+          ca <- runErrorT $ checkArguments ExpandLast DontExpandInstanceArguments  noRange [] t' t
+          case ca of
+            Left _ -> return False
+            Right (args, t'') -> do
+              reportSDoc "tc.constr.findInScope" 20 $
+                text "instance search: checking" <+> prettyTCM t''
+                <+> text "<=" <+> prettyTCM t
+              -- if constraints remain, we abort, but keep the candidate
+              flip (ifNoConstraints_ $ leqType t'' t) (const $ return True) $ do
+              --tel <- getContextTelescope
+              ctxArgs <- getContextArgs
+              v <- (`applyDroppingParameters` args) =<< reduce term
+              reportSDoc "tc.constr.findInScope" 10 $
+                text "instance search: attempting" <+> prettyTCM m
+                <+> text ":=" <+> prettyTCM v
+              assign m ctxArgs v
+--              assign m ctxArgs (term `apply` args)
+              -- make a pass over constraints, to detect cases where some are made
+              -- unsolvable by the assignment, but don't do this for FindInScope's
+              -- to prevent loops. We currently also ignore UnBlock constraints
+              -- to be on the safe side.
+              solveAwakeConstraints' True
+              return True
+      where
+        handle err = do
+          reportSDoc "tc.constr.findInScope" 50 $ text "assignment failed:" <+> prettyTCM err
+          return False
+    isIFSConstraint :: Constraint -> Bool
+    isIFSConstraint FindInScope{} = True
+    isIFSConstraint UnBlock{}     = True -- otherwise test/fail/Issue723 loops
+    isIFSConstraint _             = False
+
+-- | To preserve the invariant that a constructor is not applied to its
+--   parameter arguments, we explicitly check whether function term
+--   we are applying to arguments is a unapplied constructor.
+--   In this case we drop the first 'conPars' arguments.
+--   See Issue670a.
+applyDroppingParameters :: Term -> Args -> TCM Term
+applyDroppingParameters t vs =
+  case ignoreSharing t of
+    Con c [] -> do
+      def <- theDef <$> getConstInfo c
+      case def of
+        Constructor {conPars = n} -> return $ Con c (genericDrop n vs)
+        _ -> __IMPOSSIBLE__
+    _ -> return $ t `apply` vs
+
+-- | Attempt to solve irrelevant metas by instance search.
+solveIrrelevantMetas :: TCM ()
+solveIrrelevantMetas = mapM_ solveMetaIfIrrelevant =<< getOpenMetas
+
+solveMetaIfIrrelevant :: MetaId -> TCM ()
+solveMetaIfIrrelevant x = do
+  m <- lookupMeta x
+  when (irrelevantOrUnused (getMetaRelevance m)) $ do
+    reportSDoc "tc.conv.irr" 20 $ sep
+      [ text "instance search for solution of irrelevant meta"
+      , prettyTCM x, colon, prettyTCM $ jMetaType $ mvJudgement m
+      ]
+    flip catchError (const $ return ()) $ do
+      findInScope' x =<< initialIFSCandidates
+      -- do not add constraints!
+      return ()
diff --git a/src/full/Agda/TypeChecking/InstanceArguments.hs-boot b/src/full/Agda/TypeChecking/InstanceArguments.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/InstanceArguments.hs-boot
@@ -0,0 +1,7 @@
+
+module Agda.TypeChecking.InstanceArguments where
+
+import Agda.TypeChecking.Monad.Base (TCM)
+import Agda.Syntax.Internal (Type, Term)
+
+initializeIFSMeta :: String -> Type -> TCM Term
diff --git a/src/full/Agda/TypeChecking/Irrelevance.hs b/src/full/Agda/TypeChecking/Irrelevance.hs
--- a/src/full/Agda/TypeChecking/Irrelevance.hs
+++ b/src/full/Agda/TypeChecking/Irrelevance.hs
@@ -9,7 +9,7 @@
 
 import qualified Data.Map as Map
 
-import Agda.Interaction.Options
+import Agda.Interaction.Options hiding (tests)
 
 import Agda.Syntax.Common
 
@@ -17,14 +17,25 @@
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
+import Agda.Utils.QuickCheck
+import Agda.Utils.TestHelpers
 
 -- | data 'Relevance'
 --   see 'Agda.Syntax.Common'
 
+irrelevantOrUnused :: Relevance -> Bool
+irrelevantOrUnused Irrelevant = True
+irrelevantOrUnused UnusedArg  = True
+irrelevantOrUnused NonStrict  = False
+irrelevantOrUnused Relevant   = False
+irrelevantOrUnused Forced     = False
+
 -- | @unusableRelevance rel == True@ iff we cannot use a variable of @rel@.
 unusableRelevance :: Relevance -> Bool
 unusableRelevance rel = NonStrict `moreRelevant` rel
 
+-- | 'Relevance' composition.
+--   'Irrelevant' is dominant, 'Relevant' is neutral.
 composeRelevance :: Relevance -> Relevance -> Relevance
 composeRelevance r r' =
   case (r, r') of
@@ -34,27 +45,31 @@
     (_, NonStrict)  -> NonStrict
     (Forced, _)     -> Forced
     (_, Forced)     -> Forced
+    (UnusedArg, _)  -> UnusedArg
+    (_, UnusedArg)  -> UnusedArg
     (Relevant, Relevant) -> Relevant
 
 -- | @inverseComposeRelevance r x@ returns the most irrelevant @y@
 --   such that forall @x@, @y@ we have
---   @x `moreRelevant` (r `composeRelevance` y)@
+--   @x \`moreRelevant\` (r \`composeRelevance\` y)@
 --   iff
---   @(r `inverseComposeRelevance` x) `moreRelevant` y@ (Galois connection).
+--   @(r \`inverseComposeRelevance\` x) \`moreRelevant\` y@ (Galois connection).
 inverseComposeRelevance :: Relevance -> Relevance -> Relevance
 inverseComposeRelevance r x =
   case (r, x) of
-    (_, Forced)          -> Forced     -- preserve @Forced@
     (Relevant, x)        -> x          -- going to relevant arg.: nothing changes
-    (Forced, Relevant)   -> Forced     -- going forced: relevants become forced
+    _ | r == x           -> Relevant   -- because Relevant is comp.-neutral
+    (UnusedArg, x)       -> x
+    (Forced, UnusedArg)  -> Relevant
     (Forced, x)          -> x
-    (Irrelevant, _)      -> Relevant   -- going irrelevant: every thing usable
+    (Irrelevant, x)      -> Relevant   -- going irrelevant: every thing usable
     (_, Irrelevant)      -> Irrelevant -- otherwise: irrelevant things remain unusable
     (NonStrict, _)       -> Relevant   -- but @NonStrict@s become usable
 
--- | For comparing @Relevance@ ignoring @Forced@.
+-- | For comparing @Relevance@ ignoring @Forced@ and @UnusedArg@.
 ignoreForced :: Relevance -> Relevance
 ignoreForced Forced     = Relevant
+ignoreForced UnusedArg  = Relevant
 ignoreForced Relevant   = Relevant
 ignoreForced NonStrict  = NonStrict
 ignoreForced Irrelevant = Irrelevant
@@ -69,40 +84,31 @@
 nonStrictToIrr NonStrict = Irrelevant
 nonStrictToIrr rel       = rel
 
--- * Operations on 'Arg'.
+-- * Operations on 'Dom'.
 
 -- | Prepare parts of a parameter telescope for abstraction in constructors
 --   and projections.
-hideAndRelParams :: Arg a -> Arg a
+hideAndRelParams :: Dom a -> Dom a
 hideAndRelParams a = a
-  { argRelevance = nonStrictToIrr (argRelevance a)
-  , argHiding    = Hidden
+  { domRelevance = nonStrictToIrr (domRelevance a)
+  , domHiding    = Hidden
   }
 
+{- UNUSED
 -- | @modifyArgRelevance f arg@ applies @f@ to the 'argRelevance' component of @arg@.
 modifyArgRelevance :: (Relevance -> Relevance) -> Arg a -> Arg a
 modifyArgRelevance f a = a { argRelevance = f (argRelevance a) }
+-}
 
 -- | Used to modify context when going into a @rel@ argument.
-inverseApplyRelevance :: Relevance -> Arg a -> Arg a
-inverseApplyRelevance rel = modifyArgRelevance (rel `inverseComposeRelevance`)
--- inverseApplyRelevance rel a = a { argRelevance = rel `inverseComposeRelevance` argRelevance a }
+inverseApplyRelevance :: Relevance -> Dom a -> Dom a
+inverseApplyRelevance rel = mapDomRelevance (rel `inverseComposeRelevance`)
 
 -- | Compose two relevance flags.
 --   This function is used to update the relevance information
 --   on pattern variables @a@ after a match against something @rel@.
-applyRelevance :: Relevance -> Arg a -> Arg a
-applyRelevance rel = modifyArgRelevance (rel `composeRelevance`)
--- applyRelevance rel a = a { argRelevance = rel `composeRelevance` argRelevance a }
-
-{- Andreas, 2011-04-26: the combination Irrelevant Forced does not arise
-applyRelevance Irrelevant a | argRelevance a == Relevant =
-  a { argRelevance = Irrelevant }
-applyRelevance Forced a | argRelevance a == Relevant =
-  a { argRelevance = Forced }
-applyRelevance rel a = a -- ^ do nothing if rel == Relevant or a is
-                         -- already Forced or Irrelevant
--}
+applyRelevance :: Relevance -> Dom a -> Dom a
+applyRelevance rel = mapDomRelevance (rel `composeRelevance`)
 
 -- * Operations on 'Context'.
 
@@ -122,7 +128,7 @@
 workOnTypes' :: Bool -> TCM a -> TCM a
 workOnTypes' allowed cont =
   if allowed then
-    liftTCM $ modifyContext (modifyContextEntries $ modifyArgRelevance $ irrToNonStrict) cont
+    liftTCM $ modifyContext (modifyContextEntries $ mapDomRelevance $ irrToNonStrict) cont
    else cont
 
 -- | (Conditionally) wake up irrelevant variables and make them relevant.
@@ -140,7 +146,8 @@
           (fmap $ \ (t, a) -> (t, inverseApplyRelevance rel a))
           (envLetBindings e)
                                                   -- enable local  irr. defs
-      , envRelevance = rel                        -- enable global irr. defs
+      , envRelevance = composeRelevance rel (envRelevance e)
+                                                  -- enable global irr. defs
       }
 
 -- | Wake up irrelevant variables and make them relevant.  For instance,
@@ -148,14 +155,18 @@
 --   may be used, so they are awoken before type checking the argument.
 wakeIrrelevantVars :: TCM a -> TCM a
 wakeIrrelevantVars = applyRelevanceToContext Irrelevant
-{-
-wakeIrrelevantVars = local $ \ e -> e
-   { envContext = map wakeVar (envContext e) -- enable local  irr. defs
-   , envIrrelevant = True                    -- enable global irr. defs
-   }
-  where wakeVar ce = ce { ctxEntry = makeRelevant (ctxEntry ce) }
 
-applyRelevanceToContext :: Relevance -> TCM a -> TCM a
-applyRelevanceToContext Irrelevant cont = wakeIrrelevantVars cont
-applyRelevanceToContext _          cont = cont
--}
+
+------------------------------------------------------------------------
+-- * Tests
+------------------------------------------------------------------------
+
+prop_galois :: Relevance -> Relevance -> Relevance -> Bool
+prop_galois r x y =
+  x `moreRelevant` (r `composeRelevance` y) ==
+  (r `inverseComposeRelevance` x) `moreRelevant` y
+
+tests :: IO Bool
+tests = runTests "Agda.TypeChecking.Irrelevance"
+  [ quickCheck' prop_galois
+  ]
diff --git a/src/full/Agda/TypeChecking/Level.hs b/src/full/Agda/TypeChecking/Level.hs
--- a/src/full/Agda/TypeChecking/Level.hs
+++ b/src/full/Agda/TypeChecking/Level.hs
@@ -35,10 +35,10 @@
 
 builtinLevelKit :: TCM (Maybe LevelKit)
 builtinLevelKit = liftTCM $ do
-    level@(Def l []) <- primLevel
-    zero@(Def z []) <- primLevelZero
-    suc@(Def s []) <- primLevelSuc
-    max@(Def m []) <- primLevelMax
+    level@(Def l []) <- ignoreSharing <$> primLevel
+    zero@(Def z [])  <- ignoreSharing <$> primLevelZero
+    suc@(Def s [])   <- ignoreSharing <$> primLevelSuc
+    max@(Def m [])   <- ignoreSharing <$> primLevelMax
     let a @@ b = a `apply` [defaultArg b]
     return $ Just $ LevelKit
       { lvlType  = level
@@ -61,6 +61,11 @@
     Nothing -> sequence_ [primLevel, primLevelZero, primLevelSuc, primLevelMax] >> __IMPOSSIBLE__
     Just k  -> return k
 
+unLevel :: Term -> TCM Term
+unLevel (Level l)  = reallyUnLevelView l
+unLevel (Shared p) = unLevel (derefPtr p)
+unLevel v = return v
+
 reallyUnLevelView :: Level -> TCM Term
 reallyUnLevelView nv =
   case nv of
@@ -100,7 +105,7 @@
   mmax <- maybePrimDef primLevelMax
   let view a = do
         a <- reduce a
-        case a of
+        case ignoreSharing a of
           Level l -> return l
           Con s [arg]
             | Just s == msuc -> inc <$> view (unArg arg)
@@ -115,10 +120,10 @@
   where
     mkAtom a = do
       b <- reduceB a
-      return $ case b of
+      return $ case ignoreSharing <$> b of
         NotBlocked (MetaV m as) -> atom $ MetaLevel m as
-        NotBlocked a            -> atom $ NeutralLevel a
-        Blocked m a             -> atom $ BlockedLevel m a
+        NotBlocked _            -> atom $ NeutralLevel (ignoreBlocking b)
+        Blocked m _             -> atom $ BlockedLevel m (ignoreBlocking b)
 
     atom a = Max [Plus 0 a]
 
diff --git a/src/full/Agda/TypeChecking/LevelConstraints.hs b/src/full/Agda/TypeChecking/LevelConstraints.hs
--- a/src/full/Agda/TypeChecking/LevelConstraints.hs
+++ b/src/full/Agda/TypeChecking/LevelConstraints.hs
@@ -3,24 +3,34 @@
 
 import Data.List
 
+import Agda.Syntax.Common (Nat)
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Substitute
 import Agda.Utils.Size
 
-simplifyLevelConstraint :: Integer -> Constraint -> Constraints -> Constraint
+-- | @simplifyLevelConstraint n c cs@ turns an @c@ into an equality
+--   constraint if it is an inequality constraint and the reverse
+--   inequality is contained in @cs@. Number @n@ is the length
+--   of the context @c@ is defined in.
+simplifyLevelConstraint :: Int -> Constraint -> Constraints -> Constraint
 simplifyLevelConstraint n new old =
   case inequalities new of
     [a :=< b] | elem (b' :=< a') leqs -> LevelCmp CmpEq (Max [a]) (Max [b])
-      where (a', b') = raise (-n) (a, b)
+      where (a', b') = raise (waterLevel - n) (a, b)
     _ -> new
   where
-    leqs = concatMap (inequalities . unClosure) old
-
-    -- Unclosure converts deBruijn indices to deBruijn levels to
-    -- enable comparing constraints under different contexts
-    unClosure c = raise (-size (envContext $ clEnv cl)) $ clValue cl
+    -- get the constraints plus their "waterLevels", i.e.,
+    -- length of contexts they are defined in
+    unClosure c = (size (envContext $ clEnv cl), clValue cl)
       where cl = theConstraint c
+    (ns, ls) = unzip $ map unClosure old
+    -- compute the common water level
+    waterLevel :: Nat
+    waterLevel = maximum (n:ns)
+    -- convert deBruijn indices to deBruijn levels to
+    -- enable comparing constraints under different contexts
+    leqs = concatMap inequalities $ zipWith raise (map (waterLevel -) ns) ls
 
 data Leq = PlusLevel :=< PlusLevel
   deriving (Show, Eq)
diff --git a/src/full/Agda/TypeChecking/MetaVars.hs b/src/full/Agda/TypeChecking/MetaVars.hs
--- a/src/full/Agda/TypeChecking/MetaVars.hs
+++ b/src/full/Agda/TypeChecking/MetaVars.hs
@@ -5,23 +5,26 @@
 import Control.Monad.Reader
 import Control.Monad.State
 import Control.Monad.Error
-import Data.Generics
+import Data.Function
+import Data.Typeable (Typeable)
 import Data.List as List hiding (sort)
 import Data.Map (Map)
 import qualified Data.Map as Map
-import qualified Agda.Utils.IO.Locale as LocIO
 
 import Agda.Syntax.Common
 import qualified Agda.Syntax.Info as Info
 import Agda.Syntax.Internal
+import Agda.Syntax.Internal.Generic
 import Agda.Syntax.Position
 import Agda.Syntax.Literal
 import qualified Agda.Syntax.Abstract as A
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
+import Agda.TypeChecking.Monad.Exception
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Errors
 import Agda.TypeChecking.Free
@@ -29,6 +32,8 @@
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Irrelevance
 import Agda.TypeChecking.EtaContract
+import Agda.TypeChecking.Eliminators
+import Agda.TypeChecking.SizedTypes (boundedSizeMetaHook, isSizeProblem)
 
 import Agda.TypeChecking.MetaVars.Occurs
 
@@ -36,8 +41,10 @@
 
 import Agda.Utils.Fresh
 import Agda.Utils.List
+import Agda.Utils.Maybe
 import Agda.Utils.Monad
 import Agda.Utils.Size
+import Agda.Utils.Tuple
 import Agda.Utils.Permutation
 import qualified Agda.Utils.VarSet as Set
 
@@ -90,8 +97,16 @@
 --   Further, the meta variable may not be 'Frozen'.
 assignTerm :: MetaId -> Term -> TCM ()
 assignTerm x t = do
+     -- verify (new) invariants
+    whenM (isFrozen x) __IMPOSSIBLE__
+    assignTerm' x t
+
+-- | Skip frozen check.  Used for eta expanding frozen metas.
+assignTerm' :: MetaId -> Term -> TCM ()
+assignTerm' x t = do
     reportSLn "tc.meta.assign" 70 $ show x ++ " := " ++ show t
-    whenM (isFrozen x) __IMPOSSIBLE__  -- verify (new) invariant
+     -- verify (new) invariants
+    whenM (not <$> asks envAssignMetas) __IMPOSSIBLE__
     let i = metaInstance (killRange t)
     verboseS "profile.metas" 10 $ liftTCM $ tickMax "max-open-metas" . size =<< getOpenMetas
     modifyMetaStore $ ins x i
@@ -126,7 +141,7 @@
     return $ Type $ Max [Plus 0 $ MetaLevel x vs]
 
 newTypeMeta :: Sort -> TCM Type
-newTypeMeta s = El s <$> newValueMeta (sort s)
+newTypeMeta s = El s <$> newValueMeta RunMetaOccursCheck (sort s)
 
 newTypeMeta_ ::  TCM Type
 newTypeMeta_  = newTypeMeta =<< (workOnTypes $ newSortMeta)
@@ -135,52 +150,62 @@
 -- that it has a sort.  The sort comes from the solution.
 -- newTypeMeta_  = newTypeMeta Inf
 
--- | Create a new "implicit from scope" metavariable
-newIFSMeta ::  Type -> TCM Term
-newIFSMeta t = do
+-- | @newIFSMeta s t cands@ creates a new "implicit from scope" metavariable
+--   of type @t@ with name suggestion @s@ and initial solution candidates @cands@.
+newIFSMeta :: MetaNameSuggestion -> Type -> [(Term, Type)] -> TCM Term
+newIFSMeta s t cands = do
   vs  <- getContextArgs
   tel <- getContextTelescope
-  newIFSMetaCtx (telePi_ tel t) vs
+  newIFSMetaCtx s (telePi_ tel t) vs cands
 
 -- | Create a new value meta with specific dependencies.
-newIFSMetaCtx :: Type -> Args -> TCM Term
-newIFSMetaCtx t vs = do
-  i <- createMetaInfo
+newIFSMetaCtx :: MetaNameSuggestion -> Type -> Args -> [(Term, Type)] -> TCM Term
+newIFSMetaCtx s t vs cands = do
+  reportSDoc "tc.meta.new" 50 $ fsep
+    [ text "new ifs meta:"
+    , nest 2 $ prettyTCM vs <+> text "|-"
+    ]
+  i0 <- createMetaInfo
+  let i = i0 { miNameSuggestion = s }
   let TelV tel _ = telView' t
       perm = idP (size tel)
   x <- newMeta' OpenIFS i normalMetaPriority perm (HasType () t)
   reportSDoc "tc.meta.new" 50 $ fsep
-    [ text "new ifs meta:"
-    , nest 2 $ prettyTCM vs <+> text "|-"
-    , nest 2 $ text (show x) <+> text ":" <+> prettyTCM t
+    [ nest 2 $ text (show x) <+> text ":" <+> prettyTCM t
     ]
-  solveConstraint_ $ FindInScope x
+  solveConstraint_ $ FindInScope x cands
   return (MetaV x vs)
 
+
+newNamedValueMeta :: RunMetaOccursCheck -> MetaNameSuggestion -> Type -> TCM Term
+newNamedValueMeta b s t = do
+  v <- newValueMeta b t
+  setValueMetaName v s
+  return v
+
 -- | Create a new metavariable, possibly η-expanding in the process.
-newValueMeta ::  Type -> TCM Term
-newValueMeta t = do
+newValueMeta :: RunMetaOccursCheck -> Type -> TCM Term
+newValueMeta b t = do
   vs  <- getContextArgs
   tel <- getContextTelescope
-  newValueMetaCtx (telePi_ tel t) vs
+  newValueMetaCtx b (telePi_ tel t) vs
 
-newValueMetaCtx :: Type -> Args -> TCM Term
-newValueMetaCtx t ctx = do
-  m@(MetaV i _) <- newValueMetaCtx' t ctx
-  instantiateFull m
+newValueMetaCtx :: RunMetaOccursCheck -> Type -> Args -> TCM Term
+newValueMetaCtx b t ctx =
+  instantiateFull =<< newValueMetaCtx' b t ctx
 
 -- | Create a new value meta without η-expanding.
-newValueMeta' :: Type -> TCM Term
-newValueMeta' t = do
+newValueMeta' :: RunMetaOccursCheck -> Type -> TCM Term
+newValueMeta' b t = do
   vs  <- getContextArgs
   tel <- getContextTelescope
-  newValueMetaCtx' (telePi_ tel t) vs
+  newValueMetaCtx' b (telePi_ tel t) vs
 
 -- | Create a new value meta with specific dependencies.
-newValueMetaCtx' :: Type -> Args -> TCM Term
-newValueMetaCtx' t vs = do
-  i <- createMetaInfo
-  let TelV tel _ = telView' t
+newValueMetaCtx' :: RunMetaOccursCheck -> Type -> Args -> TCM Term
+newValueMetaCtx' b t vs = do
+  i <- createMetaInfo' b
+  let TelV tel a = telView' t
       perm = idP (size tel)
   x <- newMeta i normalMetaPriority perm (HasType () t)
   reportSDoc "tc.meta.new" 50 $ fsep
@@ -189,30 +214,43 @@
     , nest 2 $ text (show x) <+> text ":" <+> prettyTCM t
     ]
   etaExpandMetaSafe x
-  return $ MetaV x vs
+  -- Andreas, 2012-09-24: for Metas X : Size< u add constraint X+1 <= u
+  let u = shared $ MetaV x vs
+  boundedSizeMetaHook u tel a
+  return u
 
 newTelMeta :: Telescope -> TCM Args
 newTelMeta tel = newArgsMeta (abstract tel $ El Prop $ Sort Prop)
 
+type Condition = Dom Type -> Abs Type -> Bool
+trueCondition _ _ = True
+
 newArgsMeta :: Type -> TCM Args
-newArgsMeta t = do
+newArgsMeta = newArgsMeta' trueCondition
+
+newArgsMeta' :: Condition -> Type -> TCM Args
+newArgsMeta' condition t = do
   args <- getContextArgs
   tel  <- getContextTelescope
-  newArgsMetaCtx t tel args
+  newArgsMetaCtx' condition t tel args
 
 newArgsMetaCtx :: Type -> Telescope -> Args -> TCM Args
-newArgsMetaCtx (El s tm) tel ctx = do
+newArgsMetaCtx = newArgsMetaCtx' trueCondition
+
+newArgsMetaCtx' :: Condition -> Type -> Telescope -> Args -> TCM Args
+newArgsMetaCtx' condition (El s tm) tel ctx = do
   tm <- reduce tm
-  case tm of
-    Pi (Arg h r a) _  -> do
-      arg  <- (Arg h r) <$>
+  case ignoreSharing tm of
+    Pi dom@(Dom h r a) codom | condition dom codom -> do
+      arg  <- (Arg h r) <$> do
+              applyRelevanceToContext r $
                {-
                  -- Andreas, 2010-09-24 skip irrelevant record fields when eta-expanding a meta var
                  -- Andreas, 2010-10-11 this is WRONG, see Issue 347
                 if r == Irrelevant then return DontCare else
                 -}
-                 newValueMetaCtx (telePi_ tel a) ctx
-      args <- newArgsMetaCtx (El s tm `piApply` [arg]) tel ctx
+                 newValueMetaCtx RunMetaOccursCheck (telePi_ tel a) ctx
+      args <- newArgsMetaCtx' condition (El s tm `piApply` [arg]) tel ctx
       return $ arg : args
     _  -> return []
 
@@ -233,8 +271,11 @@
 
 newQuestionMark :: Type -> TCM Term
 newQuestionMark t = do
-  m@(MetaV x _) <- newValueMeta' t
-  ii		<- fresh
+  -- Do not run check for recursive occurrence of meta in definitions,
+  -- because we want to give the recursive solution interactively (Issue 589)
+  m  <- newValueMeta' DontRunMetaOccursCheck t
+  let MetaV x _ = ignoreSharing m
+  ii <- fresh
   addInteractionPoint ii x
   return m
 
@@ -246,7 +287,8 @@
 
 blockTermOnProblem :: Type -> Term -> ProblemId -> TCM Term
 blockTermOnProblem t v pid =
-  ifM (isProblemSolved pid) (return v) $ do
+  -- Andreas, 2012-09-27 do not block on unsolved size constraints
+  ifM (isProblemSolved pid `or2M` isSizeProblem pid) (return v) $ do
     i   <- createMetaInfo
     vs  <- getContextArgs
     tel <- getContextTelescope
@@ -254,9 +296,9 @@
                     i lowMetaPriority (idP $ size tel)
                     (HasType () $ telePi_ tel t)
                     -- we don't instantiate blocked terms
-    escapeContext (size tel) $ addConstraint (Guarded (UnBlock x) pid)
+    escapeContextToTopLevel $ addConstraint (Guarded (UnBlock x) pid)
     reportSDoc "tc.meta.blocked" 20 $ vcat
-      [ text "blocked" <+> prettyTCM x <+> text ":=" <+> escapeContext (size tel) (prettyTCM $ abstract tel v)
+      [ text "blocked" <+> prettyTCM x <+> text ":=" <+> escapeContextToTopLevel (prettyTCM $ abstract tel v)
       , text "     by" <+> (prettyTCM =<< getConstraintsForProblem pid) ]
     inst <- isInstantiatedMeta x
     case inst of
@@ -266,8 +308,8 @@
         -- that we compare against the blocked term once it's unblocked. This way
         -- blocked terms can be instantiated before they are unblocked, thus making
         -- constraint solving a bit more robust against instantiation order.
-        v   <- newValueMeta t
-        i   <- liftTCM (fresh :: TCM Integer)
+        v   <- newValueMeta DontRunMetaOccursCheck t
+        i   <- liftTCM fresh
         -- This constraint is woken up when unblocking, so it doesn't need a problem id.
         cmp <- buildProblemConstraint 0 (ValueCmp CmpEq t v (MetaV x vs))
         listenToMeta (CheckConstraint i cmp) x
@@ -277,12 +319,15 @@
 --
 --   Auxiliary function to create a postponed type checking problem.
 unblockedTester :: Type -> TCM Bool
+unblockedTester t = ifBlocked (unEl t) (\ m t -> return False) (\ t -> return True)
+{- OLD CODE
 unblockedTester t = do
   t <- reduceB $ unEl t
-  case t of
+  case ignoreSharing <$> t of
     Blocked{}          -> return False
     NotBlocked MetaV{} -> return False
     _                  -> return True
+-}
 
 -- | Create a postponed type checking problem @e : t@ that waits for type @t@
 --   to unblock (become instantiated or its constraints resolved).
@@ -296,17 +341,24 @@
 --   is added for this meta, which links to this meta.
 postponeTypeCheckingProblem :: A.Expr -> Type -> TCM Bool -> TCM Term
 postponeTypeCheckingProblem e t unblock = do
-  i   <- createMetaInfo
+  i   <- createMetaInfo' DontRunMetaOccursCheck
   tel <- getContextTelescope
   cl  <- buildClosure (e, t, unblock)
   m   <- newMeta' (PostponedTypeCheckingProblem cl)
                   i normalMetaPriority (idP (size tel))
          $ HasType () $ telePi_ tel t
+
   -- Create the meta that we actually return
-  v   <- newValueMeta t
-  i   <- liftTCM (fresh :: TCM Integer)
+  -- Andreas, 2012-03-15
+  -- This is an alias to the pptc meta, in order to allow pruning (issue 468)
+  -- and instantiation.
+  -- Since this meta's solution comes from user code, we do not need
+  -- to run the extended occurs check (metaOccurs) to exclude
+  -- non-terminating solutions.
   vs  <- getContextArgs
+  v   <- newValueMeta DontRunMetaOccursCheck t
   cmp <- buildProblemConstraint 0 (ValueCmp CmpEq t v (MetaV m vs))
+  i   <- liftTCM fresh
   listenToMeta (CheckConstraint i cmp) m
   addConstraint (UnBlock m)
   return v
@@ -340,7 +392,7 @@
     -- ^ Meta variables of \"hereditarily singleton\" record type.
   | Levels
     -- ^ Meta variables of level type, if type-in-type is activated.
-  deriving (Eq, Enum, Bounded)
+  deriving (Eq, Enum, Bounded, Show)
 
 -- | All possible metavariable kinds.
 
@@ -352,51 +404,70 @@
 etaExpandMeta :: [MetaKind] -> MetaId -> TCM ()
 etaExpandMeta kinds m = whenM (isEtaExpandable m) $ do
   verboseBracket "tc.meta.eta" 20 ("etaExpandMeta " ++ show m) $ do
-  meta       <- lookupMeta m
+  let waitFor x = do
+        reportSDoc "tc.meta.eta" 20 $ do
+          text "postponing eta-expansion of meta variable" <+>
+            prettyTCM m <+>
+            text "which is blocked by" <+> prettyTCM x
+        listenToMeta (EtaExpand m) x
+      dontExpand = do
+        reportSDoc "tc.meta.eta" 20 $ do
+          text "we do not expand meta variable" <+> prettyTCM m <+>
+            text ("(requested was expansion of " ++ show kinds ++ ")")
+  meta           <- lookupMeta m
   let HasType _ a = mvJudgement meta
-  TelV tel b <- telViewM a
-  let args	 = [ Arg h r $ Var i []
-		   | (i, Arg h r _) <- reverse $ zip [0..] $ reverse $ telToList tel
-		   ]
-  bb <- reduceB b  -- the target in the type @a@ of @m@
-  case unEl <$> bb of
+  TelV tel b     <- telView a
+{- OLD CODE
+  bb             <- reduceB b  -- the target in the type @a@ of @m@
+  case ignoreSharing . unEl <$> bb of
     -- if the target type of @m@ is a meta variable @x@ itself
     -- (@NonBlocked (MetaV{})@),
     -- or it is blocked by a meta-variable @x@ (@Blocked@), we cannot
     -- eta expand now, we have to postpone this.  Once @x@ is
     -- instantiated, we can continue eta-expanding m.  This is realized
     -- by adding @m@ to the listeners of @x@.
-    Blocked x _               -> listenToMeta (EtaExpand m) x
-    NotBlocked (MetaV x _)    -> listenToMeta (EtaExpand m) x
+    Blocked x _               -> waitFor x
+    NotBlocked (MetaV x _)    -> waitFor x
     NotBlocked lvl@(Def r ps) ->
+-}
+  -- if the target type @b@ of @m@ is a meta variable @x@ itself
+  -- (@NonBlocked (MetaV{})@),
+  -- or it is blocked by a meta-variable @x@ (@Blocked@), we cannot
+  -- eta expand now, we have to postpone this.  Once @x@ is
+  -- instantiated, we can continue eta-expanding m.  This is realized
+  -- by adding @m@ to the listeners of @x@.
+  ifBlocked (unEl b) (\ x _ -> waitFor x) $ \ t -> case ignoreSharing t of
+    lvl@(Def r ps) ->
       ifM (isEtaRecord r) (do
 	let expand = do
-              u <- withMetaInfo (mvInfo meta) $ newRecordMetaCtx r ps tel args
-              inContext [] $ addCtxTel tel $ do
+              u <- abstract tel <$> do withMetaInfo' meta $ newRecordMetaCtx r ps tel $ teleArgs tel
+              inTopContext $ do
                 verboseS "tc.meta.eta" 15 $ do
                   du <- prettyTCM u
-                  liftIO $ LocIO.putStrLn $ "eta expanding: " ++ show m ++ " --> " ++ show du
-                noConstraints $ assignV m args u  -- should never produce any constraints
+                  reportSLn "" 0 $ "eta expanding: " ++ show m ++ " --> " ++ show du
+                -- Andreas, 2012-03-29: No need for occurrence check etc.
+                -- we directly assign the solution for the meta
+                -- 2012-05-23: We also bypass the check for frozen.
+                noConstraints $ assignTerm' m u  -- should never produce any constraints
         if Records `elem` kinds then
           expand
-         else if SingletonRecords `elem` kinds then do
-          singleton <- isSingletonRecord r ps
-          case singleton of
-            Left x      -> listenToMeta (EtaExpand m) x
-            Right False -> return ()
-            Right True  -> expand
-         else
-          return ()
-      ) $ when (Levels `elem` kinds) $ do
-        mlvl <- getBuiltin' builtinLevel
-        tt   <- typeInType
-        if tt && Just lvl == mlvl
-         then do
-          reportSLn "tc.meta.eta" 20 $ "Expanding level meta to 0 (type-in-type)"
-          noConstraints $ assignV m args (Level $ Max [])
-         else
-          return ()
-    _ -> return ()
+         else if (SingletonRecords `elem` kinds) then do
+           singleton <- isSingletonRecord r ps
+           case singleton of
+             Left x      -> waitFor x
+             Right False -> dontExpand
+             Right True  -> expand
+          else dontExpand
+      ) $ ifM (andM [ return $ Levels `elem` kinds
+                      , typeInType
+                      , (Just lvl ==) <$> getBuiltin' builtinLevel
+                      ]) (do
+        reportSLn "tc.meta.eta" 20 $ "Expanding level meta to 0 (type-in-type)"
+        -- Andreas, 2012-03-30: No need for occurrence check etc.
+        -- we directly assign the solution for the meta
+        noConstraints $ assignTerm m (abstract tel $ Level $ Max [])
+     ) $ dontExpand
+    _ -> dontExpand
 
 -- | Eta expand blocking metavariables of record type, and reduce the
 -- blocked thing.
@@ -422,7 +493,7 @@
 --   restoration of the original constraints.
 
 assignV :: MetaId -> Args -> Term -> TCM ()
-assignV x args v = do
+assignV x args v = ifM (not <$> asks envAssignMetas) patternViolation $ do
 	reportSDoc "tc.meta.assign" 10 $ do
 	  text "term" <+> prettyTCM (MetaV x args) <+> text ":=" <+> prettyTCM v
         liftTCM $ nowSolvingConstraints (assign x args v) `finally` solveAwakeConstraints
@@ -430,6 +501,7 @@
 -- | @assign sort? x vs v@
 assign :: MetaId -> Args -> Term -> TCM ()
 assign x args v = do
+
         mvar <- lookupMeta x  -- information associated with meta x
 
         -- Andreas, 2011-05-20 TODO!
@@ -446,8 +518,8 @@
         v <- instantiate v
         reportSLn "tc.meta.assign" 50 $ "MetaVars.assign: assigning to " ++ show v
 
-        case (v, mvJudgement mvar) of
-            (Sort Inf, HasType{}) -> typeError $ GenericError "Setω is not a valid type."
+        case (ignoreSharing v, mvJudgement mvar) of
+            (Sort Inf, HasType{}) -> typeError SetOmegaNotValidType
             _                     -> return ()
 
         -- We don't instantiate frozen mvars
@@ -475,18 +547,25 @@
         -- even though the lhs is not a pattern, we can prune the y from _2
         let varsL = freeVars args
         let relVL = Set.toList $ relevantVars varsL
+{- Andreas, 2012-04-02: DontCare no longer present
+        -- take away top-level DontCare constructors
+        args <- return $ map (fmap stripDontCare) args
+-}
         -- Andreas, 2011-10-06 only irrelevant vars that are direct
         -- arguments to the meta, hence, can be abstracted over, may
         -- appear on the rhs.  (test/fail/Issue483b)
-        -- let irrVL = Set.toList $ irrelevantVars varsL
-        let fromIrrVar (Arg h Irrelevant (Var i [])) = [i]
-            fromIrrVar (Arg h Irrelevant (DontCare (Var i []))) = [i]
-            fromIrrVar _ = []
-        let irrVL = concat $ map fromIrrVar args
+        -- Update 2011-03-27: Also irr. vars under record constructors.
+        let fromIrrVar (Var i [])   = return [i]
+            fromIrrVar (Con c vs)   =
+              ifM (isNothing <$> isRecordConstructor c) (return []) $
+                concat <$> mapM (fromIrrVar . {- stripDontCare .-} unArg) vs
+            fromIrrVar (Shared p)   = fromIrrVar (derefPtr p)
+            fromIrrVar _ = return []
+        irrVL <- concat <$> mapM fromIrrVar
+                   [ v | Arg h r v <- args, irrelevantOrUnused r ]
         reportSDoc "tc.meta.assign" 20 $
             let pr (Var n []) = text (show n)
                 pr (Def c []) = prettyTCM c
-                pr (DontCare v) = pr v
                 pr _          = text ".."
             in vcat
                  [ text "mvar args:" <+> sep (map (pr . unArg) args)
@@ -504,15 +583,11 @@
 	reportSLn "tc.meta.assign" 15 "passed occursCheck"
 	verboseS "tc.meta.assign" 30 $ do
 	  let n = size v
-	  when (n > 200) $ do
-	    d <- sep [ text "size" <+> text (show n)
---		     , nest 2 $ text "type" <+> prettyTCM t
-		     , nest 2 $ text "term" <+> prettyTCM v
-		     ]
-	    liftIO $ LocIO.print d
-
-	-- Check that the arguments are variables
-	ids <- checkAllVars args
+	  when (n > 200) $ reportSDoc "" 0 $
+            sep [ text "size" <+> text (show n)
+--                , nest 2 $ text "type" <+> prettyTCM t
+                , nest 2 $ text "term" <+> prettyTCM v
+                ]
 
         -- Check linearity of @ids@
         -- Andreas, 2010-09-24: Herein, ignore the variables which are not
@@ -523,23 +598,27 @@
         reportSDoc "tc.meta.assign" 20 $
           text "fvars rhs:" <+> sep (map (text . show) $ Set.toList fvs)
 
-        unless (distinct $ filter (`Set.member` fvs) ids) $ do
-          -- non-linear lhs: we cannot solve, but prune
-          killResult <- prune x args $ Set.toList fvs
-          reportSDoc "tc.meta.assign" 10 $
-            text "pruning" <+> prettyTCM x <+> (text $
-              if killResult `elem` [PrunedSomething,PrunedEverything] then "succeeded"
-               else "failed")
-          patternViolation
+	-- Check that the arguments are variables
+	ids <- do
+          res <- runErrorT $ inverseSubst args
+          case res of
+            -- all args are variables
+            Right (Just ids) -> do
+              reportSDoc "tc.meta.assign" 50 $
+                text "inverseSubst returns:" <+> sep (map prettyTCM ids)
+              return ids
+            -- we have non-variables, but these are not eliminateable
+            Right Nothing    -> attemptPruning x args fvs
+            -- we have proper values as arguments which could be cased on
+            -- here, we cannot prune, since offending vars could be eliminated
+            Left ()          -> patternViolation
 
-{- Andreas, 2011-04-21 this does not work
-        if not (distinct $ filter (`Set.member` fvs) ids) then do
-          -- non-linear lhs: we cannot solve, but prune
-          ok <- prune x args $ Set.toList fvs
-          if ok then return [] else patternViolation
+        ids <- do
+          res <- runErrorT $ checkLinearity (`Set.member` fvs) ids
+          case res of
+            Right ids -> return ids
+            Left ()   -> attemptPruning x args fvs
 
-        else do
--}
         -- we are linear, so we can solve!
 	reportSDoc "tc.meta.assign" 25 $
 	    text "preparing to instantiate: " <+> prettyTCM v
@@ -551,13 +630,13 @@
 	    --   ids = d b e
 	    -- then
 	    --   v' = (λ a b c d e. v) _ 1 _ 2 0
-	    tel   <- getContextTelescope
-	    gamma <- map defaultArg <$> getContextTerms
-	    let iargs = reverse $ zipWith (rename ids) [0..] $ reverse gamma
+	    tel <- getContextTelescope
+	    let iargs = map (defaultArg . substitute ids) $ downFrom $ size tel
 		v'    = raise (size args) (abstract tel v) `apply` iargs
-	    return v'
+	    -- instantiateFull v'
+            return v'
 
-        -- Andreas, 2011-04-18 to work with irrelevant parameters DontCare
+        -- Andreas, 2011-04-18 to work with irrelevant parameters
         -- we need to construct tel' from the type of the meta variable
         -- (no longer from ids which may not be the complete variable list
         -- any more)
@@ -565,7 +644,7 @@
 	reportSDoc "tc.meta.assign" 15 $ text "type of meta =" <+> prettyTCM t
 --	reportSDoc "tc.meta.assign" 30 $ text "type of meta =" <+> text (show t)
 
-        TelV tel0 core0 <- telViewM t
+        TelV tel0 core0 <- telView t
         let n = length args
 	reportSDoc "tc.meta.assign" 30 $ text "tel0  =" <+> prettyTCM tel0
 	reportSDoc "tc.meta.assign" 30 $ text "#args =" <+> text (show n)
@@ -577,58 +656,147 @@
 
 	-- Perform the assignment (and wake constraints). Metas
 	-- are top-level so we do the assignment at top-level.
-	n <- size <$> getContextTelescope
-	escapeContext n $ assignTerm x $ killRange (abstract tel' v')
+	inTopContext $ assignTerm x (killRange $ abstract tel' v')
 	return ()
     where
-        -- @ids@ are the lhs variables (metavar arguments)
+        -- @ids@ maps lhs variables (metavar arguments) to terms
         -- @i@ is the variable from the context Gamma
-        rename :: [Nat] -> Nat -> Arg Term -> Arg Term
-	rename ids i arg = case findIndex (==i) ids of
-	    Just j  -> fmap (const $ Var (fromIntegral j) []) arg
-	    Nothing -> fmap (const __IMPOSSIBLE__) arg	-- we will end up here, but never look at the result
+        substitute :: [(Nat,Term)] -> Nat -> Term
+	substitute ids i = maybe __IMPOSSIBLE__ id $ lookup i ids
 
+        attemptPruning x args fvs = do
+          -- non-linear lhs: we cannot solve, but prune
+          killResult <- prune x args $ Set.toList fvs
+          reportSDoc "tc.meta.assign" 10 $
+            text "pruning" <+> prettyTCM x <+> (text $
+              if killResult `elem` [PrunedSomething,PrunedEverything] then "succeeded"
+               else "failed")
+          patternViolation
+
+
+-- cannot move this PrettyTCM instance to Typechecking.Pretty
+-- because then it conflicts with an instance in Typechecking.Positivity
+instance (PrettyTCM a, PrettyTCM b) => PrettyTCM (a,b) where
+  prettyTCM (a, b) = parens $ prettyTCM a <> comma <> prettyTCM b
+
 type FVs = Set.VarSet
+type SubstCand = [(Nat,Term)] -- ^ a possibly non-deterministic substitution
 
--- | Check that arguments to a metavar are in pattern fragment.
---   Assumes all arguments already in whnf.
+instance Error () where
+  noMsg = ()
+
+-- | Turn non-det substitution into proper substitution, if possible.
+--   The substitution can be restricted to @elemFVs@
+checkLinearity :: (Nat -> Bool) -> SubstCand -> ErrorT () TCM SubstCand
+checkLinearity elemFVs ids0 = do
+  let ids = sortBy (compare `on` fst) $ filter (elemFVs . fst) ids0
+  let grps = groupOn fst ids
+  concat <$> mapM makeLinear grps
+  where
+    -- | Non-determinism can be healed if type is singleton. [Issue 593]
+    --   (Same as for irrelevance.)
+    makeLinear :: SubstCand -> ErrorT () TCM SubstCand
+    makeLinear []            = __IMPOSSIBLE__
+    makeLinear grp@[_]       = return grp
+    makeLinear (p@(i,t) : _) =
+      ifM ((Right True ==) <$> do isSingletonTypeModuloRelevance =<< typeOfBV i)
+        (return [p])
+        (throwError ())
+
+-- Intermediate result in the following function
+type Res = Maybe [(Arg Nat, Term)]
+
+-- | Check that arguments @args@ to a metavar are in pattern fragment.
+--   Assumes all arguments already in whnf and eta-reduced.
 --   Parameters are represented as @Var@s so @checkArgs@ really
---     checks that all args are @Var@s and returns the
---     list of corresponding indices for each arg.
---   Linearity has to be checked separately.
+--   checks that all args are @Var@s and returns the "substitution"
+--   to be applied to the rhs of the equation to solve.
+--   (If @args@ is considered a substitution, its inverse is returned.)
 --
---   @reverse@ is necessary because we are directly abstracting over this list @ids@.
-checkAllVars :: Args -> TCM [Nat]
-checkAllVars args =
-  case allVarOrIrrelevant args of
-    Nothing -> do
-      reportSDoc "tc.meta.assign" 15 $ vcat [ text "not all variables: " <+> prettyTCM args
-                                            , text "  aborting assignment" ]
-      patternViolation
-    Just is -> return $ map unArg is
+--   The returned list might not be ordered.
+--   Linearity, i.e., whether the substitution is deterministic,
+--   has to be checked separately.
+--
+inverseSubst :: Args -> ErrorT () TCM (Maybe SubstCand)
+inverseSubst args = fmap (map (mapFst unArg)) <$> loop (zip args terms)
+  where
+    loop  = foldM isVarOrIrrelevant (Just [])
+    terms = map var (downFrom (size args))
+    failure = do
+      lift $ reportSDoc "tc.meta.assign" 15 $ vcat
+        [ text "not all arguments are variables: " <+> prettyTCM args
+        , text "  aborting assignment" ]
+      throwError ()
 
--- | filter out irrelevant args and check that all others are variables.
---   Return the reversed list of variables.
-allVarOrIrrelevant :: Args -> Maybe [Arg Nat]
-allVarOrIrrelevant args = foldM isVarOrIrrelevant [] args where
-  isVarOrIrrelevant vars arg =
-    case arg of
-      Arg h r (Var i []) -> return $ Arg h r i : removeIrr i vars
-      Arg h Irrelevant (DontCare (Var i [])) -> return $ addIrrIfNotPresent h i vars
-      -- Andreas, 2011-04-27 keep irrelevant variables
-      Arg h Irrelevant _ -> return $ Arg h Irrelevant (-1) : vars -- any impossible deBruijn index will do (see Jason Reed, LFMTP 09 "_" or Nipkow "minus infinity")
-      _                  -> Nothing
-  -- in case of non-linearity make sure not to count the irrelevant vars
-  addIrrIfNotPresent h i vars
-    | any (\ (Arg _ _ j) -> j == i) vars = Arg h Irrelevant (-1) : vars
-    | otherwise                          = Arg h Irrelevant i    : vars
-  removeIrr i = map (\ a@(Arg h r j) ->
-    if r == Irrelevant && i == j then Arg h Irrelevant (-1) else a)
+    isVarOrIrrelevant :: Res -> (Arg Term, Term) -> ErrorT () TCM Res
+    isVarOrIrrelevant vars (arg, t) =
+      case ignoreSharing <$> arg of
+        -- i := x
+        Arg h r (Var i []) -> return $ (Arg h r i, t) `cons` vars
 
+        -- (i, j) := x  becomes  [i := fst x, j := snd x]
+        Arg h r (Con c vs) -> do
+          isRC <- lift $ isRecordConstructor c
+          case isRC of
+            Just (_, Record{ recFields = fs }) -> do
+                let aux (Arg _ _ v) (Arg h' r' f) =
+                      (Arg (min h h') (max r r') v, -- OLD: (stripDontCare v),
+                       Def f [defaultArg t])
+                res <- loop $ zipWith aux vs fs
+                return $ res `append` vars
+            Just _ ->  __IMPOSSIBLE__
+            Nothing | irrelevantOrUnused r -> return vars
+                    | otherwise -> failure
 
+        -- An irrelevant argument which is not an irrefutable pattern is dropped
+        Arg h r _ | irrelevantOrUnused r -> return vars
+
+        -- Distinguish args that can be eliminated (Con,Lit,Lam,unsure) ==> failure
+        -- from those that can only put somewhere as a whole ==> return Nothing
+        Arg _ _ Var{}      -> return $ Nothing -- neutral
+        Arg _ _ v@(Def{})  -> do
+          elV <- lift $ elimView v
+          case elV of
+            VarElim{}      -> return $ Nothing -- neutral
+            _              -> failure
+        Arg _ _ Lam{}      -> failure
+        Arg _ _ Lit{}      -> failure
+        Arg _ _ MetaV{}    -> failure
+        Arg _ _ Pi{}       -> return $ Nothing
+        Arg _ _ Sort{}     -> return $ Nothing
+        Arg _ _ Level{}    -> return $ Nothing
+        Arg _ _ DontCare{} -> __IMPOSSIBLE__
+
+        Arg h r (Shared p) -> isVarOrIrrelevant vars (Arg h r $ derefPtr p, t)
+
+    -- managing an assoc list where duplicate indizes cannot be irrelevant vars
+    append :: Res -> Res -> Res
+    append Nothing    _    = Nothing
+    append (Just res) vars = foldr cons vars res
+
+    -- adding an irrelevant entry only if not present
+    cons :: (Arg Nat, Term) -> Res -> Res
+    cons a Nothing = Nothing
+    cons a@(Arg h Irrelevant i, t) (Just vars)    -- TODO? UnusedArg?!
+      | any ((i==) . unArg . fst) vars  = Just vars
+      | otherwise                       = Just $ a : vars
+    -- adding a relevant entry:
+    cons a@(Arg h r          i, t) (Just vars) = Just $ a :
+      -- filter out duplicate irrelevants
+      filter (not . (\ a@(Arg h r j, t) -> r == Irrelevant && i == j)) vars
+
 updateMeta :: MetaId -> Term -> TCM ()
 updateMeta mI v = do
     mv <- lookupMeta mI
-    withMetaInfo (getMetaInfo mv) $ do
+    withMetaInfo' mv $ do
       args <- getContextArgs
       noConstraints $ assignV mI args v
+
+-- | Returns every meta-variable occurrence in the given type, except
+-- for those in 'Sort's.
+
+allMetas :: Type -> [MetaId]
+allMetas = foldTerm metas
+  where
+  metas (MetaV m _) = [m]
+  metas _           = []
diff --git a/src/full/Agda/TypeChecking/MetaVars.hs-boot b/src/full/Agda/TypeChecking/MetaVars.hs-boot
--- a/src/full/Agda/TypeChecking/MetaVars.hs-boot
+++ b/src/full/Agda/TypeChecking/MetaVars.hs-boot
@@ -1,9 +1,17 @@
 
 module Agda.TypeChecking.MetaVars where
 
-import Agda.Syntax.Internal	    ( MetaId, Term, Sort, Type, Args )
-import Agda.TypeChecking.Monad.Base ( TCM )
+import Agda.Syntax.Common	    ( Dom )
+import Agda.Syntax.Internal	    ( MetaId, Term, Sort, Type, Args, Abs )
+import Agda.TypeChecking.Monad.Base ( TCM, RunMetaOccursCheck(..) )
 
+type Condition = Dom Type -> Abs Type -> Bool
+newArgsMeta'      :: Condition -> Type -> TCM Args
+newArgsMeta       :: Type -> TCM Args
 assignTerm        :: MetaId -> Term -> TCM ()
 etaExpandMetaSafe :: MetaId -> TCM ()
 assignV           :: MetaId -> Args -> Term -> TCM ()
+assign 		  :: MetaId -> Args -> Term -> TCM ()
+newIFSMeta 	  :: String -> Type -> [(Term, Type)] -> TCM Term
+newValueMeta      :: RunMetaOccursCheck -> Type -> TCM Term
+newNamedValueMeta :: RunMetaOccursCheck -> String -> Type -> TCM Term
diff --git a/src/full/Agda/TypeChecking/MetaVars/Mention.hs b/src/full/Agda/TypeChecking/MetaVars/Mention.hs
--- a/src/full/Agda/TypeChecking/MetaVars/Mention.hs
+++ b/src/full/Agda/TypeChecking/MetaVars/Mention.hs
@@ -24,6 +24,7 @@
     Level l      -> mm l
     DontCare v   -> False   -- we don't have to look inside don't cares when deciding to wake constraints
     MetaV y args -> x == y || mm args   -- TODO: we really only have to look one level deep at meta args
+    Shared p     -> mm $ derefPtr p
     where
       mm v = mentionsMeta x v
 
@@ -55,8 +56,12 @@
   mentionsMeta x = mentionsMeta x . unAbs
 
 instance MentionsMeta t => MentionsMeta (Arg t) where
-  mentionsMeta x = mentionsMeta x . unArg
+  mentionsMeta x (Arg h Irrelevant t) = False  -- we don't have to look inside irrelevant arguments when deciding to wake constraints
+  mentionsMeta x a = mentionsMeta x (unArg a)
 
+instance MentionsMeta t => MentionsMeta (Dom t) where
+  mentionsMeta x = mentionsMeta x . unDom
+
 instance MentionsMeta t => MentionsMeta [t] where
   mentionsMeta x = any (mentionsMeta x)
 
@@ -95,8 +100,8 @@
     UnBlock _           -> True   -- this might be a postponed typechecking
                                   -- problem and we don't have a handle on
                                   -- what metas it depends on
-    FindInScope m       -> True   -- this needs to be woken up for any meta
-    IsEmpty t           -> mm t
+    FindInScope{}       -> True   -- this needs to be woken up for any meta
+    IsEmpty r t         -> mm t
     where
       mm v = mentionsMeta x v
 
diff --git a/src/full/Agda/TypeChecking/MetaVars/Occurs.hs b/src/full/Agda/TypeChecking/MetaVars/Occurs.hs
--- a/src/full/Agda/TypeChecking/MetaVars/Occurs.hs
+++ b/src/full/Agda/TypeChecking/MetaVars/Occurs.hs
@@ -5,6 +5,13 @@
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Error
+import Control.Monad.Reader
+import Control.Monad.State
+
+import Data.List
+import Data.Maybe
+import Data.Set (Set)
+import qualified Data.Set
 import Data.Traversable (traverse)
 
 import Agda.Syntax.Common
@@ -15,7 +22,9 @@
 import Agda.TypeChecking.Free hiding (Occurrence(..))
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.EtaContract
-import Agda.TypeChecking.Datatypes (isDataOrRecordType)
+import Agda.TypeChecking.Eliminators
+import Agda.TypeChecking.Records
+import Agda.TypeChecking.Datatypes (isDataOrRecordType, DataOrRecord(..))
 import {-# SOURCE #-} Agda.TypeChecking.MetaVars
 
 import Agda.Utils.Monad
@@ -26,10 +35,66 @@
 import Agda.Utils.Impossible
 #include "../../undefined.h"
 
+{- To address issue 585 (meta var occurrences in mutual defs)
+
+data B : Set where
+  inn : A -> B
+
+out : B -> A
+out (inn a) = a
+
+postulate
+  P : (y : A) (z : Unit -> B) → Set
+  p : (x : Unit -> B) → P (out (x unit)) x
+
+mutual
+  d : Unit -> B
+  d unit = inn _           -- Y
+
+  g : P (out (d unit)) d
+  g = p _             -- X
+
+-- Agda solves  d unit = inn (out (d unit))
+--
+-- out (X unit) = out (d unit) = out (inn Y) = Y
+-- X = d
+
+When doing the occurs check on d, we need to look at the definition of
+d to discover that it mentions X.
+
+To this end, we extend the state by names of definitions that have to
+be checked when they occur.  At the beginning, this is initialized
+with the names in the current mutual block.  Each time we encounter a
+name in the list during occurs check, we delete it (if check is
+successful).  This way, we do not duplicate work.
+
+-}
+
+modifyOccursCheckDefs :: (Set QName -> Set QName) -> TCM ()
+modifyOccursCheckDefs f = modify $ \ st ->
+  st { stOccursCheckDefs = f (stOccursCheckDefs st) }
+
+-- | Set the names of definitions to be looked at
+--   to the defs in the current mutual block.
+initOccursCheck :: MetaVariable -> TCM ()
+initOccursCheck mv = modifyOccursCheckDefs . const =<<
+  if (miMetaOccursCheck (mvInfo mv) == DontRunMetaOccursCheck)
+   then return Data.Set.empty
+   else maybe (return Data.Set.empty) lookupMutualBlock =<< asks envMutualBlock
+
+-- | Is a def in the list of stuff to be checked?
+defNeedsChecking :: QName -> TCM Bool
+defNeedsChecking d = Data.Set.member d <$> gets stOccursCheckDefs
+
+-- | Remove a def from the list of defs to be looked at.
+tallyDef :: QName -> TCM ()
+tallyDef d = modifyOccursCheckDefs $ \ s -> Data.Set.delete d s
+
 data OccursCtx
   = Flex          -- ^ we are in arguments of a meta
   | Rigid         -- ^ we are not in arguments of a meta but a bound var
   | StronglyRigid -- ^ we are at the start or in the arguments of a constructor
+  | Top           -- ^ we are at the term root (this turns into @StronglyRigid@)
   | Irrel         -- ^ we are in an irrelevant argument
   deriving (Eq, Show)
 
@@ -44,8 +109,14 @@
 unfold NoUnfold  v = NotBlocked <$> instantiate v
 unfold YesUnfold v = reduceB v
 
+-- | Leave the top position.
+leaveTop :: OccursCtx -> OccursCtx
+leaveTop Top = StronglyRigid
+leaveTop ctx = ctx
+
 -- | Leave the strongly rigid position.
 weakly :: OccursCtx -> OccursCtx
+weakly Top           = Rigid
 weakly StronglyRigid = Rigid
 weakly ctx = ctx
 
@@ -53,7 +124,8 @@
 strongly Rigid = StronglyRigid
 strongly ctx = ctx
 
-abort :: OccursCtx -> TypeError -> TCM ()
+abort :: OccursCtx -> TypeError -> TCM a
+abort Top           err = typeError err
 abort StronglyRigid err = typeError err -- here, throw an uncatchable error (unsolvable constraint)
 abort Flex  _ = patternViolation -- throws a PatternErr, which leads to delayed constraint
 abort Rigid _ = patternViolation
@@ -71,30 +143,26 @@
 takeRelevant :: Vars -> [Nat]
 takeRelevant = fst
 
-underAbs :: Vars -> Vars
-underAbs (relVs, irrVs) = (0 : map (1+) relVs, map (1+) irrVs)
+liftUnderAbs :: Vars -> Vars
+liftUnderAbs (relVs, irrVs) = (0 : map (1+) relVs, map (1+) irrVs)
 
 -- | Extended occurs check.
 class Occurs t where
   occurs :: UnfoldStrategy -> OccursCtx -> MetaId -> Vars -> t -> TCM t
+  metaOccurs :: MetaId -> t -> TCM ()  -- raise exception if meta occurs in t
 
 -- | When assigning @m xs := v@, check that @m@ does not occur in @v@
 --   and that the free variables of @v@ are contained in @xs@.
 occursCheck :: MetaId -> Vars -> Term -> TCM Term
 occursCheck m xs v = liftTCM $ do
-  let bailOnSelf v = do
-        v <- instantiate v
-        case v of
-          -- Don't fail if trying to instantiate to just itself
-          MetaV m' _ | m == m' -> patternViolation
-          Level (Max [Plus 0 (MetaLevel m' _)])
-                     | m == m' -> patternViolation
-          _ -> return v
-
-  v <- bailOnSelf v
+  mv <- lookupMeta m
+  initOccursCheck mv
+      -- TODO: Can we do this in a better way?
+  let redo m = m -- disableDestructiveUpdate m >> m
   -- First try without normalising the term
-  occurs NoUnfold  StronglyRigid m xs v `catchError` \_ -> do
-  occurs YesUnfold StronglyRigid m xs v `catchError` \err -> case errError err of
+  redo (occurs NoUnfold  Top m xs v) `catchError` \_ -> do
+  initOccursCheck mv
+  redo (occurs YesUnfold Top m xs v) `catchError` \err -> case err of
                           -- Produce nicer error messages
     TypeError _ cl -> case clValue cl of
       MetaOccursInItself{} ->
@@ -130,54 +198,47 @@
       NotBlocked v -> occurs' ctx v
     where
       occurs' ctx v = case v of
-        Var i vs   -> do         -- abort Rigid turns this error into PatternErr
-          unless (i `allowedVar` xs) $ abort (strongly ctx) $ MetaCannotDependOn m (takeRelevant xs) i
-          Var i <$> occ (weakly ctx) vs
-        Lam h f	    -> Lam h <$> occ ctx f
-        Level l     -> Level <$> occ ctx l
+        Var i vs   -> do
+          if (i `allowedVar` xs) then Var i <$> occ (weakly ctx) vs else do
+            -- if the offending variable is of singleton type,
+            -- eta-expand it away
+            isST <- isSingletonType =<< typeOfBV i
+            case isST of
+              -- cannot decide, blocked by meta-var
+              Left mid -> patternViolation
+              -- not a singleton type
+              Right Nothing -> -- abort Rigid turns this error into PatternErr
+                abort (strongly ctx) $ MetaCannotDependOn m (takeRelevant xs) i
+              -- is a singleton type with unique inhabitant sv
+              Right (Just sv) -> return $ sv `apply` vs
+        Lam h f	    -> Lam h <$> occ (leaveTop ctx) f
+        Level l     -> Level <$> occ ctx l  -- stay in Top
         Lit l	    -> return v
         DontCare v  -> DontCare <$> occurs red Irrel m (goIrrelevant xs) v
-        Def d vs    -> Def d <$> occDef d ctx vs
-        Con c vs    -> Con c <$> occ ctx vs  -- if strongly rigid, remain so
-        Pi a b	    -> uncurry Pi <$> occ ctx (a,b)
-        Sort s	    -> Sort <$> occ ctx s
+        Def d vs    -> Def d <$> occDef d (leaveTop ctx) vs
+        Con c vs    -> Con c <$> occ (leaveTop ctx) vs  -- if strongly rigid, remain so
+        Pi a b	    -> uncurry Pi <$> occ (leaveTop ctx) (a,b)
+        Sort s	    -> Sort <$> occ (leaveTop ctx) s
+        v@Shared{}  -> updateSharedTerm (occ ctx) v
         MetaV m' vs -> do
             -- Check for loop
             --   don't fail hard on this, since we might still be on the top-level
             --   after some killing (Issue 442)
-            when (m == m') $ patternViolation
+            when (m == m') $ if ctx == Top then patternViolation else
+              abort ctx $ MetaOccursInItself m'
 
             -- The arguments of a meta are in a flexible position
             (MetaV m' <$> occurs red Flex m xs vs) `catchError` \err -> do
               reportSDoc "tc.meta.kill" 25 $ vcat
                 [ text $ "error during flexible occurs check, we are " ++ show ctx
-                , text $ show (errError err)
+                , text $ show err
                 ]
-              case errError err of
+              case err of
                 -- On pattern violations try to remove offending
                 -- flexible occurrences (if not already in a flexible context)
                 PatternErr{} | ctx /= Flex -> do
                       reportSLn "tc.meta.kill" 20 $
                         "oops, pattern violation for " ++ show m'
-{-
-                  let kills = map (hasBadRigid xs) $ map unArg vs
-                  reportSLn "tc.meta.kill" 20 $
-                    "oops, pattern violation for " ++ show m' ++ "\n" ++
-                    "  kills: " ++ show kills
-                  if not (or kills)
-                    then throwError err
-                    else do
-                      reportSDoc "tc.meta.kill" 10 $ vcat
-                        [ text "attempting kills"
-                        , nest 2 $ vcat
-                          [ text "m'    =" <+> text (show m')
-                          , text "xs    =" <+> text (show xs)
-                          , text "vs    =" <+> prettyList (map prettyTCM vs)
-                          , text "kills =" <+> text (show kills)
-                          ]
-                        ]
-                      ok <- killArgs kills m'
--}
                       killResult <- prune m' vs (takeRelevant xs)
                       if (killResult == PrunedEverything)
                         -- after successful pruning, restart occurs check
@@ -188,15 +249,69 @@
           occ ctx v = occurs red ctx m xs v
           -- a data or record type constructor propagates strong occurrences
           -- since e.g. x = List x is unsolvable
-          occDef d ctx v = ifM (isDataOrRecordType d) (occ ctx v)
-                                 (occ (defArgs red ctx) v)
+          occDef d ctx vs = do
+            def <- theDef <$> getConstInfo d
+            whenM (defNeedsChecking d) $ do
+              tallyDef d
+              metaOccurs m def
+            if (defIsDataOrRecord def) then (occ ctx vs) else (occ (defArgs red ctx) vs)
 
+  metaOccurs m v = do
+    v <- instantiate v
+    case v of
+      Var i vs   -> metaOccurs m vs
+      Lam h f    -> metaOccurs m f
+      Level l    -> metaOccurs m l
+      Lit l      -> return ()
+      DontCare v -> metaOccurs m v
+      Def d vs   -> metaOccurs m d >> metaOccurs m vs
+      Con c vs   -> metaOccurs m vs
+      Pi a b     -> metaOccurs m (a,b)
+      Sort s     -> metaOccurs m s
+      Shared p   -> metaOccurs m $ derefPtr p
+      MetaV m' vs | m == m' -> patternViolation
+                  | otherwise -> metaOccurs m vs
+
+instance Occurs QName where
+  occurs red ctx m xs d = __IMPOSSIBLE__
+
+  metaOccurs m d = whenM (defNeedsChecking d) $ do
+    tallyDef d
+    metaOccurs m . theDef =<< getConstInfo d
+
+instance Occurs Defn where
+  occurs red ctx m xs def = __IMPOSSIBLE__
+
+  metaOccurs m Axiom{}                      = return ()
+  metaOccurs m Function{ funClauses = cls } = metaOccurs m cls
+  -- since a datatype is isomorphic to the sum of its constructor types
+  -- we check the constructor types
+  metaOccurs m Datatype{ dataCons = cs }    = mapM_ mocc cs
+    where mocc c = metaOccurs m . defType =<< getConstInfo c
+  metaOccurs m Record{ recConType = v }     = metaOccurs m v
+  metaOccurs m Constructor{}                = return ()
+  metaOccurs m Primitive{}                  = return ()
+
+instance Occurs Clause where
+  occurs red ctx m xs cl = __IMPOSSIBLE__
+
+  metaOccurs m (Clause { clauseBody = body }) = walk body
+    where walk NoBody   = return ()
+          walk (Body v) = metaOccurs m v
+          walk (Bind b) = underAbstraction_ b walk
+
 instance Occurs Level where
   occurs red ctx m xs (Max as) = Max <$> occurs red ctx m xs as
 
+  metaOccurs m (Max as) = metaOccurs m as
+
 instance Occurs PlusLevel where
   occurs red ctx m xs l@ClosedLevel{} = return l
-  occurs red ctx m xs (Plus n l) = Plus n <$> occurs red ctx m xs l
+  occurs red ctx m xs (Plus n l) = Plus n <$> occurs red ctx' m xs l
+    where ctx' | n == 0    = ctx
+               | otherwise = leaveTop ctx  -- we leave Top only if we encounter at least one successor
+  metaOccurs m ClosedLevel{} = return ()
+  metaOccurs m (Plus n l)    = metaOccurs m l
 
 instance Occurs LevelAtom where
   occurs red ctx m xs l = do
@@ -205,15 +320,26 @@
            NoUnfold  -> instantiate l
     case l of
       MetaLevel m' args -> do
-        MetaV m' args <- occurs red ctx m xs (MetaV m' args)
+        MetaV m' args <- ignoreSharing <$> occurs red ctx m xs (MetaV m' args)
         return $ MetaLevel m' args
       NeutralLevel v   -> NeutralLevel   <$> occurs red ctx m xs v
       BlockedLevel m v -> BlockedLevel m <$> occurs red Flex m xs v
       UnreducedLevel v -> UnreducedLevel <$> occurs red ctx m xs v
 
+  metaOccurs m l = do
+    l <- instantiate l
+    case l of
+      MetaLevel m' args -> metaOccurs m (MetaV m' args)
+      NeutralLevel v    -> metaOccurs m v
+      BlockedLevel m v  -> metaOccurs m v
+      UnreducedLevel v  -> metaOccurs m v
+
+
 instance Occurs Type where
   occurs red ctx m xs (El s v) = uncurry El <$> occurs red ctx m xs (s,v)
 
+  metaOccurs m (El s v) = metaOccurs m (s,v)
+
 instance Occurs Sort where
   occurs red ctx m xs s = do
     s' <- case red of
@@ -225,19 +351,45 @@
       Prop       -> return s'
       Inf        -> return s'
 
-instance Occurs a => Occurs (Abs a) where
-  occurs red ctx m xs (Abs   s x) = Abs   s <$> occurs red ctx m (underAbs xs) x
-  occurs red ctx m xs (NoAbs s x) = NoAbs s <$> occurs red ctx m xs x
+  metaOccurs m s = do
+    s <- instantiate s
+    case s of
+      DLub s1 s2 -> metaOccurs m (s1,s2)
+      Type a     -> metaOccurs m a
+      Prop       -> return ()
+      Inf        -> return ()
 
+
+
+instance (Occurs a, Subst a) => Occurs (Abs a) where
+  occurs red ctx m xs b@(Abs   s x) = Abs   s <$> underAbstraction_ b (occurs red ctx m (liftUnderAbs xs))
+  occurs red ctx m xs b@(NoAbs s x) = NoAbs s <$> occurs red ctx m xs x
+
+  metaOccurs m (Abs   s x) = metaOccurs m x
+  metaOccurs m (NoAbs s x) = metaOccurs m x
+
 instance Occurs a => Occurs (Arg a) where
-  occurs red ctx m xs (Arg h r x) = Arg h r <$> occurs red ctx m xs x
+  occurs red ctx m xs (Arg h r@Irrelevant{} x) = Arg h r <$>
+    occurs red Irrel m (goIrrelevant xs) x
+  occurs red ctx m xs (Arg h r              x) = Arg h r <$>
+    occurs red ctx m xs x
 
+  metaOccurs m a = metaOccurs m (unArg a)
+
+instance Occurs a => Occurs (Dom a) where
+  occurs red ctx m xs (Dom h r x) = Dom h r <$> occurs red ctx m xs x
+  metaOccurs m = metaOccurs m . unDom
+
 instance (Occurs a, Occurs b) => Occurs (a,b) where
   occurs red ctx m xs (x,y) = (,) <$> occurs red ctx m xs x <*> occurs red ctx m xs y
 
+  metaOccurs m (x,y) = metaOccurs m x >> metaOccurs m y
+
 instance Occurs a => Occurs [a] where
   occurs red ctx m xs ys = mapM (occurs red ctx m xs) ys
 
+  metaOccurs m ys = mapM_ (metaOccurs m) ys
+
 -- * Getting rid of flexible occurrences
 
 -- | @prune m' vs xs@ attempts to remove all arguments from @vs@ whose
@@ -246,7 +398,7 @@
 --   return @True@ else @False@.
 prune :: MetaId -> Args -> [Nat] -> TCM PruneResult
 prune m' vs xs = liftTCM $ do
-  let kills = map (hasBadRigid xs) $ map unArg vs
+  kills <- mapM (hasBadRigid xs) $ map unArg vs
   reportSDoc "tc.meta.kill" 10 $ vcat
     [ text "attempting kills"
     , nest 2 $ vcat
@@ -268,13 +420,43 @@
 
 -- | @hasBadRigid xs v = True@ iff one of the rigid variables in @v@ is not in @xs@.
 --   Actually we can only prune if a bad variable is in the head. See issue 458.
-hasBadRigid :: [Nat] -> Term -> Bool
-hasBadRigid xs (Var v _) = notElem v xs
-hasBadRigid xs _         = False
-  -- not $ Set.isSubsetOf
-  --   (rigidVars $ freeVars v)
-  --   (Set.fromList xs)
+--   Or in a non-eliminateable position (see succeed/PruningNonMillerPattern).
+hasBadRigid :: [Nat] -> Term -> TCM Bool
+hasBadRigid xs (Var x _)    = return $ notElem x xs
+hasBadRigid xs (Lam _ v)    = hasBadRigid (0 : map (+1) xs) (absBody v)
+hasBadRigid xs (DontCare v) = hasBadRigid xs v
+-- The following types of arguments cannot be eliminated by a pattern
+-- match: data, record, Pi, levels, sorts
+-- Thus, their offending rigid variables are bad.
+hasBadRigid xs v@(Def f vs) =
+  ifM (isJust <$> isDataOrRecordType f) (return $ vs `rigidVarsNotContainedIn` xs) $ do
+    elV <- elimView v
+    case elV of
+      VarElim x els -> return $ notElem x xs
+      _             -> return $ False
+  -- Andreas, 2012-05-03: There is room for further improvement.
+  -- We could also consider a defined f which is not blocked by a meta.
+hasBadRigid xs (Pi a b)     = return $ (a,b) `rigidVarsNotContainedIn` xs
+hasBadRigid xs (Level v)    = return $ v `rigidVarsNotContainedIn` xs
+hasBadRigid xs (Sort s)     = return $ s `rigidVarsNotContainedIn` xs
+-- Since constructors can be eliminated by pattern-matching,
+-- offending variables under a constructor could be removed by
+-- the right instantiation of the meta variable.
+-- Thus, they are not rigid.
+hasBadRigid xs Con{}        = return $ False
+hasBadRigid xs Lit{}        = return $ False -- no variables in Lit
+hasBadRigid xs MetaV{}      = return $ False -- no rigid variables under a meta
+hasBadRigid xs (Shared p)   = hasBadRigid xs (derefPtr p)
 
+-- This could be optimized, by not computing the whole variable set
+-- at once, but allow early failure
+rigidVarsNotContainedIn :: Free a => a -> [Nat] -> Bool
+rigidVarsNotContainedIn v xs =
+  not $ Set.isSubsetOf
+    (rigidVars $ freeVars v)
+    (Set.fromList xs)
+
+
 data PruneResult
   = NothingToPrune   -- ^ the kill list is empty or only @False@s
   | PrunedNothing    -- ^ there is no possible kill (because of type dep.)
@@ -328,18 +510,17 @@
         ]
 
 -- | @killedType [((x1,a1),k1)..((xn,an),kn)] b = ([k'1..k'n],t')@
---   (ignoring @Arg@).  Let @t' = (xs:as) -> b@.
+--   (ignoring @Dom@).  Let @t' = (xs:as) -> b@.
 --   Invariant: @k'i == True@ iff @ki == True@ and pruning the @i@th argument from
 --   type @b@ is possible without creating unbound variables.
 --   @t'@ is type @t@ after pruning all @k'i==True@.
-killedType :: [(Arg (String, Type), Bool)] -> Type -> ([Arg Bool], Type)
+killedType :: [(Dom (String, Type), Bool)] -> Type -> ([Arg Bool], Type)
 killedType [] b = ([], b)
-killedType ((arg, kill) : kills) b
-  | dontKill  = (killed False : args, telePi (telFromList [arg]) b')
-  | otherwise = (killed True  : args, subst __IMPOSSIBLE__ b')
+killedType ((arg@(Dom h r _), kill) : kills) b
+  | dontKill  = (Arg h r False : args, mkPi arg b') -- OLD: telePi (telFromList [arg]) b')
+  | otherwise = (Arg h r True  : args, subst __IMPOSSIBLE__ b')
   where
     (args, b') = killedType kills b
-    killed k = fmap (const k) arg
     dontKill = not kill || 0 `freeIn` b'
 
 -- The list starts with the last argument
@@ -353,13 +534,16 @@
                 (HasType __IMPOSSIBLE__ a)
   -- Andreas, 2010-10-15 eta expand new meta variable if necessary
   etaExpandMetaSafe m'
-  let vars = reverse [ Arg h r (Var i []) | (i, Arg h r False) <- zip [0..] kills ]
+  let vars = reverse [ Arg h r (var i) | (i, Arg h r False) <- zip [0..] kills ]
+      lam b a = Lam (argHiding a) (Abs "v" b)
+      u       = foldl' lam (MetaV m' vars) kills
+{- OLD CODE
       hs   = reverse [ argHiding a | a <- kills ]
       lam h b = Lam h (Abs "v" b)
       u       = foldr lam (MetaV m' vars) hs
+-}
   dbg m' u
   assignTerm m u
-  return ()
   where
     dbg m' u = reportSDoc "tc.meta.kill" 10 $ vcat
       [ text "actual killing"
diff --git a/src/full/Agda/TypeChecking/Monad.hs b/src/full/Agda/TypeChecking/Monad.hs
--- a/src/full/Agda/TypeChecking/Monad.hs
+++ b/src/full/Agda/TypeChecking/Monad.hs
@@ -10,6 +10,7 @@
     , module Agda.TypeChecking.Monad.Mutual
     , module Agda.TypeChecking.Monad.Open
     , module Agda.TypeChecking.Monad.Options
+    , module Agda.TypeChecking.Monad.Sharing
     , module Agda.TypeChecking.Monad.Signature
     , module Agda.TypeChecking.Monad.SizedTypes
     , module Agda.TypeChecking.Monad.State
@@ -28,6 +29,7 @@
 import Agda.TypeChecking.Monad.Mutual
 import Agda.TypeChecking.Monad.Options
 import Agda.TypeChecking.Monad.Open
+import Agda.TypeChecking.Monad.Sharing
 import Agda.TypeChecking.Monad.Signature
 import Agda.TypeChecking.Monad.SizedTypes
 import Agda.TypeChecking.Monad.State
diff --git a/src/full/Agda/TypeChecking/Monad/Base.hs b/src/full/Agda/TypeChecking/Monad/Base.hs
--- a/src/full/Agda/TypeChecking/Monad/Base.hs
+++ b/src/full/Agda/TypeChecking/Monad/Base.hs
@@ -6,6 +6,8 @@
 module Agda.TypeChecking.Monad.Base where
 
 import Control.Arrow
+import qualified Control.Concurrent as C
+import Control.DeepSeq
 import Control.Exception as E
 import Control.Monad.Error
 import Control.Monad.State
@@ -15,11 +17,12 @@
 import Data.Int
 import Data.Map as Map
 import Data.Set as Set
-import Data.Generics
+import Data.Sequence as Seq
+import Data.Typeable (Typeable)
 import Data.Foldable
 import Data.Traversable
 import Data.IORef
-import System.Time
+import Data.Hashable
 
 import Agda.Syntax.Common
 import qualified Agda.Syntax.Concrete as C
@@ -28,6 +31,7 @@
 import Agda.Syntax.Internal
 import Agda.Syntax.Position
 import Agda.Syntax.Scope.Base
+import Agda.Utils.HashMap as HMap
 
 import Agda.TypeChecking.CompiledClause
 
@@ -35,7 +39,11 @@
 import {-# SOURCE #-} Agda.Interaction.FindFile
 import Agda.Interaction.Options
 import qualified Agda.Interaction.Highlighting.Range as R
-import Agda.Interaction.Highlighting.Precise (HighlightingInfo)
+import {-# SOURCE #-} Agda.Interaction.Response
+  (InteractionOutputCallback, defaultInteractionOutputCallback)
+import Agda.Interaction.Highlighting.Precise
+  (CompressedFile, HighlightingInfo)
+import Data.Monoid
 
 import qualified Agda.Compiler.JS.Syntax as JS
 
@@ -44,6 +52,7 @@
 import Agda.Utils.Monad
 import Agda.Utils.Permutation
 import Agda.Utils.Pretty
+import Agda.Utils.Time
 
 #include "../../undefined.h"
 import Agda.Utils.Impossible
@@ -54,10 +63,20 @@
 
 data TCState =
     TCSt { stFreshThings       :: FreshThings
+         , stSyntaxInfo        :: CompressedFile
+           -- ^ Highlighting info.
+         , stTokens            :: CompressedFile
+           -- ^ Highlighting info for tokens (but not those tokens for
+           -- which highlighting exists in 'stSyntaxInfo').
+         , stTermErrs          :: Seq TerminationError
 	 , stMetaStore	       :: MetaStore
 	 , stInteractionPoints :: InteractionPoints
 	 , stAwakeConstraints    :: Constraints
 	 , stSleepingConstraints :: Constraints
+         , stDirty               :: Bool
+         , stOccursCheckDefs   :: Set QName
+           -- ^ Definitions to be considered during occurs check.
+           --   Initialized to the current mutual block before the check.
 	 , stSignature	       :: Signature
 	 , stImports	       :: Signature
 	 , stImportedModules   :: Set ModuleName
@@ -67,6 +86,8 @@
            -- ^ The current module is available after it has been type
            -- checked.
 	 , stScope	       :: ScopeInfo
+         , stPatternSyns       :: A.PatternSynDefns
+         , stPatternSynImports :: A.PatternSynDefns
 	 , stPragmaOptions     :: PragmaOptions
            -- ^ Options applying to the current file. @OPTIONS@
            -- pragmas only affect this field.
@@ -79,6 +100,10 @@
            -- ^ Imports that should be generated by the compiler (this
            -- includes imports from imported modules).
          , stPersistent        :: PersistentTCState
+         , stInteractionOutputCallback  :: InteractionOutputCallback
+           -- ^ Callback fuction to call when there is a response
+           --   to give to the interactive frontend.
+           --   See the documentation of 'InteractionOutputCallback'.
 	 }
 
 -- | A part of the state which is not reverted when an error is thrown
@@ -97,7 +122,7 @@
 	      , fName	     :: NameId
 	      , fCtx	     :: CtxId
               , fProblem     :: ProblemId
-              , fInteger     :: Integer
+              , fInt         :: Int
                 -- ^ Can be used for various things.
 	      }
     deriving (Show)
@@ -106,9 +131,14 @@
 initState =
     TCSt { stFreshThings       = (Fresh 0 0 0 (NameId 0 0) 0 0 0) { fProblem = 1 }
 	 , stMetaStore	       = Map.empty
+	 , stSyntaxInfo        = mempty
+	 , stTokens            = mempty
+	 , stTermErrs          = Seq.empty
 	 , stInteractionPoints = Map.empty
 	 , stAwakeConstraints    = []
 	 , stSleepingConstraints = []
+         , stDirty               = False
+         , stOccursCheckDefs   = Set.empty
 	 , stSignature	       = emptySignature
 	 , stImports	       = emptySignature
 	 , stImportedModules   = Set.empty
@@ -116,7 +146,9 @@
 	 , stVisitedModules    = Map.empty
          , stCurrentModule     = Nothing
 	 , stScope	       = emptyScopeInfo
-	 , stPragmaOptions     = optPragmaOptions $ defaultOptions
+	 , stPatternSyns       = Map.empty
+         , stPatternSynImports = Map.empty
+	 , stPragmaOptions     = defaultInteractionOptions
 	 , stStatistics	       = Map.empty
          , stExtLambdaTele     = Map.empty
 	 , stMutualBlocks      = Map.empty
@@ -127,6 +159,7 @@
            { stPersistentOptions = defaultOptions
 	   , stDecodedModules    = Map.empty
            }
+         , stInteractionOutputCallback = defaultInteractionOutputCallback
 	 }
 
 stBuiltinThings :: TCState -> BuiltinThings PrimFun
@@ -157,13 +190,13 @@
 	where
 	    i = fCtx s
 
-instance HasFresh Integer FreshThings where
-    nextFresh s = (i, s { fInteger = succ i })
+instance HasFresh Int FreshThings where
+    nextFresh s = (i, s { fInt = succ i })
 	where
-	    i = fInteger s
+	    i = fInt s
 
 newtype ProblemId = ProblemId Nat
-  deriving (Typeable, Data, Eq, Ord, Enum, Real, Integral, Num)
+  deriving (Typeable, Eq, Ord, Enum, Real, Integral, Num)
 
 instance Show ProblemId where
   show (ProblemId n) = show n
@@ -207,7 +240,7 @@
 	, iScope	   :: Map ModuleName Scope
         , iInsideScope     :: ScopeInfo
 	, iSignature	   :: Signature
-	, iBuiltin	   :: BuiltinThings String
+	, iBuiltin	   :: BuiltinThings (String, QName)
         , iHaskellImports  :: Set String
                               -- ^ Haskell imports listed in
                               -- (transitively) imported modules are
@@ -215,8 +248,9 @@
         , iHighlighting    :: HighlightingInfo
         , iPragmaOptions   :: [OptionsPragma]
                               -- ^ Pragma options set in the file.
+        , iPatternSyns     :: A.PatternSynDefns
 	}
-    deriving (Typeable, Data, Show)
+    deriving (Typeable, Show)
 
 ---------------------------------------------------------------------------
 -- ** Closure
@@ -227,7 +261,7 @@
 			 , clScope	:: ScopeInfo
 			 , clValue	:: a
 			 }
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 instance Show a => Show (Closure a) where
   show cl = "Closure " ++ show (clValue cl)
@@ -261,22 +295,29 @@
   | TelCmp Type Type Comparison Telescope Telescope -- ^ the two types are for the error message only
   | SortCmp Comparison Sort Sort
   | LevelCmp Comparison Level Level
+--  | ShortCut MetaId Term Type
+--    -- ^ A delayed instantiation.  Replaces @ValueCmp@ in 'postponeTypeCheckingProblem'.
   | UnBlock MetaId
   | Guarded Constraint ProblemId
-  | IsEmpty Type
-  | FindInScope MetaId
+  | IsEmpty Range Type
+    -- ^ the range is the one of the absurd pattern
+  | FindInScope MetaId [(Term, Type)]
   deriving (Typeable, Show)
 
 data Comparison = CmpEq | CmpLeq
-  deriving (Eq, Typeable, Show)
+  deriving (Eq, Typeable)
 
+instance Show Comparison where
+  show CmpEq  = "="
+  show CmpLeq = "=<"
+
 ---------------------------------------------------------------------------
 -- * Open things
 ---------------------------------------------------------------------------
 
 -- | A thing tagged with the context it came from.
 data Open a = OpenThing [CtxId] a
-    deriving (Typeable, Data, Show, Functor)
+    deriving (Typeable, Show, Functor)
 
 ---------------------------------------------------------------------------
 -- * Judgements
@@ -287,7 +328,7 @@
 data Judgement t a
 	= HasType { jMetaId :: a, jMetaType :: t }
 	| IsSort  { jMetaId :: a, jMetaType :: t } -- Andreas, 2011-04-26: type needed for higher-order sort metas
-    deriving (Typeable, Data, Functor, Foldable, Traversable)
+    deriving (Typeable, Functor, Foldable, Traversable)
 
 instance (Show t, Show a) => Show (Judgement t a) where
     show (HasType a t) = show a ++ " : " ++ show t
@@ -355,17 +396,43 @@
 newtype MetaPriority = MetaPriority Int
     deriving (Eq, Ord, Show)
 
--- | TODO: Not so nice.
-type MetaInfo = Closure Range
+data RunMetaOccursCheck
+  = RunMetaOccursCheck
+  | DontRunMetaOccursCheck
+  deriving (Eq, Ord, Show)
 
+-- | @MetaInfo@ is cloned from one meta to the next during pruning.
+data MetaInfo = MetaInfo
+  { miClosRange       :: Closure Range -- TODO: Not so nice. But we want both to have the environment of the meta (Closure) and its range.
+--  , miRelevance       :: Relevance          -- ^ Created in irrelevant position?
+  , miMetaOccursCheck :: RunMetaOccursCheck -- ^ Run the extended occurs check that goes in definitions?
+  , miNameSuggestion  :: MetaNameSuggestion
+    -- ^ Used for printing.
+    --   @Just x@ if meta-variable comes from omitted argument with name @x@.
+  }
+
+-- | Name suggestion for meta variable.  Empty string means no suggestion.
+type MetaNameSuggestion = String
+
+-- | For printing, we couple a meta with its name suggestion.
+data NamedMeta = NamedMeta
+  { nmSuggestion :: MetaNameSuggestion
+  , nmid         :: MetaId
+  }
+
+instance Show NamedMeta where
+  show (NamedMeta "" x) = show x
+  show (NamedMeta s  x) = "_" ++ s ++ show x
+
 type MetaStore = Map MetaId MetaVariable
 
 instance HasRange MetaVariable where
     getRange m = getRange $ getMetaInfo m
 
 instance SetRange MetaVariable where
-  setRange r (MetaVar mi p perm j inst ls frozen) =
-    MetaVar (mi {clValue = r}) p perm j inst ls frozen
+  setRange r m = m { mvInfo = (mvInfo m)
+                     { miClosRange = (miClosRange (mvInfo m))
+                       { clValue = r }}}
 
 normalMetaPriority :: MetaPriority
 normalMetaPriority = MetaPriority 0
@@ -376,8 +443,8 @@
 highMetaPriority :: MetaPriority
 highMetaPriority = MetaPriority 10
 
-getMetaInfo :: MetaVariable -> MetaInfo
-getMetaInfo = mvInfo
+getMetaInfo :: MetaVariable -> Closure Range
+getMetaInfo = miClosRange . mvInfo
 
 getMetaScope :: MetaVariable -> ScopeInfo
 getMetaScope m = clScope $ getMetaInfo m
@@ -388,6 +455,9 @@
 getMetaSig :: MetaVariable -> Signature
 getMetaSig m = clSignature $ getMetaInfo m
 
+getMetaRelevance :: MetaVariable -> Relevance
+getMetaRelevance = envRelevance . getMetaEnv
+
 ---------------------------------------------------------------------------
 -- ** Interaction meta variables
 ---------------------------------------------------------------------------
@@ -408,10 +478,10 @@
       { sigSections    :: Sections
       , sigDefinitions :: Definitions
       }
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 type Sections	 = Map ModuleName Section
-type Definitions = Map QName Definition
+type Definitions = HashMap QName Definition
 
 data Section = Section
       { secTelescope :: Telescope
@@ -422,10 +492,10 @@
 				    --	 section to when translating from
 				    --	 abstract to internal syntax.
       }
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 emptySignature :: Signature
-emptySignature = Sig Map.empty Map.empty
+emptySignature = Sig Map.empty HMap.empty
 
 data DisplayForm = Display Nat [Term] DisplayTerm
 		-- ^ The three arguments are:
@@ -436,28 +506,30 @@
 		--     represents pattern vars. There should @n@ of them.
 		--
 		--   * Display form. @n@ free variables.
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 data DisplayTerm = DWithApp [DisplayTerm] Args
                  | DCon QName [Arg DisplayTerm]
                  | DDef QName [Arg DisplayTerm]
                  | DDot Term
 		 | DTerm Term
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 defaultDisplayForm :: QName -> [Open DisplayForm]
 defaultDisplayForm c = []
 
 data Definition = Defn
-  { defRelevance   :: Relevance -- ^ Some defs can be irrelevant (but not hidden).
-  , defName        :: QName
-  , defType        :: Type	      -- ^ Type of the lifted definition.
-  , defDisplay     :: [Open DisplayForm]
-  , defMutual      :: MutualId
-  , defCompiledRep :: CompiledRepresentation
-  , theDef         :: Defn
+  { defRelevance      :: Relevance -- ^ Some defs can be irrelevant (but not hidden).
+  , defName           :: QName
+  , defType           :: Type	      -- ^ Type of the lifted definition.
+  , defPolarity       :: [Polarity]
+  , defArgOccurrences :: [Occurrence]
+  , defDisplay        :: [Open DisplayForm]
+  , defMutual         :: MutualId
+  , defCompiledRep    :: CompiledRepresentation
+  , theDef            :: Defn
   }
-    deriving (Typeable, Data, Show)
+    deriving (Typeable, Show)
 
 type HaskellCode = String
 type HaskellType = String
@@ -467,33 +539,52 @@
 data HaskellRepresentation
       = HsDefn HaskellType HaskellCode
       | HsType HaskellType
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
-data Polarity = Covariant | Contravariant | Invariant
-  deriving (Typeable, Data, Show, Eq)
+-- | Polarity for equality and subtype checking.
+data Polarity
+  = Covariant      -- ^ monotone
+  | Contravariant  -- ^ antitone
+  | Invariant      -- ^ no information (mixed variance)
+  | Nonvariant     -- ^ constant
+  deriving (Typeable, Show, Eq)
 
 data CompiledRepresentation = CompiledRep
   { compiledHaskell :: Maybe HaskellRepresentation
   , compiledEpic    :: Maybe EpicCode
   , compiledJS      :: Maybe JSCode
   }
-  deriving (Typeable, Data, Show)
+  deriving (Typeable, Show)
 
 noCompiledRep :: CompiledRepresentation
 noCompiledRep = CompiledRep Nothing Nothing Nothing
 
--- | 'Positive' means strictly positive and 'Negative' means not strictly
--- positive.
-data Occurrence = Positive | Negative | Unused
-  deriving (Typeable, Data, Show, Eq, Ord)
+-- | Subterm occurrences for positivity checking.
+--   The constructors are listed in increasing information they provide:
+--   @Mixed <= JustPos <= StrictPos <= GuardPos <= Unused@
+--   @Mixed <= JustNeg <= Unused@.
+data Occurrence
+  = Mixed     -- ^ Arbitrary occurrence (positive and negative).
+  | JustNeg   -- ^ Negative occurrence.
+  | JustPos   -- ^ Positive occurrence, but not strictly positive.
+  | StrictPos -- ^ Strictly positive occurrence.
+  | GuardPos  -- ^ Guarded strictly positive occurrence (i.e., under ∞).  For checking recursive records.
+  | Unused    --  ^ No occurrence.
+  deriving (Typeable, Show, Eq, Ord)
 
+instance NFData Occurrence
+
 data Defn = Axiom
 	  | Function
             { funClauses        :: [Clause]
             , funCompiled       :: CompiledClauses
             , funInv            :: FunctionInverse
+{- MOVED to Definition
             , funPolarity       :: [Polarity]
             , funArgOccurrences :: [Occurrence]
+-}
+            , funMutual         :: [QName]
+              -- ^ Mutually recursive functions, @data@s and @record@s.
             , funAbstr          :: IsAbstract
             , funDelayed        :: Delayed
               -- ^ Are the clauses of this definition delayed?
@@ -506,6 +597,11 @@
               --   checker.
             , funStatic         :: Bool
               -- ^ Should calls to this function be normalised at compile-time?
+            , funCopy           :: Bool
+              -- ^ Has this function been created by a module
+                                   -- instantiation?
+            , funTerminates     :: Maybe Bool
+              -- ^ Has this function been termination checked?  Did it pass?
             }
 	  | Datatype
             { dataPars           :: Nat           -- nof parameters
@@ -514,21 +610,29 @@
             , dataClause         :: (Maybe Clause) -- this might be in an instantiated module
             , dataCons           :: [QName]        -- constructor names
             , dataSort           :: Sort
+{- MOVED
             , dataPolarity       :: [Polarity]
             , dataArgOccurrences :: [Occurrence]
+-}
+            , dataMutual         :: [QName]        -- ^ Mutually recursive functions, @data@s and @record@s.
             , dataAbstr          :: IsAbstract
             }
 	  | Record
-            { recPars           :: Nat
+            { recPars           :: Nat                  -- ^ Number of parameters.
             , recClause         :: Maybe Clause
             , recCon            :: QName                -- ^ Constructor name.
             , recNamedCon       :: Bool
             , recConType        :: Type                 -- ^ The record constructor's type.
             , recFields         :: [Arg A.QName]
             , recTel            :: Telescope            -- ^ The record field telescope
+{- MOVED
             , recPolarity       :: [Polarity]
             , recArgOccurrences :: [Occurrence]
-            , recEtaEquality    :: Bool
+-}
+            , recMutual         :: [QName]              -- ^ Mutually recursive functions, @data@s and @record@s.
+            , recEtaEquality    :: Bool                 -- ^ Eta-expand at this record type.  @False@ for unguarded recursive records.
+            , recInduction      :: Induction            -- ^ 'Inductive' or 'Coinductive'?  Matters only for recursive records.
+            , recRecursive      :: Bool                 -- ^ Recursive record.  Implies @recEtaEquality = False@.  Projections are not size-preserving.
             , recAbstr          :: IsAbstract
             }
 	  | Constructor
@@ -549,14 +653,19 @@
               -- something@ for builtin functions.
             }
             -- ^ Primitive or builtin functions.
-    deriving (Typeable, Data, Show)
+    deriving (Typeable, Show)
 
 defIsRecord :: Defn -> Bool
 defIsRecord Record{} = True
 defIsRecord _        = False
 
+defIsDataOrRecord :: Defn -> Bool
+defIsDataOrRecord Record{}   = True
+defIsDataOrRecord Datatype{} = True
+defIsDataOrRecord _          = False
+
 newtype Fields = Fields [(C.Name, Type)]
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 data Reduced no yes = NoReduction no | YesReduction yes
     deriving (Typeable, Functor)
@@ -574,7 +683,7 @@
 notReduced x = MaybeRed NotReduced x
 
 reduced :: Blocked (Arg Term) -> MaybeReduced (Arg Term)
-reduced b = case b of
+reduced b = case fmap ignoreSharing <$> b of
   NotBlocked (Arg _ _ (MetaV x _)) -> MaybeRed (Reduced $ Blocked x ()) v
   _                                -> MaybeRed (Reduced $ () <$ b)      v
   where
@@ -605,15 +714,16 @@
 defEpicDef :: Definition -> Maybe EpicCode
 defEpicDef = compiledEpic . defCompiledRep
 
--- | Used to specify whether something should be delayed.
-data Delayed = Delayed | NotDelayed
-  deriving (Typeable, Data, Show, Eq)
-
 -- | Are the clauses of this definition delayed?
 defDelayed :: Definition -> Delayed
 defDelayed Defn{theDef = Function{funDelayed = d}} = d
 defDelayed _                                       = NotDelayed
 
+-- | Is the definition just a copy created by a module instantiation?
+defCopy :: Definition -> Bool
+defCopy Defn{theDef = Function{funCopy = b}} = b
+defCopy _                                    = False
+
 defAbstract :: Definition -> IsAbstract
 defAbstract d = case theDef d of
     Axiom{}                   -> ConcreteDef
@@ -627,21 +737,24 @@
 -- ** Injectivity
 ---------------------------------------------------------------------------
 
-data FunctionInverse = NotInjective
-                     | Inverse (Map TermHead Clause)
-  deriving (Typeable, Data, Show)
+type FunctionInverse = FunctionInverse' Clause
 
+data FunctionInverse' c
+  = NotInjective
+  | Inverse (Map TermHead c)
+  deriving (Typeable, Show, Functor)
+
 data TermHead = SortHead
               | PiHead
               | ConHead QName
-  deriving (Typeable, Data, Eq, Ord, Show)
+  deriving (Typeable, Eq, Ord, Show)
 
 ---------------------------------------------------------------------------
 -- ** Mutual blocks
 ---------------------------------------------------------------------------
 
 newtype MutualId = MutId Int32
-  deriving (Typeable, Data, Eq, Ord, Show, Num)
+  deriving (Typeable, Eq, Ord, Show, Num)
 
 ---------------------------------------------------------------------------
 -- ** Statistics
@@ -671,25 +784,16 @@
 	  | CheckFunDef Range Name [A.Clause] (Maybe ())
 	  | CheckPragma Range A.Pragma (Maybe ())
 	  | CheckPrimitive Range Name A.Expr (Maybe ())
-          | CheckIsEmpty Type (Maybe ())
+          | CheckIsEmpty Range Type (Maybe ())
           | CheckWithFunctionType A.Expr (Maybe ())
           | CheckSectionApplication Range ModuleName A.ModuleApplication (Maybe ())
 	  | ScopeCheckExpr C.Expr (Maybe A.Expr)
 	  | ScopeCheckDeclaration D.NiceDeclaration (Maybe [A.Declaration])
 	  | ScopeCheckLHS C.Name C.Pattern (Maybe A.LHS)
-	  | forall a. TermFunDef Range Name [A.Clause] (Maybe a)
+          | forall a. NoHighlighting (Maybe a)
 	  | forall a. SetRange Range (Maybe a)	-- ^ used by 'setCurrentRange'
-            -- actually, 'a' is Agda.Termination.TermCheck.CallGraph
-            -- but I was to lazy to import the stuff here --Andreas,2007-5-29
-
     deriving (Typeable)
 
--- Dummy instance
-instance Data Call where
-  dataTypeOf _  = mkDataType "Call" []
-  toConstr   x  = mkConstr (dataTypeOf x) "Dummy" [] Prefix
-  gunfold k z _ = __IMPOSSIBLE__
-
 instance HasRange Call where
     getRange (CheckClause _ c _)                   = getRange c
     getRange (CheckPattern p _ _ _)                = getRange p
@@ -713,10 +817,10 @@
     getRange (ScopeCheckLHS _ p _)                 = getRange p
     getRange (CheckDotPattern e _ _)               = getRange e
     getRange (CheckPatternShadowing c _)           = getRange c
-    getRange (TermFunDef i _ _ _)                  = getRange i
     getRange (SetRange r _)                        = r
     getRange (CheckSectionApplication r _ _ _)     = r
-    getRange (CheckIsEmpty _ _)                    = noRange
+    getRange (CheckIsEmpty r _ _)                  = r
+    getRange (NoHighlighting _)                    = noRange
 
 ---------------------------------------------------------------------------
 -- ** Builtin things
@@ -725,7 +829,7 @@
 data BuiltinDescriptor = BuiltinData (TCM Type) [String]
                        | BuiltinDataCons (TCM Type)
                        | BuiltinPrim String (Term -> TCM ())
-                       | BuiltinPostulate (TCM Type)
+                       | BuiltinPostulate Relevance (TCM Type)
                        | BuiltinUnknown (Maybe (TCM Type)) (Term -> TCM ())
 
 data BuiltinInfo =
@@ -737,9 +841,45 @@
 data Builtin pf
 	= Builtin Term
 	| Prim pf
-    deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
+    deriving (Typeable, Show, Functor, Foldable, Traversable)
 
 ---------------------------------------------------------------------------
+-- * Highlighting levels
+---------------------------------------------------------------------------
+
+-- | How much highlighting should be sent to the user interface?
+
+data HighlightingLevel
+  = None
+  | NonInteractive
+  | Interactive
+    -- ^ This includes both non-interactive highlighting and
+    -- interactive highlighting of the expression that is currently
+    -- being type-checked.
+    deriving (Eq, Ord, Show, Read)
+
+-- | How should highlighting be sent to the user interface?
+
+data HighlightingMethod
+  = Direct
+    -- ^ Via stdout.
+  | Indirect
+    -- ^ Both via files and via stdout.
+    deriving (Eq, Show, Read)
+
+-- | @ifTopLevelAndHighlightingLevelIs l m@ runs @m@ when we're
+-- type-checking the top-level module and the highlighting level is
+-- /at least/ @l@.
+
+ifTopLevelAndHighlightingLevelIs ::
+  MonadTCM tcm => HighlightingLevel -> tcm () -> tcm ()
+ifTopLevelAndHighlightingLevelIs l m = do
+  e <- ask
+  when (envModuleNestingLevel e == 0 &&
+        envHighlightingLevel e >= l)
+       m
+
+---------------------------------------------------------------------------
 -- * Type checking environment
 ---------------------------------------------------------------------------
 
@@ -747,20 +887,22 @@
     TCEnv { envContext             :: Context
 	  , envLetBindings         :: LetBindings
 	  , envCurrentModule       :: ModuleName
+	  , envCurrentPath         :: AbsolutePath
+            -- ^ The path to the file that is currently being
+            -- type-checked.
           , envAnonymousModules    :: [(ModuleName, Nat)] -- ^ anonymous modules and their number of free variables
 	  , envImportPath          :: [C.TopLevelModuleName] -- ^ to detect import cycles
 	  , envMutualBlock         :: Maybe MutualId -- ^ the current (if any) mutual block
           , envSolvingConstraints  :: Bool
                 -- ^ Are we currently in the process of solving active constraints?
+          , envAssignMetas         :: Bool
+            -- ^ Are we allowed to assign metas?
           , envActiveProblems      :: [ProblemId]
 	  , envAbstractMode        :: AbstractMode
 		-- ^ When checking the typesignature of a public definition
 		--   or the body of a non-abstract definition this is true.
 		--   To prevent information about abstract things leaking
 		--   outside the module.
-          , envTopLevel            :: Bool
-                -- ^ Are we at the top level when checking a declaration?
-                --   In this case, we will freeze metas afterwards.
           , envRelevance           :: Relevance
                 -- ^ Are we checking an irrelevant argument? (=@Irrelevant@)
                 -- Then top-level irrelevant declarations are enabled.
@@ -775,48 +917,79 @@
                 --   not going to reify and retypecheck (like when doing with
                 --   abstraction)
           , envRange :: Range
+          , envHighlightingRange :: Range
+                -- ^ Interactive highlighting uses this range rather
+                --   than 'envRange'.
           , envCall  :: Maybe (Closure Call)
                 -- ^ what we're doing at the moment
+          , envEmacs :: Bool
+                -- ^ True when called from the Emacs mode.
+          , envHighlightingLevel  :: HighlightingLevel
+                -- ^ Set to 'None' when imported modules are
+                --   type-checked.
+          , envHighlightingMethod :: HighlightingMethod
+          , envModuleNestingLevel :: Integer
+                -- ^ This number indicates how far away from the
+                --   top-level module Agda has come when chasing
+                --   modules. The level of a given module is not
+                --   necessarily the same as the length, in the module
+                --   dependency graph, of the shortest path from the
+                --   top-level module; it depends on in which order
+                --   Agda chooses to chase dependencies.
+          , envAllowDestructiveUpdate :: Bool
+                -- ^ When True, allows destructively shared updating terms
+                --   during evaluation or unification. This is disabled when
+                --   doing speculative checking, like solve instance metas, or
+                --   when updating might break abstraction, as is the case when
+                --   checking abstract definitions.
 	  }
-    deriving (Typeable, Data)
+    deriving (Typeable)
 
 initEnv :: TCEnv
 initEnv = TCEnv { envContext	         = []
 		, envLetBindings         = Map.empty
 		, envCurrentModule       = noModuleName
+	        , envCurrentPath         = __IMPOSSIBLE__
                 , envAnonymousModules    = []
 		, envImportPath          = []
 		, envMutualBlock         = Nothing
                 , envSolvingConstraints  = False
                 , envActiveProblems      = [0]
+                , envAssignMetas         = True
 		, envAbstractMode        = AbstractMode
-                , envTopLevel            = True
                 , envRelevance           = Relevant
                 , envDisplayFormsEnabled = True
                 , envReifyInteractionPoints = True
                 , envEtaContractImplicit    = True
                 , envRange                  = noRange
+                , envHighlightingRange      = noRange
                 , envCall                   = Nothing
+                , envEmacs                  = False
+                , envHighlightingLevel      = None
+                , envHighlightingMethod     = Indirect
+                , envModuleNestingLevel     = -1
+                , envAllowDestructiveUpdate = True
 		}
 
 ---------------------------------------------------------------------------
 -- ** Context
 ---------------------------------------------------------------------------
 
+-- | The @Context@ is a stack of 'ContextEntry's.
 type Context	  = [ContextEntry]
 data ContextEntry = Ctx { ctxId	   :: CtxId
-			, ctxEntry :: Arg (Name, Type)
+			, ctxEntry :: Dom (Name, Type)
 			}
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 newtype CtxId	  = CtxId Nat
-  deriving (Typeable, Data, Eq, Ord, Show, Enum, Real, Integral, Num)
+  deriving (Typeable, Eq, Ord, Show, Enum, Real, Integral, Num)
 
 ---------------------------------------------------------------------------
 -- ** Let bindings
 ---------------------------------------------------------------------------
 
-type LetBindings = Map Name (Open (Term, Arg Type))
+type LetBindings = Map Name (Open (Term, Dom Type))
 
 ---------------------------------------------------------------------------
 -- ** Abstract mode
@@ -825,9 +998,22 @@
 data AbstractMode = AbstractMode       -- ^ abstract things in the current module can be accessed
 		  | ConcreteMode       -- ^ no abstract things can be accessed
 		  | IgnoreAbstractMode -- ^ all abstract things can be accessed
-  deriving (Typeable, Data)
+  deriving (Typeable)
 
 ---------------------------------------------------------------------------
+-- ** Insertion of implicit arguments
+---------------------------------------------------------------------------
+
+data ExpandHidden
+  = ExpandLast      -- ^ Add implicit arguments in the end until type is no longer hidden 'Pi'.
+  | DontExpandLast  -- ^ Do not append implicit arguments.
+
+data ExpandInstances
+  = ExpandInstanceArguments
+  | DontExpandInstanceArguments
+    deriving (Eq)
+
+---------------------------------------------------------------------------
 -- * Type checking errors
 ---------------------------------------------------------------------------
 
@@ -866,8 +1052,15 @@
     -- automatically generated functions.)
   , termErrCalls :: [CallInfo]
     -- ^ The problematic call sites.
-  } deriving (Typeable, Show)
+  } deriving (Typeable, Show, Eq)
 
+{-
+-- | We consider two 'TerminationError's equal if they report the same
+--   invalid calls.
+instance Eq TerminationError where
+  (==) = (==) `on` termErrCalls
+-}
+
 data TypeError
 	= InternalError String
 	| NotImplemented String
@@ -876,6 +1069,11 @@
 	| TerminationCheckFailed [TerminationError]
 	| PropMustBeSingleton
 	| DataMustEndInSort Term
+{- UNUSED
+        | DataTooManyParameters
+            -- ^ In @data D xs where@ the number of parameters @xs@ does not fit the
+            --   the parameters given in the forward declaraion @data D Gamma : T@.
+-}
 	| ShouldEndInApplicationOfTheDatatype Type
 	    -- ^ The target of a constructor isn't an application of its
 	    -- datatype. The 'Type' records what it does target.
@@ -887,8 +1085,11 @@
 	    -- ^ Expected a type to be an application of a particular datatype.
 	| ConstructorPatternInWrongDatatype QName QName -- ^ constructor, datatype
         | IndicesNotConstructorApplications [Arg Term] -- ^ Indices.
-        | IndexVariablesNotDistinct [Arg Term] -- ^ Indices.
-        | IndexFreeInParameter Nat [Arg Term] -- ^ Index (a variable), parameters.
+        | IndexVariablesNotDistinct [Nat] [Arg Term] -- ^ Variables, indices.
+        | IndicesFreeInParameters [Nat] [Arg Term] [Arg Term]
+          -- ^ Indices (variables), index expressions (with
+          -- constructors applied to reconstructed parameters),
+          -- parameters.
         | DoesNotConstructAnElementOf QName Term -- ^ constructor, type
 	| DifferentArities
 	    -- ^ Varying number of arguments for a function.
@@ -905,7 +1106,7 @@
           -- ^ The term does not correspond to an inductive data type.
 	| UninstantiatedDotPattern A.Expr
 	| IlltypedPattern A.Pattern Type
-	| TooManyArgumentsInLHS Nat Type
+	| TooManyArgumentsInLHS Type
 	| WrongNumberOfConstructorArguments QName Nat Nat
 	| ShouldBeEmpty Type [Pattern]
 	| ShouldBeASort Type
@@ -913,19 +1114,22 @@
 	| ShouldBePi Type
 	    -- ^ The given type should have been a pi.
 	| ShouldBeRecordType Type
+	| ShouldBeRecordPattern Pattern
 	| NotAProperTerm
-        | SplitOnIrrelevant A.Pattern (Arg Type)
+        | SetOmegaNotValidType
+        | SplitOnIrrelevant A.Pattern (Dom Type)
         | DefinitionIsIrrelevant QName
         | VariableIsIrrelevant Name
         | UnequalLevel Comparison Term Term
 	| UnequalTerms Comparison Term Term Type
 	| UnequalTypes Comparison Type Type
 	| UnequalTelescopes Comparison Telescope Telescope
-	| UnequalRelevance Type Type
+	| UnequalRelevance Comparison Term Term
 	    -- ^ The two function types have different relevance.
-	| UnequalHiding Type Type
+	| UnequalHiding Term Term
 	    -- ^ The two function types have different hiding.
 	| UnequalSorts Sort Sort
+        | UnequalBecauseOfUniverseConflict Comparison Term Term
         | HeterogeneousEquality Term Type Term Type
             -- ^ We ended up with an equality constraint where the terms
             --   have different types.  This is not supported.
@@ -935,12 +1139,13 @@
 	    --	 depend on and the paratemeter that it wants to depend on.
 	| MetaOccursInItself MetaId
 	| GenericError String
+	| GenericDocError Doc
         | BuiltinMustBeConstructor String A.Expr
 	| NoSuchBuiltinName String
 	| DuplicateBuiltinBinding String Term Term
 	| NoBindingForBuiltin String
 	| NoSuchPrimitiveFunction String
-        | ShadowedModule [A.ModuleName]
+        | ShadowedModule C.Name [A.ModuleName]
 	| BuiltinInParameterisedModule String
 	| NoRHSRequiresAbsurdPattern [NamedArg A.Pattern]
 	| AbsurdPatternRequiresNoRHS [NamedArg A.Pattern]
@@ -998,20 +1203,32 @@
 	| NotAValidLetBinding D.NiceDeclaration
 	| NothingAppliedToHiddenArg C.Expr
 	| NothingAppliedToInstanceArg C.Expr
+        | UnusedVariableInPatternSynonym
+        | PatternSynonymArityMismatch A.QName
     -- Operator errors
 	| NoParseForApplication [C.Expr]
 	| AmbiguousParseForApplication [C.Expr] [C.Expr]
-	| NoParseForLHS C.Pattern
-	| AmbiguousParseForLHS C.Pattern [C.Pattern]
+	| NoParseForLHS LHSOrPatSyn C.Pattern
+	| AmbiguousParseForLHS LHSOrPatSyn C.Pattern [C.Pattern]
+{- UNUSED
+	| NoParseForPatternSynonym C.Pattern
+	| AmbiguousParseForPatternSynonym C.Pattern [C.Pattern]
+-}
     -- Usage errors
     -- Implicit From Scope errors
         | IFSNoCandidateInScope Type
     -- Safe flag errors
         | SafeFlagPostulate C.Name
         | SafeFlagPragma [String]
+        | SafeFlagNoTerminationCheck
         | SafeFlagPrimTrustMe
+    -- Language option errors
+        | NeedOptionCopatterns
           deriving (Typeable, Show)
 
+-- | Distinguish error message when parsing lhs or pattern synonym, resp.
+data LHSOrPatSyn = IsLHS | IsPatSyn deriving (Eq, Show)
+
 -- instance Show TypeError where
 --   show _ = "<TypeError>" -- TODO: more info?
 
@@ -1021,48 +1238,31 @@
 
 -- | Type-checking errors.
 
-data TCErr' = TypeError TCState (Closure TypeError)
-	    | Exception Range String
-            | IOException Range E.IOException
-	    | PatternErr  TCState -- ^ for pattern violations
-	    {- AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations -- UNUSED -}
-  deriving (Typeable)
-
--- | Type-checking errors, potentially paired with relevant syntax
--- highlighting information.
-
-data TCErr =
-  TCErr { errHighlighting :: Maybe (HighlightingInfo, ModuleToSource)
-          -- ^ The 'ModuleToSource' can be used to map the module
-          -- names in the 'HighlightingInfo' to file names.
-        , errError        :: TCErr'
-        }
+data TCErr = TypeError TCState (Closure TypeError)
+	   | Exception Range String
+           | IOException Range E.IOException
+	   | PatternErr  TCState -- ^ for pattern violations
+	   {- AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations -- UNUSED -}
   deriving (Typeable)
 
 instance Error TCErr where
     noMsg  = strMsg ""
-    strMsg = TCErr Nothing . Exception noRange . strMsg
+    strMsg = Exception noRange . strMsg
 
 instance Show TCErr where
-  show = show . errError
-
-instance Show TCErr' where
     show (TypeError _ e) = show (envRange $ clEnv e) ++ ": " ++ show (clValue e)
     show (Exception r s) = show r ++ ": " ++ s
     show (IOException r e) = show r ++ ": " ++ show e
     show (PatternErr _)  = "Pattern violation (you shouldn't see this)"
     {- show (AbortAssign _) = "Abort assignment (you shouldn't see this)" -- UNUSED -}
 
-instance HasRange TCErr' where
+instance HasRange TCErr where
     getRange (TypeError _ cl)  = envRange $ clEnv cl
     getRange (Exception r _)   = r
     getRange (IOException r _) = r
     getRange (PatternErr s)    = noRange
     {- getRange (AbortAssign s)   = noRange -- UNUSED -}
 
-instance HasRange TCErr where
-    getRange = getRange . errError
-
 instance Exception TCErr
 
 ---------------------------------------------------------------------------
@@ -1126,22 +1326,69 @@
 
 -- We want a special monad implementation of fail.
 instance MonadIO m => Monad (TCMT m) where
-    return x = TCM $ \_ _ -> return x
-    TCM m >>= k = TCM $ \r e -> do
-        x <- m r e
-        let TCM m' = k x in m' r e
-    TCM m1 >> TCM m2 = TCM $ \r e -> m1 r e >> m2 r e
-    fail    = internalError
+    return = returnTCMT
+    (>>=)  = bindTCMT
+    (>>)   = thenTCMT
+    fail   = internalError
 
-    {-# SPECIALIZE instance Monad TCM #-}
+-- One goal of the definitions and pragmas below is to inline the
+-- monad operations as much as possible. This doesn't seem to have a
+-- large effect on the performance of the normal executable, but (at
+-- least on one machine/configuration) it has a massive effect on the
+-- performance of the profiling executable [1], and reduces the time
+-- attributed to bind from over 90% to about 25%.
+--
+-- [1] When compiled with -auto-all and run with -p: roughly 750%
+-- faster for one example.
 
+returnTCMT :: MonadIO m => a -> TCMT m a
+returnTCMT = \x -> TCM $ \_ _ -> return x
+{-# RULES "returnTCMT"
+      returnTCMT = \x -> TCM $ \_ _ -> return x
+  #-}
+{-# INLINE returnTCMT #-}
+{-# SPECIALIZE INLINE returnTCMT :: a -> TCM a #-}
+
+bindTCMT :: MonadIO m => TCMT m a -> (a -> TCMT m b) -> TCMT m b
+bindTCMT = \(TCM m) k -> TCM $ \r e -> m r e >>= \x -> unTCM (k x) r e
+{-# RULES "bindTCMT"
+      bindTCMT = \(TCM m) k -> TCM $ \r e ->
+                   m r e >>= \x -> unTCM (k x) r e
+  #-}
+{-# INLINE bindTCMT #-}
+{-# SPECIALIZE INLINE bindTCMT :: TCM a -> (a -> TCM b) -> TCM b #-}
+
+thenTCMT :: MonadIO m => TCMT m a -> TCMT m b -> TCMT m b
+thenTCMT = \(TCM m1) (TCM m2) -> TCM $ \r e -> m1 r e >> m2 r e
+{-# RULES "thenTCMT"
+      thenTCMT = \(TCM m1) (TCM m2) -> TCM $ \r e -> m1 r e >> m2 r e
+  #-}
+{-# INLINE thenTCMT #-}
+{-# SPECIALIZE INLINE thenTCMT :: TCM a -> TCM b -> TCM b #-}
+
 instance MonadIO m => Functor (TCMT m) where
-    fmap = liftM
+    fmap = fmapTCMT
 
+fmapTCMT :: MonadIO m => (a -> b) -> TCMT m a -> TCMT m b
+fmapTCMT = \f (TCM m) -> TCM $ \r e -> liftM f (m r e)
+{-# RULES "fmapTCMT"
+      fmapTCMT = \f (TCM m) -> TCM $ \r e -> liftM f (m r e)
+  #-}
+{-# INLINE fmapTCMT #-}
+{-# SPECIALIZE INLINE fmapTCMT :: (a -> b) -> TCM a -> TCM b #-}
+
 instance MonadIO m => Applicative (TCMT m) where
-    pure = return
-    (<*>) = ap
+    pure  = returnTCMT
+    (<*>) = apTCMT
 
+apTCMT :: MonadIO m => TCMT m (a -> b) -> TCMT m a -> TCMT m b
+apTCMT = \(TCM mf) (TCM m) -> TCM $ \r e -> ap (mf r e) (m r e)
+{-# RULES "apTCMT"
+      apTCMT = \(TCM mf) (TCM m) -> TCM $ \r e -> ap (mf r e) (m r e)
+  #-}
+{-# INLINE apTCMT #-}
+{-# SPECIALIZE INLINE apTCMT :: TCM (a -> b) -> TCM a -> TCM b #-}
+
 instance MonadIO m => MonadIO (TCMT m) where
   liftIO m = TCM $ \s e ->
               do let r = envRange e
@@ -1152,13 +1399,13 @@
       wrap r m = failOnException handleException
                $ E.catch m (handleIOException r)
 
-      handleIOException r e = throwIO $ TCErr Nothing $ IOException r e
-      handleException   r s = throwIO $ TCErr Nothing $ Exception r s
+      handleIOException r e = throwIO $ IOException r e
+      handleException   r s = throwIO $ Exception r s
 
 patternViolation :: TCM a
 patternViolation = do
     s <- get
-    throwError $ TCErr Nothing $ PatternErr s
+    throwError $ PatternErr s
 
 internalError :: MonadTCM tcm => String -> tcm a
 internalError s = typeError $ InternalError s
@@ -1167,7 +1414,7 @@
 typeError err = liftTCM $ do
     cl <- buildClosure err
     s  <- get
-    throwError $ TCErr Nothing $ TypeError s cl
+    throwError $ TypeError s cl
 
 -- | Running the type checking monad
 runTCM :: TCMT IO a -> IO (Either TCErr a)
@@ -1178,6 +1425,29 @@
   r <- liftIO $ newIORef initState
   unTCM m r initEnv
 
+-- | Runs the given computation in a separate thread, with /a copy/ of
+-- the current state and environment.
+--
+-- Note that Agda sometimes uses actual, mutable state. If the
+-- computation given to @forkTCM@ tries to /modify/ this state, then
+-- bad things can happen, because accesses are not mutually exclusive.
+-- The @forkTCM@ function has been added mainly to allow the thread to
+-- /read/ (a snapshot of) the current state in a convenient way.
+--
+-- Note also that exceptions which are raised in the thread are not
+-- propagated to the parent, so the thread should not do anything
+-- important.
+
+forkTCM :: TCM a -> TCM ()
+forkTCM m = do
+  s <- get
+  e <- ask
+  liftIO $ C.forkIO $ do
+    runTCM $ local (\_ -> e) $ do
+      put s
+      m
+    return ()
+  return ()
 
 
 
diff --git a/src/full/Agda/TypeChecking/Monad/Base.hs-boot b/src/full/Agda/TypeChecking/Monad/Base.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Monad/Base.hs-boot
@@ -0,0 +1,7 @@
+{-# LANGUAGE KindSignatures #-}
+
+module Agda.TypeChecking.Monad.Base where
+
+data TCMT (m :: * -> *) a
+
+type TCM = TCMT IO
diff --git a/src/full/Agda/TypeChecking/Monad/Builtin.hs b/src/full/Agda/TypeChecking/Monad/Builtin.hs
--- a/src/full/Agda/TypeChecking/Monad/Builtin.hs
+++ b/src/full/Agda/TypeChecking/Monad/Builtin.hs
@@ -1,14 +1,32 @@
 
 module Agda.TypeChecking.Monad.Builtin where
 
-import Data.Functor
+import Control.Monad.Error
 import Control.Monad.State
+
+import Data.Functor
 import qualified Data.Map as Map
 
 import Agda.Syntax.Position
+import Agda.Syntax.Literal
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad.Base
 
+import Agda.Utils.Monad (when_)
+
+litType :: Literal -> TCM Type
+litType l = case l of
+    LitInt _ n	  -> do
+      primZero
+      when_ (n > 0) $ primSuc
+      el <$> primNat
+    LitFloat _ _  -> el <$> primFloat
+    LitChar _ _   -> el <$> primChar
+    LitString _ _ -> el <$> primString
+    LitQName _ _  -> el <$> primQName
+  where
+    el t = El (mkType 0) t
+
 getBuiltinThing :: String -> TCM (Maybe (Builtin PrimFun))
 getBuiltinThing b = liftM2 mplus (Map.lookup b <$> gets stLocalBuiltins)
                     (Map.lookup b <$> gets stImportedBuiltins)
@@ -61,17 +79,19 @@
 primInteger, primFloat, primChar, primString, primBool, primTrue, primFalse,
     primList, primNil, primCons, primIO, primNat, primSuc, primZero,
     primNatPlus, primNatMinus, primNatTimes, primNatDivSucAux, primNatModSucAux,
-    primNatEquality, primNatLess, primSize, primSizeSuc, primSizeInf,
+    primNatEquality, primNatLess,
+    primSize, primSizeLt, primSizeSuc, primSizeInf,
     primInf, primSharp, primFlat,
     primEquality, primRefl,
     primLevel, primLevelZero, primLevelSuc, primLevelMax,
+    primIrrAxiom,
     -- builtins for reflection:
     primQName, primArg, primArgArg, primAgdaTerm, primAgdaTermVar,
     primAgdaTermLam, primAgdaTermDef, primAgdaTermCon, primAgdaTermPi,
     primAgdaTermSort, primAgdaTermUnsupported,
     primAgdaType, primAgdaTypeEl,
     primHiding, primHidden, primInstance, primVisible,
-    primRelvance, primRelevant, primIrrelevant,
+    primRelevance, primRelevant, primIrrelevant,
     primAgdaSort, primAgdaSortSet, primAgdaSortLit, primAgdaSortUnsupported,
     primAgdaDefinition, primAgdaDefinitionFunDef, primAgdaDefinitionDataDef, primAgdaDefinitionRecordDef,
     primAgdaDefinitionPostulate, primAgdaDefinitionPrimitive, primAgdaDefinitionDataConstructor,
@@ -99,8 +119,10 @@
 primNatEquality  = getBuiltin builtinNatEquals
 primNatLess      = getBuiltin builtinNatLess
 primSize         = getBuiltin builtinSize
+primSizeLt       = getBuiltin builtinSizeLt
 primSizeSuc      = getBuiltin builtinSizeSuc
 primSizeInf      = getBuiltin builtinSizeInf
+primSizeMax      = getBuiltin builtinSizeMax
 primInf          = getBuiltin builtinInf
 primSharp        = getBuiltin builtinSharp
 primFlat         = getBuiltin builtinFlat
@@ -110,6 +132,7 @@
 primLevelZero    = getBuiltin builtinLevelZero
 primLevelSuc     = getBuiltin builtinLevelSuc
 primLevelMax     = getBuiltin builtinLevelMax
+primIrrAxiom     = getBuiltin builtinIrrAxiom
 primQName        = getBuiltin builtinQName
 primArg          = getBuiltin builtinArg
 primArgArg       = getBuiltin builtinArgArg
@@ -120,7 +143,7 @@
 primHidden       = getBuiltin builtinHidden
 primInstance     = getBuiltin builtinInstance
 primVisible      = getBuiltin builtinVisible
-primRelvance     = getBuiltin builtinRelevance
+primRelevance    = getBuiltin builtinRelevance
 primRelevant     = getBuiltin builtinRelevant
 primIrrelevant   = getBuiltin builtinIrrelevant
 primAgdaSortSet  = getBuiltin builtinAgdaSortSet
@@ -166,8 +189,10 @@
 builtinCons         = "CONS"
 builtinIO           = "IO"
 builtinSize         = "SIZE"
+builtinSizeLt       = "SIZELT"
 builtinSizeSuc      = "SIZESUC"
 builtinSizeInf      = "SIZEINF"
+builtinSizeMax      = "SIZEMAX"
 builtinInf          = "INFINITY"
 builtinSharp        = "SHARP"
 builtinFlat         = "FLAT"
@@ -177,6 +202,7 @@
 builtinLevel        = "LEVEL"
 builtinLevelZero    = "LEVELZERO"
 builtinLevelSuc     = "LEVELSUC"
+builtinIrrAxiom     = "IRRAXIOM"
 builtinQName        = "QNAME"
 builtinAgdaSort     = "AGDASORT"
 builtinAgdaSortSet  = "AGDASORTSET"
@@ -211,3 +237,25 @@
 builtinAgdaDefinitionPostulate       = "AGDADEFINITIONPOSTULATE"
 builtinAgdaDefinitionPrimitive       = "AGDADEFINITIONPRIMITIVE"
 builtinAgdaDefinition                = "AGDADEFINITION"
+
+-- | The coinductive primitives.
+
+data CoinductionKit = CoinductionKit
+  { nameOfInf   :: QName
+  , nameOfSharp :: QName
+  , nameOfFlat  :: QName
+  }
+
+-- | Tries to build a 'CoinductionKit'.
+
+coinductionKit :: TCM (Maybe CoinductionKit)
+coinductionKit = (do
+  Def inf   _ <- ignoreSharing <$> primInf
+  Def sharp _ <- ignoreSharing <$> primSharp
+  Def flat  _ <- ignoreSharing <$> primFlat
+  return $ Just $ CoinductionKit
+    { nameOfInf   = inf
+    , nameOfSharp = sharp
+    , nameOfFlat  = flat
+    })
+    `catchError` \_ -> return Nothing
diff --git a/src/full/Agda/TypeChecking/Monad/Constraints.hs b/src/full/Agda/TypeChecking/Monad/Constraints.hs
--- a/src/full/Agda/TypeChecking/Monad/Constraints.hs
+++ b/src/full/Agda/TypeChecking/Monad/Constraints.hs
@@ -52,8 +52,8 @@
 
 isProblemSolved :: ProblemId -> TCM Bool
 isProblemSolved pid =
-  (&&) <$> (notElem pid <$> asks envActiveProblems)
-       <*> (all ((/= pid) . constraintProblem) <$> getAllConstraints)
+  and2M (notElem pid <$> asks envActiveProblems)
+        (all ((/= pid) . constraintProblem) <$> getAllConstraints)
 
 getConstraintsForProblem :: ProblemId -> TCM Constraints
 getConstraintsForProblem pid = List.filter ((== pid) . constraintProblem) <$> getAllConstraints
@@ -73,6 +73,23 @@
       , stAwakeConstraints    = stAwakeConstraints s ++ wakeup
       }
 
+-- danger...
+dropConstraints :: (ProblemConstraint -> Bool) -> TCM ()
+dropConstraints crit = do
+  sleepers <- gets stSleepingConstraints
+  wakers <- gets stAwakeConstraints
+  let filt = List.filter (not . crit)
+  modify $ \s -> s { stSleepingConstraints = filt sleepers
+                   , stAwakeConstraints = filt wakers
+                   }
+
+putAllConstraintsToSleep :: TCM ()
+putAllConstraintsToSleep = do
+  awakeOnes <- gets stAwakeConstraints
+  sleepers <- gets stSleepingConstraints
+  modify $ \s -> s { stSleepingConstraints = sleepers ++ awakeOnes
+                   , stAwakeConstraints = [] }
+
 takeAwakeConstraint :: TCM (Maybe ProblemConstraint)
 takeAwakeConstraint = do
   cs <- getAwakeConstraints
@@ -103,7 +120,7 @@
 addConstraint' :: Constraint -> TCM ()
 addConstraint' c = do
     pc <- build
-    modify $ \s -> s { stSleepingConstraints = pc : stSleepingConstraints s }
+    modify $ \s -> s { stDirty = True, stSleepingConstraints = pc : stSleepingConstraints s }
   where
     build | isBlocking c = buildConstraint c
           | otherwise    = buildProblemConstraint 0 c
diff --git a/src/full/Agda/TypeChecking/Monad/Context.hs b/src/full/Agda/TypeChecking/Monad/Context.hs
--- a/src/full/Agda/TypeChecking/Monad/Context.hs
+++ b/src/full/Agda/TypeChecking/Monad/Context.hs
@@ -21,12 +21,14 @@
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
+-- * Modifying the context
+
 -- | Modify the 'ctxEntry' field of a 'ContextEntry'.
-modifyContextEntry :: (Arg (Name, Type) -> Arg (Name, Type)) -> ContextEntry -> ContextEntry
+modifyContextEntry :: (Dom (Name, Type) -> Dom (Name, Type)) -> ContextEntry -> ContextEntry
 modifyContextEntry f ce = ce { ctxEntry = f (ctxEntry ce) }
 
 -- | Modify all 'ContextEntry's.
-modifyContextEntries :: (Arg (Name, Type) -> Arg (Name, Type)) -> Context -> Context
+modifyContextEntries :: (Dom (Name, Type) -> Dom (Name, Type)) -> Context -> Context
 modifyContextEntries f = map (modifyContextEntry f)
 
 -- | Modify a 'Context' in a computation.
@@ -34,64 +36,96 @@
 modifyContext :: MonadTCM tcm => (Context -> Context) -> tcm a -> tcm a
 modifyContext f = local $ \ e -> e { envContext = f (envContext e) }
 
-{-# SPECIALIZE mkContextEntry :: Arg (Name, Type) -> TCM ContextEntry #-}
-mkContextEntry :: MonadTCM tcm => Arg (Name, Type) -> tcm ContextEntry
+{-# SPECIALIZE mkContextEntry :: Dom (Name, Type) -> TCM ContextEntry #-}
+mkContextEntry :: MonadTCM tcm => Dom (Name, Type) -> tcm ContextEntry
 mkContextEntry x = do
   i <- fresh
   return $ Ctx i x
 
+-- | Change the context.
+{-# SPECIALIZE inContext :: [Dom (Name, Type)] -> TCM a -> TCM a #-}
+inContext :: MonadTCM tcm => [Dom (Name, Type)] -> tcm a -> tcm a
+inContext xs ret = do
+  ctx <- mapM mkContextEntry xs
+  modifyContext (const ctx) ret
+
+-- | Change to top (=empty) context.
+{-# SPECIALIZE inTopContext :: TCM a -> TCM a #-}
+inTopContext :: MonadTCM tcm => tcm a -> tcm a
+inTopContext = modifyContext $ const []
+
+-- | Delete the last @n@ bindings from the context.
+{-# SPECIALIZE escapeContext :: Int -> TCM a -> TCM a #-}
+escapeContext :: MonadTCM tcm => Int -> tcm a -> tcm a
+escapeContext n = modifyContext $ drop n
+
+-- | Deprecated.
+{-# SPECIALIZE escapeContextToTopLevel :: TCM a -> TCM a #-}
+escapeContextToTopLevel :: MonadTCM tcm => tcm a -> tcm a
+escapeContextToTopLevel = modifyContext $ const []
+
+-- * Adding to the context
+
 -- | @addCtx x arg cont@ add a variable to the context.
 --
 --   Chooses an unused 'Name'.
-{-# SPECIALIZE addCtx :: Name -> Arg Type -> TCM a -> TCM a #-}
-addCtx :: MonadTCM tcm => Name -> Arg Type -> tcm a -> tcm a
+{-# SPECIALIZE addCtx :: Name -> Dom Type -> TCM a -> TCM a #-}
+addCtx :: MonadTCM tcm => Name -> Dom Type -> tcm a -> tcm a
 addCtx x a ret = do
-  ctx <- map (nameConcrete . fst . unArg) <$> getContext
+  ctx <- map (nameConcrete . fst . unDom) <$> getContext
   let x' = head $ filter (notTaken ctx) $ iterate nextName x
   ce <- mkContextEntry $ fmap ((,) x') a
-  flip local ret $ \e -> e { envContext = ce : envContext e }
+  modifyContext (ce :) ret
       -- let-bindings keep track of own their context
   where
     notTaken xs x = isNoName (nameConcrete x) || nameConcrete x `notElem` xs
 
 -- | N-ary variant of @addCtx@.
-{-# SPECIALIZE addContext :: [Arg (Name, Type)] -> TCM a -> TCM a #-}
-addContext :: MonadTCM tcm => [Arg (Name, Type)] -> tcm a -> tcm a
+{-# SPECIALIZE addContext :: [Dom (Name, Type)] -> TCM a -> TCM a #-}
+addContext :: MonadTCM tcm => [Dom (Name, Type)] -> tcm a -> tcm a
 addContext ctx m =
-  foldr (\arg -> addCtx (fst $ unArg arg) (fmap snd arg)) m ctx
+  foldr (\arg -> addCtx (fst $ unDom arg) (fmap snd arg)) m ctx
 
+-- | add a bunch of variables with the same type to the context
+{-# SPECIALIZE addCtxs :: [Name] -> Dom Type -> TCM a -> TCM a #-}
+addCtxs :: MonadTCM tcm => [Name] -> Dom Type -> tcm a -> tcm a
+addCtxs []     _ k = k
+addCtxs (x:xs) t k = addCtx x t $ addCtxs xs (raise 1 t) k
+
 -- | Turns the string into a name and adds it to the context.
-{-# SPECIALIZE addCtxString :: String -> Arg Type -> TCM a -> TCM a #-}
-addCtxString :: MonadTCM tcm => String -> Arg Type -> tcm a -> tcm a
+{-# SPECIALIZE addCtxString :: String -> Dom Type -> TCM a -> TCM a #-}
+addCtxString :: MonadTCM tcm => String -> Dom Type -> tcm a -> tcm a
 addCtxString s a m = do
   x <- freshName_ s
   addCtx x a m
 
--- | Change the context
-{-# SPECIALIZE inContext :: [Arg (Name, Type)] -> TCM a -> TCM a #-}
-inContext :: MonadTCM tcm => [Arg (Name, Type)] -> tcm a -> tcm a
-inContext xs ret = do
-  ctx <- mapM mkContextEntry xs
-  flip local ret $ \e -> e { envContext = ctx }
+-- | Turns the string into a name and adds it to the context, with dummy type.
+{-# SPECIALIZE addCtxString_ :: String -> TCM a -> TCM a #-}
+addCtxString_ :: MonadTCM tcm => String -> tcm a -> tcm a
+addCtxString_ s = addCtxString s dummyDom
 
+-- | Context entries without a type have this dummy type.
+dummyDom :: Dom Type
+dummyDom = Dom NotHidden Relevant $ El Prop $ Sort Prop
+
 -- | Go under an abstraction.
-{-# SPECIALIZE underAbstraction :: Raise a => Arg Type -> Abs a -> (a -> TCM b) -> TCM b #-}
-underAbstraction :: (Raise a, MonadTCM tcm) => Arg Type -> Abs a -> (a -> tcm b) -> tcm b
+{-# SPECIALIZE underAbstraction :: Subst a => Dom Type -> Abs a -> (a -> TCM b) -> TCM b #-}
+underAbstraction :: (Subst a, MonadTCM tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b
 underAbstraction _ (NoAbs _ v) k = k v
 underAbstraction t a k = do
-    xs <- map (nameConcrete . fst . unArg) <$> getContext
+    xs <- map (nameConcrete . fst . unDom) <$> getContext
     x <- freshName_ $ realName $ absName a
     let y = head $ filter (notTaken xs) $ iterate nextName x
     addCtx y t $ k $ absBody a
   where
     notTaken xs x = isNoName (nameConcrete x) || notElem (nameConcrete x) xs
-    realName "_" = "y"
+    realName "_" = "x"
     realName s   = s
 
 -- | Go under an abstract without worrying about the type to add to the context.
-{-# SPECIALIZE underAbstraction_ :: Raise a => Abs a -> (a -> TCM b) -> TCM b #-}
-underAbstraction_ :: (Raise a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b
-underAbstraction_ = underAbstraction (Arg NotHidden Relevant $ sort Prop)
+{-# SPECIALIZE underAbstraction_ :: Subst a => Abs a -> (a -> TCM b) -> TCM b #-}
+underAbstraction_ :: (Subst a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b
+underAbstraction_ = underAbstraction dummyDom
 
 -- | Add a telescope to the context.
 {-# SPECIALIZE addCtxTel :: Telescope -> TCM a -> TCM a #-}
@@ -99,17 +133,34 @@
 addCtxTel EmptyTel	    ret = ret
 addCtxTel (ExtendTel t tel) ret = underAbstraction t tel $ \tel -> addCtxTel tel ret
 
+
+-- | Add a let bound variable
+{-# SPECIALIZE addLetBinding :: Relevance -> Name -> Term -> Type -> TCM a -> TCM a #-}
+addLetBinding :: MonadTCM tcm => Relevance -> Name -> Term -> Type -> tcm a -> tcm a
+addLetBinding rel x v t0 ret = do
+    let t = Dom NotHidden rel t0
+    vt <- liftTCM $ makeOpen (v, t)
+    flip local ret $ \e -> e { envLetBindings = Map.insert x vt $ envLetBindings e }
+
+
+-- * Querying the context
+
 -- | Get the current context.
-{-# SPECIALIZE getContext :: TCM [Arg (Name, Type)] #-}
-getContext :: MonadTCM tcm => tcm [Arg (Name, Type)]
+{-# SPECIALIZE getContext :: TCM [Dom (Name, Type)] #-}
+getContext :: MonadTCM tcm => tcm [Dom (Name, Type)]
 getContext = asks $ map ctxEntry . envContext
 
+-- | Get the size of the current context.
+{-# SPECIALIZE getContextSize :: TCM Nat #-}
+getContextSize :: MonadTCM tcm => tcm Nat
+getContextSize = genericLength <$> asks envContext
+
 -- | Generate [Var n - 1, .., Var 0] for all declarations in the context.
 {-# SPECIALIZE getContextArgs :: TCM Args #-}
 getContextArgs :: MonadTCM tcm => tcm Args
 getContextArgs = do
   ctx <- getContext
-  return $ reverse $ [ Arg h r $ Var i [] | (Arg h r _, i) <- zip ctx [0..] ]
+  return $ reverse $ [ Arg h r $ var i | (Dom h r _, i) <- zip ctx [0..] ]
 
 {-# SPECIALIZE getContextTerms :: TCM [Term] #-}
 getContextTerms :: MonadTCM tcm => tcm [Term]
@@ -120,45 +171,31 @@
 getContextTelescope :: MonadTCM tcm => tcm Telescope
 getContextTelescope = foldr extTel EmptyTel . reverse <$> getContext
   where
-    extTel (Arg h r (x, t)) = ExtendTel (Arg h r t) . Abs (show x)
-
--- | add a bunch of variables with the same type to the context
-{-# SPECIALIZE addCtxs :: [Name] -> Arg Type -> TCM a -> TCM a #-}
-addCtxs :: MonadTCM tcm => [Name] -> Arg Type -> tcm a -> tcm a
-addCtxs []     _ k = k
-addCtxs (x:xs) t k = addCtx x t $ addCtxs xs (raise 1 t) k
+    extTel (Dom h r (x, t)) = ExtendTel (Dom h r t) . Abs (show x)
 
 -- | Check if we are in a compatible context, i.e. an extension of the given context.
 {-# SPECIALIZE getContextId :: TCM [CtxId] #-}
 getContextId :: MonadTCM tcm => tcm [CtxId]
 getContextId = asks $ map ctxId . envContext
 
--- | Add a let bound variable
-{-# SPECIALIZE addLetBinding :: Relevance -> Name -> Term -> Type -> TCM a -> TCM a #-}
-addLetBinding :: MonadTCM tcm => Relevance -> Name -> Term -> Type -> tcm a -> tcm a
-addLetBinding rel x v t0 ret = do
-    let t = Arg NotHidden rel t0
-    vt <- liftTCM $ makeOpen (v, t)
-    flip local ret $ \e -> e { envLetBindings = Map.insert x vt $ envLetBindings e }
-
 -- | get type of bound variable (i.e. deBruijn index)
 --
-{-# SPECIALIZE typeOfBV' :: Nat -> TCM (Arg Type) #-}
-typeOfBV' :: MonadTCM tcm => Nat -> tcm (Arg Type)
+{-# SPECIALIZE typeOfBV' :: Nat -> TCM (Dom Type) #-}
+typeOfBV' :: MonadTCM tcm => Nat -> tcm (Dom Type)
 typeOfBV' n =
     do	ctx <- getContext
-	Arg h r (_,t) <- ctx !!! n
-	return $ Arg h r $ raise (n + 1) t
+	Dom h r (_,t) <- ctx !!! n
+	return $ Dom h r $ raise (n + 1) t
 
 {-# SPECIALIZE typeOfBV :: Nat -> TCM Type #-}
 typeOfBV :: MonadTCM tcm => Nat -> tcm Type
-typeOfBV i = unArg <$> typeOfBV' i
+typeOfBV i = unDom <$> typeOfBV' i
 
 {-# SPECIALIZE nameOfBV :: Nat -> TCM Name #-}
 nameOfBV :: MonadTCM tcm => Nat -> tcm Name
 nameOfBV n =
     do	ctx <- getContext
-	Arg _ _ (x,_) <- ctx !!! n
+	Dom _ _ (x,_) <- ctx !!! n
 	return x
 
 -- | TODO: move(?)
@@ -166,28 +203,23 @@
     where
 	[]     !!!! _ = do
             ctx <- getContext
-            fail $ "deBruijn index out of scope: " ++ show n ++ " in context " ++ show (map (fst . unArg) ctx)
+            fail $ "deBruijn index out of scope: " ++ show n ++ " in context " ++ show (map (fst . unDom) ctx)
 	(x:_)  !!!! 0 = return x
 	(_:xs) !!!! n = xs !!!! (n - 1)
 
 -- | Get the term corresponding to a named variable. If it is a lambda bound
 --   variable the deBruijn index is returned and if it is a let bound variable
 --   its definition is returned.
-{-# SPECIALIZE getVarInfo :: Name -> TCM (Term, Arg Type) #-}
-getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Arg Type)
+{-# SPECIALIZE getVarInfo :: Name -> TCM (Term, Dom Type) #-}
+getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Dom Type)
 getVarInfo x =
     do	ctx <- getContext
 	def <- asks envLetBindings
-	case findIndex ((==x) . fst . unArg) ctx of
-	    Just n0 ->
-		do  let n = fromIntegral n0
-                    t <- typeOfBV' n
-		    return (Var n [], t)
+	case findIndex ((==x) . fst . unDom) ctx of
+	    Just n -> do
+                t <- typeOfBV' n
+                return (Var n [], t)
 	    _	    ->
 		case Map.lookup x def of
 		    Just vt -> liftTCM $ getOpen vt
 		    _	    -> fail $ "unbound variable " ++ show x
-
-{-# SPECIALIZE escapeContext :: Int -> TCM a -> TCM a #-}
-escapeContext :: MonadTCM tcm => Int -> tcm a -> tcm a
-escapeContext n = local $ \e -> e { envContext = drop n $ envContext e }
diff --git a/src/full/Agda/TypeChecking/Monad/Context.hs-boot b/src/full/Agda/TypeChecking/Monad/Context.hs-boot
--- a/src/full/Agda/TypeChecking/Monad/Context.hs-boot
+++ b/src/full/Agda/TypeChecking/Monad/Context.hs-boot
@@ -5,5 +5,5 @@
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad.Base
 
-getContext   :: MonadTCM tcm => tcm [Arg (Name, Type)]
+getContext   :: MonadTCM tcm => tcm [Dom (Name, Type)]
 getContextId :: MonadTCM tcm => tcm [CtxId]
diff --git a/src/full/Agda/TypeChecking/Monad/Debug.hs b/src/full/Agda/TypeChecking/Monad/Debug.hs
--- a/src/full/Agda/TypeChecking/Monad/Debug.hs
+++ b/src/full/Agda/TypeChecking/Monad/Debug.hs
@@ -1,8 +1,7 @@
 
 module Agda.TypeChecking.Monad.Debug where
 
-import qualified Agda.Utils.IO.Locale as LocIO
 import Control.Monad.Trans ( MonadIO(liftIO) )
 
 debug :: MonadIO m => String -> m ()
-debug s = liftIO $ LocIO.putStrLn s
+debug s = liftIO $ putStrLn s
diff --git a/src/full/Agda/TypeChecking/Monad/Env.hs b/src/full/Agda/TypeChecking/Monad/Env.hs
--- a/src/full/Agda/TypeChecking/Monad/Env.hs
+++ b/src/full/Agda/TypeChecking/Monad/Env.hs
@@ -32,15 +32,15 @@
 
 -- | Set the current environment to the given
 withEnv :: TCEnv -> TCM a -> TCM a
-withEnv env m = local (const env) m
+withEnv env m = local (\env0 -> env { envAllowDestructiveUpdate = envAllowDestructiveUpdate env0 }) m
 
--- | Get the current environmnet
+-- | Get the current environment
 getEnv :: TCM TCEnv
 getEnv = ask
 
--- | Leave the top level to type check local things.
-leaveTopLevel :: TCM a -> TCM a
-leaveTopLevel = local $ \ env -> env { envTopLevel = False }
-
-onTopLevel :: TCM Bool
-onTopLevel = asks envTopLevel
+-- | Increases the module nesting level by one in the given
+-- computation.
+withIncreasedModuleNestingLevel :: TCM a -> TCM a
+withIncreasedModuleNestingLevel =
+  local (\e -> e { envModuleNestingLevel =
+                     envModuleNestingLevel e + 1 })
diff --git a/src/full/Agda/TypeChecking/Monad/Exception.hs b/src/full/Agda/TypeChecking/Monad/Exception.hs
--- a/src/full/Agda/TypeChecking/Monad/Exception.hs
+++ b/src/full/Agda/TypeChecking/Monad/Exception.hs
@@ -2,7 +2,10 @@
 
 -- | Basically a copy of the ErrorT monad transformer. It's handy to slap
 --   onto TCM and still be a MonadTCM (which isn't possible with ErrorT).
+
+-- Andreas, 2012-03-30: the following command seems to be STALE.
 --   Also, it does not require the silly Error instance for the err type.
+-- The silly Error instance is back. ;-)
 
 module Agda.TypeChecking.Monad.Exception where
 
diff --git a/src/full/Agda/TypeChecking/Monad/Imports.hs b/src/full/Agda/TypeChecking/Monad/Imports.hs
--- a/src/full/Agda/TypeChecking/Monad/Imports.hs
+++ b/src/full/Agda/TypeChecking/Monad/Imports.hs
@@ -11,12 +11,11 @@
 import qualified Data.List as List
 import qualified Data.Set as Set
 
-import System.Time
-
 import Agda.Syntax.Abstract.Name
 import qualified Agda.Syntax.Concrete.Name as C
 import Agda.TypeChecking.Monad.Base
 import Agda.Utils.Monad
+import Agda.Utils.Time
 
 addImport :: ModuleName -> TCM ()
 addImport m =
diff --git a/src/full/Agda/TypeChecking/Monad/MetaVars.hs b/src/full/Agda/TypeChecking/Monad/MetaVars.hs
--- a/src/full/Agda/TypeChecking/Monad/MetaVars.hs
+++ b/src/full/Agda/TypeChecking/Monad/MetaVars.hs
@@ -7,6 +7,7 @@
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 
+import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.Syntax.Position
 import Agda.Syntax.Scope.Base
@@ -18,6 +19,8 @@
 import Agda.TypeChecking.Monad.Trace
 import Agda.TypeChecking.Monad.Closure
 import Agda.TypeChecking.Monad.Open
+import Agda.TypeChecking.Monad.Options (reportSLn)
+import Agda.TypeChecking.Monad.Sharing
 import Agda.TypeChecking.Substitute
 -- import Agda.TypeChecking.Pretty -- LEADS TO import cycle
 
@@ -28,6 +31,10 @@
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
+-- | Switch off assignment of metas.
+dontAssignMetas :: TCM a -> TCM a
+dontAssignMetas = local $ \ env -> env { envAssignMetas = False }
+
 -- | Get the meta store.
 getMetaStore :: TCM MetaStore
 getMetaStore = gets stMetaStore
@@ -50,6 +57,11 @@
 getMetaPriority :: MetaId -> TCM MetaPriority
 getMetaPriority i = mvPriority <$> lookupMeta i
 
+{- UNUSED
+getMetaRelevance :: MetaId -> TCM Relevance
+getMetaRelevance x = miRelevance . mvInfo <$> lookupMeta x
+-}
+
 isSortMeta :: MetaId -> TCM Bool
 isSortMeta m = do
   mv <- lookupMeta m
@@ -57,6 +69,13 @@
     HasType{} -> False
     IsSort{}  -> True
 
+getMetaType :: MetaId -> TCM Type
+getMetaType m = do
+  mv <- lookupMeta m
+  return $ case mvJudgement mv of
+    HasType{ jMetaType = t } -> t
+    IsSort{}  -> __IMPOSSIBLE__
+
 isInstantiatedMeta :: MetaId -> TCM Bool
 isInstantiatedMeta m = do
   mv <- lookupMeta m
@@ -65,11 +84,39 @@
     InstS{} -> True
     _       -> False
 
+-- | Create 'MetaInfo' in the current environment.
 createMetaInfo :: TCM MetaInfo
-createMetaInfo =
-    do  r <- getCurrentRange
-	buildClosure r
+createMetaInfo = createMetaInfo' RunMetaOccursCheck
 
+createMetaInfo' :: RunMetaOccursCheck -> TCM MetaInfo
+createMetaInfo' b = do
+  r   <- getCurrentRange
+  cl  <- buildClosure r
+  return MetaInfo
+    { miClosRange       = cl
+    , miMetaOccursCheck = b
+    , miNameSuggestion  = ""
+    }
+
+setValueMetaName :: Term -> MetaNameSuggestion -> TCM ()
+setValueMetaName v s = do
+  case ignoreSharing v of
+    MetaV mi _ -> setMetaNameSuggestion mi s
+    u          -> do
+      reportSLn "tc.meta.name" 70 $
+        "cannot set meta name; newMeta returns " ++ show u
+      return ()
+
+getMetaNameSuggestion :: MetaId -> TCM MetaNameSuggestion
+getMetaNameSuggestion mi = miNameSuggestion . mvInfo <$> lookupMeta mi
+
+setMetaNameSuggestion :: MetaId -> MetaNameSuggestion -> TCM ()
+setMetaNameSuggestion mi s = do
+  reportSLn "tc.meta.name" 20 $
+    "setting name of meta " ++ show mi ++ " to " ++ s
+  updateMetaVar mi $ \ mvar ->
+    mvar { mvInfo = (mvInfo mvar) { miNameSuggestion = s }}
+
 updateMetaVarRange :: MetaId -> Range -> TCM ()
 updateMetaVarRange mi r = updateMetaVar mi (setRange r)
 
@@ -142,8 +189,12 @@
        mv <- lookupMeta mi
        return $ getMetaScope mv
 
-withMetaInfo :: MetaInfo -> TCM a -> TCM a
-withMetaInfo mI m = enterClosure mI $ \r -> setCurrentRange r m
+withMetaInfo' :: MetaVariable -> TCM a -> TCM a
+withMetaInfo' mv = withMetaInfo (miClosRange $ mvInfo mv)
+
+withMetaInfo :: Closure Range -> TCM a -> TCM a
+withMetaInfo mI cont = enterClosure mI $ \ r ->
+  setCurrentRange r cont
 
 getInstantiatedMetas :: TCM [MetaId]
 getInstantiatedMetas = do
diff --git a/src/full/Agda/TypeChecking/Monad/Mutual.hs b/src/full/Agda/TypeChecking/Monad/Mutual.hs
--- a/src/full/Agda/TypeChecking/Monad/Mutual.hs
+++ b/src/full/Agda/TypeChecking/Monad/Mutual.hs
@@ -8,6 +8,7 @@
 import qualified Data.Map as Map
 import Data.Set (Set)
 import qualified Data.Set as Set
+import qualified Agda.Utils.HashMap as HMap
 
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad.Base
@@ -38,15 +39,16 @@
 				      }
 		   }
   where
-    setMutId x i = flip Map.adjust x $ \defn -> defn { defMutual = i }
+    setMutId x i = flip HMap.adjust x $ \defn -> defn { defMutual = i }
 
 -- | Get all mutual blocks
 getMutualBlocks :: TCM [Set QName]
 getMutualBlocks = gets $ Map.elems . stMutualBlocks
 
--- | Get the current mutual block.
-currentMutualBlock :: TCM MutualId
-currentMutualBlock = maybe fresh return =<< asks envMutualBlock
+-- | Get the current mutual block, if any, otherwise a fresh mutual
+-- block is returned.
+currentOrFreshMutualBlock :: TCM MutualId
+currentOrFreshMutualBlock = maybe fresh return =<< asks envMutualBlock
 
 lookupMutualBlock :: MutualId -> TCM (Set QName)
 lookupMutualBlock mi = do
diff --git a/src/full/Agda/TypeChecking/Monad/Open.hs b/src/full/Agda/TypeChecking/Monad/Open.hs
--- a/src/full/Agda/TypeChecking/Monad/Open.hs
+++ b/src/full/Agda/TypeChecking/Monad/Open.hs
@@ -35,14 +35,14 @@
 
 -- | Extract the value from an open term. Must be done in an extension of the
 --   context in which the term was created.
-getOpen :: Raise a => Open a -> TCM a
+getOpen :: Subst a => Open a -> TCM a
 getOpen (OpenThing []  x) = return x
 getOpen (OpenThing ctx x) = do
   ctx' <- getContextId
   unless (ctx `isSuffixOf` ctx') $ fail $ "thing out of context (" ++ show ctx ++ " is not a sub context of " ++ show ctx' ++ ")"
   return $ raise (genericLength ctx' - genericLength ctx) x
 
-tryOpen :: Raise a => Open a -> TCM (Maybe a)
+tryOpen :: Subst a => Open a -> TCM (Maybe a)
 tryOpen o =
   (Just <$> getOpen o)
   `catchError` \_ -> return Nothing
diff --git a/src/full/Agda/TypeChecking/Monad/Options.hs b/src/full/Agda/TypeChecking/Monad/Options.hs
--- a/src/full/Agda/TypeChecking/Monad/Options.hs
+++ b/src/full/Agda/TypeChecking/Monad/Options.hs
@@ -2,22 +2,26 @@
 
 module Agda.TypeChecking.Monad.Options where
 
+import Control.Monad.Error
 import Control.Monad.Reader
 import Control.Monad.State
 import Data.Maybe
 import Text.PrettyPrint
-import qualified Agda.Utils.IO.Locale as LocIO
 import System.Directory
 import System.FilePath
+import System.IO
 
 import Agda.Syntax.Concrete
+import {-# SOURCE #-} Agda.TypeChecking.Errors
 import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Monad.State
+import Agda.Interaction.EmacsCommand as Emacs
 import Agda.Interaction.FindFile
 import Agda.Interaction.Options
 import Agda.Utils.FileName
 import Agda.Utils.Monad
 import Agda.Utils.List
+import Agda.Utils.String
 import Agda.Utils.Trie (Trie)
 import qualified Agda.Utils.Trie as Trie
 
@@ -144,7 +148,7 @@
 --
 -- If the include directories change (and they were previously
 -- @'Right' something@), then the state is reset (completely, except
--- for the include directories).
+-- for the include directories and 'stInteractionOutputCallback').
 --
 -- An empty list is interpreted as @["."]@.
 
@@ -183,7 +187,9 @@
   incs <- getIncludeDirs
   case oldIncs of
     Right incs' | incs' /= incs -> do
+      ho <- stInteractionOutputCallback <$> get
       resetAllState
+      modify $ \st -> st { stInteractionOutputCallback = ho }
       setIncs incs
     _                           -> return ()
 
@@ -215,6 +221,23 @@
 showImplicitArguments :: TCM Bool
 showImplicitArguments = optShowImplicit <$> pragmaOptions
 
+showIrrelevantArguments :: TCM Bool
+showIrrelevantArguments = optShowIrrelevant <$> pragmaOptions
+
+-- | Switch on printing of implicit and irrelevant arguments.
+--   E.g. for reification in with-function generation.
+withShowAllArguments :: TCM a -> TCM a
+withShowAllArguments ret = do
+  opts <- pragmaOptions
+  let imp = optShowImplicit opts
+      irr = optShowIrrelevant opts
+  setPragmaOptions $ opts { optShowImplicit = True, optShowIrrelevant = True }
+  x <- ret
+  opts <- pragmaOptions
+  setPragmaOptions $ opts { optShowImplicit = imp, optShowIrrelevant = irr }
+  return x
+
+{- RETIRED, Andreas, 2012-04-30
 setShowImplicitArguments :: Bool -> TCM a -> TCM a
 setShowImplicitArguments showImp ret = do
   opts <- pragmaOptions
@@ -224,6 +247,7 @@
   opts <- pragmaOptions
   setPragmaOptions $ opts { optShowImplicit = imp }
   return x
+-}
 
 ignoreInterfaces :: TCM Bool
 ignoreInterfaces = optIgnoreInterfaces <$> commandLineOptions
@@ -234,6 +258,16 @@
 typeInType :: TCM Bool
 typeInType = not . optUniverseCheck <$> pragmaOptions
 
+------------------------------------------------------------------------
+-- Verbosity
+
+-- Invariant (which we may or may not currently break): Debug
+-- printouts use one of the following functions:
+--
+--   reportS
+--   reportSLn
+--   reportSDoc
+
 getVerbosity :: TCM (Trie String Int)
 getVerbosity = optVerbose <$> pragmaOptions
 
@@ -247,24 +281,52 @@
 	m  = maximum $ 0 : Trie.lookupPath ks t
     return (n <= m)
 
+-- | If this command is run under the Emacs mode, then it formats the
+-- debug message in such a way that the Emacs mode can understand it.
+
+emacsifyDebugMessage :: String -- ^ The debug message.
+                     -> TCM String
+emacsifyDebugMessage s =
+  ifM (envEmacs <$> ask)
+      (return $ Emacs.response $
+         L [ A "agda2-verbose"
+           , A (quote s)
+           ])
+      (return s)
+
+-- | Displays a debug message in a suitable way.
+displayDebugMessage :: String -> TCM ()
+displayDebugMessage s =
+  liftIO . putStr =<< emacsifyDebugMessage s
+
 -- | Precondition: The level must be non-negative.
 verboseS :: VerboseKey -> Int -> TCM () -> TCM ()
 verboseS k n action = whenM (hasVerbosity k n) action
 
 reportS :: VerboseKey -> Int -> String -> TCM ()
-reportS k n s = verboseS k n $ liftIO $ LocIO.putStr s
+reportS k n s = verboseS k n $ displayDebugMessage s
 
 reportSLn :: VerboseKey -> Int -> String -> TCM ()
-reportSLn k n s = verboseS k n $ liftIO $ LocIO.putStrLn s >> LocIO.stdoutFlush
+reportSLn k n s = verboseS k n $ do
+  displayDebugMessage (s ++ "\n")
+  liftIO $ hFlush stdout
 
 reportSDoc :: VerboseKey -> Int -> TCM Doc -> TCM ()
-reportSDoc k n d = verboseS k n $ liftIO . LocIO.print =<< d
+reportSDoc k n d = verboseS k n $ do
+  displayDebugMessage . (++ "\n") . show =<< do
+    d `catchError` \ err ->
+      (\ s -> (sep $ map text
+                 [ "Printing debug message"
+                 , k  ++ ":" ++show n
+                 , "failed due to error:" ]) $$
+              (nest 2 $ text s)) <$> prettyError err
 
+
 verboseBracket :: VerboseKey -> Int -> String -> TCM a -> TCM a
 verboseBracket k n s m = do
   v <- hasVerbosity k n
   if not v then m
            else do
-    liftIO $ LocIO.putStrLn $ "{ " ++ s
-    x <- m `finally` liftIO (LocIO.putStrLn "}")
+    displayDebugMessage $ "{ " ++ s ++ "\n"
+    x <- m `finally` displayDebugMessage "}\n"
     return x
diff --git a/src/full/Agda/TypeChecking/Monad/Sharing.hs b/src/full/Agda/TypeChecking/Monad/Sharing.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Monad/Sharing.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE CPP #-}
+module Agda.TypeChecking.Monad.Sharing where
+
+import Control.Monad.Reader
+import Data.List
+import Data.Function
+import Data.Traversable
+
+import Agda.Syntax.Internal
+import Agda.TypeChecking.Monad.Base
+import Agda.TypeChecking.Monad.Options
+import Agda.Utils.Monad
+import Agda.Utils.Impossible
+
+#include "../../undefined.h"
+
+updateSharedTerm :: MonadTCM tcm => (Term -> tcm Term) -> Term -> tcm Term
+updateSharedTerm f v =
+  ifM (liftTCM $ asks envAllowDestructiveUpdate)
+      (updateSharedM f v)
+      (f $ ignoreSharing v)
+
+updateSharedTermF :: (MonadTCM tcm, Traversable f) => (Term -> tcm (f Term)) -> Term -> tcm (f Term)
+updateSharedTermF f v =
+  ifM (liftTCM $ asks envAllowDestructiveUpdate)
+      (updateSharedFM f v)
+      (f $ ignoreSharing v)
+
+updateSharedTermT :: (MonadTCM tcm, MonadTrans t, Monad (t tcm)) => (Term -> t tcm Term) -> Term -> t tcm Term
+updateSharedTermT f v =
+  ifM (lift $ asks envAllowDestructiveUpdate)
+      (updateSharedM f v)
+      (f $ ignoreSharing v)
+
+forceEqualTerms :: Term -> Term -> TCM ()
+forceEqualTerms u v =
+  whenM (asks envAllowDestructiveUpdate) $
+  when (null $ (intersect `on` pointerChain) u v) $
+  case (u, v) of
+    (Shared p, Shared q) | p > q -> update u v
+    (_, Shared{})                -> update v u
+    (Shared{}, _)                -> update u v
+    _ -> return ()
+  where
+    -- TODO: compress pointer chain
+    update u@(Shared{}) v = do
+        report u v
+        setPtr v p `seq` compressPointerChain u `seq` return ()
+      where p = last $ pointerChain u
+    update _ _ = __IMPOSSIBLE__
+    report x y = reportSLn "tc.ptr" 50 $ "setting " ++ show x ++ "\n     to " ++ show y
+
+disableDestructiveUpdate :: TCM a -> TCM a
+disableDestructiveUpdate = local $ \e -> e { envAllowDestructiveUpdate = False }
+
diff --git a/src/full/Agda/TypeChecking/Monad/Signature.hs b/src/full/Agda/TypeChecking/Monad/Signature.hs
--- a/src/full/Agda/TypeChecking/Monad/Signature.hs
+++ b/src/full/Agda/TypeChecking/Monad/Signature.hs
@@ -10,7 +10,6 @@
 import qualified Data.Map as Map
 import Data.List
 import Data.Function
-import qualified Agda.Utils.IO.Locale as LocIO
 
 import Agda.Syntax.Abstract.Name
 import Agda.Syntax.Common
@@ -30,12 +29,14 @@
 -- import Agda.TypeChecking.Pretty -- leads to cyclicity
 import {-# SOURCE #-} Agda.TypeChecking.CompiledClause.Compile
 import {-# SOURCE #-} Agda.TypeChecking.Polarity
+import {-# SOURCE #-} Agda.TypeChecking.ProjectionLike
 
 import Agda.Utils.Monad
 import Agda.Utils.Map as Map
 import Agda.Utils.Size
 import Agda.Utils.Permutation
 import Agda.Utils.Pretty
+import qualified Agda.Utils.HashMap as HMap
 
 #include "../../undefined.h"
 import Agda.Utils.Impossible
@@ -66,158 +67,80 @@
 	setSignature sig0
         return r
 
+-- * modifiers for parts of the signature
+
+updateDefinition :: QName -> (Definition -> Definition) -> Signature -> Signature
+updateDefinition q f sig = sig { sigDefinitions = HMap.adjust f q (sigDefinitions sig) }
+
+updateTheDef :: (Defn -> Defn) -> (Definition -> Definition)
+updateTheDef f def = def { theDef = f (theDef def) }
+
+updateDefType :: (Type -> Type) -> (Definition -> Definition)
+updateDefType f def = def { defType = f (defType def) }
+
+updateDefArgOccurrences :: ([Occurrence] -> [Occurrence]) -> (Definition -> Definition)
+updateDefArgOccurrences f def = def { defArgOccurrences = f (defArgOccurrences def) }
+
+updateDefPolarity :: ([Polarity] -> [Polarity]) -> (Definition -> Definition)
+updateDefPolarity f def = def { defPolarity = f (defPolarity def) }
+
+updateDefCompiledRep :: (CompiledRepresentation -> CompiledRepresentation) -> (Definition -> Definition)
+updateDefCompiledRep f def = def { defCompiledRep = f (defCompiledRep def) }
+
 -- | Add a constant to the signature. Lifts the definition to top level.
 addConstant :: QName -> Definition -> TCM ()
 addConstant q d = do
   reportSLn "tc.signature" 20 $ "adding constant " ++ show q ++ " to signature"
   tel <- getContextTelescope
   let tel' = killRange $ case theDef d of
-	      Constructor{} -> hideTel tel
+	      Constructor{} -> fmap (mapDomHiding (const Hidden)) tel
 	      _		    -> tel
   let d' = abstract tel' $ d { defName = q }
   reportSLn "tc.signature" 30 $ "lambda-lifted definition = " ++ show d'
   modifySignature $ \sig -> sig
-    { sigDefinitions = Map.insertWith (+++) q d' $ sigDefinitions sig }
-  i <- currentMutualBlock
+    { sigDefinitions = HMap.insertWith (+++) q d' $ sigDefinitions sig }
+  i <- currentOrFreshMutualBlock
   setMutualBlock i q
   where
     new +++ old = new { defDisplay = defDisplay new ++ defDisplay old }
 
-    hideTel  EmptyTel		      = EmptyTel
-    hideTel (ExtendTel (Arg _ r t) tel) = ExtendTel (Arg Hidden r t) $ hideTel <$> tel
-
--- | Turn a definition into a projection if it looks like a projection.
-makeProjection :: QName -> TCM ()
-makeProjection x = inContext [] $ do
-  reportSLn "tc.proj.like" 30 $ "Considering " ++ show x ++ " for projection likeness"
-  defn <- getConstInfo x
-  case theDef defn of
-    -- Constructor-headed functions can't be projection-like (at the moment). The reason
-    -- for this is that invoking constructor-headedness will circumvent the inference of
-    -- the dropped arguments.
-    -- Nor can abstract definitions be projection-like since they won't reduce
-    -- outside the abstract block.
-    def@Function{funProjection = Nothing, funClauses = cls, funInv = NotInjective,
-                 funAbstr = ConcreteDef} -> do
-      ps0 <- filterM validProj (candidateArgs [] (unEl $ defType defn))
-      reportSLn "tc.proj.like" 30 $ if null ps0 then "  no candidates found"
-                                                else "  candidates: " ++ show ps0
-      ps <- return $ filter (checkOccurs cls . snd) ps0
-      when (not (null ps0) && null ps) $ reportSLn "tc.proj.like" 50 $ "  occurs check failed\n    clauses = " ++ show cls
-      case reverse ps of
-        []         -> return ()
-        (d, n) : _ -> do
-          reportSLn "tc.proj.like" 10 $ show (defName defn) ++ " is projection like in argument " ++
-                                        show n ++ " for type " ++ show d
-          let cls' = map (rewriteClause n) cls
-          cc <- compileClauses True cls'
-          reportSLn "tc.proj.like" 20 $ "  rewrote clauses to\n    " ++ show cc
-          let mapInv f NotInjective  = NotInjective
-              mapInv f (Inverse inv) = Inverse (f inv)
-              newDef = def
-                       { funProjection     = Just (d, n + 1)
-                       , funClauses        = cls'
-                       , funCompiled       = cc
-                       , funInv            = mapInv (Map.map $ rewriteClause n) $ funInv def
-                       , funArgOccurrences = drop n $ funArgOccurrences def
-                       , funPolarity       = drop n $ funPolarity def
-                       }
-          addConstant x $ defn{ theDef     = newDef
-                              , defDisplay = [] }
-    _ -> return ()
+-- | Set termination info of a defined function symbol.
+setTerminates :: QName -> Bool -> TCM ()
+setTerminates q b = modifySignature $ updateDefinition q $ updateTheDef $ setT
   where
-    validProj (_, 0) = return False
-    validProj (d, _) = do
-      defn <- theDef <$> getConstInfo d
-      return $ case defn of
-        Datatype{} -> True
-        Record{}   -> True
-        Axiom{}    -> True
-        _          -> False
-
-    rewriteClause n cl@Clause{clausePerm = Perm m p} =
-      cl{ clausePerm = Perm (m - fromIntegral n) $ map (subtract $ fromIntegral n) $ drop n p
-        , clauseTel  = telFromList $ drop n $ telToList $ clauseTel cl
-        , clausePats = drop n $ clausePats cl
-        , clauseBody = dropB n $ clauseBody cl
-        }
-      where
-        dropB 0 b          = b
-        dropB _ NoBody     = NoBody
-        dropB n (Bind b)   = dropB (n - 1) (absBody b)
-        dropB n Body{}     = __IMPOSSIBLE__
-
-    checkOccurs cls n = all (nonOccur n) cls
-
-    nonOccur n Clause{clausePerm = Perm _ p, clausePats = ps, clauseBody = b} =
-      and [ take n p == [0..fromIntegral n - 1]
-          , onlyMatch n ps  -- projection-like functions are only allowed to match on the eliminatee
-                            -- otherwise we may end up projecting from constructor applications, in
-                            -- which case we can't reconstruct the dropped parameters
-          , checkBody n b ]
-
-    onlyMatch n ps = all (noMatch . unArg) $ ps0 ++ drop 1 ps1
-      where
-        (ps0, ps1) = splitAt n ps
-        noMatch ConP{} = False
-        noMatch LitP{} = False
-        noMatch VarP{} = True
-        noMatch DotP{} = True
-
-    checkBody 0 _          = True
-    checkBody _ NoBody     = True
-    checkBody n (Bind b)   = not (isBinderUsed b) && checkBody (n - 1) (unAbs b)
-    checkBody _ Body{}     = __IMPOSSIBLE__
-
-    candidateArgs vs (Pi (Arg r h (El _ (Def d us))) b)
-      | vs == map unArg us = (d, length vs) : candidateRec vs b
-    candidateArgs vs (Pi _ b) = candidateRec vs b
-    candidateArgs _ _ = []
-
-    candidateRec vs NoAbs{} = []
-    candidateRec vs b       = candidateArgs (Var (size vs) [] : vs) (unEl $ absBody b)
+    setT def@Function{} = def { funTerminates = Just b }
+    setT def            = def
 
 addHaskellCode :: QName -> HaskellType -> HaskellCode -> TCM ()
-addHaskellCode q hsTy hsDef =
+addHaskellCode q hsTy hsDef = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs
   -- TODO: sanity checking
-  modifySignature $ \sig -> sig
-  { sigDefinitions = Map.adjust addHs q $ sigDefinitions sig }
   where
-    addHs def = def { defCompiledRep = (defCompiledRep def) { compiledHaskell = Just $ HsDefn hsTy hsDef } }
+    addHs crep = crep { compiledHaskell = Just $ HsDefn hsTy hsDef }
 
 addHaskellType :: QName -> HaskellType -> TCM ()
-addHaskellType q hsTy =
+addHaskellType q hsTy = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addHs
   -- TODO: sanity checking
-  modifySignature $ \sig -> sig
-  { sigDefinitions = Map.adjust addHs q $ sigDefinitions sig }
   where
-    addHs def = def { defCompiledRep = (defCompiledRep def) { compiledHaskell = Just $ HsType hsTy } }
+    addHs crep = crep { compiledHaskell = Just $ HsType hsTy }
 
 addEpicCode :: QName -> EpicCode -> TCM ()
-addEpicCode q epDef =
+addEpicCode q epDef = modifySignature $ updateDefinition q $ updateDefCompiledRep $ addEp
   -- TODO: sanity checking
-  modifySignature $ \sig -> sig
-  { sigDefinitions = Map.adjust addEp q $ sigDefinitions sig }
   where
-    --addEp def@Defn{theDef = con@Constructor{}} =
-      --def{theDef = con{conHsCode = Just (hsTy, hsDef)}}
-    addEp def = def { defCompiledRep = (defCompiledRep def) { compiledEpic = Just epDef } }
+    addEp crep = crep { compiledEpic = Just epDef }
 
 addJSCode :: QName -> String -> TCM ()
 addJSCode q jsDef =
   case JS.parse jsDef of
     Left e ->
-      modifySignature $ \sig -> sig
-      { sigDefinitions = Map.adjust (addJS (Just e)) q $ sigDefinitions sig }
+      modifySignature $ updateDefinition q $ updateDefCompiledRep $ addJS (Just e)
     Right s ->
       typeError (CompilationError ("Failed to parse ECMAScript (..." ++ s ++ ") for " ++ show q))
   where
-    addJS e def = def{defCompiledRep = (defCompiledRep def){compiledJS = e}}
+    addJS e crep = crep { compiledJS = e }
 
 markStatic :: QName -> TCM ()
-markStatic q =
-  modifySignature $ \sig -> sig
-  { sigDefinitions = Map.adjust mark q $ sigDefinitions sig }
+markStatic q = modifySignature $ updateDefinition q $ mark
   where
     mark def@Defn{theDef = fun@Function{}} =
       def{theDef = fun{funStatic = True}}
@@ -226,7 +149,7 @@
 unionSignatures :: [Signature] -> Signature
 unionSignatures ss = foldr unionSignature emptySignature ss
   where
-    unionSignature (Sig a b) (Sig c d) = Sig (Map.union a c) (Map.union b d)
+    unionSignature (Sig a b) (Sig c d) = Sig (Map.union a c) (HMap.union b d)
 
 -- | Add a section to the signature.
 addSection :: ModuleName -> Nat -> TCM ()
@@ -247,23 +170,26 @@
 addDisplayForms :: QName -> TCM ()
 addDisplayForms x = do
   args <- getContextArgs
-  add args x x []
+  n    <- do
+    proj <- isProjection x
+    return $ case proj of
+      Just (_, n) -> n
+      Nothing     -> 0
+  add (drop (n - 1) args) x x []
   where
-    add args top x ps = do
+    add args top x vs0 = do
       def <- getConstInfo x
       let cs = defClauses def
-          n  = case theDef def of
-                 Function{ funProjection = Just (_, n) } -> n
-                 _ -> 0
       case cs of
-	[ Clause{ clauseBody = b } ]
-	  | Just (m, Def y vs) <- strip b -> do
-	      let ps' = raise 1 (map unArg vs) ++ ps
-                  df  = Display 0 ps' $ DTerm $ Def top (drop (n - 1) args)
+	[ Clause{ clausePats = pats, clauseBody = b } ]
+	  | all (isVar . unArg) pats
+          , Just (m, Def y vs) <- strip (b `apply` vs0) -> do
+	      let ps = raise 1 (map unArg vs)
+                  df = Display 0 ps $ DTerm $ Def top args
 	      reportSLn "tc.display.section" 20 $ "adding display form " ++ show y ++ " --> " ++ show top
                                                 ++ "\n  " ++ show df
 	      addDisplayForm y df
-	      add args top y ps'
+	      add args top y vs
 	_ -> do
 	      let reason = case cs of
 		    []    -> "no clauses"
@@ -273,16 +199,19 @@
 		      Just (m, Def y vs)
 			| m < length args -> "too few args"
 			| m > length args -> "too many args"
-			| otherwise	      -> "args=" ++ show args ++ " vs=" ++ show vs
+			| otherwise	  -> "args=" ++ show args ++ " vs=" ++ show vs
 		      Just (m, v) -> "not a def body"
-	      reportSLn "tc.display.section" 30 $ "no display form from" ++ show x ++ " because " ++ reason
+	      reportSLn "tc.display.section" 30 $ "no display form from " ++ show x ++ " because " ++ reason
 	      return ()
     strip (Body v)   = return (0, v)
     strip  NoBody    = Nothing
     strip (Bind b)   = do
       (n, v) <- strip $ absBody b
-      return (n + 1, v)
+      return (n + 1, ignoreSharing v)
 
+    isVar VarP{} = True
+    isVar _      = False
+
 applySection ::
   ModuleName -> Telescope -> ModuleName -> Args ->
   Map QName QName -> Map ModuleName ModuleName -> TCM ()
@@ -290,7 +219,7 @@
   sig  <- getSignature
   isig <- getImportedSignature
   let ss = getOld partOfOldM sigSections    [sig, isig]
-      ds = getOld partOfOldD sigDefinitions [sig, isig]
+      ds = getOldH partOfOldD sigDefinitions [sig, isig]
   reportSLn "tc.mod.apply" 10 $ render $ vcat
     [ text "applySection"
     , text "new  =" <+> text (show new)
@@ -309,6 +238,8 @@
   where
     getOld partOfOld fromSig sigs =
       Map.toList $ Map.filterKeys partOfOld $ Map.unions $ map fromSig sigs
+    getOldH partOfOld fromSig sigs =
+      HMap.toList $ HMap.filterWithKey (const . partOfOld) $ HMap.unions $ map fromSig sigs
 
     partOfOldM x = x `isSubModuleOf` old
     partOfOldD x = x `isInModule`    old
@@ -323,49 +254,65 @@
 	  addConstant y =<< nd y
           makeProjection y
 	  -- Set display form for the old name if it's not a constructor.
+{- BREAKS fail/Issue478
+          -- Andreas, 2012-10-20 and if we are not an anonymous module
+	  -- unless (isAnonymousModuleName new || isCon || size ptel > 0) $ do
+-}
 	  unless (isCon || size ptel > 0) $ do
 	    addDisplayForms y
       where
-	t  = defType d `apply` ts
+	t   = defType d `apply` ts
+        pol = defPolarity d `apply` ts
+        occ = defArgOccurrences d `apply` ts
 	-- the name is set by the addConstant function
-	nd y = Defn (defRelevance d) y t [] (-1) noCompiledRep <$> def  -- TODO: mutual block?
+	nd y = Defn (defRelevance d) y t pol occ [] (-1) noCompiledRep <$> def  -- TODO: mutual block?
         oldDef = theDef d
 	isCon = case oldDef of
 	  Constructor{} -> True
 	  _		-> False
+{- OLD
         getOcc d = case d of
           Function { funArgOccurrences  = os } -> os
           Datatype { dataArgOccurrences = os } -> os
           Record   { recArgOccurrences  = os } -> os
           _ -> []
         oldOcc = getOcc oldDef
+-}
 	def  = case oldDef of
                 Constructor{ conPars = np, conData = d } -> return $
                   oldDef { conPars = np - size ts, conData = copyName d }
                 Datatype{ dataPars = np, dataCons = cs } -> return $
                   oldDef { dataPars = np - size ts, dataClause = Just cl, dataCons = map copyName cs
-                         , dataArgOccurrences = drop (length ts) oldOcc }
+                         {- , dataArgOccurrences = drop (length ts) oldOcc -} }
                 Record{ recPars = np, recConType = t, recTel = tel } -> return $
                   oldDef { recPars = np - size ts, recClause = Just cl
                          , recConType = apply t ts, recTel = apply tel ts
-                         , recArgOccurrences = drop (length ts) oldOcc
+                         {- , recArgOccurrences = drop (length ts) oldOcc -}
                          }
 		_ -> do
-                  cc <- compileClauses True [cl]
+                  cc <- compileClauses Nothing [cl] -- Andreas, 2012-10-07 non need for record pattern translation
                   let newDef = Function
                         { funClauses        = [cl]
                         , funCompiled       = cc
                         , funDelayed        = NotDelayed
                         , funInv            = NotInjective
+{-
                         , funPolarity       = []
                         , funArgOccurrences = drop (length ts') oldOcc
+-}
+                        , funMutual         = mutual
                         , funAbstr          = ConcreteDef
                         , funProjection     = proj
                         , funStatic         = False
+                        , funCopy           = True
+                        , funTerminates     = Just True
                         }
                   reportSLn "tc.mod.apply" 80 $ "new def for " ++ show x ++ "\n  " ++ show newDef
                   return newDef
                   where
+                    mutual = case oldDef of
+                      Function{funMutual = m} -> m
+                      _ -> []
                     proj = case oldDef of
                       Function{funProjection = Just (r, n)}
                         | size ts < n -> Just (r, n - size ts)
@@ -398,7 +345,7 @@
   modifyImportedSignature (add d)
   modifySignature (add d)
   where
-    add df sig = sig { sigDefinitions = Map.adjust addDf x defs }
+    add df sig = sig { sigDefinitions = HMap.adjust addDf x defs }
       where
 	addDf def = def { defDisplay = df : defDisplay def }
 	defs	  = sigDefinitions sig
@@ -414,6 +361,7 @@
   where
     extract NoBody           = __IMPOSSIBLE__
     extract (Body (Def x _)) = x
+    extract (Body (Shared p)) = extract (Body $ derefPtr p)
     extract (Body _)         = __IMPOSSIBLE__
     extract (Bind b)         = extract (unAbs b)
 
@@ -424,7 +372,8 @@
   def <- theDef <$> getConstInfo c
   case def of
     Datatype{ dataInduction = i } -> return i
-    Record{}                      -> return Inductive
+    Record{ recRecursive = False} -> return Inductive
+    Record{ recInduction = i    } -> return i
     Constructor{ conInd = i }     -> return i
     _                             -> __IMPOSSIBLE__
 
@@ -452,7 +401,7 @@
   let defs  = sigDefinitions $ stSignature st
       idefs = sigDefinitions $ stImports st
       smash = (++) `on` maybe [] (:[])
-  in case smash (Map.lookup q defs) (Map.lookup q idefs) of
+  in case smash (HMap.lookup q defs) (HMap.lookup q idefs) of
       []  -> fail $ "Unbound name: " ++ show q ++ " " ++ showQNameId q
       [d] -> mkAbs env d
       ds  -> fail $ "Ambiguous name: " ++ show q
@@ -480,6 +429,11 @@
 
 -- | Look up the polarity of a definition.
 getPolarity :: QName -> TCM [Polarity]
+getPolarity q = defPolarity <$> getConstInfo q
+
+{- OLD
+-- | Look up the polarity of a definition.
+getPolarity :: QName -> TCM [Polarity]
 getPolarity q = do
   defn <- theDef <$> getConstInfo q
   case defn of
@@ -487,17 +441,25 @@
     Datatype{ dataPolarity = p } -> return p
     Record{ recPolarity    = p } -> return p
     _                            -> return []
+-}
 
+-- | Look up polarity of a definition and compose with polarity
+--   represented by 'Comparison'.
 getPolarity' :: Comparison -> QName -> TCM [Polarity]
-getPolarity' CmpEq _  = return []
-getPolarity' CmpLeq q = getPolarity q
+getPolarity' CmpEq  q = map (composePol Invariant) <$> getPolarity q -- return []
+getPolarity' CmpLeq q = getPolarity q -- composition with Covariant is identity
 
 -- | Set the polarity of a definition.
 setPolarity :: QName -> [Polarity] -> TCM ()
+setPolarity q pol = modifySignature $ updateDefinition q $ updateDefPolarity $ const pol
+
+{- OLD
+-- | Set the polarity of a definition.
+setPolarity :: QName -> [Polarity] -> TCM ()
 setPolarity q pol = do
   modifySignature setP
   where
-    setP sig = sig { sigDefinitions = Map.adjust setPx q defs }
+    setP sig = sig { sigDefinitions = HMap.adjust setPx q defs }
       where
 	setPx def = def { theDef = setPd $ theDef def }
         setPd d   = case d of
@@ -506,24 +468,57 @@
           Record{}   -> d { recPolarity  = pol }
           _          -> d
 	defs	  = sigDefinitions sig
+-}
 
+-- | Return a finite list of argument occurrences.
+getArgOccurrences :: QName -> TCM [Occurrence]
+getArgOccurrences d = defArgOccurrences <$> getConstInfo d
+
+{- OLD
+-- | Return a finite list of argument occurrences.
+getArgOccurrences :: QName -> TCM [Occurrence]
+getArgOccurrences d = do
+  def <- theDef <$> getConstInfo d
+  return $ getArgOccurrences_ def
+
+getArgOccurrences_ :: Defn -> [Occurrence]
+getArgOccurrences_ def = case def of
+    Function { funArgOccurrences  = os } -> os
+    Datatype { dataArgOccurrences = os } -> os
+    Record   { recArgOccurrences  = os } -> os
+    Constructor{}                        -> [] -- repeat StrictPos
+    _                                    -> [] -- repeat Mixed
+-}
+
 getArgOccurrence :: QName -> Nat -> TCM Occurrence
 getArgOccurrence d i = do
+  def <- getConstInfo d
+  return $ case theDef def of
+    Constructor{} -> StrictPos
+    _             -> (defArgOccurrences def ++ repeat Mixed) !! i
+
+setArgOccurrences :: QName -> [Occurrence] -> TCM ()
+setArgOccurrences d os =
+  modifySignature $ updateDefinition d $ updateDefArgOccurrences $ const os
+
+{- OLD
+getArgOccurrence :: QName -> Nat -> TCM Occurrence
+getArgOccurrence d i = do
   def <- theDef <$> getConstInfo d
   return $ case def of
     Function { funArgOccurrences  = os } -> look i os
     Datatype { dataArgOccurrences = os } -> look i os
     Record   { recArgOccurrences  = os } -> look i os
-    Constructor{}                        -> Positive
-    _                                    -> Negative
+    Constructor{}                        -> StrictPos
+    _                                    -> Mixed
   where
-    look i os = (os ++ repeat Negative) !! fromIntegral i
+    look i os = (os ++ repeat Mixed) !! fromIntegral i
 
 setArgOccurrences :: QName -> [Occurrence] -> TCM ()
 setArgOccurrences d os =
   modifySignature setO
   where
-    setO sig = sig { sigDefinitions = Map.adjust setOx d defs }
+    setO sig = sig { sigDefinitions = HMap.adjust setOx d defs }
       where
 	setOx def = def { theDef = setOd $ theDef def }
         setOd d   = case d of
@@ -532,8 +527,31 @@
           Record{}   -> d { recArgOccurrences  = os }
           _          -> d
 	defs	  = sigDefinitions sig
+-}
 
+-- | Get the mutually recursive identifiers.
+getMutual :: QName -> TCM [QName]
+getMutual d = do
+  def <- theDef <$> getConstInfo d
+  return $ case def of
+    Function {  funMutual = m } -> m
+    Datatype { dataMutual = m } -> m
+    Record   {  recMutual = m } -> m
+    _ -> []
 
+-- | Set the mutually recursive identifiers.
+setMutual :: QName -> [QName] -> TCM ()
+setMutual d m = modifySignature $ updateDefinition d $ updateTheDef $ \ def ->
+  case def of
+    Function{} -> def { funMutual = m }
+    Datatype{} -> def {dataMutual = m }
+    Record{}   -> def { recMutual = m }
+    _          -> __IMPOSSIBLE__
+
+-- | Check whether two definitions are mutually recursive.
+mutuallyRecursive :: QName -> QName -> TCM Bool
+mutuallyRecursive d d' = (d `elem`) <$> getMutual d'
+
 -- | Look up the number of free variables of a section. This is equal to the
 --   number of parameters if we're currently inside the section and 0 otherwise.
 getSecFreeVars :: ModuleName -> TCM Nat
@@ -569,8 +587,8 @@
   verboseS "tc.sig.inst" 30 $ do
     ctx <- getContext
     m   <- currentModule
-    liftIO $ LocIO.putStrLn $ "instDef in " ++ show m ++ ": " ++ show (defName d) ++ " " ++
-			unwords (map show . take (size vs) . reverse . map (fst . unArg) $ ctx)
+    reportSLn "" 0 $ "instDef in " ++ show m ++ ": " ++ show (defName d) ++ " " ++
+			unwords (map show . take (size vs) . reverse . map (fst . unDom) $ ctx)
   return $ d `apply` vs
 
 -- | Give the abstract view of a definition.
@@ -585,7 +603,10 @@
 
 -- | Enter abstract mode. Abstract definition in the current module are transparent.
 inAbstractMode :: TCM a -> TCM a
-inAbstractMode = local $ \e -> e { envAbstractMode = AbstractMode }
+inAbstractMode = local $ \e -> e { envAbstractMode = AbstractMode,
+                                   envAllowDestructiveUpdate = False }
+                                    -- Allowing destructive updates when seeing through
+                                    -- abstract may break the abstraction.
 
 -- | Not in abstract mode. All abstract definitions are opaque.
 inConcreteMode :: TCM a -> TCM a
@@ -593,7 +614,10 @@
 
 -- | Ignore abstract mode. All abstract definitions are transparent.
 ignoreAbstractMode :: TCM a -> TCM a
-ignoreAbstractMode = local $ \e -> e { envAbstractMode = IgnoreAbstractMode }
+ignoreAbstractMode = local $ \e -> e { envAbstractMode = IgnoreAbstractMode,
+                                       envAllowDestructiveUpdate = False }
+                                       -- Allowing destructive updates when ignoring
+                                       -- abstract may break the abstraction.
 
 -- | Check whether a name might have to be treated abstractly (either if we're
 --   'inAbstractMode' or it's not a local name). Returns true for things not
diff --git a/src/full/Agda/TypeChecking/Monad/SizedTypes.hs b/src/full/Agda/TypeChecking/Monad/SizedTypes.hs
--- a/src/full/Agda/TypeChecking/Monad/SizedTypes.hs
+++ b/src/full/Agda/TypeChecking/Monad/SizedTypes.hs
@@ -1,75 +1,224 @@
-
+{-# LANGUAGE CPP, TupleSections, DeriveFunctor #-}
 module Agda.TypeChecking.Monad.SizedTypes where
 
 import Control.Applicative
 import Control.Monad.Error
 
 import Agda.Interaction.Options
+
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+
 import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Monad.Options
 import Agda.TypeChecking.Monad.Builtin
+-- import Agda.TypeChecking.Reduce -- cyclic
 import Agda.TypeChecking.Substitute
+
 import Agda.Utils.Monad
+import Agda.Utils.Impossible
+#include "../../undefined.h"
 
--- | Check if a type is the 'primSize' type. The argument should be 'reduce'd.
+------------------------------------------------------------------------
+-- * Testing for type 'Size'
+------------------------------------------------------------------------
 
-isSizeType :: Type -> TCM Bool
+-- | Result of querying whether size variable @i@ is bounded by another
+--   size.
+data BoundedSize
+  =  BoundedLt Term -- ^ yes @i : Size< t@
+  |  BoundedNo
+     deriving (Eq, Show)
+
+-- | Check if a type is the 'primSize' type. The argument should be 'reduce'd.
+isSizeType :: Type -> TCM (Maybe BoundedSize)
 isSizeType v = isSizeTypeTest <*> pure v
 
-{- ORIGINAL CODE
-isSizeType :: Type -> TCM Bool
-isSizeType (El _ v) = liftTCM $
-  ifM (not . optSizedTypes <$> pragmaOptions) (return False) $
-  case v of
-    Def x [] -> do
-      Def size [] <- primSize
-      return $ x == size
-    _ -> return False
-  `catchError` \_ -> return False
--}
+isSizeTypeTest :: TCM (Type -> Maybe BoundedSize)
+isSizeTypeTest =
+  flip (ifM (optSizedTypes <$> pragmaOptions)) (return $ const Nothing) $ do
+    (size, sizelt) <- getBuiltinSize
+    let testType (Def d [])  | Just d == size   = Just BoundedNo
+        testType (Def d [v]) | Just d == sizelt = Just $ BoundedLt $ unArg v
+        testType _                              = Nothing
+    return $ testType . ignoreSharing . unEl
 
+getBuiltinDefName :: String -> TCM (Maybe QName)
+getBuiltinDefName s = fromDef . fmap ignoreSharing <$> getBuiltin' s
+  where
+    fromDef (Just (Def d [])) = Just d
+    fromDef _                 = Nothing
+
+getBuiltinSize :: TCM (Maybe QName, Maybe QName)
+getBuiltinSize = do
+  size   <- getBuiltinDefName builtinSize
+  sizelt <- getBuiltinDefName builtinSizeLt
+  return (size, sizelt)
+
 isSizeNameTest :: TCM (QName -> Bool)
-isSizeNameTest = liftTCM $
-  ifM (not . optSizedTypes <$> pragmaOptions) (return $ const False) $ do
-    Def size [] <- primSize
-    return (size ==)
-  `catchError` \_ -> return $ const False
+isSizeNameTest = ifM (optSizedTypes <$> pragmaOptions)
+  isSizeNameTestRaw
+  (return $ const False)
 
-isSizeTypeTest :: TCM (Type -> Bool)
-isSizeTypeTest = do
-  testName <- isSizeNameTest
-  let testType (El _ (Def d [])) = testName d
-      testType _                 = False
-  return testType
+isSizeNameTestRaw :: TCM (QName -> Bool)
+isSizeNameTestRaw = do
+  (size, sizelt) <- getBuiltinSize
+  return $ (`elem` [size, sizelt]) . Just
 
+------------------------------------------------------------------------
+-- * Constructors
+------------------------------------------------------------------------
+
 sizeType :: TCM Type
 sizeType = El (mkType 0) <$> primSize
 
-sizeSuc :: TCM (Maybe QName)
-sizeSuc = liftTCM $
+sizeSucName :: TCM (Maybe QName)
+sizeSucName = liftTCM $
   ifM (not . optSizedTypes <$> pragmaOptions) (return Nothing) $ do
-    Def x [] <- primSizeSuc
+    Def x [] <- ignoreSharing <$> primSizeSuc
     return $ Just x
   `catchError` \_ -> return Nothing
 
+sizeSuc :: Nat -> Term -> TCM Term
+sizeSuc n v = do
+  Def suc [] <- ignoreSharing <$> primSizeSuc
+  return $ iterate (sizeSuc_ suc) v !! n
+
+sizeSuc_ :: QName -> Term -> Term
+sizeSuc_ suc v = Def suc [defaultArg v]
+
+-- | Transform list of terms into a term build from binary maximum.
+sizeMax :: [Term] -> TCM Term
+sizeMax vs = case vs of
+  []  -> __IMPOSSIBLE__  -- we do not have a zero size
+  [v] -> return v
+  vs  -> do
+    Def max [] <- primSizeMax
+    return $ foldr1 (\ u v -> Def max $ map defaultArg [u,v]) vs
+
+
+------------------------------------------------------------------------
+-- * Viewing and unviewing sizes
+------------------------------------------------------------------------
+
 -- | A useful view on sizes.
 data SizeView = SizeInf | SizeSuc Term | OtherSize Term
 
--- | Compute the size view of a term. The argument should be 'reduce'd.
---   Precondition: sized types are enabled.
 sizeView :: Term -> TCM SizeView
 sizeView v = do
-  Def inf [] <- primSizeInf
-  Def suc [] <- primSizeSuc
-  case v of
+  Def inf [] <- ignoreSharing <$> primSizeInf
+  Def suc [] <- ignoreSharing <$> primSizeSuc
+  case ignoreSharing v of
     Def x []  | x == inf -> return SizeInf
     Def x [u] | x == suc -> return $ SizeSuc (unArg u)
     _                    -> return $ OtherSize v
 
+type Offset = Nat
+
+-- | A deep view on sizes.
+data DeepSizeView
+  = DSizeInf
+  | DSizeVar Nat Offset
+  | DSizeMeta MetaId Args Offset
+  | DOtherSize Term
+
+data SizeViewComparable a
+  = NotComparable
+  | YesAbove DeepSizeView a
+  | YesBelow DeepSizeView a
+  deriving (Functor)
+
+-- | @sizeViewComparable v w@ checks whether @v >= w@ (then @Left@)
+--   or @v <= w@ (then @Right@).  If uncomparable, it returns @NotComparable@.
+sizeViewComparable :: DeepSizeView -> DeepSizeView -> SizeViewComparable ()
+sizeViewComparable v w = case (v,w) of
+  (DSizeInf, _) -> YesAbove w ()
+  (_, DSizeInf) -> YesBelow w ()
+  (DSizeVar x n, DSizeVar y m) | x == y -> if n >= m then YesAbove w () else YesBelow w ()
+  _ -> NotComparable
+
+sizeViewSuc_ :: QName -> DeepSizeView -> DeepSizeView
+sizeViewSuc_ suc v = case v of
+  DSizeInf         -> DSizeInf
+  DSizeVar i n     -> DSizeVar i (n + 1)
+  DSizeMeta x vs n -> DSizeMeta x vs (n + 1)
+  DOtherSize u     -> DOtherSize $ sizeSuc_ suc u
+
+-- | @sizeViewPred k v@ decrements @v@ by @k@ (must be possible!).
+sizeViewPred :: Nat -> DeepSizeView -> DeepSizeView
+sizeViewPred 0 v = v
+sizeViewPred k v = case v of
+  DSizeInf -> DSizeInf
+  DSizeVar  i    n | n >= k -> DSizeVar  i    (n - k)
+  DSizeMeta x vs n | n >= k -> DSizeMeta x vs (n - k)
+  _ -> __IMPOSSIBLE__
+
+-- | @sizeViewOffset v@ returns the number of successors or Nothing when infty.
+sizeViewOffset :: DeepSizeView -> Maybe Offset
+sizeViewOffset v = case v of
+  DSizeInf         -> Nothing
+  DSizeVar i n     -> Just n
+  DSizeMeta x vs n -> Just n
+  DOtherSize u     -> Just 0
+
+-- | Remove successors common to both sides.
+removeSucs :: (DeepSizeView, DeepSizeView) -> (DeepSizeView, DeepSizeView)
+removeSucs (v, w) = (sizeViewPred k v, sizeViewPred k w)
+  where k = case (sizeViewOffset v, sizeViewOffset w) of
+              (Just  n, Just  m) -> min n m
+              (Just  n, Nothing) -> n
+              (Nothing, Just  m) -> m
+              (Nothing, Nothing) -> 0
+
 -- | Turn a size view into a term.
 unSizeView :: SizeView -> TCM Term
 unSizeView SizeInf       = primSizeInf
-unSizeView (SizeSuc v)   = flip apply [Arg NotHidden Relevant v] <$> primSizeSuc
+unSizeView (SizeSuc v)   = sizeSuc 1 v
 unSizeView (OtherSize v) = return v
+
+unDeepSizeView :: DeepSizeView -> TCM Term
+unDeepSizeView v = case v of
+  DSizeInf         -> primSizeInf
+  DSizeVar i     n -> sizeSuc n $ var i
+  DSizeMeta x us n -> sizeSuc n $ MetaV x us
+  DOtherSize u     -> return u
+
+------------------------------------------------------------------------
+-- * View on sizes where maximum is pulled to the top
+------------------------------------------------------------------------
+
+type SizeMaxView = [DeepSizeView]
+
+maxViewMax :: SizeMaxView -> SizeMaxView -> SizeMaxView
+maxViewMax v w = case (v,w) of
+  (DSizeInf : _, _) -> [DSizeInf]
+  (_, DSizeInf : _) -> [DSizeInf]
+  _                 -> foldr maxViewCons w v
+
+-- | @maxViewCons v ws = max v ws@.  It only adds @v@ to @ws@ if it is not
+--   subsumed by an element of @ws@.
+maxViewCons :: DeepSizeView -> SizeMaxView -> SizeMaxView
+maxViewCons _ [DSizeInf] = [DSizeInf]
+maxViewCons DSizeInf _   = [DSizeInf]
+maxViewCons v ws = case sizeViewComparableWithMax v ws of
+  NotComparable  -> v:ws
+  YesAbove _ ws' -> v:ws'
+  YesBelow{}     -> ws
+
+-- | @sizeViewComparableWithMax v ws@ tries to find @w@ in @ws@ that compares with @v@
+--   and singles this out.
+--   Precondition: @v /= DSizeInv@.
+sizeViewComparableWithMax :: DeepSizeView -> SizeMaxView -> SizeViewComparable SizeMaxView
+sizeViewComparableWithMax v ws = case ws of
+  []     -> __IMPOSSIBLE__
+  [w]    -> fmap (const []) $ sizeViewComparable v w
+  (w:ws) -> case sizeViewComparable v w of
+            NotComparable -> fmap (w:) $ sizeViewComparableWithMax v ws
+            r  -> fmap (const ws) r
+
+
+maxViewSuc_ :: QName -> SizeMaxView -> SizeMaxView
+maxViewSuc_ suc = map (sizeViewSuc_ suc)
+
+unMaxView :: SizeMaxView -> TCM Term
+unMaxView vs = sizeMax =<< mapM unDeepSizeView vs
diff --git a/src/full/Agda/TypeChecking/Monad/State.hs b/src/full/Agda/TypeChecking/Monad/State.hs
--- a/src/full/Agda/TypeChecking/Monad/State.hs
+++ b/src/full/Agda/TypeChecking/Monad/State.hs
@@ -4,12 +4,13 @@
 import Control.Applicative
 import Control.Monad.State
 import Data.Set (Set)
-import Data.Map
+import Data.Map as Map
 import qualified Data.Set as Set
 
 import Agda.Syntax.Common
 import Agda.Syntax.Scope.Base
 import qualified Agda.Syntax.Concrete.Name as C
+import Agda.Syntax.Abstract (PatternSynDefn, PatternSynDefns)
 import Agda.Syntax.Abstract.Name
 
 import Agda.TypeChecking.Monad.Base
@@ -35,6 +36,31 @@
 -- | Get the current scope.
 getScope :: TCM ScopeInfo
 getScope = gets stScope
+
+getPatternSyns :: TCM PatternSynDefns
+getPatternSyns = gets stPatternSyns
+
+setPatternSyns :: PatternSynDefns -> TCM ()
+setPatternSyns m = modify $ \s -> s { stPatternSyns = m }
+
+modifyPatternSyns :: (PatternSynDefns -> PatternSynDefns) -> TCM ()
+modifyPatternSyns f = do
+  s <- getPatternSyns
+  setPatternSyns $ f s
+
+getPatternSynImports :: TCM PatternSynDefns
+getPatternSynImports = gets stPatternSynImports
+
+lookupPatternSyn :: QName -> TCM PatternSynDefn
+lookupPatternSyn x = do
+    s <- getPatternSyns
+    case Map.lookup x s of
+        Just d  -> return d
+        Nothing -> do
+            si <- getPatternSynImports
+            case Map.lookup x si of
+                Just d  -> return d
+                Nothing -> typeError $ NotInScope [qnameToConcrete x]
 
 -- | Sets stExtLambdaTele .
 setExtLambdaTele :: Map QName (Int , Int) -> TCM ()
diff --git a/src/full/Agda/TypeChecking/Monad/Trace.hs b/src/full/Agda/TypeChecking/Monad/Trace.hs
--- a/src/full/Agda/TypeChecking/Monad/Trace.hs
+++ b/src/full/Agda/TypeChecking/Monad/Trace.hs
@@ -8,6 +8,9 @@
 import Agda.TypeChecking.Monad.Base
 import Agda.Utils.Monad
 
+import {-# SOURCE #-} Agda.Interaction.Highlighting.Generate
+  (highlightAsTypeChecked)
+
 ---------------------------------------------------------------------------
 -- * Trace
 ---------------------------------------------------------------------------
@@ -18,20 +21,72 @@
     InferDef _ _ _	      -> False
     CheckArguments _ [] _ _ _ -> False
     SetRange _ _	      -> False
+    NoHighlighting {}         -> False
     _			      -> True
 
+traceCallM :: MonadTCM tcm => tcm (Maybe r -> Call) -> tcm a -> tcm a
+traceCallM mkCall m = flip traceCall m =<< mkCall
+
 -- | Record a function call in the trace.
 {-# SPECIALIZE traceCall :: (Maybe r -> Call) -> TCM a -> TCM a #-}
 traceCall :: MonadTCM tcm => (Maybe r -> Call) -> tcm a -> tcm a
 traceCall mkCall m = do
-  let call = mkCall Nothing
-      r | getRange call /= noRange = const $ getRange call
-        | otherwise                = id
+  let call      = mkCall Nothing
+      callRange = getRange call
   cl <- liftTCM $ buildClosure call
-  let trace | interestingCall cl = local $ \e -> e { envRange = r (envRange e)
-                                                   , envCall  = Just cl }
-            | otherwise          = local $ \e -> e { envRange = r (envRange e) }
-  trace m
+  let trace = local $
+        (if interestingCall cl then
+           \e -> e { envCall = Just cl }
+         else
+           id) .
+        (if callRange /= noRange || isNoHighlighting call then
+           \e -> e { envHighlightingRange = callRange
+                   }
+         else
+           id) .
+        (if callRange /= noRange then
+           \e -> e { envRange = callRange
+                   }
+         else
+           id)
+  wrap <- ifM (do l <- envHighlightingLevel <$> ask
+                  return (l == Interactive && highlightCall call))
+              (do oldRange <- envHighlightingRange <$> ask
+                  return $ highlightAsTypeChecked oldRange callRange)
+              (return id)
+  wrap $ trace m
+  where
+  -- | Should the given call trigger interactive highlighting?
+  highlightCall call = case call of
+    CheckClause _ _ _               -> True
+    CheckPattern _ _ _ _            -> True
+    CheckLetBinding _ _             -> True
+    InferExpr _ _                   -> True
+    CheckExpr _ _ _                 -> True
+    CheckDotPattern _ _ _           -> True
+    CheckPatternShadowing _ _       -> True
+    IsTypeCall _ _ _                -> True
+    IsType_ _ _                     -> True
+    InferVar _ _                    -> True
+    InferDef _ _ _                  -> True
+    CheckArguments _ _ _ _ _        -> True
+    CheckDataDef _ _ _ _ _          -> True
+    CheckRecDef _ _ _ _ _           -> True
+    CheckConstructor _ _ _ _ _      -> True
+    CheckFunDef _ _ _ _             -> True
+    CheckPragma _ _ _               -> True
+    CheckPrimitive _ _ _ _          -> True
+    CheckIsEmpty _ _ _              -> True
+    CheckWithFunctionType _ _       -> True
+    CheckSectionApplication _ _ _ _ -> True
+    ScopeCheckExpr _ _              -> False
+    ScopeCheckDeclaration _ _       -> False
+    ScopeCheckLHS _ _ _             -> False
+    NoHighlighting _                -> True
+    SetRange _ _                    -> False
+
+  isNoHighlighting (NoHighlighting {}) = True
+  isNoHighlighting _                   = False
 
 {-# SPECIALIZE traceCall_ :: (Maybe () -> Call) -> TCM r -> TCM r #-}
 traceCall_ :: MonadTCM tcm => (Maybe () -> Call) -> tcm r -> tcm r
diff --git a/src/full/Agda/TypeChecking/Patterns/Match.hs b/src/full/Agda/TypeChecking/Patterns/Match.hs
--- a/src/full/Agda/TypeChecking/Patterns/Match.hs
+++ b/src/full/Agda/TypeChecking/Patterns/Match.hs
@@ -58,7 +58,7 @@
 matchPattern (Arg h' r' (LitP l)) arg@(Arg h r v) = do
     w <- reduceB v
     let v = ignoreBlocking w
-    case w of
+    case ignoreSharing <$> w of
 	NotBlocked (Lit l')
 	    | l == l'          -> return (Yes [], Arg h r v)
 	    | otherwise        -> return (No, Arg h r v)
@@ -66,6 +66,7 @@
 	Blocked x _            -> return (DontKnow $ Just x, Arg h r v)
 	_                      -> return (DontKnow Nothing, Arg h r v)
 
+{- Andreas, 2012-04-02 NO LONGER UP-TO-DATE
 matchPattern (Arg h' r' (ConP c _ ps))     (Arg h Irrelevant v) = do
           -- Andreas, 2010-09-07 matching a record constructor against
           -- something irrelevant will just continue matching against
@@ -73,6 +74,7 @@
 		(m, vs) <- matchPatterns ps $
                   repeat $ Arg NotHidden Irrelevant $ DontCare __IMPOSSIBLE__
 		return (m, Arg h Irrelevant $ Con c vs)
+-}
 
 matchPattern (Arg h' r' (ConP c _ ps))     (Arg h r v) =
     do	w <- traverse constructorForm =<< reduceB v
@@ -82,7 +84,7 @@
         -- 2) whatInduction c sometimes crashes because c may point to
         --    an axiom at this stage (if we are checking the
         --    projection functions for a record type).
-        w <- case w of
+        w <- case ignoreSharing <$> w of
                NotBlocked (Def f args) ->
                  unfoldDefinition True reduceB (Def f []) f args
                    -- reduceB is used here because some constructors
@@ -90,7 +92,7 @@
                    -- unfolded (due to open public).
                _ -> return w
         let v = ignoreBlocking w
-	case w of
+	case ignoreSharing <$> w of
           -- Andreas, 2010-09-07 matching a record constructor against
           -- something irrelevant will just continue matching against
           -- irrelevant stuff
diff --git a/src/full/Agda/TypeChecking/Polarity.hs b/src/full/Agda/TypeChecking/Polarity.hs
--- a/src/full/Agda/TypeChecking/Polarity.hs
+++ b/src/full/Agda/TypeChecking/Polarity.hs
@@ -1,89 +1,279 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, PatternGuards #-}
 module Agda.TypeChecking.Polarity where
 
 import Control.Applicative
 import Control.Monad.State
 import Control.Monad.Error
 import Data.List
+import Data.Traversable (traverse)
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Positivity
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Free
+import Agda.TypeChecking.Free hiding (Occurrence(..))
 import Agda.TypeChecking.Monad.Builtin
+
 import Agda.Interaction.Options
+
+import Agda.Utils.List
 import Agda.Utils.Monad
+import Agda.Utils.Permutation
 import Agda.Utils.Impossible
 import Agda.Utils.Size
 
 #include "../undefined.h"
 
-getArity :: QName -> TCM Arity
-getArity x = do
-  def <- theDef <$> getConstInfo x
-  case def of
-    Axiom{}                                 -> return 0
-    Function{ funClauses = c : _ }          -> return $ genericLength (clausePats c)
-    Function{ funClauses = [] }             -> return 0
-    Datatype{ dataPars = np, dataIxs = ni } -> return np
-    Record{ recPars = n }                   -> return n
-    Constructor{}                           -> return 0
-    Primitive{}                             -> return 0
+------------------------------------------------------------------------
+-- * Polarity lattice.
+------------------------------------------------------------------------
 
+-- | Infimum on the information lattice.
+--   'Invariant' is bottom (dominant for inf),
+--   'Nonvariant' is top (neutral for inf).
+(/\) :: Polarity -> Polarity -> Polarity
+Nonvariant /\ b = b
+a /\ Nonvariant = a
+a /\ b | a == b    = a
+       | otherwise = Invariant
+
+-- | 'Polarity' negation, swapping monotone and antitone.
+neg :: Polarity -> Polarity
+neg Covariant     = Contravariant
+neg Contravariant = Covariant
+neg Invariant     = Invariant
+neg Nonvariant    = Nonvariant
+
+-- | What is the polarity of a function composition?
+composePol :: Polarity -> Polarity -> Polarity
+composePol Nonvariant _    = Nonvariant
+composePol _ Nonvariant    = Nonvariant
+composePol Invariant _     = Invariant
+composePol Covariant x     = x
+composePol Contravariant x = neg x
+
+polFromOcc :: Occurrence -> Polarity
+polFromOcc o = case o of
+  GuardPos  -> Covariant
+  StrictPos -> Covariant
+  JustPos   -> Covariant
+  JustNeg   -> Contravariant
+  Mixed     -> Invariant
+  Unused    -> Nonvariant
+
+------------------------------------------------------------------------
+-- * Auxiliary functions
+------------------------------------------------------------------------
+
+-- | Get the next polarity from a list, 'Invariant' if empty.
+nextPolarity :: [Polarity] -> (Polarity, [Polarity])
+nextPolarity []       = (Invariant, [])
+nextPolarity (p : ps) = (p, ps)
+
+-- | Replace 'Nonvariant' by 'Invariant'.
+purgeNonvariant :: [Polarity] -> [Polarity]
+purgeNonvariant = map (\ p -> if p == Nonvariant then Invariant else p)
+
+------------------------------------------------------------------------
+-- * Computing the polarity of a symbol.
+------------------------------------------------------------------------
+
+-- | Main function of this module.
 computePolarity :: QName -> TCM ()
 computePolarity x = do
-  reportSLn "tc.polarity.set" 15 $ "Computing polarity of " ++ show x
-  n <- getArity x
+  reportSLn "tc.polarity.set" 25 $ "Computing polarity of " ++ show x
+
+  -- get basic polarity from positivity analysis
+  def      <- getConstInfo x
+  let pol0 = map polFromOcc $ defArgOccurrences def
+--  let pol0 = map polFromOcc $ getArgOccurrences_ $ theDef def
+  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from positivity: " ++ show pol0
+
+{-
+  -- get basic polarity from shape of def (arguments matched on or not?)
+  def      <- getConstInfo x
+  let usagePol = usagePolarity $ theDef def
+  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from definition form: " ++ show usagePol
+  let n = genericLength usagePol  -- n <- getArity x
   reportSLn "tc.polarity.set" 20 $ "  arity = " ++ show n
-  pol0 <- mapM getPol [0..n - 1]
 
-  -- Not very nice, but should work
-  setPolarity x $ pol0 ++ [Covariant]
-  pol1 <- sizePolarity x
+  -- refine polarity by positivity information
+  pol0 <- zipWith (/\) usagePol <$> mapM getPol [0..n - 1]
+  reportSLn "tc.polarity.set" 15 $ "Polarity of " ++ show x ++ " from positivity: " ++ show pol0
+-}
 
-  let pol = pol0 ++ pol1
+  -- compute polarity of sized types
+  pol1 <- sizePolarity x pol0
+
+  -- refine polarity again by using type information
+  let t = defType def
+  reportSDoc "tc.polarity.set" 15 $ text "Refining polarity with type " <+> prettyTCM t
+  pol <- enablePhantomTypes (theDef def) <$> dependentPolarity t pol1
   reportSLn "tc.polarity.set" 10 $ "Polarity of " ++ show x ++ ": " ++ show pol
-  setPolarity x pol
+
+  -- set the polarity in the signature
+  setPolarity x $ pol -- purgeNonvariant pol -- temporarily disable non-variance
+
+  -- make 'Nonvariant' args 'UnusedArg' in type and clause telescope
+  t <- nonvariantToUnusedArg pol t
+  modifySignature $ updateDefinition x $
+   updateTheDef (nonvariantToUnusedArgInDef pol) . updateDefType (const t)
+
+-- | Data and record parameters are used as phantom arguments all over
+--   the test suite (and possibly in user developments).
+--   @enablePhantomTypes@ turns 'Nonvariant' parameters to 'Invariant'
+--   to enable phantoms.
+enablePhantomTypes :: Defn -> [Polarity] -> [Polarity]
+enablePhantomTypes def pol = case def of
+  Datatype{ dataPars = np } -> enable np
+  Record  { recPars  = np } -> enable np
+  _                         -> pol
+  where enable np = let (pars, rest) = genericSplitAt np pol
+                    in  purgeNonvariant pars ++ rest
+
+{- UNUSED
+-- | Extract a basic approximate polarity info from the shape of definition.
+--   Arguments that are matched against get 'Invariant', others 'Nonvariant'.
+--   For data types, parameters get 'Nonvariant', indices 'Invariant'.
+usagePolarity :: Defn -> [Polarity]
+usagePolarity def = case def of
+    Axiom{}                                 -> []
+    Function{ funClauses = [] }             -> []
+    Function{ funClauses = cs }             -> usage $ map clausePats cs
+    Datatype{ dataPars = np, dataIxs = ni } -> genericReplicate np Nonvariant
+    Record{ recPars = n }                   -> genericReplicate n Nonvariant
+    Constructor{}                           -> []
+    Primitive{}                             -> []
   where
-    getPol :: Nat -> TCM Polarity
-    getPol i = do
-        o <- getArgOccurrence x i
-        case o of
-          Positive -> return Covariant
-          Negative -> return Invariant  -- Negative isn't the same as contravariant
-          Unused   -> return Invariant  -- add NonVariant?
+    usage = foldr1 (zipWith (/\)) . map (map (usagePat . unArg))
+    usagePat VarP{} = Nonvariant
+    usagePat DotP{} = Nonvariant
+    usagePat ConP{} = Invariant
+    usagePat LitP{} = Invariant
+-}
 
+-- | Make arguments 'Invariant' if the type of a not-'Nonvariant'
+--   later argument depends on it.
+dependentPolarity :: Type -> [Polarity] -> TCM [Polarity]
+dependentPolarity t []          = return []  -- all remaining are 'Invariant'
+dependentPolarity t pols@(p:ps) = do
+  t <- reduce $ unEl t
+  case ignoreSharing t of
+    Pi a b -> do
+      let c = absBody b
+      ps <- dependentPolarity c ps
+      p  <- case b of
+              Abs{} | p /= Invariant  ->
+                ifM (relevantInIgnoringNonvariant 0 c ps)
+                  (return Invariant)
+                  (return p)
+              _ -> return p
+      return $ p : ps
+    _ -> return pols
+
+-- | Check whether a variable is relevant in a type expression,
+--   ignoring domains of non-variant arguments.
+relevantInIgnoringNonvariant :: Nat -> Type -> [Polarity] -> TCM Bool
+relevantInIgnoringNonvariant i t []     = return $ i `relevantInIgnoringSortAnn` t
+relevantInIgnoringNonvariant i t (p:ps) = do
+  t <- reduce $ unEl t
+  case ignoreSharing t of
+    Pi a b -> if p /= Nonvariant && i `relevantInIgnoringSortAnn` a then return True
+              else relevantInIgnoringNonvariant (i + 1) (absBody b) ps
+    _ -> return $ i `relevantInIgnoringSortAnn` t
+
+-- * Turn polarity 'Nonvariant' into relevance 'UnusedArg'
+
+-- | Record information that an argument is unused in 'Relevance'.
+mkUnused :: Relevance -> Relevance
+mkUnused Relevant = UnusedArg   -- commenting out this line switches of 'UnusedArg' polarity machinery
+mkUnused r        = r  -- 'Irrelevant' is more informative than 'UnusedArg'.
+
+-- | Improve 'Relevance' information in a type by polarity information.
+--   'Nonvariant' becomes 'UnusedArg'.
+nonvariantToUnusedArg :: [Polarity] -> Type -> TCM Type
+nonvariantToUnusedArg []     t = return t
+nonvariantToUnusedArg (p:ps) t = do
+  t <- reduce t
+  case ignoreSharingType t of
+    El s (Pi a b) -> do
+      let a' = if p == Nonvariant then mapDomRelevance mkUnused a else a
+      El s . Pi a' <$> traverse (nonvariantToUnusedArg ps) b
+        -- we do not lift properly but bound variables do not matter for reduce
+        -- also, we do not maintain the context
+    _ -> return t
+
+-- | Propagate 'Nonvariant' 'Polarity' to 'Relevance' information in
+--   'Arg's of a defined symbol.
+nonvariantToUnusedArgInDef :: [Polarity] -> Defn -> Defn
+nonvariantToUnusedArgInDef pol def = case def of
+  Function { funClauses = cl } ->
+       def { funClauses = map (nonvariantToUnusedArgInClause pol) cl }
+  _ -> def
+
+nonvariantToUnusedArgInClause :: [Polarity] -> Clause -> Clause
+nonvariantToUnusedArgInClause pol cl@Clause{clauseTel = tel, clausePerm = perm, clausePats = ps} =
+  let adjPat p Nonvariant
+        | properlyMatching (unArg p) = __IMPOSSIBLE__ -- if we match, we cannot be Nonvariant (sanity check)
+        | otherwise                  = mapArgRelevance mkUnused p
+      adjPat p _    = p
+      -- change relevance of 'Nonvariant' arguments to 'UnusedArg'
+      -- note that the associated patterns cannot be 'ConP' or 'LitP'
+      ps'           = zipWith adjPat ps (pol ++ repeat Invariant)
+      -- get a list of 'Relevance's for the variables bound in the pattern
+      rels0         = argRelevance <$> (patternVars =<< ps')
+      -- this is the order the variables appear in the telescope
+      rels          = permute perm rels0
+      -- now improve 'Relevance' in 'Telescope' by pattern relevance
+      updateDom UnusedArg = mapDomRelevance mkUnused
+      updateDom r          = id
+      tel' = telFromList $ zipWith updateDom rels $ telToList tel
+   in cl { clausePats = ps', clauseTel = tel'}
+
+------------------------------------------------------------------------
+-- * Sized types
+------------------------------------------------------------------------
+
 -- | Hack for polarity of size indices.
-sizePolarity :: QName -> TCM [Polarity]
-sizePolarity d =
-  ifM (not . optSizedTypes <$> pragmaOptions) (return []) $ do
+sizePolarity :: QName -> [Polarity] -> TCM [Polarity]
+sizePolarity d pol0 = do
+  let exit = return pol0
+  ifM (not . optSizedTypes <$> pragmaOptions) exit $ do
   def <- getConstInfo d
   case theDef def of
     Datatype{ dataPars = np, dataCons = cons } -> do
       let TelV tel _      = telView' $ defType def
           (parTel, ixTel) = genericSplitAt np $ telToList tel
       case ixTel of
-        []                 -> return []  -- No size index
-        Arg _ _ (_, a) : _ -> ifM (not <$> isSizeType a) (return []) $ do
+        []                 -> exit  -- No size index
+        Dom _ _ (_, a) : _ -> ifM ((/= Just BoundedNo) <$> isSizeType a) exit $ do
+          -- we assume the size index to be 'Covariant' ...
+          let pol   = genericTake np pol0
+              polCo = pol ++ [Covariant]
+              polIn = pol ++ [Invariant]
+          setPolarity d $ polCo
+          -- and seek confirm it by looking at the constructor types
           let check c = do
                 t <- defType <$> getConstInfo c
                 addCtxTel (telFromList parTel) $ do
-                  let pars = reverse [ defaultArg $ Var i [] | i <- [0..np - 1] ]
+--OLD:                  let pars = reverse [ defaultArg $ var i | i <- [0..np - 1] ]
+                  let pars = map (defaultArg . var) $ downFrom np
                   TelV conTel target <- telView =<< (t `piApplyM` pars)
                   case conTel of
                     EmptyTel  -> return False  -- no size argument
                     ExtendTel arg  tel ->
-                      ifM (not <$> isSizeType (unArg arg)) (return False) $ do -- also no size argument
+                      ifM ((/= Just BoundedNo) <$> isSizeType (unDom arg)) (return False) $ do -- also no size argument
                         -- First constructor argument has type Size
 
-                        -- check only positive occurences in tel
+                        -- check that only positive occurences in tel
                         isPos <- underAbstraction arg tel $ \tel -> do
-                          pols <- zipWithM polarity [0..] $ map (snd . unArg) $ telToList tel
-                          return $ all (== Covariant) pols
+                          pols <- zipWithM polarity [0..] $ map (snd . unDom) $ telToList tel
+                          return $ all (`elem` [Nonvariant, Covariant]) pols
 
                         -- check that the size argument appears in the
                         -- right spot in the target type
@@ -92,49 +282,45 @@
 
                         return $ isPos && isLin
 
-          ifM (and <$> mapM check cons)
-              (return [Covariant])
-              (return [Invariant])
-    _ -> return []
+          ifM (andM $ map check cons)
+              (return polCo) -- yes, we have a sized type here
+              (return polIn) -- no, does not conform to the rules of sized types
+    _ -> exit
 
 checkSizeIndex :: Nat -> Nat -> Type -> TCM Bool
-checkSizeIndex np i (El _ (Def _ args)) = do
-  let excl = not $ freeIn i (pars ++ ixs)
-  s <- sizeView ix
-  case s of
-    SizeSuc (Var j []) -> return $ and [ excl, i == j ]
-    _                  -> return False
-  where
-    (pars, Arg _ _ ix : ixs) = genericSplitAt np args
-checkSizeIndex _ _ _ = __IMPOSSIBLE__
-
-(/\) :: Polarity -> Polarity -> Polarity
-a /\ b | a == b    = a
-       | otherwise = Invariant
-
-neg :: Polarity -> Polarity
-neg Covariant     = Contravariant
-neg Contravariant = Covariant
-neg Invariant     = Invariant
-
-composePol :: Polarity -> Polarity -> Polarity
-composePol Invariant _     = Invariant
-composePol Covariant x     = x
-composePol Contravariant x = neg x
+checkSizeIndex np i a =
+  case ignoreSharing $ unEl a of
+    Def _ args -> do
+      let excl = not $ freeIn i (pars ++ ixs)
+      s <- sizeView ix
+      case s of
+        SizeSuc v | Var j [] <- ignoreSharing v
+          -> return $ and [ excl, i == j ]
+        _ -> return False
+      where
+        (pars, Arg _ _ ix : ixs) = genericSplitAt np args
+    _ -> __IMPOSSIBLE__
 
+-- | @polarities i a@ computes the list of polarities of de Bruijn index @i@
+--   in syntactic entity @a@.
 class HasPolarity a where
   polarities :: Nat -> a -> TCM [Polarity]
 
+-- | @polarity i a@ computes the polarity of de Bruijn index @i@
+--   in syntactic entity @a@ by taking the infimum of all 'polarities'.
 polarity :: HasPolarity a => Nat -> a -> TCM Polarity
 polarity i x = do
   ps <- polarities i x
   case ps of
-    [] -> return Covariant
+    [] -> return Nonvariant
     ps -> return $ foldr1 (/\) ps
 
 instance HasPolarity a => HasPolarity (Arg a) where
   polarities i = polarities i . unArg
 
+instance HasPolarity a => HasPolarity (Dom a) where
+  polarities i = polarities i . unDom
+
 instance HasPolarity a => HasPolarity (Abs a) where
   polarities i (Abs   _ b) = polarities (i + 1) b
   polarities i (NoAbs _ v) = polarities i v
@@ -149,9 +335,13 @@
   polarities i (El _ v) = polarities i v
 
 instance HasPolarity Term where
-  polarities i v = case v of
-    Var n ts  | n == i -> (Covariant :) <$> polarities i ts
-              | otherwise -> polarities i ts
+  polarities i v = do
+   v <- instantiate v
+   case v of
+    -- Andreas, 2012-09-06: taking the polarities of the arguments
+    -- without taking the variance of the function into account seems wrong.
+    Var n ts  | n == i -> (Covariant :) . map (const Invariant) <$> polarities i ts
+              | otherwise -> map (const Invariant) <$> polarities i ts
     Lam _ t    -> polarities i t
     Lit _      -> return []
     Level l    -> polarities i l
@@ -159,11 +349,12 @@
       pols <- getPolarity x
       let compose p ps = map (composePol p) ps
       concat . zipWith compose (pols ++ repeat Invariant) <$> mapM (polarities i) ts
-    Con _ ts   -> polarities i ts
+    Con _ ts   -> polarities i ts -- constructors can be seen as monotone in all args.
     Pi a b     -> (++) <$> (map neg <$> polarities i a) <*> polarities i b
-    Sort _     -> return []
+    Sort s     -> return [] -- polarities i s -- return []
     MetaV _ ts -> map (const Invariant) <$> polarities i ts
-    DontCare _ -> return []
+    Shared p   -> polarities i $ derefPtr p
+    DontCare t -> polarities i t -- return []
 
 instance HasPolarity Level where
   polarities i (Max as) = polarities i as
@@ -174,7 +365,7 @@
 
 instance HasPolarity LevelAtom where
   polarities i l = case l of
-    MetaLevel _ vs   -> map (const Invariant) <$> polarities i l
+    MetaLevel _ vs   -> map (const Invariant) <$> polarities i vs
     BlockedLevel _ v -> polarities i v
     NeutralLevel v   -> polarities i v
     UnreducedLevel v -> polarities i v
diff --git a/src/full/Agda/TypeChecking/Polarity.hs-boot b/src/full/Agda/TypeChecking/Polarity.hs-boot
--- a/src/full/Agda/TypeChecking/Polarity.hs-boot
+++ b/src/full/Agda/TypeChecking/Polarity.hs-boot
@@ -5,3 +5,4 @@
 import Agda.TypeChecking.Monad.Base
 
 computePolarity :: QName -> TCM ()
+composePol      :: Polarity -> Polarity -> Polarity
diff --git a/src/full/Agda/TypeChecking/Positivity.hs b/src/full/Agda/TypeChecking/Positivity.hs
--- a/src/full/Agda/TypeChecking/Positivity.hs
+++ b/src/full/Agda/TypeChecking/Positivity.hs
@@ -1,19 +1,27 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, FlexibleInstances, FlexibleContexts,
+             UndecidableInstances #-}
 
 -- | Check that a datatype is strictly positive.
 module Agda.TypeChecking.Positivity where
 
 import Control.Applicative hiding (empty)
+import Control.DeepSeq
+import Control.Monad.Reader
+
 import Data.Set (Set)
 import qualified Data.Set as Set
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.List as List
+import Data.Maybe (mapMaybe)
 
 import Agda.Syntax.Position
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+import Agda.TypeChecking.Datatypes (isDataOrRecordType, DataOrRecord(..))
+import Agda.TypeChecking.Records (unguardedRecord, recursiveRecord)
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin (primInf, CoinductionKit(..), coinductionKit)
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Substitute
@@ -21,6 +29,7 @@
 import Agda.Utils.Impossible
 import Agda.Utils.Permutation
 import Agda.Utils.Size
+import Agda.Utils.List
 import Agda.Utils.Monad
 import Agda.Utils.SemiRing
 import qualified Agda.Utils.Graph as Graph
@@ -28,49 +37,87 @@
 
 #include "../undefined.h"
 
--- | Check that the datatypes in the given mutual block
---   are strictly positive.
-checkStrictlyPositive :: MutualId -> TCM ()
-checkStrictlyPositive mi = do
-  qs <- lookupMutualBlock mi
+-- | Check that the datatypes in the mutual block containing the given
+-- declarations are strictly positive.
+checkStrictlyPositive :: Set QName -> TCM ()
+checkStrictlyPositive qs = disableDestructiveUpdate $ do
+  -- compute the occurrence graph for qs
   reportSDoc "tc.pos.tick" 100 $ text "positivity of" <+> prettyTCM (Set.toList qs)
-  g  <- buildOccurrenceGraph qs
+  g <- Graph.filterEdges (\ (Edge o _) -> o /= Unused) <$> buildOccurrenceGraph qs
   let gstar = Graph.transitiveClosure $ fmap occ g
   reportSDoc "tc.pos.tick" 100 $ text "constructed graph"
   reportSLn "tc.pos.graph" 5 $ "Positivity graph: N=" ++ show (size $ Graph.nodes g) ++
                                " E=" ++ show (length $ Graph.edges g)
   reportSDoc "tc.pos.graph" 10 $ vcat
     [ text "positivity graph for" <+> prettyTCM (Set.toList qs)
-    , nest 2 $ prettyGraph g
+    , nest 2 $ prettyTCM g
     ]
+  reportSDoc "tc.pos.graph" 50 $ vcat
+    [ text "transitive closure of positivity graph for" <+>
+      prettyTCM (Set.toList qs)
+    , nest 2 $ prettyTCM gstar
+    ]
+
+  -- remember argument occurrences for qs in the signature
   mapM_ (setArgs gstar) $ Set.toList qs
   reportSDoc "tc.pos.tick" 100 $ text "set args"
+
+  -- check positivity for all strongly connected components of the graph for qs
+  let sccs = Graph.sccs gstar
+  reportSDoc "tc.pos.graph.sccs" 15 $ text $ "  sccs = " ++ show sccs
+  forM_ sccs $ \ scc -> setMut [ q | DefNode q <- scc ]
   whenM positivityCheckEnabled $
     mapM_ (checkPos g) $ Set.toList qs
   reportSDoc "tc.pos.tick" 100 $ text "checked positivity"
+
   where
-    checkPos g q = whenM (isDatatype q) $ do
+    checkPos g q = do
+      -- we check positivity only for data or record definitions
+      whenJustM (isDatatype q) $ \ dr -> do
       reportSDoc "tc.pos.check" 10 $ text "Checking positivity of" <+> prettyTCM q
-      case Graph.findPath isNegative (DefNode q) (DefNode q) g of
-        Nothing                  -> return ()
-        Just (Edge Positive _)   -> __IMPOSSIBLE__
-        Just (Edge Unused _)     -> __IMPOSSIBLE__
-        Just (Edge Negative how) -> do
+      -- get all pathes from q to q that exhibit a non-strictly occurrence
+      -- or, in case of records, any recursive occurrence
+      let critical IsData   = \ (Edge o _) -> o <= JustPos
+          critical IsRecord = \ (Edge o _) -> o /= Unused
+          loops      = filter (critical dr) $ Graph.allPaths (critical dr) (DefNode q) (DefNode q) g
+
+      -- if we have a negative loop, raise error
+      forM_ [ how | Edge o how <- loops, o <= JustPos ] $ \ how -> do
           err <- fsep $
             [prettyTCM q] ++ pwords "is not strictly positive, because it occurs" ++
             [prettyTCM how]
           setCurrentRange (getRange q) $ typeError $ GenericError (show err)
 
+      -- if we find an unguarded record, mark it as such
+      (\ just noth -> maybe noth just (mhead [ how | Edge o how <- loops, o <= StrictPos ]))
+        (\ how -> do
+          reportSDoc "tc.pos.record" 5 $ sep
+            [ prettyTCM q <+> text "is not guarded, because it occurs"
+            , prettyTCM how
+            ]
+          unguardedRecord q) $
+        -- otherwise, if the record is recursive, mark it as well
+        forM_ (take 1 [ how | Edge GuardPos how <- loops ]) $ \ how -> do
+          reportSDoc "tc.pos.record" 5 $ sep
+            [ prettyTCM q <+> text "is recursive, because it occurs"
+            , prettyTCM how
+            ]
+          recursiveRecord q
+
     occ (Edge o _) = o
-    isNegative (Edge o _) = o == Negative
 
     isDatatype q = do
       def <- theDef <$> getConstInfo q
       return $ case def of
-        Datatype{dataClause = Nothing} -> True
-        Record  {recClause  = Nothing} -> True
-        _ -> False
+        Datatype{dataClause = Nothing} -> Just IsData
+        Record  {recClause  = Nothing} -> Just IsRecord
+        _ -> Nothing
 
+    -- Set the mutually recursive identifiers for a SCC.
+    setMut []  = return ()  -- nothing to do
+    setMut [q] = return ()  -- no mutual recursion
+    setMut qs  = forM_ qs $ \ q -> setMutual q (delete q qs)
+
     -- Set the polarity of the arguments to a definition
     setArgs g q = do
       reportSDoc "tc.pos.args" 5 $ text "checking args of" <+> prettyTCM q
@@ -78,21 +125,20 @@
       let nArgs = maximum $ n :
                     [ i + 1 | (ArgNode q1 i) <- Set.toList $ Graph.nodes g
                     , q1 == q ]
-          findOcc i = case Graph.lookup (ArgNode q i) (DefNode q) g of
-              Nothing -> Unused
-              Just Negative -> Negative
-              Just Positive -> Positive
-              Just Unused   -> Unused
+          findOcc i = maybe Unused id $ Graph.lookup (ArgNode q i) (DefNode q) g
           args = map findOcc [0..nArgs - 1]
       reportSDoc "tc.pos.args" 10 $ sep
         [ text "args of" <+> prettyTCM q <+> text "="
         , nest 2 $ prettyList $ map (text . show) args
         ]
-      setArgOccurrences q args
+      -- The list args can take a long time to compute, but contains
+      -- small elements, and is stored in the interface (right?), so
+      -- it is computed deep-strictly.
+      setArgOccurrences q $!! args
 
 getDefArity def = case theDef def of
   Function{ funClauses = cs, funProjection = proj } -> do
-    let dropped = maybe 0 (fromIntegral . subtract 1 . snd) proj
+    let dropped = maybe 0 (subtract 1 . snd) proj
     subtract dropped . arity <$> instantiateFull (defType def)
   Datatype{ dataPars = n } -> return n
   Record{ recPars = n }    -> return n
@@ -100,27 +146,53 @@
 
 -- Specification of occurrences -------------------------------------------
 
+-- | 'Occurrence' is a complete lattice with least element 'Mixed'
+--   and greatest element 'Unused'.
+--
+--   It forms a commutative semiring where 'oplus' is meet (glb)
+--   and 'otimes' is composition. Both operations are idempotent.
+--
+--   For 'oplus', 'Unused' is neutral (zero) and 'Mixed' is dominant.
+--   For 'otimes', 'StrictPos' is neutral (one) and 'Unused' is dominant.
+
 instance SemiRing Occurrence where
-  oplus Negative _        = Negative
-  oplus _ Negative        = Negative
-  oplus Unused o          = o
+  oplus Mixed _           = Mixed     -- dominant
+  oplus _ Mixed           = Mixed
+  oplus Unused o          = o         -- neutral
   oplus o Unused          = o
-  oplus Positive Positive = Positive
+  oplus JustNeg  JustNeg  = JustNeg
+  oplus JustNeg  o        = Mixed     -- negative and any form of positve
+  oplus o        JustNeg  = Mixed
+  oplus GuardPos o        = o         -- second-rank neutral
+  oplus o GuardPos        = o
+  oplus StrictPos o       = o         -- third-rank neutral
+  oplus o StrictPos       = o
+  oplus JustPos JustPos   = JustPos
 
-  otimes Unused _          = Unused
-  otimes _ Unused          = Unused
-  otimes Negative _        = Negative
-  otimes _ Negative        = Negative
-  otimes Positive Positive = Positive
+  otimes Unused _            = Unused     -- dominant
+  otimes _ Unused            = Unused
+  otimes Mixed _             = Mixed      -- second-rank dominance
+  otimes _ Mixed             = Mixed
+  otimes JustNeg JustNeg     = JustPos
+  otimes JustNeg _           = JustNeg    -- third-rank dominance
+  otimes _ JustNeg           = JustNeg
+  otimes JustPos _           = JustPos    -- fourth-rank dominance
+  otimes _ JustPos           = JustPos
+  otimes GuardPos _          = GuardPos   -- _ `elem` [StrictPos, GuardPos]
+  otimes _ GuardPos          = GuardPos
+  otimes StrictPos StrictPos = StrictPos  -- neutral
 
 -- | Description of an occurrence.
 data OccursWhere
   = LeftOfArrow OccursWhere
   | DefArg QName Nat OccursWhere -- ^ in the nth argument of a define constant
+  | UnderInf OccursWhere         -- ^ in the principal argument of built-in ∞
   | VarArg OccursWhere           -- ^ as an argument to a bound variable
   | MetaArg OccursWhere          -- ^ as an argument of a metavariable
   | ConArgType QName OccursWhere -- ^ in the type of a constructor
+  | IndArgType QName OccursWhere -- ^ in a datatype index of a constructor
   | InClause Nat OccursWhere     -- ^ in the nth clause of a defined function
+  | Matched OccursWhere          -- ^ matched against in a clause of a defined function
   | InDefOf QName OccursWhere    -- ^ in the definition of a constant
   | Here
   | Unknown                      -- ^ an unknown position (treated as negative)
@@ -131,10 +203,13 @@
 Unknown         >*< o  = Unknown
 LeftOfArrow o1  >*< o2 = LeftOfArrow (o1 >*< o2)
 DefArg d i o1   >*< o2 = DefArg d i (o1 >*< o2)
+UnderInf o1     >*< o2 = UnderInf (o1 >*< o2)
 VarArg o1       >*< o2 = VarArg (o1 >*< o2)
 MetaArg o1      >*< o2 = MetaArg (o1 >*< o2)
 ConArgType c o1 >*< o2 = ConArgType c (o1 >*< o2)
+IndArgType c o1 >*< o2 = IndArgType c (o1 >*< o2)
 InClause i o1   >*< o2 = InClause i (o1 >*< o2)
+Matched o1      >*< o2 = Matched (o1 >*< o2)
 InDefOf d o1    >*< o2 = InDefOf d (o1 >*< o2)
 
 instance PrettyTCM OccursWhere where
@@ -160,10 +235,15 @@
         LeftOfArrow o  -> explain o $ pwords "to the left of an arrow"
         DefArg q i o   -> explain o $ pwords "in the" ++ nth i ++ pwords "argument to" ++
                                       [prettyTCM q]
+        UnderInf o     -> do
+          Def inf _ <- ignoreSharing <$> primInf  -- this cannot fail if an 'UnderInf' has been generated
+          explain o $ pwords "under" ++ [prettyTCM inf]
         VarArg o       -> explain o $ pwords "in an argument to a bound variable"
         MetaArg o      -> explain o $ pwords "in an argument to a metavariable"
         ConArgType c o -> explain o $ pwords "in the type of the constructor" ++ [prettyTCM c]
+        IndArgType c o -> explain o $ pwords "in an index of the target type of the constructor" ++ [prettyTCM c]
         InClause i o   -> explain o $ pwords "in the" ++ nth i ++ pwords "clause"
+        Matched o      -> explain o $ pwords "as matched against"
         InDefOf d o    -> explain o $ pwords "in the definition of" ++ [prettyTCM d]
 
       explain o ds = prettyO o $$ fsep ds
@@ -173,22 +253,28 @@
         Here           -> Here
         Unknown        -> Unknown
         DefArg q i o   -> DefArg q i   $ maxOneLeftOfArrow o
+        UnderInf o     -> UnderInf     $ maxOneLeftOfArrow o
         InDefOf d o    -> InDefOf d    $ maxOneLeftOfArrow o
         VarArg o       -> VarArg       $ maxOneLeftOfArrow o
         MetaArg o      -> MetaArg      $ maxOneLeftOfArrow o
         ConArgType c o -> ConArgType c $ maxOneLeftOfArrow o
+        IndArgType c o -> IndArgType c $ maxOneLeftOfArrow o
         InClause i o   -> InClause i   $ maxOneLeftOfArrow o
+        Matched o      -> Matched      $ maxOneLeftOfArrow o
 
       purgeArrows o = case o of
         LeftOfArrow o -> purgeArrows o
         Here           -> Here
         Unknown        -> Unknown
         DefArg q i o   -> DefArg q i   $ purgeArrows o
+        UnderInf o     -> UnderInf     $ purgeArrows o
         InDefOf d o    -> InDefOf d    $ purgeArrows o
         VarArg o       -> VarArg       $ purgeArrows o
         MetaArg o      -> MetaArg      $ purgeArrows o
         ConArgType c o -> ConArgType c $ purgeArrows o
+        IndArgType c o -> IndArgType c $ purgeArrows o
         InClause i o   -> InClause i   $ purgeArrows o
+        Matched o      -> Matched      $ purgeArrows o
 
       splitOnDef o = case o of
         Here           -> [Here]
@@ -196,10 +282,13 @@
         InDefOf d o    -> sp (InDefOf d) o
         LeftOfArrow o  -> sp LeftOfArrow o
         DefArg q i o   -> sp (DefArg q i) o
+        UnderInf o     -> sp UnderInf o
         VarArg o       -> sp VarArg o
         MetaArg o      -> sp MetaArg o
         ConArgType c o -> sp (ConArgType c) o
+        IndArgType c o -> sp (IndArgType c) o
         InClause i o   -> sp (InClause i) o
+        Matched o      -> sp Matched o
         where
           sp f o = case splitOnDef o of
             os@(InDefOf _ _:_) -> f Here : os
@@ -226,29 +315,65 @@
 here :: Item -> Occurrences
 here i = Map.singleton i [Here]
 
+-- | @onlyVarsUpTo n occs@ discards occurrences of de Bruijn index @>= n@.
+onlyVarsUpTo :: Nat -> Occurrences -> Occurrences
+onlyVarsUpTo n = Map.filterWithKey p
+  where p (AnArg i) v = i < n
+        p (ADef q)  v = True
+
+-- | Context for computing occurrences.
+data OccEnv = OccEnv
+  { vars :: [Maybe Item] -- ^ Items corresponding to the free variables.
+  , inf  :: Maybe QName  -- ^ Name for ∞ builtin.
+  }
+
+-- | Monad for computing occurrences.
+type OccM = Reader OccEnv
+
+withExtendedOccEnv :: Maybe Item -> OccM a -> OccM a
+withExtendedOccEnv i = local $ \ e -> e { vars = i : vars e }
+
+-- | Running the monad
+getOccurrences :: ComputeOccurrences a => [Maybe Item] -> a -> TCM Occurrences
+getOccurrences vars a = do
+  kit <- coinductionKit
+  return $ runReader (occurrences a) $ OccEnv vars $ fmap nameOfInf kit
+
 class ComputeOccurrences a where
-  -- | The first argument is the items corresponding to the free variables.
-  occurrences :: [Maybe Item] -> a -> Occurrences
+  occurrences :: a -> OccM Occurrences
 
 instance ComputeOccurrences Clause where
-  occurrences vars (Clause{ clausePats = ps, clauseBody = body }) =
-    walk vars (patItems ps) body
+  occurrences (Clause{ clausePats = ps0, clauseBody = body }) = do
+    let ps = map unArg ps0
+    (concatOccurs (mapMaybe matching (zip [0..] ps)) >+<) <$>
+      walk (patItems ps) body
     where
-      walk _    _         NoBody     = Map.empty
-      walk vars []        (Body v)   = occurrences vars v
-      walk vars (i : pis) (Bind b)   = walk (i : vars) pis $ absBody b
-      walk _    []        Bind{}     = __IMPOSSIBLE__
-      walk _    (_ : _)   Body{}     = __IMPOSSIBLE__
+      matching (i, p)
+        | properlyMatching p = Just $ occursAs Matched $ here $ AnArg i
+        | otherwise          = Nothing
+{-
+      matching (i, VarP{}) = Nothing
+      matching (i, DotP{}) = Nothing
+      matching (i, ConP _ Just{} _) = Nothing -- record patterns are not matches
+      matching (i, _     ) = Just (occursAs Matched $ here (AnArg i))
+-}
 
-      match i (Arg _ _ VarP{}) = Map.empty
-      match i _                = Map.singleton (AnArg i) [Unknown]
+      walk _         NoBody     = return $ Map.empty
+      walk []        (Body v)   = occurrences v
+      walk (i : pis) (Bind b)   = withExtendedOccEnv i $ walk pis $ absBody b
+      walk []        Bind{}     = __IMPOSSIBLE__
+      walk (_ : _)   Body{}     = __IMPOSSIBLE__
 
-      patItems ps = concat $ zipWith patItem [0..] $ map unArg ps
-      patItem i (VarP _) = [Just (AnArg i)]
-      patItem i p        = replicate (nVars p) (Just (AnArg i))
-        -- if we're pattern matching it's not something the positivity checker needs to worry about
-        -- Actually it is: see issue 464
+      -- @patItems ps@ creates a map from the pattern variables of @ps@
+      -- to the index of the argument they are bound in.
+      -- This map is given as a list.
+      patItems ps = concat $ zipWith patItem [0..] ps
 
+      -- @patItem i p@ replicates index @i@ as often as there are
+      -- pattern variables in @p@
+      patItem i p = replicate (nVars p) (Just (AnArg i))
+
+      -- @nVars p@ computes the number of variables bound by pattern @p@
       nVars p = case p of
         VarP{}      -> 1
         DotP{}      -> 1
@@ -256,22 +381,32 @@
         LitP{}      -> 0
 
 instance ComputeOccurrences Term where
-  occurrences vars v = case v of
-    Var i args ->
-      maybe Map.empty here (index vars $ fromIntegral i)
-      >+< occursAs VarArg (occurrences vars args)
-    Def d args   ->
-      here (ADef d) >+<
-      concatOccurs (zipWith (occursAs . DefArg d) [0..] $ map (occurrences vars) args)
-    Con c args   -> occurrences vars args
-    MetaV _ args -> occursAs MetaArg $ occurrences vars args
-    Pi a b       -> occursAs LeftOfArrow (occurrences vars a) >+<
-                    occurrences vars b
-    Lam _ b      -> occurrences vars b
-    Level l      -> occurrences vars l
-    Lit{}        -> Map.empty
-    Sort{}       -> Map.empty
-    DontCare _   -> Map.empty -- Andreas, 2011-09-09: do we need to check for negative occurrences in irrelevant positions?
+  occurrences v = case v of
+    Var i args -> do
+      vars <- asks vars
+      occs <- occurrences args
+      return $ maybe Map.empty here (index vars i)
+               >+< occursAs VarArg occs
+    Def d args   -> do
+      inf <- asks inf
+      let occsAs = if Just d /= inf then occursAs . DefArg d else \ n ->
+            -- the principal argument of builtin INF (∞) is the second (n==1)
+            -- the first is a level argument (n==0, counting from 0!)
+            if n == 1 then occursAs UnderInf else occursAs (DefArg d n)
+      occs <- mapM occurrences args
+      return $ here (ADef d) >+< concatOccurs (zipWith occsAs [0..] occs)
+    Con c args   -> occurrences args
+    MetaV _ args -> occursAs MetaArg <$> occurrences args
+    Pi a b       -> do
+      oa <- occurrences a
+      ob <- occurrences b
+      return $ occursAs LeftOfArrow oa >+< ob
+    Lam _ b      -> occurrences b
+    Level l      -> occurrences l
+    Lit{}        -> return $ Map.empty
+    Sort{}       -> return $ Map.empty
+    DontCare _   -> return $ Map.empty -- Andreas, 2011-09-09: do we need to check for negative occurrences in irrelevant positions?
+    Shared p     -> occurrences $ derefPtr p
     where
       -- Apparently some development version of GHC chokes if the
       -- following line is replaced by vs ! i.
@@ -280,38 +415,44 @@
         | otherwise     = __IMPOSSIBLE__
 
 instance ComputeOccurrences Level where
-  occurrences vars (Max as) = occurrences vars as
+  occurrences (Max as) = occurrences as
 
 instance ComputeOccurrences PlusLevel where
-  occurrences vars ClosedLevel{} = Map.empty
-  occurrences vars (Plus _ l) = occurrences vars l
+  occurrences ClosedLevel{} = return $ Map.empty
+  occurrences (Plus _ l)    = occurrences l
 
 instance ComputeOccurrences LevelAtom where
-  occurrences vars l = case l of
-    MetaLevel _ vs   -> occursAs MetaArg $ occurrences vars vs
-    BlockedLevel _ v -> occurrences vars v
-    NeutralLevel v   -> occurrences vars v
-    UnreducedLevel v -> occurrences vars v
+  occurrences l = case l of
+    MetaLevel _ vs   -> occursAs MetaArg <$> occurrences vs
+    BlockedLevel _ v -> occurrences v
+    NeutralLevel v   -> occurrences v
+    UnreducedLevel v -> occurrences v
 
 instance ComputeOccurrences Type where
-  occurrences vars (El _ v) = occurrences vars v
+  occurrences (El _ v) = occurrences v
 
 instance ComputeOccurrences a => ComputeOccurrences (Tele a) where
-  occurrences vars EmptyTel        = Map.empty
-  occurrences vars (ExtendTel a b) = occurrences vars (a, b)
+  occurrences EmptyTel        = return $ Map.empty
+  occurrences (ExtendTel a b) = occurrences (a, b)
 
 instance ComputeOccurrences a => ComputeOccurrences (Abs a) where
-  occurrences vars (Abs   _ b) = occurrences (Nothing : vars) b
-  occurrences vars (NoAbs _ b) = occurrences vars b
+  occurrences (Abs   _ b) = withExtendedOccEnv Nothing $ occurrences b
+  occurrences (NoAbs _ b) = occurrences b
 
 instance ComputeOccurrences a => ComputeOccurrences (Arg a) where
-  occurrences vars = occurrences vars . unArg
+  occurrences = occurrences . unArg
 
+instance ComputeOccurrences a => ComputeOccurrences (Dom a) where
+  occurrences = occurrences . unDom
+
 instance ComputeOccurrences a => ComputeOccurrences [a] where
-  occurrences vars = concatOccurs . map (occurrences vars)
+  occurrences vs = concatOccurs <$> mapM occurrences vs
 
 instance (ComputeOccurrences a, ComputeOccurrences b) => ComputeOccurrences (a, b) where
-  occurrences vars (x, y) = occurrences vars x >+< occurrences vars y
+  occurrences (x, y) = do
+    ox <- occurrences x
+    oy <- occurrences y
+    return $ ox >+< oy
 
 -- | Compute the occurrences in a given definition.
 computeOccurrences :: QName -> TCM Occurrences
@@ -321,24 +462,26 @@
     Function{funClauses = cs} -> do
       n  <- getDefArity def
       cs <- map (etaExpandClause n) <$> instantiateFull cs
-      return
-        $ concatOccurs
-        $ zipWith (occursAs . InClause) [0..]
-        $ map (occurrences []) cs
-    Datatype{dataClause = Just c} -> occurrences [] <$> instantiateFull c
+      concatOccurs . zipWith (occursAs . InClause) [0..] <$>
+        mapM (getOccurrences []) cs
+    Datatype{dataClause = Just c} -> getOccurrences [] =<< instantiateFull c
     Datatype{dataPars = np, dataCons = cs}       -> do
       let conOcc c = do
             a <- defType <$> getConstInfo c
-            TelV tel _ <- telView' <$> normalise a
-            let tel' = telFromList $ genericDrop np $ telToList tel
-                vars = reverse [ Just (AnArg i) | i <- [0..np - 1] ]
-            return $ occursAs (ConArgType c) $ occurrences vars tel'
+            TelV tel t <- telView' <$> normalise a
+            let indices = case unEl t of
+                            Def _ vs -> genericDrop np vs
+                            _        -> __IMPOSSIBLE__
+            let tel'    = telFromList $ genericDrop np $ telToList tel
+                vars np = map (Just . AnArg) $ downFrom np
+            (>+<) <$> (occursAs (ConArgType c) <$> getOccurrences (vars np) tel')
+                  <*> (occursAs (IndArgType c) . onlyVarsUpTo np <$> getOccurrences (vars $ size tel) indices)
       concatOccurs <$> mapM conOcc cs
-    Record{recClause = Just c} -> occurrences [] <$> instantiateFull c
+    Record{recClause = Just c} -> getOccurrences [] =<< instantiateFull c
     Record{recPars = np, recTel = tel} -> do
       let tel' = telFromList $ genericDrop np $ telToList tel
-          vars = reverse [ Just (AnArg i) | i <- [0..np - 1] ]
-      occurrences vars <$> instantiateFull tel'
+          vars = map (Just . AnArg) $ downFrom np
+      getOccurrences vars =<< instantiateFull tel'
 
     -- Arguments to other kinds of definitions are hard-wired.
     Constructor{} -> return Map.empty
@@ -361,7 +504,8 @@
     bind 0 = id
     bind n = Bind . Abs "_" . bind (n - 1)
 
-    vars = reverse [ defaultArg $ Var i [] | i <- [0..m - 1] ]
+    vars = map (defaultArg . var) $ downFrom m
+--    vars = reverse [ defaultArg $ var i | i <- [0..m - 1] ]
 
     liftBody m (Bind b)   = Bind $ fmap (liftBody m) b
     liftBody m NoBody     = bind m NoBody
@@ -381,26 +525,48 @@
   prettyTCM (DefNode q)   = prettyTCM q
   prettyTCM (ArgNode q i) = prettyTCM q <> text ("." ++ show i)
 
-prettyGraph g = vcat $ map pr $ Map.assocs $ Graph.unGraph g
-  where
-    pr (n, es) = sep
-      [ prettyTCM n
-      , nest 2 $ vcat $ map prE $ Map.assocs es
-      ]
-    prE (n, Edge o w) = prO o <+> prettyTCM n <+> fsep (pwords $ show w)
-    prO Positive = text "-[+]->"
-    prO Negative = text "-[-]->"
-    prO Unused   = text "-[ ]->"
+instance PrettyTCM Occurrence where
+  prettyTCM GuardPos  = text "-[g+]->"
+  prettyTCM StrictPos = text "-[++]->"
+  prettyTCM JustPos   = text "-[+]->"
+  prettyTCM JustNeg   = text "-[-]->"
+  prettyTCM Mixed     = text "-[*]->"
+  prettyTCM Unused    = text "-[ ]->"
 
+instance PrettyTCM n => PrettyTCM (n, Edge) where
+  prettyTCM (n, Edge o w) =
+    prettyTCM o <+> prettyTCM n <+> fsep (pwords $ show w)
+
+instance PrettyTCM n => PrettyTCM (n, Occurrence) where
+  prettyTCM (n, o) = prettyTCM o <+> prettyTCM n
+
+instance (PrettyTCM n, PrettyTCM (n, e)) => PrettyTCM (Graph n e) where
+  prettyTCM g = vcat $ map pr $ Map.assocs $ Graph.unGraph g
+    where
+      pr (n, es) = sep
+        [ prettyTCM n
+        , nest 2 $ vcat $ map prettyTCM $ Map.assocs es
+        ]
+
 data Edge = Edge Occurrence OccursWhere
   deriving (Show)
 
+-- | These operations form a semiring if we quotient by the relation
+-- \"the 'Occurrence' components are equal\".
+
 instance SemiRing Edge where
-  oplus _                   e@(Edge Negative _) = e
-  oplus e@(Edge Negative _) _                   = e
-  oplus (Edge Unused _)     e                   = e
-  oplus e                   (Edge Unused _)     = e
-  oplus (Edge Positive _)   e@(Edge Positive _) = e
+  oplus _                    e@(Edge Mixed _)     = e -- dominant
+  oplus e@(Edge Mixed _) _                        = e
+  oplus (Edge Unused _)      e                    = e -- neutral
+  oplus e                    (Edge Unused _)      = e
+  oplus (Edge JustNeg _)     e@(Edge JustNeg _)   = e
+  oplus _                    e@(Edge JustNeg w)   = Edge Mixed w
+  oplus e@(Edge JustNeg w)   _                    = Edge Mixed w
+  oplus _                    e@(Edge JustPos _)   = e -- dominates strict pos.
+  oplus e@(Edge JustPos _)   _                    = e
+  oplus _                    e@(Edge StrictPos _) = e -- dominates 'GuardPos'
+  oplus e@(Edge StrictPos _) _                    = e
+  oplus (Edge GuardPos _)    e@(Edge GuardPos _)  = e
 
   otimes (Edge o1 w1) (Edge o2 w2) = Edge (otimes o1 o2) (w1 >*< w2)
 
@@ -423,27 +589,43 @@
 --   argument is the set of names in the current mutual block.
 computeEdge :: Set QName -> OccursWhere -> TCM (Node, Edge)
 computeEdge muts o = do
-  (to, occ) <- mkEdge __IMPOSSIBLE__ Positive o
+  (to, occ) <- mkEdge __IMPOSSIBLE__ StrictPos o
   return (to, Edge occ o)
   where
     mkEdge to pol o = case o of
       Here           -> return (to, pol)
-      Unknown        -> return (to, Negative)
-      VarArg o       -> negative o
-      MetaArg o      -> negative o
+      Unknown        -> return (to, Mixed)
+      VarArg o       -> mixed o
+      MetaArg o      -> mixed o
       LeftOfArrow o  -> negative o
+      DefArg d i o   -> do
+        isDR <- isDataOrRecordType d
+        let pol' | isDR == Just IsData = GuardPos  -- a datatype is guarding
+                 | otherwise           = StrictPos
+        if Set.member d muts then mkEdge (ArgNode d i) pol' o
+         else addPol o =<< otimes pol' <$> getArgOccurrence d i
+{-
       DefArg d i o
         | Set.member d muts -> inArg d i o
         | otherwise         -> addPol o =<< getArgOccurrence d i
+-}
+      UnderInf o     -> addPol o GuardPos -- Andreas, 2012-06-09: ∞ is guarding
       ConArgType _ o -> keepGoing o
+      IndArgType _ o -> mixed o
       InClause _ o   -> keepGoing o
-      InDefOf d o    -> mkEdge (DefNode d) Positive o
+      Matched o      -> mixed o -- consider arguments matched against as used
+      InDefOf d o    -> do
+        isDR <- isDataOrRecordType d
+        let pol' | isDR == Just IsData = GuardPos  -- a datatype is guarding
+                 | otherwise           = StrictPos
+        mkEdge (DefNode d) pol' o
       where
         keepGoing     = mkEdge to pol
-        negative      = mkEdge to Negative
+        mixed         = mkEdge to Mixed
+        negative o    = mkEdge to (otimes pol JustNeg) o
         addPol o pol' = mkEdge to (otimes pol pol') o
 
         -- Reset polarity when changing the target node
         -- D: (A B -> C) generates a positive edge B --> A.1
         -- even though the context is negative.
-        inArg d i = mkEdge (ArgNode d i) Positive
+        inArg d i = mkEdge (ArgNode d i) StrictPos
diff --git a/src/full/Agda/TypeChecking/Pretty.hs b/src/full/Agda/TypeChecking/Pretty.hs
--- a/src/full/Agda/TypeChecking/Pretty.hs
+++ b/src/full/Agda/TypeChecking/Pretty.hs
@@ -10,6 +10,7 @@
 import Agda.Syntax.Translation.InternalToAbstract
 import Agda.Syntax.Translation.AbstractToConcrete
 import qualified Agda.Syntax.Abstract as A
+import qualified Agda.Syntax.Concrete as C
 import qualified Agda.Syntax.Abstract.Pretty as P
 import qualified Agda.Syntax.Concrete.Pretty as P
 
@@ -27,10 +28,12 @@
 
 type Doc = P.Doc
 
-empty, comma :: TCM Doc
+empty, comma, colon, equals :: TCM Doc
 
 empty	   = return P.empty
 comma	   = return P.comma
+colon      = return P.colon
+equals     = return P.equals
 pretty x   = return $ P.pretty x
 prettyA x  = P.prettyA x
 text :: String -> TCM Doc
@@ -42,8 +45,9 @@
 fsep ds    = P.fsep <$> sequence ds
 hsep ds    = P.hsep <$> sequence ds
 vcat ds    = P.vcat <$> sequence ds
-($$), (<>), (<+>) :: TCM Doc -> TCM Doc -> TCM Doc
+($$), ($+$), (<>), (<+>) :: TCM Doc -> TCM Doc -> TCM Doc
 d1 $$ d2   = (P.$$) <$> d1 <*> d2
+d1 $+$ d2  = (P.$+$) <$> d1 <*> d2
 d1 <> d2   = (P.<>) <$> d1 <*> d2
 d1 <+> d2  = (P.<+>) <$> d1 <*> d2
 nest n d   = P.nest n <$> d
@@ -72,6 +76,7 @@
 instance PrettyTCM a => PrettyTCM [a] where
   prettyTCM = prettyList . map prettyTCM
 
+instance PrettyTCM Nat where prettyTCM = text . show
 instance PrettyTCM Term where prettyTCM x = prettyA =<< reify x
 instance PrettyTCM Type where prettyTCM x = prettyA =<< reify x
 instance PrettyTCM Sort where prettyTCM x = prettyA =<< reify x
@@ -95,15 +100,23 @@
   prettyTCM (IsSort  a t) = text "Sort" <+> prettyTCM a <+> text ":" <+> prettyTCM t
 
 instance PrettyTCM MetaId where
-  prettyTCM = text . show
+  prettyTCM x = do
+   mn <- getMetaNameSuggestion x
+   text $ show (NamedMeta mn x)
 
 instance PrettyTCM a => PrettyTCM (Blocked a) where
   prettyTCM (Blocked x a) = text "[" <+> prettyTCM a <+> text "]" <> text (show x)
   prettyTCM (NotBlocked x) = prettyTCM x
 
-instance (Reify a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Arg a) where
+instance (Reify a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Named String a) where
     prettyTCM x = prettyA =<< reify x
 
+instance (ReifyWhen a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Arg a) where
+    prettyTCM x = prettyA =<< reify x
+
+instance (Reify a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Dom a) where
+    prettyTCM x = prettyA =<< reify x
+
 instance PrettyTCM Elim where
   prettyTCM (Apply v) = text "$" <+> prettyTCM v
   prettyTCM (Proj f)  = text "." <> prettyTCM f
@@ -111,11 +124,15 @@
 instance PrettyTCM A.Expr where
     prettyTCM = prettyA
 
+instance PrettyTCM C.Name where
+  prettyTCM = text . show
+
 instance PrettyTCM Relevance where
   prettyTCM Irrelevant = text "."
   prettyTCM NonStrict  = text ".."
   prettyTCM Relevant   = empty
   prettyTCM Forced     = empty
+  prettyTCM UnusedArg  = empty
 
 instance PrettyTCM Comparison where
   prettyTCM CmpEq  = text "=="
@@ -175,8 +192,14 @@
               OpenIFS{}  -> __IMPOSSIBLE__
               InstS{} -> __IMPOSSIBLE__
               InstV{} -> __IMPOSSIBLE__
-	FindInScope m   -> sep [ text $ "Find in scope " ++ (show m) ]
-        IsEmpty t ->
+	FindInScope m cands -> do
+            t <- getMetaType m
+            sep [ text $ "Find in scope " ++ (show m) ++ " :"
+                , nest 2 $ prettyTCM t
+                , sep $ flip map cands $ \(t,ty) ->
+                           prettyTCM t <+> text ": " <+> prettyTCM ty
+                ]
+        IsEmpty r t ->
             sep [ text "Is empty:", nest 2 $ prettyTCM t ]
 
 instance PrettyTCM Literal where
@@ -203,7 +226,7 @@
   prettyTCM (PrettyContext ctx) = P.fsep . reverse <$> pr (map ctxEntry ctx)
       where
           pr []		   = return []
-          pr (Arg h r (x,t) : ctx) = escapeContext 1 $ do
+          pr (Dom h r (x,t) : ctx) = escapeContext 1 $ do
               d    <- prettyTCM t
               x    <- prettyTCM x
               dctx <- pr ctx
diff --git a/src/full/Agda/TypeChecking/Primitive.hs b/src/full/Agda/TypeChecking/Primitive.hs
--- a/src/full/Agda/TypeChecking/Primitive.hs
+++ b/src/full/Agda/TypeChecking/Primitive.hs
@@ -41,9 +41,11 @@
 
 -- | Rewrite a literal to constructor form if possible.
 constructorForm :: Term -> TCM Term
-constructorForm v = case v of
+constructorForm v = case ignoreSharing v of
+{- 2012-04-02 changed semantics of DontCare
 -- Andreas, 2011-10-03, the following line restores IrrelevantLevel
     DontCare v                  -> constructorForm v
+-}
     Lit (LitInt r n)            -> cons primZero primSuc (Lit . LitInt r) n
 --     Level (Max [])              -> primLevelZero
 --     Level (Max [ClosedLevel n]) -> cons primLevelZero primLevelSuc (Level . Max . (:[]) . ClosedLevel) n
@@ -209,9 +211,10 @@
     fromA <- toTerm
     return $ mkList nil cons toA fromA
     where
-      isCon (Lam _ b) = isCon $ absBody b
-      isCon (Con c _) = return c
-      isCon v	    = do
+      isCon (Lam _ b)  = isCon $ absBody b
+      isCon (Con c _)  = return c
+      isCon (Shared p) = isCon (derefPtr p)
+      isCon v          = do
         d <- prettyTCM v
         typeError $ GenericError $ "expected constructor in built-in binding to " ++ show d
                         -- TODO: check this when binding the things
@@ -248,7 +251,7 @@
 fromReducedTerm :: (Term -> Maybe a) -> TCM (FromTermFunction a)
 fromReducedTerm f = return $ \t -> do
     b <- reduceB t
-    case f $ unArg (ignoreBlocking b) of
+    case f $ ignoreSharing $ unArg (ignoreBlocking b) of
 	Just x	-> return $ YesReduction x
 	Nothing	-> return $ NoReduction (reduced b)
 
@@ -264,11 +267,11 @@
   when (optSafe clo) (typeError SafeFlagPrimTrustMe)
   t    <- hPi "a" (el primLevel) $
           hPi "A" (return $ sort $ varSort 0) $
-          hPi "x" (El (varSort 1) <$> var 0) $
-          hPi "y" (El (varSort 2) <$> var 1) $
+          hPi "x" (El (varSort 1) <$> varM 0) $
+          hPi "y" (El (varSort 2) <$> varM 1) $
           El (varSort 3) <$>
-            primEquality <#> var 3 <#> var 2 <@> var 1 <@> var 0
-  Con rf [] <- primRefl
+            primEquality <#> varM 3 <#> varM 2 <@> varM 1 <@> varM 0
+  Con rf [] <- ignoreSharing <$> primRefl
   n         <- conPars . theDef <$> getConstInfo rf
   let refl x | n == 2    = Con rf [Arg Hidden Forced x]
              | n == 3    = Con rf []
@@ -422,22 +425,30 @@
 a --> b = do
     a' <- a
     b' <- b
-    return $ El (getSort a' `sLub` getSort b') $ Pi (defaultArg a') (NoAbs "_" b')
+    return $ El (getSort a' `sLub` getSort b') $ Pi (Dom NotHidden Relevant a') (NoAbs "_" b')
 
+infixr 4 .-->
+
+(.-->) :: TCM Type -> TCM Type -> TCM Type
+a .--> b = do
+    a' <- a
+    b' <- b
+    return $ El (getSort a' `sLub` getSort b') $ Pi (Dom NotHidden Irrelevant a') (NoAbs "_" b')
+
 gpi :: Hiding -> Relevance -> String -> TCM Type -> TCM Type -> TCM Type
 gpi h r name a b = do
   a <- a
   x <- freshName_ name
-  b <- addCtx x (Arg h r a) b
+  b <- addCtx x (Dom h r a) b
   return $ El (getSort a `dLub` Abs name (getSort b))
-              (Pi (Arg h r a) (Abs name b))
+              (Pi (Dom h r a) (Abs name b))
 
 hPi, nPi :: String -> TCM Type -> TCM Type -> TCM Type
 hPi = gpi Hidden Relevant
 nPi = gpi NotHidden Relevant
 
-var :: Integer -> TCM Term
-var n = return $ Var n []
+varM :: Int -> TCM Term
+varM = return . var
 
 infixl 9 <@>, <#>
 
@@ -466,10 +477,12 @@
 -- | Abbreviation: @argN = 'Arg' 'NotHidden' 'Relevant'@.
 
 argN = Arg NotHidden Relevant
+domN = Dom NotHidden Relevant
 
 -- | Abbreviation: @argH = 'Arg' 'Hidden' 'Relevant'@.
 
 argH = Arg Hidden Relevant
+domH = Dom Hidden Relevant
 
 ---------------------------------------------------------------------------
 -- * The actual primitive functions
@@ -499,7 +512,7 @@
     , "primNatPlus"	    |-> mkPrimFun2 ((+)			    :: Op Nat)
     , "primNatMinus"	    |-> mkPrimFun2 ((\x y -> max 0 (x - y)) :: Op Nat)
     , "primNatTimes"	    |-> mkPrimFun2 ((*)			    :: Op Nat)
-    , "primNatDivSucAux"    |-> mkPrimFun4 ((\k m n j -> k + div (n + m - j) (m + 1)) :: Nat -> Nat -> Nat -> Nat -> Nat)
+    , "primNatDivSucAux"    |-> mkPrimFun4 ((\k m n j -> k + div (max 0 $ n + m - j) (m + 1)) :: Nat -> Nat -> Nat -> Nat -> Nat)
     , "primNatModSucAux"    |->
         let aux :: Nat -> Nat -> Nat -> Nat -> Nat
             aux k m n j | n > j     = mod (n - j - 1) (m + 1)
@@ -567,10 +580,10 @@
 	Just p	-> liftTCM p
 	Nothing	-> typeError $ NoSuchPrimitiveFunction x
 
--- | Rebind a primitive. Assumes everything is type correct. Used when
---   importing a module with primitives.
-rebindPrimitive :: String -> TCM PrimFun
-rebindPrimitive x = do
-    PrimImpl _ pf <- lookupPrimitiveFunction x
-    bindPrimitive x pf
-    return pf
+lookupPrimitiveFunctionQ :: QName -> TCM (String, PrimitiveImpl)
+lookupPrimitiveFunctionQ q = do
+  let s = case qnameName q of
+            Name _ x _ _ -> show x
+  PrimImpl t pf <- lookupPrimitiveFunction s
+  return (s, PrimImpl t $ pf { primFunName = q })
+
diff --git a/src/full/Agda/TypeChecking/ProjectionLike.hs b/src/full/Agda/TypeChecking/ProjectionLike.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/ProjectionLike.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE CPP, PatternGuards, TypeSynonymInstances, FlexibleInstances #-}
+module Agda.TypeChecking.ProjectionLike where
+
+import Control.Monad
+
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.List
+
+import Agda.Syntax.Abstract.Name
+import Agda.Syntax.Common
+import Agda.Syntax.Internal
+import Agda.Syntax.Position
+
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Free (isBinderUsed)
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Positivity
+import Agda.TypeChecking.CompiledClause
+-- import Agda.TypeChecking.CompiledClause.Compile
+
+import Agda.TypeChecking.DropArgs
+
+import Agda.Utils.Monad
+import Agda.Utils.Size
+import Agda.Utils.Permutation
+--import Agda.Utils.Pretty
+
+#include "../undefined.h"
+import Agda.Utils.Impossible
+
+
+-- | Turn a definition into a projection if it looks like a projection.
+makeProjection :: QName -> TCM ()
+makeProjection x = inContext [] $ do
+  reportSLn "tc.proj.like" 30 $ "Considering " ++ show x ++ " for projection likeness"
+  defn <- getConstInfo x
+  case theDef defn of
+    -- Constructor-headed functions can't be projection-like (at the moment). The reason
+    -- for this is that invoking constructor-headedness will circumvent the inference of
+    -- the dropped arguments.
+    -- Nor can abstract definitions be projection-like since they won't reduce
+    -- outside the abstract block.
+    def@Function{funProjection = Nothing, funClauses = cls, funCompiled = cc0, funInv = NotInjective,
+                 funMutual = [], -- Andreas, 2012-09-28: only consider non-mutual funs (or those whose recursion status has not yet been determined)
+                 funAbstr = ConcreteDef} -> do
+      ps0 <- filterM validProj (candidateArgs [] (unEl $ defType defn))
+      reportSLn "tc.proj.like" 30 $ if null ps0 then "  no candidates found"
+                                                else "  candidates: " ++ show ps0
+      unless (null ps0) $ do
+      -- Andreas 2012-09-26: only consider non-recursive functions for proj.like.
+      -- Issue 700: problems with recursive funs. in term.checker and reduction
+      ifM recursive (reportSLn "tc.proj.like" 30 $ "recursive functions are not considered for projection-likeness") $ do
+      ps <- return $ filter (checkOccurs cls . snd) ps0
+      when (not (null ps0) && null ps) $ reportSLn "tc.proj.like" 50 $ "  occurs check failed\n    clauses = " ++ show cls
+      case reverse ps of
+        []         -> return ()
+        (d, n) : _ -> do
+          reportSLn "tc.proj.like" 10 $ show (defName defn) ++ " is projection like in argument " ++
+                                        show n ++ " for type " ++ show d
+          let cls' = map (dropArgs n) cls
+              cc   = dropArgs n cc0
+          -- cc <- compileClauses (Just (x, __IMPOSSIBLE__)) cls'
+          reportSLn "tc.proj.like" 20 $ "  rewrote clauses to\n    " ++ show cc
+          let newDef = def
+                       { funProjection     = Just (d, n + 1)
+                       , funClauses        = cls'
+                       , funCompiled       = cc
+                       , funInv            = dropArgs n $ funInv def
+                       }
+          addConstant x $ defn { defPolarity       = drop n $ defPolarity defn
+                               , defArgOccurrences = drop n $ defArgOccurrences defn
+                               , defDisplay        = []
+                               , theDef            = newDef
+                               }
+    Function{funInv = Inverse{}} ->
+      reportSLn "tc.proj.like" 30 $ "  injective functions can't be projections"
+    Function{funAbstr = AbstractDef} ->
+      reportSLn "tc.proj.like" 30 $ "  abstract functions can't be projections"
+    Function{funProjection = Just{}} ->
+      reportSLn "tc.proj.like" 30 $ "  already projection like"
+    _ -> reportSLn "tc.proj.like" 30 $ "  not a function"
+  where
+    -- @validProj (d,n)@ checks whether the head @d@ of the type of the
+    -- @n@th argument is injective in all args (i.d. being name of data/record/axiom).
+    validProj :: (QName, Int) -> TCM Bool
+    validProj (_, 0) = return False
+    validProj (d, _) = do
+      defn <- theDef <$> getConstInfo d
+      return $ case defn of
+        Datatype{} -> True
+        Record{}   -> True
+        Axiom{}    -> True
+        _          -> False
+
+    recursive = do
+      occs <- computeOccurrences x
+      let xocc = Map.lookup (ADef x) occs
+      case xocc of
+        Just (_ : _) -> return True -- recursive occurrence
+        _            -> return False
+
+    checkOccurs cls n = all (nonOccur n) cls
+
+    nonOccur n Clause{clausePerm = Perm _ p, clausePats = ps, clauseBody = b} =
+      and [ take n p == [0..n - 1]
+          , onlyMatch n ps  -- projection-like functions are only allowed to match on the eliminatee
+                            -- otherwise we may end up projecting from constructor applications, in
+                            -- which case we can't reconstruct the dropped parameters
+          , checkBody n b ]
+
+    onlyMatch n ps = all (shallowMatch . unArg) (take 1 ps1) &&
+                       noMatches (ps0 ++ drop 1 ps1)
+      where
+        (ps0, ps1) = splitAt n ps
+        shallowMatch (ConP _ _ ps) = noMatches ps
+        shallowMatch _             = True
+        noMatches = all (noMatch . unArg)
+        noMatch ConP{} = False
+        noMatch LitP{} = False
+        noMatch VarP{} = True
+        noMatch DotP{} = True
+
+    checkBody 0 _          = True
+    checkBody _ NoBody     = False    -- absurd clauses are not permitted
+    checkBody n (Bind b)   = not (isBinderUsed b) && checkBody (n - 1) (unAbs b)
+    checkBody _ Body{}     = __IMPOSSIBLE__
+
+    -- @candidateArgs [var 0,...,var(n-1)] t@ adds @(n,d)@ to the output,
+    -- if @t@ is a function-type with domain @t 0 .. (n-1)@
+    -- (the domain of @t@ is the type of the arg @n@).
+    --
+    -- This means that from the type of arg @n@ all previous arguments
+    -- can be computed by a simple matching.
+    -- (Provided the @d@ is data/record/postulate, checked in @validProj@).
+    --
+    -- E.g. f : {x : _}(y : _){z : _} -> D x y z -> ...
+    -- will return (D,3) as a candidate (amongst maybe others).
+    --
+    candidateArgs :: [Term] -> Term -> [(QName,Int)]
+    candidateArgs vs (Shared p) = candidateArgs vs $ derefPtr p
+    candidateArgs vs (Pi (Dom r h (El _ def)) b)
+      | Def d us <- ignoreSharing def,
+        vs == map unArg us = (d, length vs) : candidateRec vs b
+    candidateArgs vs (Pi _ b) = candidateRec vs b
+    candidateArgs _ _ = []
+
+    candidateRec vs NoAbs{} = []
+    candidateRec vs b       = candidateArgs (var (size vs) : vs) (unEl $ absBody b)
diff --git a/src/full/Agda/TypeChecking/ProjectionLike.hs-boot b/src/full/Agda/TypeChecking/ProjectionLike.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/ProjectionLike.hs-boot
@@ -0,0 +1,7 @@
+module Agda.TypeChecking.ProjectionLike where
+
+import Agda.Syntax.Abstract.Name (QName)
+import Agda.TypeChecking.Monad.Base
+
+makeProjection :: QName -> TCM ()
+
diff --git a/src/full/Agda/TypeChecking/Quote.hs b/src/full/Agda/TypeChecking/Quote.hs
--- a/src/full/Agda/TypeChecking/Quote.hs
+++ b/src/full/Agda/TypeChecking/Quote.hs
@@ -40,8 +40,8 @@
   sucLevel <- primLevelSuc
   lub <- primLevelMax
   el <- primAgdaTypeEl
-  Con z _ <- primZero
-  Con s _ <- primSuc
+  Con z _ <- ignoreSharing <$> primZero
+  Con s _ <- ignoreSharing <$> primSuc
   unsupported <- primAgdaTermUnsupported
   let t @@ u = apply t [defaultArg u]
       quoteHiding Hidden    = hidden
@@ -51,6 +51,7 @@
       quoteRelevance Irrelevant = irrelevant
       quoteRelevance NonStrict  = relevant
       quoteRelevance Forced     = relevant
+      quoteRelevance UnusedArg  = relevant
       quoteLit (LitInt   _ n)   = iterate suc zero !! fromIntegral n
       quoteLit _                = unsupported
       -- We keep no ranges in the quoted term, so the equality on terms
@@ -68,17 +69,19 @@
       list (a : as) = cons @@ a @@ list as
       zero = con @@ quoteName z @@ nil
       suc n = con @@ quoteName s @@ list [arg @@ visible @@ relevant @@ n]
+      quoteDom q (Dom h r t) = arg @@ quoteHiding h @@ quoteRelevance r @@ q t
       quoteArg q (Arg h r t) = arg @@ quoteHiding h @@ quoteRelevance r @@ q t
       quoteArgs ts = list (map (quoteArg quote) ts)
-      quote (Var n ts) = var @@ Lit (LitInt noRange n) @@ quoteArgs ts
+      quote (Var n ts) = var @@ Lit (LitInt noRange $ fromIntegral n) @@ quoteArgs ts
       quote (Lam h t) = lam @@ quoteHiding h @@ quote (absBody t)
       quote (Def x ts) = def @@ quoteName x @@ quoteArgs ts
       quote (Con x ts) = con @@ quoteName x @@ quoteArgs ts
-      quote (Pi t u) = pi @@ quoteArg quoteType t
+      quote (Pi t u) = pi @@ quoteDom quoteType t
                           @@ quoteType (absBody u)
       quote (Level _) = unsupported
       quote (Lit lit) = quoteLit lit
       quote (Sort s)  = sort @@ quoteSort s
+      quote (Shared p) = quote $ derefPtr p
       quote MetaV{}   = unsupported
       quote DontCare{} = unsupported -- could be exposed at some point but we have to take care
   return (quote, quoteType)
@@ -100,7 +103,7 @@
 
 isCon :: QName -> TCM Term -> TCM Bool
 isCon con tm = do t <- tm
-                  case t of
+                  case ignoreSharing t of
                     Con con' _ -> return (con == con')
                     _ -> return False
 
@@ -130,7 +133,7 @@
 instance Unquote a => Unquote (Arg a) where
   unquote t = do
     t <- reduce t
-    case t of
+    case ignoreSharing t of
       Con c [hid,rel,x] -> do
         choice
           [(c `isCon` primArgArg, Arg <$> unquoteN hid <*> unquoteN rel <*> unquoteN x)]
@@ -140,14 +143,14 @@
 instance Unquote Integer where
   unquote t = do
     t <- reduce t
-    case t of
+    case ignoreSharing t of
       Lit (LitInt _ n) -> return n
       _ -> unquoteFailed "Integer" "not a literal integer" t
 
 instance Unquote a => Unquote [a] where
   unquote t = do
     t <- reduce t
-    case t of
+    case ignoreSharing t of
       Con c [x,xs] -> do
         choice
           [(c `isCon` primCons, (:) <$> unquoteN x <*> unquoteN xs)]
@@ -161,30 +164,34 @@
 instance Unquote Hiding where
   unquote t = do
     t <- reduce t
-    case t of
+    let err = unquoteFailed "Hiding" "neither `hidden' nor `visible'" t
+    case ignoreSharing t of
       Con c [] -> do
         choice
           [(c `isCon` primHidden,  return Hidden)
           ,(c `isCon` primInstance, return Instance)
           ,(c `isCon` primVisible, return NotHidden)]
-          (unquoteFailed "Hiding" "neither `hidden' nor `visible'" t)
-      _ -> unquoteFailed "Hiding" "arity is not 0" t
+          err
+      Con c vs -> unquoteFailed "Hiding" "the value is a constructor, but its arity is not 0" t
+      _        -> err
 
 instance Unquote Relevance where
   unquote t = do
     t <- reduce t
-    case t of
+    let err = unquoteFailed "Relevance" "neither `relevant' or `irrelevant'" t
+    case ignoreSharing t of
       Con c [] -> do
         choice
           [(c `isCon` primRelevant,   return Relevant)
           ,(c `isCon` primIrrelevant, return Irrelevant)]
-          (unquoteFailed "Relevance" "neither `relevant' or `irrelevant'" t)
-      _ -> unquoteFailed "Relevance" "arity is not 0" t
+          err
+      Con c vs -> unquoteFailed "Relevance" "the value is a constructor, but its arity is not 0" t
+      _        -> err
 
 instance Unquote QName where
   unquote t = do
     t <- reduce t
-    case t of
+    case ignoreSharing t of
       Lit (LitQName _ x) -> return x
       _                  -> unquoteFailed "QName" "not a literal qname value" t
 
@@ -195,7 +202,7 @@
 instance Unquote Sort where
   unquote t = do
     t <- reduce t
-    case t of
+    case ignoreSharing t of
       Con c [] -> do
         choice
           [(c `isCon` primAgdaSortUnsupported, unquoteFailed "Sort" "unsupported sort" t)]
@@ -213,7 +220,7 @@
 instance Unquote Type where
   unquote t = do
     t <- reduce t
-    case t of
+    case ignoreSharing t of
       Con c [s, u] -> do
         choice
           [(c `isCon` primAgdaTypeEl, El <$> unquoteN s <*> unquoteN u)]
@@ -223,7 +230,7 @@
 instance Unquote Term where
   unquote t = do
     t <- reduce t
-    case t of
+    case ignoreSharing t of
       Con c [] ->
         choice
           [(c `isCon` primAgdaTermUnsupported, unquoteFailed "Term" "unsupported term" t)]
@@ -236,11 +243,11 @@
 
       Con c [x,y] ->
         choice
-          [(c `isCon` primAgdaTermVar, Var <$> unquoteN x <*> unquoteN y)
+          [(c `isCon` primAgdaTermVar, Var <$> (fromInteger <$> unquoteN x) <*> unquoteN y)
           ,(c `isCon` primAgdaTermCon, Con <$> unquoteN x <*> unquoteN y)
           ,(c `isCon` primAgdaTermDef, Def <$> unquoteN x <*> unquoteN y)
           ,(c `isCon` primAgdaTermLam, Lam <$> unquoteN x <*> unquoteN y)
-          ,(c `isCon` primAgdaTermPi,  Pi  <$> unquoteN x <*> unquoteN y)]
+          ,(c `isCon` primAgdaTermPi,  Pi  <$> (domFromArg <$> unquoteN x) <*> unquoteN y)]
           (unquoteFailed "Term" "arity 2 and none of Var, Con, Def, Lam, Pi" t)
 
       Con{} -> unquoteFailed "Term" "neither arity 0 nor 1 nor 2" t
diff --git a/src/full/Agda/TypeChecking/RecordPatterns.hs b/src/full/Agda/TypeChecking/RecordPatterns.hs
--- a/src/full/Agda/TypeChecking/RecordPatterns.hs
+++ b/src/full/Agda/TypeChecking/RecordPatterns.hs
@@ -1,10 +1,13 @@
-{-# LANGUAGE CPP, GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE CPP, PatternGuards, TupleSections, FlexibleInstances, GeneralizedNewtypeDeriving #-}
 
 -- | Code which replaces pattern matching on record constructors with
 -- uses of projection functions.
 
 module Agda.TypeChecking.RecordPatterns
   ( translateRecordPatterns
+  , translateCompiledClauses
+  , translateSplitTree
+  , recordPatternToProjections
   ) where
 
 import Control.Applicative
@@ -12,23 +15,365 @@
 import Control.Monad.Fix
 import Control.Monad.Reader
 import Control.Monad.State
+
 import Data.List
+import Data.Map (Map)
+import qualified Data.Map as Map
+import qualified Data.Traversable as Trav
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+
+import Agda.TypeChecking.CompiledClause
+import Agda.TypeChecking.Coverage.SplitTree
+import Agda.TypeChecking.Datatypes
+import Agda.TypeChecking.Errors
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Records
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Telescope
+
 import Agda.Utils.Either
 import Agda.Utils.List
+import qualified Agda.Utils.Map as Map
+import Agda.Utils.Maybe
 import Agda.Utils.Permutation
 import Agda.Utils.Size
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
 
+---------------------------------------------------------------------------
+-- * Record pattern translation for let bindings
+---------------------------------------------------------------------------
+
+-- | Take a record pattern @p@ and yield a list of projections
+--   corresponding to the pattern variables, from left to right.
+--
+--   E.g. for @(x , (y , z))@ we return @[ fst, fst . snd, snd . snd ]@.
+--
+--   If it is not a record pattern, error 'ShouldBeRecordPattern' is raised.
+recordPatternToProjections :: Pattern -> TCM [Term -> Term]
+recordPatternToProjections p =
+  case p of
+    VarP{}             -> return [ \ x -> x ]
+    LitP{}             -> typeError $ ShouldBeRecordPattern p
+    DotP{}             -> typeError $ ShouldBeRecordPattern p
+    ConP c Nothing  ps -> typeError $ ShouldBeRecordPattern p
+    ConP c (Just t) ps -> do
+      t <- reduce t
+      fields <- getRecordTypeFields (unArg t)
+      concat <$> zipWithM comb (map proj fields) (map unArg ps)
+  where
+    proj p = \ x -> Def (unArg p) [defaultArg x]
+    comb :: (Term -> Term) -> Pattern -> TCM [Term -> Term]
+    comb prj p = map (prj .) <$> recordPatternToProjections p
+
+
+---------------------------------------------------------------------------
+-- * Record pattern translation for compiled clauses
+---------------------------------------------------------------------------
+
+-- | Take a matrix of booleans (at least one row!) and summarize the columns
+--   using conjunction.
+conjColumns :: [[Bool]] -> [Bool]
+conjColumns =  foldl1 (zipWith (&&))
+
+-- | @insertColumn i a m@ inserts a column before the @i@th column in
+--   matrix @m@ and fills it with value @a@.
+insertColumn :: Int -> a -> [[a]] -> [[a]]
+insertColumn i a rows = map ins rows where
+  ins row = let (init, last) = splitAt i row in init ++ a : last
+
+{- UNUSED
+-- | @cutColumn i m@ removes the @i@th column from matrix @m@.
+cutColumn :: Int -> [[a]] -> [[a]]
+cutColumn i rows = map cut rows where
+  cut row = let (init, _:last) = splitAt i row in init ++ last
+
+-- | @cutColumns i n xss = (yss, xss')@ cuts out a submatrix @yss@
+--   of width @n@ from @xss@, starting at column @i@.
+cutColumns :: Int -> Int -> [[a]] -> ([[a]], [[a]])
+cutColumns i n rows = unzip (map (cutSublist i n) rows)
+-}
+
+-- | @cutSublist i n xs = (xs', ys, xs'')@ cuts out a sublist @ys@
+--   of width @n@ from @xs@, starting at column @i@.
+cutSublist :: Int -> Int -> [a] -> ([a], [a], [a])
+cutSublist i n row =
+  let (init, rest) = splitAt i row
+      (mid , last) = splitAt n rest
+  in  (init, mid, last)
+
+
+translateCompiledClauses :: CompiledClauses -> TCM CompiledClauses
+translateCompiledClauses cc = snd <$> loop cc
+  where
+
+    loop :: CompiledClauses -> TCM ([Bool], CompiledClauses)
+    loop cc = case cc of
+      Fail      -> return (repeat True, cc)
+      Done xs t -> return (map (const True) xs, cc)
+      Case i cs -> loops i cs
+
+    loops :: Int                  -- split variable
+          -> Case CompiledClauses -- original split tree
+          -> TCM ([Bool], CompiledClauses)
+    loops i cs@(Branches { conBranches = conMap
+                         , litBranches = litMap
+                         , catchAllBranch = catchAll }) = do
+
+      -- recurse on and compute variable status of catch-all clause
+      (xssa, catchAll) <- unzipMaybe <$> Trav.mapM loop catchAll
+      let xsa = maybe (repeat True) id xssa
+
+      -- recurse on compute variable status of literal clauses
+      (xssl, litMap)   <- Map.unzip <$> Trav.mapM loop litMap
+      let xsl = conjColumns (xsa : insertColumn i False (Map.elems xssl))
+
+      -- recurse on constructor clauses
+      (ccs, xssc, conMap)    <- Map.unzip3 <$> do
+        Trav.forM (Map.mapWithKey (,) conMap) $ \ (c, WithArity ar cc) -> do
+          (xs, cc)     <- loop cc
+          dataOrRecCon <- getConstructorArity c
+          let (isRC, n)   = either (False,) ((True,) . size) dataOrRecCon
+              (xs0, rest) = genericSplitAt i xs
+              (xs1, xs2 ) = genericSplitAt n rest
+              -- if all dropped variables are virgins and we are record cons.
+              -- then new variable x is also virgin
+              -- and we can translate away the split
+              x           = isRC && and xs1
+              -- xs' = updated variables
+              xs'         = xs0 ++ x : xs2
+              -- get the record fields
+              fs          = either __IMPOSSIBLE__ id dataOrRecCon
+              -- if x we can translate
+              mcc = if x then [replaceByProjections i (map unArg fs) cc] else []
+
+          when (n /= ar) __IMPOSSIBLE__
+          return (mcc, xs', WithArity ar cc)
+
+      -- compute result
+      let xs = conjColumns (xsl : Map.elems xssc)
+      case concat $ Map.elems ccs of
+        -- case: no record pattern was translated
+        []   -> return (xs, Case i $ Branches
+                  { conBranches = conMap
+                  , litBranches = litMap
+                  , catchAllBranch = catchAll })
+
+        -- case: translated away one record pattern
+        [cc] -> return (xs, cc)
+
+        -- case: more than one record patterns (impossible)
+        _    -> __IMPOSSIBLE__
+
+-- | @replaceByProjections i projs cc@ replaces variables @i..i+n-1@
+--   (counted from left) by projections @projs_1 i .. projs_n i@.
+--
+--   If @n==0@, we matched on a zero-field record, which means that
+--   we are actually introduce a new variable, increasing split
+--   positions greater or equal to @i@ by one.
+--   Otherwise, we have to lower
+--
+replaceByProjections :: Int -> [QName] -> CompiledClauses -> CompiledClauses
+replaceByProjections i projs cc =
+  let n = length projs
+
+      loop :: Int -> CompiledClauses -> CompiledClauses
+      loop i cc = case cc of
+        Case j cs
+
+        -- if j < i, we leave j untouched, but we increase i by the number
+        -- of variables replacing j in the branches
+          | j < i     -> Case j $ loops i cs
+
+        -- if j >= i then we shrink j by (n-1)
+          | otherwise -> Case (j - (n-1)) $ fmap (loop i) cs
+
+        Done xs v ->
+        -- we have to delete (n-1) variables from xs
+        -- and instantiate v suitably with the projections
+          let (xs0,xs1,xs2)     = cutSublist i n xs
+              names | null xs1  = ["r"]
+                    | otherwise = map unArg xs1
+              x                 = defaultArg $ foldr1 (++) names
+              xs'               = xs0 ++ x : xs2
+              us                = map (\ p -> Def p [defaultArg $ var 0]) (reverse projs)
+              -- go from level (i + n - 1) to index (subtract from |xs|-1)
+              index             = length xs - (i + n)
+          in  Done xs' $ applySubst (liftS (length xs2) $ us ++# raiseS 1) v
+          -- The body is NOT guarded by lambdas!
+          -- WRONG: underLambdas i (flip apply) (map defaultArg us) v
+
+        Fail -> Fail
+
+      loops :: Int -> Case CompiledClauses -> Case CompiledClauses
+      loops i Branches{ conBranches    = conMap
+                      , litBranches    = litMap
+                      , catchAllBranch = catchAll } =
+        Branches{ conBranches    = fmap (\ (WithArity n c) -> WithArity n $ loop (i + n - 1) c) conMap
+                , litBranches    = fmap (loop (i - 1)) litMap
+                , catchAllBranch = fmap (loop i) catchAll
+                }
+  in  loop i cc
+
+-- | Check if a split is on a record constructor, and return the projections
+--   if yes.
+isRecordCase :: Case c -> TCM (Maybe ([QName], c))
+isRecordCase (Branches { conBranches = conMap
+                       , litBranches = litMap
+                       , catchAllBranch = Nothing })
+  | Map.null litMap
+  , [(con, WithArity _ br)] <- Map.toList conMap = do
+    isRC <- isRecordConstructor con
+    case isRC of
+      Just (r, Record { recFields = fs }) -> return $ Just (map unArg fs, br)
+      Just (r, _) -> __IMPOSSIBLE__
+      Nothing -> return Nothing
+isRecordCase _ = return Nothing
+
+---------------------------------------------------------------------------
+-- * Record pattern translation for split trees
+---------------------------------------------------------------------------
+
+-- | Split tree annotation.
+data RecordSplitNode = RecordSplitNode
+  { splitCon           :: QName  -- ^ Constructor name for this branch.
+  , splitArity         :: Int    -- ^ Arity of the constructor.
+  , splitRecordPattern :: Bool   -- ^ Should we translate this split away?
+  }
+
+-- | Split tree annotated for record pattern translation.
+type RecordSplitTree  = SplitTree' RecordSplitNode
+type RecordSplitTrees = SplitTrees' RecordSplitNode
+
+
+
+-- | Bottom-up procedure to annotate split tree.
+recordSplitTree :: SplitTree -> TCM RecordSplitTree
+recordSplitTree t = snd <$> loop t
+  where
+
+    loop :: SplitTree -> TCM ([Bool], RecordSplitTree)
+    loop t = case t of
+      SplittingDone n -> return (replicate n True, SplittingDone n)
+      SplitAt i ts    -> do
+        (xs, ts) <- loops i ts
+        return (xs, SplitAt i ts)
+
+    loops :: Int -> SplitTrees -> TCM ([Bool], RecordSplitTrees)
+    loops i ts = do
+      (xss, ts) <- unzip <$> do
+        forM ts $ \ (c, t) -> do
+          (xs, t) <- loop t
+          (isRC, n) <- either (False,) ((True,) . size) <$> getConstructorArity c
+          let (xs0, rest) = genericSplitAt i xs
+              (xs1, xs2)  = genericSplitAt n rest
+              x           = isRC && and xs1
+              xs'         = xs0 ++ x : xs2
+          return (xs, (RecordSplitNode c n x, t))
+      return (foldl1 (zipWith (&&)) xss, ts)
+
+-- | Bottom-up procedure to record-pattern-translate split tree.
+translateSplitTree :: SplitTree -> TCM SplitTree
+translateSplitTree t = snd <$> loop t
+  where
+
+    -- @loop t = return (xs, t')@ returns the translated split tree @t'@
+    -- plus the status @xs@ of the clause variables
+    --   True  = variable will never be split on in @t'@ (virgin variable)
+    --   False = variable will be spilt on in @t'@
+    loop :: SplitTree -> TCM ([Bool], SplitTree)
+    loop t = case t of
+      SplittingDone n ->
+        -- start with n virgin variables
+        return (replicate n True, SplittingDone n)
+      SplitAt i ts    -> do
+        (x, xs, ts) <- loops i ts
+        -- if we case on record constructor, drop case
+        let t' = if x then
+                   case ts of
+                     [(c,t)] -> t
+                     _       -> __IMPOSSIBLE__
+                  -- else retain case
+                  else SplitAt i ts
+        return (xs, t')
+
+    -- @loops i ts = return (x, xs, ts')@ cf. @loop@
+    -- @x@ says wether at arg @i@ we have a record pattern split
+    -- that can be removed
+    loops :: Int -> SplitTrees -> TCM (Bool, [Bool], SplitTrees)
+    loops i ts = do
+      -- note: ts not empty
+      (rs, xss, ts) <- unzip3 <$> do
+        forM ts $ \ (c, t) -> do
+          (xs, t) <- loop t
+          (isRC, n) <- either (False,) ((True,) . size) <$> getConstructorArity c
+          -- now drop variables from i to i+n-1
+          let (xs0, rest) = genericSplitAt i xs
+              (xs1, xs2)  = genericSplitAt n rest
+              -- if all dropped variables are virgins and we are record cons.
+              -- then new variable x is also virgin
+              -- and we can translate away the split
+              x           = isRC && and xs1
+              -- xs' = updated variables
+              xs'         = xs0 ++ x : xs2
+              -- delete splits from t if record match
+              t'          = if x then dropFrom i (n - 1) t else t
+          return (x, xs', (c, t'))
+      -- x = did we split on a record constructor?
+      let x = and rs
+      -- invariant: if record constructor, then exactly one constructor
+      if x then unless (rs == [True]) __IMPOSSIBLE__
+      -- else no record constructor
+       else unless (or rs == False) __IMPOSSIBLE__
+      return (x, conjColumns xss, ts)
+
+-- | @dropFrom i n@ drops arguments @j@  with @j < i + n@ and @j >= i@.
+--   NOTE: @n@ can be negative, in which case arguments are inserted.
+class DropFrom a where
+  dropFrom :: Int -> Int -> a -> a
+
+instance DropFrom (SplitTree' c) where
+  dropFrom i n t = case t of
+    SplittingDone m -> SplittingDone (m - n)
+    SplitAt j ts
+      | j >= i + n -> SplitAt (j - n) $ dropFrom i n ts
+      | j < i      -> SplitAt j $ dropFrom i n ts
+      | otherwise  -> __IMPOSSIBLE__
+
+instance DropFrom (c, SplitTree' c) where
+  dropFrom i n (c, t) = (c, dropFrom i n t)
+
+instance DropFrom a => DropFrom [a] where
+  dropFrom i n ts = map (dropFrom i n) ts
+
+{-
+-- | Check if a split is on a record constructor, and return the projections
+--   if yes.
+isRecordSplit :: SplitTrees -> TCM (Maybe ([QName], c))
+isRecordSplit (Branches { conBranches = conMap
+                       , litBranches = litMap
+                       , catchAllBranch = Nothing })
+  | Map.null litBranches
+  , [(con,br)] <- Map.toList conMap = do
+    isRC <- isRecordConstructor con
+    case isRC of
+      Just (r, Record { recFields = fs }) -> return $ Just (map unArg fs, br)
+      Just (r, _) -> __IMPOSSIBLE__
+      Nothing -> return Nothing
+isRecordSplit _ = return Nothing
+
+-}
+
+
+---------------------------------------------------------------------------
+-- * Record pattern translation for function definitions
+---------------------------------------------------------------------------
+
 -- | Replaces pattern matching on record constructors with uses of
 -- projection functions. Does not remove record constructor patterns
 -- which have sub-patterns containing non-record constructor or
@@ -60,19 +405,19 @@
       noNewPatternVars = size cs
 
       s'   = reverse s
-      rest = [ Var i [] | i <- [noNewPatternVars..] ]
+      mkSub s = s ++# raiseS noNewPatternVars
 
       -- Substitution used to convert terms in the old RHS's
       -- context to terms in the new RHS's context.
-      rhsSubst = s' ++ rest
+      rhsSubst = mkSub s'
 
       -- Substitution used to convert terms in the old telescope's
       -- context to terms in the new RHS's context.
-      rhsSubst' = permute (reverseP $ clausePerm clause) s' ++ rest
+      rhsSubst' = mkSub $ permute (reverseP $ clausePerm clause) s'
       -- TODO: Is it OK to replace the definition above with the
       -- following one?
       --
-      --   rhsSubst' = permute (clausePerm clause) s ++ rest
+      --   rhsSubst' = mkSub $ permute (clausePerm clause) s
 
       -- The old telescope, flattened and in textual left-to-right
       -- order (i.e. the type signature for the variable which occurs
@@ -87,7 +432,7 @@
       -- of the new RHS, in textual left-to-right order, and with
       -- Nothing in place of dot patterns.
       newTel' =
-        map (fmap (id *** substs rhsSubst')) $
+        map (fmap (id *** applySubst rhsSubst')) $
         translateTel cs $
         flattenedOldTel
 
@@ -98,7 +443,7 @@
         where
         -- It is important that dummy does not mention any variable
         -- (see the definition of reorderTel).
-        dummy = defaultArg (El Prop (Sort Prop))
+        dummy = dummyDom -- defaultArg (El Prop (Sort Prop))
 
         isDotP n = case genericIndex cs n of
                      Left DotP{} -> True
@@ -113,25 +458,25 @@
 
       -- Substitution used to convert terms in the old telescope's
       -- context to terms in the new telescope's context.
-      lhsSubst = map (substs lhsSubst') rhsSubst'
+      lhsSubst = applySubst lhsSubst' rhsSubst'
 
       -- The new telescope.
       newTel =
         uncurry unflattenTel . unzip $
         map (maybe __IMPOSSIBLE__ id) $
         permute newPerm $
-        map (fmap (id *** substs lhsSubst')) $
+        map (fmap (id *** applySubst lhsSubst')) $
         newTel'
 
       -- New clause.
       c = clause
             { clauseTel  = newTel
             , clausePerm = newPerm
-            , clausePats = substs lhsSubst ps
+            , clausePats = applySubst lhsSubst ps
             , clauseBody = translateBody cs rhsSubst $ clauseBody clause
             }
 
-  reportSDoc "tc.lhs.top" 10 $
+  reportSDoc "tc.lhs.recpat" 10 $
     escapeContext (size $ clauseTel clause) $ vcat
       [ text "Translated clause:"
       , nest 2 $ vcat
@@ -194,7 +539,7 @@
 -- patterns, should be removed, and a new variable, with the name @x@,
 -- inserted instead. The type of the new variable is @t@.
 
-type Changes = [Either Pattern (Kind -> Nat, String, Arg Type)]
+type Changes = [Either Pattern (Kind -> Nat, String, Dom Type)]
 
 -- | Record pattern trees.
 
@@ -229,7 +574,7 @@
 -- | Converts a record tree to a single pattern along with information
 -- about the deleted pattern variables.
 
-removeTree :: RecordTree -> RecPatM (Pattern, Substitution, Changes)
+removeTree :: RecordTree -> RecPatM (Pattern, [Term], Changes)
 removeTree tree = do
   (pat, x) <- nextVar
   let ps = projections tree
@@ -239,7 +584,7 @@
 
   return $ case tree of
     Leaf p     -> (p,   s, [Left p])
-    RecCon t _ -> (pat, s, [Right (count, "r", t)])
+    RecCon t _ -> (pat, s, [Right (count, "r", domFromArg t)])
 
 ------------------------------------------------------------------------
 -- Translation of patterns
@@ -267,7 +612,7 @@
 --
 -- This function assumes that literals are never of record type.
 
-translatePattern :: Pattern -> RecPatM (Pattern, Substitution, Changes)
+translatePattern :: Pattern -> RecPatM (Pattern, [Term], Changes)
 translatePattern (ConP c Nothing ps) = do
   (ps, s, cs) <- translatePatterns ps
   return (ConP c Nothing ps, s, cs)
@@ -283,7 +628,7 @@
 -- | 'translatePattern' lifted to lists of arguments.
 
 translatePatterns ::
-  [Arg Pattern] -> RecPatM ([Arg Pattern], Substitution, Changes)
+  [Arg Pattern] -> RecPatM ([Arg Pattern], [Term], Changes)
 translatePatterns ps = do
   (ps', ss, cs) <- unzip3 <$> mapM (translatePattern . unArg) ps
   return (ps' `withArgsFrom` ps, concat ss, concat cs)
@@ -304,7 +649,7 @@
 
 recordTree ::
   Pattern ->
-  RecPatM (Either (RecPatM (Pattern, Substitution, Changes)) RecordTree)
+  RecPatM (Either (RecPatM (Pattern, [Term], Changes)) RecordTree)
 recordTree p@(ConP _ Nothing _) = return $ Left $ translatePattern p
 recordTree (ConP c (Just t) ps) = do
   rs <- mapM (recordTree . unArg) ps
@@ -316,15 +661,9 @@
                 concat ss, concat cs)
     Right ts -> liftTCM $ do
       t <- reduce t
-      case t of
-        Arg { unArg = El _ (Def r _) } -> do
-          rDef <- theDef <$> getConstInfo r
-          case rDef of
-            Record { recFields = fields } -> do
-              let proj p = \t -> Def (unArg p) [defaultArg t]
-              return $ Right $ RecCon t $ zip (map proj fields) ts
-            _ -> __IMPOSSIBLE__
-        _ -> __IMPOSSIBLE__
+      fields <- getRecordTypeFields (unArg t)
+      let proj p = \x -> Def (unArg p) [defaultArg x]
+      return $ Right $ RecCon t $ zip (map proj fields) ts
 recordTree p@VarP{} = return (Right (Leaf p))
 recordTree p@DotP{} = return (Right (Leaf p))
 recordTree p@LitP{} = return $ Left $ translatePattern p
@@ -338,10 +677,10 @@
   :: Changes
      -- ^ Explanation of how the telescope should be changed. Types
      -- should be in the context of the old telescope.
-  -> [(String, Arg Type)]
+  -> [(String, Dom Type)]
      -- ^ Old telescope, flattened, in textual left-to-right
      -- order.
-  -> [Maybe (String, Arg Type)]
+  -> [Maybe (String, Dom Type)]
      -- ^ New telescope, flattened, in textual left-to-right order.
      -- 'Nothing' is used to indicate the locations of dot patterns.
 translateTel (Left (DotP{}) : rest)   tel = Nothing : translateTel rest tel
@@ -362,7 +701,7 @@
   Bind $ Abs x $ translateBody rest s $ dropBinds n' b
   where n' = sum $ map n [VarPat, DotPat]
 translateBody (Left _ : rest) s (Bind b)   = Bind $ fmap (translateBody rest s) b
-translateBody []              s (Body t)   = Body $ substs s t
+translateBody []              s (Body t)   = Body $ applySubst s t
 translateBody _               _ _          = __IMPOSSIBLE__
 
 ------------------------------------------------------------------------
@@ -372,11 +711,11 @@
 
 permToSubst :: Permutation -> Substitution
 permToSubst (Perm n is) =
-  [ makeVar i | i <- [0..n-1] ] ++ [ Var i [] | i <- [size is..] ]
+  [ makeVar i | i <- [0..n - 1] ] ++# raiseS (size is)
   where
   makeVar i = case genericElemIndex i is of
     Nothing -> __IMPOSSIBLE__
-    Just k  -> Var k []
+    Just k  -> var k
 
 -- | @dropBinds n b@ drops the initial @n@ occurrences of 'Bind' from @b@.
 --
diff --git a/src/full/Agda/TypeChecking/Records.hs b/src/full/Agda/TypeChecking/Records.hs
--- a/src/full/Agda/TypeChecking/Records.hs
+++ b/src/full/Agda/TypeChecking/Records.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, TupleSections #-}
 
 module Agda.TypeChecking.Records where
 
@@ -21,8 +21,11 @@
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Datatypes
+import Agda.Utils.Either
 import Agda.Utils.List
+import Agda.Utils.Maybe
 import Agda.Utils.Monad
+import qualified Agda.Utils.HashMap as HMap
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
@@ -71,12 +74,12 @@
 -- | Find all records with at least the given fields.
 findPossibleRecords :: [C.Name] -> TCM [QName]
 findPossibleRecords fields = do
-  defs <- (Map.union `on` sigDefinitions) <$> getSignature <*> getImportedSignature
+  defs <- (HMap.union `on` sigDefinitions) <$> getSignature <*> getImportedSignature
   let possible def = case theDef def of
         Record{ recFields = fs } -> Set.isSubsetOf given inrecord
           where inrecord = Set.fromList $ map (nameConcrete . qnameName . unArg) fs
         _ -> False
-  return [ defName d | d <- Map.elems defs, possible d ]
+  return [ defName d | d <- HMap.elems defs, possible d ]
   where
     given = Set.fromList fields
 
@@ -84,6 +87,18 @@
 getRecordFieldTypes :: QName -> TCM Telescope
 getRecordFieldTypes r = recTel <$> getRecordDef r
 
+-- | Get the field names belonging to a record type.
+getRecordTypeFields :: Type -> TCM [Arg QName]
+getRecordTypeFields t =
+  case ignoreSharing $ unEl t of
+    Def r _ -> do
+      rDef <- theDef <$> getConstInfo r
+      case rDef of
+        Record { recFields = fields } -> return fields
+        _ -> __IMPOSSIBLE__
+    _ -> __IMPOSSIBLE__
+
+
 -- | Get the type of the record constructor.
 getRecordConstructorType :: QName -> TCM Type
 getRecordConstructorType r = recConType <$> getRecordDef r
@@ -94,33 +109,36 @@
 getRecordConstructor r = killRange <$> recCon <$> getRecordDef r
 
 -- | Check if a name refers to a record.
-isRecord :: QName -> TCM Bool
+--   If yes, return record definition.
+isRecord :: QName -> TCM (Maybe Defn)
 isRecord r = do
   def <- theDef <$> getConstInfo r
   return $ case def of
-    Record{} -> True
-    _        -> False
+    Record{} -> Just def
+    _        -> Nothing
 
 -- | Check if a name refers to an eta expandable record.
 isEtaRecord :: QName -> TCM Bool
-isEtaRecord r = do
-  def <- theDef <$> getConstInfo r
-  return $ case def of
-    Record{recEtaEquality = eta} -> eta
-    _                            -> False
+isEtaRecord r = maybe False recEtaEquality <$> isRecord r
 
+-- | Check if a name refers to a record which is not coinductive.  (Projections are then size-preserving)
+isInductiveRecord :: QName -> TCM Bool
+isInductiveRecord r = maybe False (\ d -> recInduction d == Inductive || not (recRecursive d)) <$> isRecord r
+
 -- | Check if a type is an eta expandable record and return the record identifier and the parameters.
 isEtaRecordType :: Type -> TCM (Maybe (QName, Args))
-isEtaRecordType (El _ (Def d ps)) = ifM (isEtaRecord d) (return $ Just (d, ps)) (return Nothing)
-isEtaRecordType _ = return Nothing
+isEtaRecordType a = case ignoreSharing $ unEl a of
+  Def d ps -> ifM (isEtaRecord d) (return $ Just (d, ps)) (return Nothing)
+  _        -> return Nothing
 
 -- | Check if a name refers to a record constructor.
-isRecordConstructor :: QName -> TCM Bool
+--   If yes, return record definition.
+isRecordConstructor :: QName -> TCM (Maybe (QName, Defn))
 isRecordConstructor c = do
   def <- theDef <$> getConstInfo c
   case def of
-    Constructor{ conData = r } -> isRecord r
-    _                          -> return False
+    Constructor{ conData = r } -> fmap (r,) <$> isRecord r
+    _                          -> return Nothing
 
 -- | Check if a constructor name is the internally generated record constructor.
 isGeneratedRecordConstructor :: QName -> TCM Bool
@@ -134,6 +152,20 @@
         _                             -> return False
     _ -> return False
 
+-- | Mark record type as unguarded.
+--   No eta-expansion.  Projections do not preserve guardedness.
+unguardedRecord :: QName -> TCM ()
+unguardedRecord q = modifySignature $ updateDefinition q $ updateTheDef $ updateRecord
+  where updateRecord r@Record{} = r { recEtaEquality = False, recRecursive = True }
+        updateRecord _          = __IMPOSSIBLE__
+
+-- | Mark record type as recursive.
+--   Projections do not preserve guardedness.
+recursiveRecord :: QName -> TCM ()
+recursiveRecord q = modifySignature $ updateDefinition q $ updateTheDef $ updateRecord
+  where updateRecord r@Record{} = r { recRecursive = True }
+        updateRecord _          = __IMPOSSIBLE__
+
 {-| Compute the eta expansion of a record. The first argument should be
     the name of a record type. Given
 
@@ -143,50 +175,48 @@
 -}
 etaExpandRecord :: QName -> Args -> Term -> TCM (Telescope, Args)
 etaExpandRecord r pars u = do
-  Record{ recFields = xs, recTel = tel } <- getRecordDef r
+  Record{ recFields = xs, recTel = tel, recEtaEquality = eta } <- getRecordDef r
+  unless eta __IMPOSSIBLE__ -- make sure we do not expand non-eta records
   let tel' = apply tel pars
-  case u of
+  case ignoreSharing u of
     Con _ args -> return (tel', args)  -- Already expanded.
     _          -> do
-      -- irrelevant fields are expanded to DontCare
-      -- this is sound because etaExpandRecord is only called during conversion
-      -- WARNING: do not use etaExpandRecord to expand MetaVars!!
-      let proj (Arg h Irrelevant x) = Arg h Irrelevant $ DontCare (Def x [defaultArg u])
-          proj (Arg h rel x)        = Arg h rel $
-            Def x [defaultArg u]
+      let xs' = map (fmap (\ x -> Def x [defaultArg u])) xs
       reportSDoc "tc.record.eta" 20 $ vcat
         [ text "eta expanding" <+> prettyTCM u <+> text ":" <+> prettyTCM r
         , nest 2 $ vcat
           [ text "tel' =" <+> prettyTCM tel'
-          , text "args =" <+> prettyTCM (map proj xs)
+          , text "args =" <+> prettyTCM xs'
           ]
         ]
-      return (tel', map proj xs)
-  where
-    hide a = a { argHiding = Hidden }
+      return (tel', xs')
 
 -- | The fields should be eta contracted already.
+--
+--   We can eta constract if all fields @f = ...@ are irrelevant
+--   or the corresponding projection @f = f v@ of the same value @v@,
+--   but we need at least one relevant field to find the value @v@.
 etaContractRecord :: QName -> QName -> Args -> TCM Term
 etaContractRecord r c args = do
   Record{ recPars = npars, recFields = xs } <- getRecordDef r
-  let check a ax = do
+  let check :: Arg Term -> Arg QName -> Maybe (Maybe Term)
+      check a ax = do
       -- @a@ is the constructor argument, @ax@ the corr. record field name
         -- skip irrelevant record fields by returning DontCare
-        case (argRelevance a, unArg a) of
-          (Irrelevant, v) -> return $ Just $ DontCare __IMPOSSIBLE__ -- thrown out later
+        case (argRelevance a, ignoreSharing $ unArg a) of
+          (Irrelevant, _) -> Just Nothing
           -- if @a@ is the record field name applied to a single argument
           -- then it passes the check
-          (_, Def y [arg]) | unArg ax == y
-                         -> return (Just $ unArg arg)
-          _              -> return Nothing
+          (_, Def f [arg]) | unArg ax == f
+                         -> Just $ Just $ unArg arg
+          _              -> Nothing
       fallBack = return (Con c args)
   case compare (length args) (length xs) of
     LT -> fallBack       -- Not fully applied
     GT -> __IMPOSSIBLE__ -- Too many arguments. Impossible.
     EQ -> do
-      as <- zipWithM check args xs
-      case sequence as of
-        Just as -> case filter notDontCare as of
+      case zipWithM check args xs of
+        Just as -> case [ a | Just a <- as ] of
           (a:as) ->
             if all (a ==) as
               then do
@@ -196,41 +226,66 @@
                   ]
                 return a
               else fallBack
-          _ -> fallBack -- just DontCares
+          _ -> fallBack -- just irrelevant terms
         _ -> fallBack  -- a Nothing
-  where notDontCare (DontCare _) = False
-        notDontCare _            = True
 
 -- | Is the type a hereditarily singleton record type? May return a
 -- blocking metavariable.
 --
 -- Precondition: The name should refer to a record type, and the
 -- arguments should be the parameters to the type.
-
 isSingletonRecord :: QName -> Args -> TCM (Either MetaId Bool)
-isSingletonRecord = isSingletonRecord' False
+isSingletonRecord r ps = mapRight isJust <$> isSingletonRecord' False r ps
 
 isSingletonRecordModuloRelevance :: QName -> Args -> TCM (Either MetaId Bool)
-isSingletonRecordModuloRelevance = isSingletonRecord' True
+isSingletonRecordModuloRelevance r ps = mapRight isJust <$> isSingletonRecord' True r ps
 
-isSingletonRecord' :: Bool -> QName -> Args -> TCM (Either MetaId Bool)
-isSingletonRecord' regardIrrelevance r ps =
-  check =<< ((`apply` ps) <$> getRecordFieldTypes r)
+-- | Return the unique (closed) inhabitant if exists.
+--   In case of counting irrelevance in, the returned inhabitant
+--   contains garbage.
+isSingletonRecord' :: Bool -> QName -> Args -> TCM (Either MetaId (Maybe Term))
+isSingletonRecord' regardIrrelevance r ps = do
+  def <- getRecordDef r
+  emap (Con $ recCon def) <$> check (recTel def `apply` ps)
   where
-  check EmptyTel            = return (Right True)
-  check (ExtendTel arg tel) | regardIrrelevance && argRelevance arg == Irrelevant =
-    underAbstraction arg tel check
-  check (ExtendTel arg tel) = do
-    TelV _ t <- telView $ unArg arg
+  check :: Telescope -> TCM (Either MetaId (Maybe [Arg Term]))
+  check EmptyTel            = return $ Right $ Just []
+  check (ExtendTel arg@(Dom h Irrelevant _) tel) | regardIrrelevance =
+    underAbstraction arg tel $ \ tel ->
+      emap (Arg h Irrelevant garbage :) <$> check tel
+  check (ExtendTel arg@(Dom h r t) tel) = do
+    isSing <- isSingletonType' regardIrrelevance t
+    case isSing of
+      Left mid       -> return $ Left mid
+      Right Nothing  -> return $ Right Nothing
+      Right (Just v) -> underAbstraction arg tel $ \ tel ->
+        emap (Arg h r v :) <$> check tel
+  garbage :: Term
+  garbage = Sort Prop
+
+-- | Check whether a type has a unique inhabitant and return it.
+--   Can be blocked by a metavar.
+isSingletonType :: Type -> TCM (Either MetaId (Maybe Term))
+isSingletonType = isSingletonType' False
+
+-- | Check whether a type has a unique inhabitant (irrelevant parts ignored).
+--   Can be blocked by a metavar.
+isSingletonTypeModuloRelevance :: (MonadTCM tcm) => Type -> tcm (Either MetaId Bool)
+isSingletonTypeModuloRelevance t = liftTCM $ do
+  mapRight isJust <$> isSingletonType' True t
+
+isSingletonType' :: Bool -> Type -> TCM (Either MetaId (Maybe Term))
+isSingletonType' regardIrrelevance t = do
+    TelV tel t <- telView t
     t <- reduceB $ unEl t
-    case t of
+    case ignoreSharing <$> t of
       Blocked m _            -> return (Left m)
       NotBlocked (MetaV m _) -> return (Left m)
       NotBlocked (Def r ps)  ->
-        ifM (not <$> isRecord r) (return $ Right False) $ do
-          isRec <- isSingletonRecord' regardIrrelevance r ps
-          case isRec of
-            Left _      -> return isRec
-            Right False -> return isRec
-            Right True  -> underAbstraction arg tel $ check
-      _ -> return (Right False)
+        ifM (isNothing <$> isRecord r) (return $ Right Nothing) $ do
+          emap (abstract tel) <$> isSingletonRecord' regardIrrelevance r ps
+      _ -> return (Right Nothing)
+
+-- | Auxiliary function.
+emap :: (a -> b) -> Either c (Maybe a) -> Either c (Maybe b)
+emap = mapRight . fmap
diff --git a/src/full/Agda/TypeChecking/Records.hs-boot b/src/full/Agda/TypeChecking/Records.hs-boot
--- a/src/full/Agda/TypeChecking/Records.hs-boot
+++ b/src/full/Agda/TypeChecking/Records.hs-boot
@@ -7,7 +7,7 @@
 import qualified Agda.Syntax.Concrete.Name as C
 import Agda.TypeChecking.Monad
 
-isRecord :: QName -> TCM Bool
+isRecord :: QName -> TCM (Maybe Defn)
 isEtaRecord :: QName -> TCM Bool
 getRecordFieldNames :: QName -> TCM [Arg C.Name]
 etaContractRecord :: QName -> QName -> Args -> TCM Term
diff --git a/src/full/Agda/TypeChecking/Reduce.hs b/src/full/Agda/TypeChecking/Reduce.hs
--- a/src/full/Agda/TypeChecking/Reduce.hs
+++ b/src/full/Agda/TypeChecking/Reduce.hs
@@ -13,6 +13,7 @@
 import Data.Map (Map)
 import qualified Data.Set as Set
 import Data.Traversable
+import Data.Hashable
 
 import Agda.Syntax.Position
 import Agda.Syntax.Common
@@ -34,6 +35,8 @@
 import {-# SOURCE #-} Agda.TypeChecking.CompiledClause.Match
 
 import Agda.Utils.Monad
+import Agda.Utils.HashMap (HashMap)
+import qualified Agda.Utils.HashMap as HMap
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
@@ -71,6 +74,7 @@
       InstS _                        -> __IMPOSSIBLE__
   instantiate (Level l) = levelTm <$> instantiate l
   instantiate (Sort s) = sortTm <$> instantiate s
+  instantiate v@Shared{} = updateSharedTerm instantiate v
   instantiate t = return t
 
 instance Instantiate Level where
@@ -84,7 +88,7 @@
   instantiate l = case l of
     MetaLevel m vs -> do
       v <- instantiate (MetaV m vs)
-      case v of
+      case ignoreSharing v of
         MetaV m vs -> return $ MetaLevel m vs
         _          -> return $ UnreducedLevel v
     UnreducedLevel l -> UnreducedLevel <$> instantiate l
@@ -120,6 +124,9 @@
 instance Instantiate t => Instantiate (Arg t) where
     instantiate = traverse instantiate
 
+instance Instantiate t => Instantiate (Dom t) where
+    instantiate = traverse instantiate
+
 instance Instantiate t => Instantiate [t] where
     instantiate = traverse instantiate
 
@@ -150,17 +157,33 @@
   instantiate (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> instantiate (a,b)
   instantiate (Guarded c pid)      = Guarded <$> instantiate c <*> pure pid
   instantiate (UnBlock m)          = return $ UnBlock m
-  instantiate (FindInScope m)      = return $ FindInScope m
-  instantiate (IsEmpty t)          = IsEmpty <$> instantiate t
+  instantiate (FindInScope m args) = FindInScope m <$> mapM instantiate args
+  instantiate (IsEmpty r t)        = IsEmpty r <$> instantiate t
 
 instance (Ord k, Instantiate e) => Instantiate (Map k e) where
     instantiate = traverse instantiate
 
 
---
--- Reduction to weak head normal form.
---
+---------------------------------------------------------------------------
+-- * Reduction to weak head normal form.
+---------------------------------------------------------------------------
 
+ifBlocked :: MonadTCM tcm =>  Term -> (MetaId -> Term -> tcm a) -> (Term -> tcm a) -> tcm a
+ifBlocked t blocked unblocked = do
+  t <- liftTCM $ reduceB t
+  case ignoreSharing <$> t of
+    Blocked m _            -> blocked m (ignoreBlocking t)
+    NotBlocked (MetaV m _) -> blocked m (ignoreBlocking t)
+    NotBlocked _           -> unblocked (ignoreBlocking t)
+
+ifBlockedType :: MonadTCM tcm => Type -> (MetaId -> Type -> tcm a) -> (Type -> tcm a) -> tcm a
+ifBlockedType t blocked unblocked = do
+  t <- liftTCM $ reduceB t
+  case ignoreSharing . unEl <$> t of
+    Blocked m _            -> blocked m (ignoreBlocking t)
+    NotBlocked (MetaV m _) -> blocked m (ignoreBlocking t)
+    NotBlocked _           -> unblocked (ignoreBlocking t)
+
 class Reduce t where
     reduce  :: t -> TCM t
     reduceB :: t -> TCM (Blocked t)
@@ -211,13 +234,14 @@
     where
       fromTm v = do
         bv <- reduceB v
-        case bv of
-          Blocked m v             -> return $ Blocked m  $ BlockedLevel m v
+        let v = ignoreBlocking bv
+        case ignoreSharing <$> bv of
           NotBlocked (MetaV m vs) -> return $ NotBlocked $ MetaLevel m vs
-          NotBlocked v            -> return $ NotBlocked $ NeutralLevel v
+          Blocked m _             -> return $ Blocked m  $ BlockedLevel m v
+          NotBlocked _            -> return $ NotBlocked $ NeutralLevel v
 
 
-instance (Raise t, Reduce t) => Reduce (Abs t) where
+instance (Subst t, Reduce t) => Reduce (Abs t) where
   reduce b@(Abs x _) = Abs x <$> underAbstraction_ b reduce
   reduce (NoAbs x v) = NoAbs x <$> reduce v
 
@@ -226,9 +250,15 @@
     reduce = traverse reduce
 
 instance Reduce t => Reduce (Arg t) where
-    reduce  = traverse reduce
+    reduce a@(Arg h Irrelevant t) = return a  -- Don't reduce irr. args!?
+    reduce a                      = traverse reduce a
+
     reduceB t = traverse id <$> traverse reduceB t
 
+instance Reduce t => Reduce (Dom t) where
+    reduce = traverse reduce
+    reduceB t = traverse id <$> traverse reduceB t
+
 -- Tuples are never blocked
 instance (Reduce a, Reduce b) => Reduce (a,b) where
     reduce (x,y)  = (,) <$> reduce x <*> reduce y
@@ -240,7 +270,10 @@
   reduceB v = {-# SCC "reduce<Term>" #-} do
     v <- instantiate v
     case v of
-      MetaV x args -> notBlocked . MetaV x <$> reduce args
+--    Andreas, 2012-11-05 not reducing meta args does not destroy anything
+--    and seems to save 2% sec on the standard library
+--      MetaV x args -> notBlocked . MetaV x <$> reduce args
+      MetaV x args -> return $ notBlocked v
       Def f args   -> unfoldDefinition False reduceB (Def f []) f args
       Con c args   -> do
           -- Constructors can reduce when they come from an
@@ -254,20 +287,22 @@
       Var _ _  -> return $ notBlocked v
       Lam _ _  -> return $ notBlocked v
       DontCare _ -> return $ notBlocked v
+      Shared{}   -> updateSharedTermF reduceB v
     where
       -- NOTE: reduceNat can traverse the entire term.
+      reduceNat v@Shared{} = updateSharedTerm reduceNat v
       reduceNat v@(Con c []) = do
         mz  <- getBuiltin' builtinZero
         case v of
           _ | Just v == mz  -> return $ Lit $ LitInt (getRange c) 0
           _		    -> return v
       reduceNat v@(Con c [Arg NotHidden Relevant w]) = do
-        ms  <- getBuiltin' builtinSuc
+        ms  <- fmap ignoreSharing <$> getBuiltin' builtinSuc
         case v of
           _ | Just (Con c []) == ms -> inc <$> reduce w
           _	                    -> return v
           where
-            inc w = case w of
+            inc w = case ignoreSharing w of
               Lit (LitInt r n) -> Lit (LitInt (fuseRange c r) $ n + 1)
               _                -> Con c [Arg NotHidden Relevant w]
       reduceNat v = return v
@@ -313,7 +348,7 @@
             mredToBlocked (MaybeRed NotReduced  x) = notBlocked x
             mredToBlocked (MaybeRed (Reduced b) x) = x <$ b
 
-    -- reduceNormal :: Term -> QName -> [MaybeReduced (Arg Term)] -> Delayed -> [Clause] -> Maybe CompiledClauses -> TCM (Blocked Term)
+    reduceNormal :: Term -> QName -> [MaybeReduced (Arg Term)] -> Delayed -> [Clause] -> Maybe CompiledClauses -> TCM (Blocked Term)
     reduceNormal v0 f args delayed def mcc = {-# SCC "reduceNormal" #-} do
         case def of
           _ | Delayed <- delayed,
@@ -333,61 +368,90 @@
                 reportSDoc "tc.reduce" 90 $ vcat
                   [ text "*** reduced definition: " <+> prettyTCM f
                   ]
-                reportSDoc "tc.reduce" 100 $ text "    result" <+> prettyTCM v
+                reportSDoc "tc.reduce" 100 $ text "    result" <+> prettyTCM v $$
+                                             text "    raw   " <+> text (show v)
                 keepGoing v
       where defaultResult = return $ notBlocked $ v0 `apply` (map ignoreReduced args)
 
-    -- Apply a defined function to it's arguments.
-    --   The original term is the first argument applied to the third.
-    appDef :: Term -> CompiledClauses -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)
-    appDef v cc args = liftTCM $ do
-      r <- matchCompiled cc args
-      case r of
+-- | Reduce a non-primitive definition if it is a copy linking to another def.
+reduceDefCopy :: QName -> Args -> TCM (Reduced () Term)
+reduceDefCopy f vs = do
+  info <- getConstInfo f
+  if (defCopy info) then reduceDef_ info f vs else return $ NoReduction ()
+
+-- | Reduce a non-primitive definition once unless it is delayed.
+reduceDef :: QName -> Args -> TCM (Reduced () Term)
+reduceDef f vs = do
+  info <- getConstInfo f
+  reduceDef_ info f vs
+
+reduceDef_ :: Definition -> QName -> Args -> TCM (Reduced () Term)
+reduceDef_ info f vs = do
+  let v0   = Def f []
+      args = map notReduced vs
+      cls  = (defClauses info)
+      mcc  = (defCompiled info)
+      delayed = (defDelayed info)
+  case delayed of
+    Delayed -> return $ NoReduction ()
+    NotDelayed -> do
+      ev <- maybe (appDef' v0 cls args)
+                  (\cc -> appDef v0 cc args) mcc
+      case ev of
         YesReduction t    -> return $ YesReduction t
-        NoReduction args' -> return $ NoReduction $ fmap (apply v) args'
+        NoReduction args' -> return $ NoReduction ()
 
-    appDef' :: Term -> [Clause] -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)
-    appDef' _ [] _ = {- ' -} __IMPOSSIBLE__
-    appDef' v cls@(Clause {clausePats = ps} : _) args
-      | m < n     = return $ NoReduction $ notBlocked $ v `apply` map ignoreReduced args
-      | otherwise = do
-        let (args0, args1) = splitAt n args
-        r <- goCls cls (map ignoreReduced args0)
-        case r of
-          YesReduction u -> return $ YesReduction $ u `apply` map ignoreReduced args1
-          NoReduction v  -> return $ NoReduction $ (`apply` map ignoreReduced args1) <$> v
-      where
+-- Apply a defined function to it's arguments.
+--   The original term is the first argument applied to the third.
+appDef :: Term -> CompiledClauses -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)
+appDef v cc args = liftTCM $ do
+  r <- matchCompiled cc args
+  case r of
+    YesReduction t    -> return $ YesReduction t
+    NoReduction args' -> return $ NoReduction $ fmap (apply v) args'
 
-        n = genericLength ps
-        m = genericLength args
+appDef' :: Term -> [Clause] -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)
+appDef' _ [] _ = {- ' -} __IMPOSSIBLE__
+appDef' v cls@(Clause {clausePats = ps} : _) args
+  | m < n     = return $ NoReduction $ notBlocked $ v `apply` map ignoreReduced args
+  | otherwise = do
+    let (args0, args1) = splitAt n args
+    r <- goCls cls (map ignoreReduced args0)
+    case r of
+      YesReduction u -> return $ YesReduction $ u `apply` map ignoreReduced args1
+      NoReduction v  -> return $ NoReduction $ (`apply` map ignoreReduced args1) <$> v
+  where
 
-        goCls :: [Clause] -> Args -> TCM (Reduced (Blocked Term) Term)
-        goCls [] args = typeError $ IncompletePatternMatching v args
-        goCls (cl@(Clause { clausePats = pats
-                          , clauseBody = body }) : cls) args = do
-            (m, args) <- matchPatterns pats args
-            case m of
-                No		  -> goCls cls args
-                DontKnow Nothing  -> return $ NoReduction $ notBlocked $ v `apply` args
-                DontKnow (Just m) -> return $ NoReduction $ blocked m $ v `apply` args
-                Yes args'
-                  | hasBody body  -> return $ YesReduction (
-                      -- TODO: let matchPatterns also return the reduced forms
-                      -- of the original arguments!
-                      app args' body)
-                  | otherwise	  -> return $ NoReduction $ notBlocked $ v `apply` args
+    n = genericLength ps
+    m = genericLength args
 
-        hasBody (Body _) = True
-        hasBody NoBody   = False
-        hasBody (Bind b) = hasBody (unAbs b)
+    goCls :: [Clause] -> Args -> TCM (Reduced (Blocked Term) Term)
+    goCls [] args = typeError $ IncompletePatternMatching v args
+    goCls (cl@(Clause { clausePats = pats
+                      , clauseBody = body }) : cls) args = do
+        (m, args) <- matchPatterns pats args
+        case m of
+            No		  -> goCls cls args
+            DontKnow Nothing  -> return $ NoReduction $ notBlocked $ v `apply` args
+            DontKnow (Just m) -> return $ NoReduction $ blocked m $ v `apply` args
+            Yes args'
+              | hasBody body  -> return $ YesReduction (
+                  -- TODO: let matchPatterns also return the reduced forms
+                  -- of the original arguments!
+                  app args' body)
+              | otherwise	  -> return $ NoReduction $ notBlocked $ v `apply` args
 
-        app []		 (Body v') = v'
-        app (arg : args) (Bind b)  = app args $ absApp b arg -- CBN
-        app  _		  NoBody   = __IMPOSSIBLE__
-        app (_ : _)	 (Body _)  = __IMPOSSIBLE__
-        app []		 (Bind _)  = __IMPOSSIBLE__
+    hasBody (Body _) = True
+    hasBody NoBody   = False
+    hasBody (Bind b) = hasBody (unAbs b)
 
+    app []		 (Body v') = v'
+    app (arg : args) (Bind b)  = app args $ absApp b arg -- CBN
+    app  _		  NoBody   = __IMPOSSIBLE__
+    app (_ : _)	 (Body _)  = __IMPOSSIBLE__
+    app []		 (Bind _)  = __IMPOSSIBLE__
 
+
 instance Reduce a => Reduce (Closure a) where
     reduce cl = do
 	x <- enterClosure cl reduce
@@ -402,14 +466,14 @@
     return $ ValueCmp cmp t u v
   reduce (ElimCmp cmp t v as bs) =
     ElimCmp cmp <$> reduce t <*> reduce v <*> reduce as <*> reduce bs
-  reduce (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> reduce (u,v)
-  reduce (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> reduce (a,b)
+  reduce (LevelCmp cmp u v)    = uncurry (LevelCmp cmp) <$> reduce (u,v)
+  reduce (TypeCmp cmp a b)     = uncurry (TypeCmp cmp) <$> reduce (a,b)
   reduce (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp)  <$> reduce (tela,telb)
-  reduce (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> reduce (a,b)
-  reduce (Guarded c pid)      = Guarded <$> reduce c <*> pure pid
-  reduce (UnBlock m)          = return $ UnBlock m
-  reduce (FindInScope m)      = return $ FindInScope m
-  reduce (IsEmpty t)          = IsEmpty <$> reduce t
+  reduce (SortCmp cmp a b)     = uncurry (SortCmp cmp) <$> reduce (a,b)
+  reduce (Guarded c pid)       = Guarded <$> reduce c <*> pure pid
+  reduce (UnBlock m)           = return $ UnBlock m
+  reduce (FindInScope m cands) = FindInScope m <$> mapM reduce cands
+  reduce (IsEmpty r t)         = IsEmpty r <$> reduce t
 
 instance (Ord k, Reduce e) => Reduce (Map k e) where
     reduce = traverse reduce
@@ -446,6 +510,7 @@
 		Lam h b	    -> Lam h <$> normalise b
 		Sort s	    -> sortTm <$> normalise s
 		Pi a b	    -> uncurry Pi <$> normalise (a,b)
+                Shared{}    -> updateSharedTerm normalise v
                 DontCare _  -> return v
 
 instance Normalise Elim where
@@ -473,11 +538,15 @@
     normalise (Bind   b) = Bind   <$> normalise b
     normalise  NoBody	 = return NoBody
 
-instance (Raise t, Normalise t) => Normalise (Abs t) where
+instance (Subst t, Normalise t) => Normalise (Abs t) where
     normalise a@(Abs x _) = Abs x <$> underAbstraction_ a normalise
     normalise (NoAbs x v) = NoAbs x <$> normalise v
 
 instance Normalise t => Normalise (Arg t) where
+    normalise a@(Arg h Irrelevant t) = return a -- Andreas, 2012-04-02: Do not normalize irrelevant terms!?
+    normalise a = traverse normalise a
+
+instance Normalise t => Normalise (Dom t) where
     normalise = traverse normalise
 
 instance Normalise t => Normalise [t] where
@@ -496,7 +565,7 @@
 	x <- enterClosure cl normalise
 	return $ cl { clValue = x }
 
-instance (Raise a, Normalise a) => Normalise (Tele a) where
+instance (Subst a, Normalise a) => Normalise (Tele a) where
   normalise EmptyTel        = return EmptyTel
   normalise (ExtendTel a b) = uncurry ExtendTel <$> normalise (a, b)
 
@@ -509,14 +578,14 @@
     return $ ValueCmp cmp t u v
   normalise (ElimCmp cmp t v as bs) =
     ElimCmp cmp <$> normalise t <*> normalise v <*> normalise as <*> normalise bs
-  normalise (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> normalise (u,v)
-  normalise (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> normalise (a,b)
+  normalise (LevelCmp cmp u v)    = uncurry (LevelCmp cmp) <$> normalise (u,v)
+  normalise (TypeCmp cmp a b)     = uncurry (TypeCmp cmp) <$> normalise (a,b)
   normalise (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp) <$> normalise (tela,telb)
-  normalise (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> normalise (a,b)
-  normalise (Guarded c pid)      = Guarded <$> normalise c <*> pure pid
-  normalise (UnBlock m)          = return $ UnBlock m
-  normalise (FindInScope m)      = return $ FindInScope m
-  normalise (IsEmpty t)          = IsEmpty <$> normalise t
+  normalise (SortCmp cmp a b)     = uncurry (SortCmp cmp) <$> normalise (a,b)
+  normalise (Guarded c pid)       = Guarded <$> normalise c <*> pure pid
+  normalise (UnBlock m)           = return $ UnBlock m
+  normalise (FindInScope m cands) = FindInScope m <$> mapM normalise cands
+  normalise (IsEmpty r t)         = IsEmpty r <$> normalise t
 
 instance Normalise Pattern where
   normalise p = case p of
@@ -574,6 +643,7 @@
           Lam h b     -> Lam h <$> instantiateFull b
           Sort s      -> sortTm <$> instantiateFull s
           Pi a b      -> uncurry Pi <$> instantiateFull (a,b)
+          Shared{}    -> updateSharedTerm instantiateFull v
           DontCare v  -> DontCare <$> instantiateFull v
 
 instance InstantiateFull Level where
@@ -587,7 +657,7 @@
   instantiateFull l = case l of
     MetaLevel m vs -> do
       v <- instantiateFull (MetaV m vs)
-      case v of
+      case ignoreSharing v of
         MetaV m vs -> return $ MetaLevel m vs
         _          -> return $ UnreducedLevel v
     NeutralLevel v -> NeutralLevel <$> instantiateFull v
@@ -608,13 +678,16 @@
     instantiateFull (Bind   b) = Bind   <$> instantiateFull b
     instantiateFull  NoBody    = return NoBody
 
-instance (Raise t, InstantiateFull t) => InstantiateFull (Abs t) where
+instance (Subst t, InstantiateFull t) => InstantiateFull (Abs t) where
     instantiateFull a@(Abs x _) = Abs x <$> underAbstraction_ a instantiateFull
     instantiateFull (NoAbs x a) = NoAbs x <$> instantiateFull a
 
 instance InstantiateFull t => InstantiateFull (Arg t) where
     instantiateFull = traverse instantiateFull
 
+instance InstantiateFull t => InstantiateFull (Dom t) where
+    instantiateFull = traverse instantiateFull
+
 instance InstantiateFull t => InstantiateFull [t] where
     instantiateFull = traverse instantiateFull
 
@@ -641,14 +714,14 @@
       return $ ValueCmp cmp t u v
     ElimCmp cmp t v as bs ->
       ElimCmp cmp <$> instantiateFull t <*> instantiateFull v <*> instantiateFull as <*> instantiateFull bs
-    LevelCmp cmp u v   -> uncurry (LevelCmp cmp) <$> instantiateFull (u,v)
-    TypeCmp cmp a b    -> uncurry (TypeCmp cmp) <$> instantiateFull (a,b)
+    LevelCmp cmp u v    -> uncurry (LevelCmp cmp) <$> instantiateFull (u,v)
+    TypeCmp cmp a b     -> uncurry (TypeCmp cmp) <$> instantiateFull (a,b)
     TelCmp a b cmp tela telb -> uncurry (TelCmp a b cmp) <$> instantiateFull (tela,telb)
-    SortCmp cmp a b    -> uncurry (SortCmp cmp) <$> instantiateFull (a,b)
-    Guarded c pid      -> Guarded <$> instantiateFull c <*> pure pid
-    UnBlock m          -> return $ UnBlock m
-    FindInScope m      -> return $ FindInScope m
-    IsEmpty t          -> IsEmpty <$> instantiateFull t
+    SortCmp cmp a b     -> uncurry (SortCmp cmp) <$> instantiateFull (a,b)
+    Guarded c pid       -> Guarded <$> instantiateFull c <*> pure pid
+    UnBlock m           -> return $ UnBlock m
+    FindInScope m cands -> FindInScope m <$> mapM instantiateFull cands
+    IsEmpty r t         -> IsEmpty r <$> instantiateFull t
 
 instance InstantiateFull Elim where
   instantiateFull (Apply v) = Apply <$> instantiateFull v
@@ -657,6 +730,9 @@
 instance (Ord k, InstantiateFull e) => InstantiateFull (Map k e) where
     instantiateFull = traverse instantiateFull
 
+instance (Eq k, Hashable k, InstantiateFull e) => InstantiateFull (HashMap k e) where
+    instantiateFull = traverse instantiateFull
+
 instance InstantiateFull ModuleName where
     instantiateFull = return
 
@@ -669,7 +745,7 @@
 instance InstantiateFull Section where
   instantiateFull (Section tel n) = flip Section n <$> instantiateFull tel
 
-instance (Raise a, InstantiateFull a) => InstantiateFull (Tele a) where
+instance (Subst a, InstantiateFull a) => InstantiateFull (Tele a) where
   instantiateFull EmptyTel = return EmptyTel
   instantiateFull (ExtendTel a b) = uncurry ExtendTel <$> instantiateFull (a, b)
 
@@ -677,9 +753,9 @@
     instantiateFull = return
 
 instance InstantiateFull Definition where
-    instantiateFull (Defn rel x t df i c d) = do
+    instantiateFull (Defn rel x t pol occ df i c d) = do
       (t, (df, d)) <- instantiateFull (t, (df, d))
-      return $ Defn rel x t df i c d
+      return $ Defn rel x t pol occ df i c d
 
 instance InstantiateFull a => InstantiateFull (Open a) where
   instantiateFull (OpenThing n a) = OpenThing n <$> instantiateFull a
@@ -718,6 +794,9 @@
   instantiateFull NotInjective = return NotInjective
   instantiateFull (Inverse inv) = Inverse <$> instantiateFull inv
 
+instance InstantiateFull a => InstantiateFull (WithArity a) where
+  instantiateFull (WithArity n a) = WithArity n <$> instantiateFull a
+
 instance InstantiateFull a => InstantiateFull (Case a) where
   instantiateFull (Branches cs ls m) =
     Branches <$> instantiateFull cs
@@ -738,28 +817,36 @@
 
 instance InstantiateFull Interface where
     instantiateFull (Interface ms mod scope inside
-                               sig b hsImports highlighting pragmas) =
+                               sig b hsImports highlighting pragmas patsyns) =
 	Interface ms mod scope inside
 	    <$> instantiateFull sig
 	    <*> instantiateFull b
             <*> return hsImports
             <*> return highlighting
             <*> return pragmas
+            <*> return patsyns
 
 instance InstantiateFull a => InstantiateFull (Builtin a) where
     instantiateFull (Builtin t) = Builtin <$> instantiateFull t
     instantiateFull (Prim x)	= Prim <$> instantiateFull x
 
+instance InstantiateFull QName where
+  instantiateFull = return
+
 instance InstantiateFull a => InstantiateFull (Maybe a) where
   instantiateFull = mapM instantiateFull
 
+
+{- DUPLICATE of Telescope.telView
+
 -- | @telViewM t@ is like @telView' t@, but it reduces @t@ to expose
 --   function type constructors.
 telViewM :: Type -> TCM TelView
 telViewM t = do
   t <- reduce t -- also instantiates meta if in head position
-  case unEl t of
+  case ignoreSharing $ unEl t of
     Pi a b -> absV a (absName b) <$> telViewM (absBody b)
     _      -> return $ TelV EmptyTel t
   where
     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t
+-}
diff --git a/src/full/Agda/TypeChecking/Rules/Builtin.hs b/src/full/Agda/TypeChecking/Rules/Builtin.hs
--- a/src/full/Agda/TypeChecking/Rules/Builtin.hs
+++ b/src/full/Agda/TypeChecking/Rules/Builtin.hs
@@ -20,7 +20,8 @@
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Pretty
-
+import Agda.TypeChecking.Irrelevance
+import Agda.TypeChecking.SizedTypes ( builtinSizeHook )
 import Agda.TypeChecking.Rules.Term ( checkExpr , inferExpr )
 import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction
 
@@ -33,19 +34,22 @@
 -- * Checking builtin pragmas
 ---------------------------------------------------------------------------
 
+builtinPostulate :: TCM Type -> BuiltinDescriptor
+builtinPostulate = BuiltinPostulate Relevant
+
 coreBuiltins :: [BuiltinInfo]
 coreBuiltins = map (\(x,z) -> BuiltinInfo x z)
   [ (builtinList               |-> BuiltinData (tset --> tset) [builtinNil, builtinCons])
   , (builtinArg                |-> BuiltinData (tset --> tset) [builtinArgArg])
   , (builtinBool               |-> BuiltinData tset [builtinTrue, builtinFalse])
   , (builtinNat                |-> BuiltinData tset [builtinZero, builtinSuc])
-  , (builtinLevel              |-> BuiltinPostulate tset)
-  , (builtinInteger            |-> BuiltinPostulate tset)
-  , (builtinFloat              |-> BuiltinPostulate tset)
-  , (builtinChar               |-> BuiltinPostulate tset)
-  , (builtinString             |-> BuiltinPostulate tset)
-  , (builtinQName              |-> BuiltinPostulate tset)
-  , (builtinIO                 |-> BuiltinPostulate (tset --> tset))
+  , (builtinLevel              |-> builtinPostulate tset)
+  , (builtinInteger            |-> builtinPostulate tset)
+  , (builtinFloat              |-> builtinPostulate tset)
+  , (builtinChar               |-> builtinPostulate tset)
+  , (builtinString             |-> builtinPostulate tset)
+  , (builtinQName              |-> builtinPostulate tset)
+  , (builtinIO                 |-> builtinPostulate (tset --> tset))
   , (builtinAgdaSort           |-> BuiltinData tset [builtinAgdaSortSet, builtinAgdaSortLit, builtinAgdaSortUnsupported])
   , (builtinAgdaType           |-> BuiltinData tset [builtinAgdaTypeEl])
   , (builtinAgdaTerm           |-> BuiltinData tset
@@ -55,15 +59,15 @@
                                      ,builtinAgdaTermUnsupported])
   , (builtinEquality           |-> BuiltinData (hPi "a" (el primLevel) $
                                                 hPi "A" (return $ sort $ varSort 0) $
-                                                (El (varSort 1) <$> var 0) -->
-                                                (El (varSort 1) <$> var 0) -->
+                                                (El (varSort 1) <$> varM 0) -->
+                                                (El (varSort 1) <$> varM 0) -->
                                                 return (sort $ varSort 1))
                                                [builtinRefl])
   , (builtinHiding             |-> BuiltinData tset [builtinHidden, builtinInstance, builtinVisible])
   , (builtinRelevance          |-> BuiltinData tset [builtinRelevant, builtinIrrelevant])
   , (builtinRefl               |-> BuiltinDataCons (hPi "a" (el primLevel) $ hPi "A" (return $ sort $ varSort 0) $
-                                                    hPi "x" (El (varSort 1) <$> var 0) $
-                                                    El (varSort 2) <$> primEquality <#> var 2 <#> var 1 <@> var 0 <@> var 0))
+                                                    hPi "x" (El (varSort 1) <$> varM 0) $
+                                                    El (varSort 2) <$> primEquality <#> varM 2 <#> varM 1 <@> varM 0 <@> varM 0))
   , (builtinNil                |-> BuiltinDataCons (hPi "A" tset (el (list v0))))
   , (builtinCons               |-> BuiltinDataCons (hPi "A" tset (tv0 --> el (list v0) --> el (list v0))))
   , (builtinZero               |-> BuiltinDataCons tnat)
@@ -84,9 +88,17 @@
   , (builtinVisible            |-> BuiltinDataCons thiding)
   , (builtinRelevant           |-> BuiltinDataCons trelevance)
   , (builtinIrrelevant         |-> BuiltinDataCons trelevance)
-  , (builtinSize               |-> BuiltinPostulate tset)
-  , (builtinSizeSuc            |-> BuiltinPostulate (tsize --> tsize))
-  , (builtinSizeInf            |-> BuiltinPostulate tsize)
+  , (builtinSize               |-> builtinPostulate tset)
+  , (builtinSizeLt             |-> builtinPostulate (tsize --> tset))
+  , (builtinSizeSuc            |-> builtinPostulate (tsize --> tsize))
+  , (builtinSizeInf            |-> builtinPostulate tsize)
+  -- postulate max : {i : Size} -> Size< i -> Size< i -> Size< i
+  , (builtinSizeMax            |-> builtinPostulate (tsize --> tsize --> tsize))
+     -- (hPi "i" tsize $ let a = el $ primSizeLt <@> v0 in (a --> a --> a)))
+  -- postulate .irrelevant : {a : Level}{A : Set a} -> .A -> A
+  , (builtinIrrAxiom           |-> BuiltinPostulate Irrelevant
+                                     (hPi "a" (el primLevel) $ hPi "A" (return $ sort $ varSort 0) $
+                                      (El (varSort 1) <$> varM 0) .--> (El (varSort 1) <$> varM 0)))
   , (builtinAgdaSortSet        |-> BuiltinDataCons (tterm --> tsort))
   , (builtinAgdaSortLit        |-> BuiltinDataCons (tnat --> tsort))
   , (builtinAgdaSortUnsupported|-> BuiltinDataCons tsort)
@@ -100,9 +112,9 @@
   , (builtinLevelZero          |-> BuiltinPrim "primLevelZero" (const $ return ()))
   , (builtinLevelSuc           |-> BuiltinPrim "primLevelSuc" (const $ return ()))
   , (builtinLevelMax           |-> BuiltinPrim "primLevelMax" verifyMax)
-  , (builtinAgdaFunDef                |-> BuiltinPostulate tset) -- internally this is QName
-  , (builtinAgdaDataDef               |-> BuiltinPostulate tset) -- internally this is QName
-  , (builtinAgdaRecordDef             |-> BuiltinPostulate tset) -- internally this is QName
+  , (builtinAgdaFunDef                |-> builtinPostulate tset) -- internally this is QName
+  , (builtinAgdaDataDef               |-> builtinPostulate tset) -- internally this is QName
+  , (builtinAgdaRecordDef             |-> builtinPostulate tset) -- internally this is QName
   , (builtinAgdaDefinition            |-> BuiltinData tset [builtinAgdaDefinitionFunDef
                                                            ,builtinAgdaDefinitionDataDef
                                                            ,builtinAgdaDefinitionDataConstructor
@@ -119,8 +131,8 @@
   where
         (|->) = (,)
 
-        v0 = var 0
-        v1 = var 1
+        v0 = varM 0
+        v1 = varM 1
 
         tv0,tv1 :: TCM Type
         tv0 = el v0
@@ -137,7 +149,7 @@
         tsize      = el primSize
         tbool      = el primBool
         thiding    = el primHiding
-        trelevance = el primRelvance
+        trelevance = el primRelevance
         ttype      = el primAgdaType
         tsort      = el primAgdaSort
         tdefn      = el primAgdaDefinition
@@ -147,8 +159,8 @@
 
         verifyPlus plus =
             verify ["n","m"] $ \(@@) zero suc (==) choice -> do
-                let m = Var 0 []
-                    n = Var 1 []
+                let m = var 0
+                    n = var 1
                     x + y = plus @@ x @@ y
 
                 -- We allow recursion on any argument
@@ -161,8 +173,8 @@
 
         verifyMinus minus =
             verify ["n","m"] $ \(@@) zero suc (==) choice -> do
-                let m = Var 0 []
-                    n = Var 1 []
+                let m = var 0
+                    n = var 1
                     x - y = minus @@ x @@ y
 
                 -- We allow recursion on any argument
@@ -174,8 +186,8 @@
         verifyTimes times = do
             plus <- primNatPlus
             verify ["n","m"] $ \(@@) zero suc (==) choice -> do
-                let m = Var 0 []
-                    n = Var 1 []
+                let m = var 0
+                    n = var 1
                     x + y = plus  @@ x @@ y
                     x * y = times @@ x @@ y
 
@@ -193,10 +205,10 @@
         verifyDivSucAux dsAux =
             verify ["k","m","n","j"] $ \(@@) zero suc (==) choice -> do
                 let aux k m n j = dsAux @@ k @@ m @@ n @@ j
-                    k           = Var 0 []
-                    m           = Var 1 []
-                    n           = Var 2 []
-                    j           = Var 3 []
+                    k           = var 0
+                    m           = var 1
+                    n           = var 2
+                    j           = var 3
 
                 aux k m zero    j       == k
                 aux k m (suc n) zero    == aux (suc k) m n m
@@ -205,10 +217,10 @@
         verifyModSucAux dsAux =
             verify ["k","m","n","j"] $ \(@@) zero suc (==) choice -> do
                 let aux k m n j = dsAux @@ k @@ m @@ n @@ j
-                    k           = Var 0 []
-                    m           = Var 1 []
-                    n           = Var 2 []
-                    j           = Var 3 []
+                    k           = var 0
+                    m           = var 1
+                    n           = var 2
+                    j           = var 3
 
                 aux k m zero    j       == k
                 aux k m (suc n) zero    == aux zero m n m
@@ -219,8 +231,8 @@
             true  <- primTrue
             false <- primFalse
             let x == y = eq @@ x @@ y
-                m      = Var 0 []
-                n      = Var 1 []
+                m      = var 0
+                n      = var 1
             (zero  == zero ) === true
             (suc n == suc m) === (n == m)
             (suc n == zero ) === false
@@ -231,8 +243,8 @@
             true  <- primTrue
             false <- primFalse
             let x < y = leq @@ x @@ y
-                m     = Var 0 []
-                n     = Var 1 []
+                m     = var 0
+                n     = var 1
             (n     < zero)  === false
             (suc n < suc m) === (n < m)
             (zero  < suc m) === true
@@ -254,14 +266,14 @@
                 suc n  = s @@ n
                 choice = foldr1 (\x y -> x `catchError` \_ -> y)
             xs <- mapM freshName_ xs
-            addCtxs xs (defaultArg nat) $ f (@@) zero suc (==) choice
+            addCtxs xs (domFromArg $ defaultArg nat) $ f (@@) zero suc (==) choice
 
 
 inductiveCheck :: String -> Int -> Term -> TCM ()
 inductiveCheck b n t = do
     t <- etaContract =<< normalise t
     let err = typeError (NotInductive t)
-    case t of
+    case ignoreSharing t of
       Def t _ -> do
         t <- theDef <$> getConstInfo t
         case t of
@@ -313,8 +325,8 @@
                              level <- getBuiltin' builtinLevel
                              case (nat, level) of
                                (Just nat, Just level) -> do
-                                  Def nat   _ <- normalise nat
-                                  Def level _ <- normalise level
+                                  Def nat   _ <- ignoreSharing <$> normalise nat
+                                  Def level _ <- ignoreSharing <$> normalise level
                                   when (nat == level) $ typeError $ GenericError $
                                     builtinNat ++ " and " ++ builtinLevel ++
                                     " have to be different types."
@@ -323,9 +335,10 @@
 
       BuiltinDataCons t -> do
 
-        let name (Lam h b) = name (absBody b)
-            name (Con c _) = Con c []
-            name _         = __IMPOSSIBLE__
+        let name (Lam h b)  = name (absBody b)
+            name (Con c _)  = Con c []
+            name (Shared p) = name $ ignoreSharing (derefPtr p)
+            name _          = __IMPOSSIBLE__
 
         e' <- checkExpr e =<< t
 
@@ -356,15 +369,18 @@
 
 	  _ -> typeError $ GenericError $ "Builtin " ++ s ++ " must be bound to a function"
 
-      BuiltinPostulate t -> do
-        e' <- checkExpr e =<< t
+      BuiltinPostulate rel t -> do
+        t' <- t
+        e' <- applyRelevanceToContext rel $ checkExpr e t'
         let err = typeError $ GenericError $
                     "The argument to BUILTIN " ++ s ++ " must be a postulated name"
         case e of
           A.Def q -> do
             def <- ignoreAbstractMode $ getConstInfo q
             case theDef def of
-              Axiom {} -> bindBuiltinName s e'
+              Axiom {} -> do
+                builtinSizeHook s q e' t'
+                bindBuiltinName s e'
               _        -> err
           _ -> err
 
diff --git a/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs b/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs
--- a/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs
+++ b/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs
@@ -7,7 +7,6 @@
 module Agda.TypeChecking.Rules.Builtin.Coinduction where
 
 import Control.Applicative
-import Control.Monad.Error
 
 import qualified Data.Map as Map
 
@@ -31,27 +30,27 @@
 
 #include "../../../undefined.h"
 
--- | The type of @&#x221e@.
+-- | The type of @∞@.
 
 typeOfInf :: TCM Type
 typeOfInf = hPi "a" (el primLevel) $
             (return . sort $ varSort 0) --> (return . sort $ varSort 0)
 
--- | The type of @&#x266f_@.
+-- | The type of @♯_@.
 
 typeOfSharp :: TCM Type
 typeOfSharp = hPi "a" (el primLevel) $
               hPi "A" (return . sort $ varSort 0) $
-              (El (varSort 1) <$> var 0) -->
-              (El (varSort 1) <$> primInf <#> var 1 <@> var 0)
+              (El (varSort 1) <$> varM 0) -->
+              (El (varSort 1) <$> primInf <#> varM 1 <@> varM 0)
 
--- | The type of @&#x266d@.
+-- | The type of @♭@.
 
 typeOfFlat :: TCM Type
 typeOfFlat = hPi "a" (el primLevel) $
              hPi "A" (return . sort $ varSort 0) $
-             (El (varSort 1) <$> primInf <#> var 1 <@> var 0) -->
-             (El (varSort 1) <$> var 0)
+             (El (varSort 1) <$> primInf <#> varM 1 <@> varM 0) -->
+             (El (varSort 1) <$> varM 0)
 
 -- | Binds the INFINITY builtin, but does not change the type's
 -- definition.
@@ -65,27 +64,30 @@
 
 -- The following (no longer supported) definition is used:
 --
--- codata &#x221e {a} (A : Set a) : Set a where
---   &#x266f_ : (x : A) → &#x221e A
+-- codata ∞ {a} (A : Set a) : Set a where
+--   ♯_ : (x : A) → ∞ A
 
 bindBuiltinSharp :: A.Expr -> TCM ()
 bindBuiltinSharp e =
   bindPostulatedName builtinSharp e $ \sharp sharpDefn -> do
-    sharpE  <- instantiateFull =<< checkExpr (A.Def sharp) =<< typeOfSharp
-    inf     <- primInf
-    infDefn <- case inf of
-      Def inf _ -> getConstInfo inf
-      _         -> __IMPOSSIBLE__
+    sharpE    <- instantiateFull =<< checkExpr (A.Def sharp) =<< typeOfSharp
+    Def inf _ <- ignoreSharing <$> primInf
+    infDefn   <- getConstInfo inf
     addConstant (defName infDefn) $
-      infDefn { theDef = Datatype
+      infDefn { defPolarity       = [] -- not monotone
+              , defArgOccurrences = [Unused, StrictPos]
+              , theDef = Datatype
                   { dataPars           = 2
                   , dataIxs            = 0
                   , dataInduction      = CoInductive
                   , dataClause         = Nothing
                   , dataCons           = [sharp]
                   , dataSort           = varSort 1
+{-
                   , dataPolarity       = [Invariant, Invariant]
-                  , dataArgOccurrences = [Unused, Positive]
+                  , dataArgOccurrences = [Unused, StrictPos]
+-}
+                  , dataMutual         = []
                   , dataAbstr          = ConcreteDef
                   }
               }
@@ -104,74 +106,53 @@
 
 -- The following (no longer supported) definition is used:
 --
---   &#x266d : ∀ {a} {A : Set a} → &#x221e A → A
---   &#x266d (&#x266f x) = x
+--   ♭ : ∀ {a} {A : Set a} → ∞ A → A
+--   ♭ (♯ x) = x
 
 bindBuiltinFlat :: A.Expr -> TCM ()
 bindBuiltinFlat e =
   bindPostulatedName builtinFlat e $ \flat flatDefn -> do
-    flatE  <- instantiateFull =<< checkExpr (A.Def flat) =<< typeOfFlat
-    sharp  <- (\t -> case t of
-                 Def q _ -> q
-                 _       -> __IMPOSSIBLE__)
-              <$> primSharp
-    kit    <- requireLevels
+    flatE       <- instantiateFull =<< checkExpr (A.Def flat) =<< typeOfFlat
+    Def sharp _ <- ignoreSharing <$> primSharp
+    kit         <- requireLevels
+    Def inf _   <- ignoreSharing <$> primInf
     let clause = Clause { clauseRange = noRange
-                        , clauseTel   = ExtendTel (argH (El (mkType 0) (Def (typeName kit) [])))
-                                                  (Abs "a" (ExtendTel (argH $ sort $ varSort 0)
-                                                                      (Abs "A" (ExtendTel (argN (El (varSort 1) (Var 0 [])))
+                        , clauseTel   = ExtendTel (domH (El (mkType 0) (Def (typeName kit) [])))
+                                                  (Abs "a" (ExtendTel (domH $ sort $ varSort 0)
+                                                                      (Abs "A" (ExtendTel (domN (El (varSort 1) (var 0)))
                                                                                           (Abs "x" EmptyTel)))))
-                        , clausePerm  = idP 3
-                        , clausePats  = [ argH (VarP "a")
-                                        , argH (VarP "A")
-                                        , argN (ConP sharp Nothing [argN (VarP "x")])
+                        , clausePerm  = idP 1
+                        , clausePats  = [ argN (ConP sharp Nothing [argN (VarP "x")])
                                         ]
-                        , clauseBody  = Bind $ Abs "h0" $
-                                        Bind $ Abs "h1" $
-                                        Bind $ Abs "h2" $ Body (Var 0 [])
+                        , clauseBody  = Bind $ Abs "x" $ Body (var 0)
                         }
     addConstant flat $
-      flatDefn { theDef = Function
+      flatDefn { defPolarity = []
+               , defArgOccurrences = [StrictPos]
+               , theDef = Function
                    { funClauses        = [clause]
                    , funCompiled       =
                       let hid   = Arg Hidden Relevant
                           nohid = defaultArg in
-                      Case 2 (Branches (Map.singleton sharp
-                                 (Done [hid "a", hid "A", nohid "x"] (Var 0 [])))
+                      Case 0 (Branches (Map.singleton sharp
+                                 (WithArity 1 (Done [nohid "x"] (var 0))))
                                Map.empty
                                Nothing)
                    , funInv            = NotInjective
-                   , funPolarity       = [Invariant, Invariant, Invariant]
-                   , funArgOccurrences = [Unused, Unused, Positive]
+{-
+                   , funPolarity       = [Invariant]
+                   , funArgOccurrences = [StrictPos] -- changing that to [Mixed] destroys monotonicity of 'Rec' in test/succeed/GuardednessPreservingTypeConstructors
+-}
+                   , funMutual         = []
                    , funAbstr          = ConcreteDef
                    , funDelayed        = NotDelayed
-                   , funProjection     = Nothing
-                     {- flat is a projection, but in the termination checker
-                        it destroys the (inductive) structural ordering.
-                        Thus, we do not register it as a projection. -}
+                   , funProjection     = Just (inf, 3)
                    , funStatic         = False
+                   , funCopy           = False
+                   , funTerminates     = Just True
                    }
                 }
     return flatE
 
--- | The coinductive primitives.
-
-data CoinductionKit = CoinductionKit
-  { nameOfInf   :: QName
-  , nameOfSharp :: QName
-  , nameOfFlat  :: QName
-  }
-
--- | Tries to build a 'CoinductionKit'.
-
-coinductionKit :: TCM (Maybe CoinductionKit)
-coinductionKit = (do
-  Def inf   _ <- primInf
-  Def sharp _ <- primSharp
-  Def flat  _ <- primFlat
-  return $ Just $ CoinductionKit
-    { nameOfInf   = inf
-    , nameOfSharp = sharp
-    , nameOfFlat  = flat
-    })
-    `catchError` \_ -> return Nothing
+-- The coinductive primitives.
+-- moved to TypeChecking.Monad.Builtin
diff --git a/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs-boot b/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs-boot
--- a/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs-boot
+++ b/src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs-boot
@@ -7,9 +7,11 @@
 bindBuiltinSharp :: Expr -> TCM ()
 bindBuiltinFlat  :: Expr -> TCM ()
 
+{- MOVED to TypeChecking.Monad.Builtin
 data CoinductionKit
 nameOfInf   :: CoinductionKit -> QName
 nameOfSharp :: CoinductionKit -> QName
 nameOfFlat  :: CoinductionKit -> QName
 
 coinductionKit :: TCM (Maybe CoinductionKit)
+-}
diff --git a/src/full/Agda/TypeChecking/Rules/Data.hs b/src/full/Agda/TypeChecking/Rules/Data.hs
--- a/src/full/Agda/TypeChecking/Rules/Data.hs
+++ b/src/full/Agda/TypeChecking/Rules/Data.hs
@@ -6,6 +6,8 @@
 import Control.Monad
 import Control.Monad.Trans
 
+import Data.List (genericTake)
+
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Internal
 import Agda.Syntax.Common
@@ -25,10 +27,11 @@
 import Agda.TypeChecking.Irrelevance
 import Agda.TypeChecking.Telescope
 
-import Agda.TypeChecking.Rules.Term ( isType_ )
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Term ( isType_ )
 
 import Agda.Interaction.Options
 
+import Agda.Utils.List
 import Agda.Utils.Monad
 import Agda.Utils.Size
 import Agda.Utils.Tuple
@@ -69,6 +72,7 @@
 
 	    -- The type we get from bindParameters is Θ -> s where Θ is the type of
 	    -- the indices. We count the number of indices and return s.
+            -- We check that s is a sort.
             (nofIxs, s) <- splitType t0
 
             when (any (`freeIn` s) [0..nofIxs - 1]) $ do
@@ -99,12 +103,16 @@
                                    , dataCons           = []     -- Constructors are added later
 				   , dataSort           = s
                                    , dataAbstr          = Info.defAbstract i
+{-
+                                   -- determined by the positivity checker:
                                    , dataPolarity       = []
                                    , dataArgOccurrences = []
+-}
+                                   , dataMutual         = []
                                    }
 
 	    escapeContext (size tel) $ do
-	      addConstant name ( Defn Relevant name t (defaultDisplayForm name) 0 noCompiledRep dataDef )
+	      addConstant name ( Defn Relevant name t [] [] (defaultDisplayForm name) 0 noCompiledRep dataDef )
 
 	    -- Check the types of the constructors
 	    mapM_ (checkConstructor name tel' nofIxs s) cs
@@ -128,10 +136,11 @@
 
 	-- Add the datatype to the signature with its constructors. It was previously
 	-- added without them.
-	addConstant name (Defn Relevant name t (defaultDisplayForm name) 0 noCompiledRep $
+	addConstant name (Defn Relevant name t [] [] (defaultDisplayForm name) 0 noCompiledRep $
                             dataDef { dataCons = map cname cs }
 			 )
-        computePolarity name
+        -- Andreas 2012-02-13: postpone polarity computation until after positivity check
+        -- computePolarity name
     where
 	cname (A.ScopedDecl _ [d]) = cname d
 	cname (A.Axiom _ _ x _)	   = x
@@ -140,12 +149,14 @@
 	hideTel  EmptyTel		  = EmptyTel
 	hideTel (ExtendTel a tel) = ExtendTel (hideAndRelParams a) $ hideTel <$> tel
 
-	splitType (El _ (Pi _ b))  = ((+ 1) -*- id) <$> splitType (absBody b)
-	splitType (El _ (Sort s))  = return (0, s)
-	splitType a                = do
-          s <- newSortMeta
-          equalType a (sort s)
-          return (0, s)
+        splitType :: Type -> TCM (Int, Sort)
+        splitType t = case ignoreSharing $ unEl t of
+          Pi a b -> ((+ 1) -*- id) <$> do addCtxString (absName b) a $ splitType (absBody b)
+          Sort s -> return (0, s)
+	  _      -> do
+            s <- newSortMeta
+            equalType t (sort s)
+            return (0, s)
 
 -- | Type check a constructor declaration. Checks that the constructor targets
 --   the datatype and that it fits inside the declared sort.
@@ -182,7 +193,7 @@
         -- add parameters to constructor type and put into signature
         escapeContext (size tel)
 	    $ addConstant c
-	    $ Defn Relevant c (telePi tel t') (defaultDisplayForm c) 0 noCompiledRep
+	    $ Defn Relevant c (telePi tel t') [] [] (defaultDisplayForm c) 0 noCompiledRep
 	    $ Constructor (size tel) c d (Info.defAbstract i) Inductive
   where
     debugEnter c e =
@@ -217,15 +228,19 @@
 bindParameters (A.DomainFull (A.TypedBindings _ (Arg h rel (A.TNoBind _))) : bs) a ret = do
   x <- freshNoName_
   bindParameters (A.DomainFree h rel x : bs) a ret
-bindParameters (A.DomainFree h rel x : ps) (El _ (Pi (Arg h' rel' a) b)) ret
+bindParameters ps0@(A.DomainFree h rel x : ps) (El _ (Pi arg@(Dom h' rel' a) b)) ret
   -- Andreas, 2011-04-07 ignore relevance information in binding?!
     | h /= h' =
 	__IMPOSSIBLE__
     | otherwise = addCtx x arg $ bindParameters ps (absBody b) $ \tel s ->
 		    ret (ExtendTel arg $ Abs (show x) tel) s
-  where
-    arg = Arg h rel' a
-bindParameters _ _ _ = __IMPOSSIBLE__
+bindParameters bs (El s (Shared p)) ret = bindParameters bs (El s $ derefPtr p) ret
+bindParameters (b : bs) t _ = __IMPOSSIBLE__
+{- Andreas, 2012-01-17 Concrete.Definitions ensures number and hiding of parameters to be correct
+-- Andreas, 2012-01-13 due to separation of data declaration/definition, the user
+-- could give more parameters than declared.
+bindParameters (b : bs) t _ = typeError $ DataTooManyParameters
+-}
 
 
 -- | Check that the arguments to a constructor fits inside the sort of the datatype.
@@ -242,12 +257,12 @@
   -- The line below would be simpler, but doesn't allow datatypes
   -- to be indexed by the universe level.
 --   noConstraints $ s' `leqSort` s
-  case unEl t of
-    Pi arg@(Arg h r a) _ -> do
+  case ignoreSharing $ unEl t of
+    Pi arg@(Dom h r a) _ -> do
       let s' = getSort a
       s' `leqSort` s
       x <- freshName_ (argName t)
-      let v  = Arg h r $ Var 0 []
+      let v  = Arg h r $ var 0
           t' = piApply (raise 1 t) [v]
       addCtx x arg $ fitsIn t' (raise 1 s)
     _		     -> return ()
@@ -264,7 +279,7 @@
         constr :: Nat -> Sort -> Term -> TCM ()
 	constr n s v = do
 	    v <- reduce v
-	    case v of
+	    case ignoreSharing v of
 		Pi _ (NoAbs _ b) -> constrT n b
 		Pi a b	-> underAbstraction a b $ \t ->
 			   constrT (n + 1) t
@@ -277,21 +292,24 @@
 
 	checkParams n vs = zipWithM_ sameVar vs ps
 	    where
-		ps = reverse [ i | (i,_) <- zip [n..] vs ]
+--		ps = reverse [ i | (i,_) <- zip [n..] vs ]
+                nvs = size vs
+		ps = genericTake nvs $ downFrom (n + nvs)
 
 		sameVar arg i
                   -- skip irrelevant parameters
                   | argRelevance arg == Irrelevant = return ()
 		  | otherwise = do
 		    t <- typeOfBV i
-		    equalTerm t (unArg arg) (Var i [])
+		    equalTerm t (unArg arg) (var i)
 
+{- UNUSED, Andreas 2012-09-13
 -- | Force a type to be a specific datatype.
 forceData :: QName -> Type -> TCM Type
 forceData d (El s0 t) = liftTCM $ do
     t' <- reduce t
     d  <- canonicalName d
-    case t' of
+    case ignoreSharing t' of
 	Def d' _
 	    | d == d'   -> return $ El s0 t'
 	    | otherwise	-> fail $ "wrong datatype " ++ show d ++ " != " ++ show d'
@@ -301,14 +319,15 @@
 	    noConstraints $ leqType (El s0 t') (El s (Def d ps)) -- TODO: need equalType?
 	    reduce $ El s0 t'
 	_ -> typeError $ ShouldBeApplicationOf (El s0 t) d
+-}
 
 -- | Is the type coinductive? Returns 'Nothing' if the answer cannot
 -- be determined.
 
 isCoinductive :: Type -> TCM (Maybe Bool)
 isCoinductive t = do
-  El _ t <- normalise t
-  case t of
+  El s t <- normalise t
+  case ignoreSharing t of
     Def q _ -> do
       def <- getConstInfo q
       case theDef def of
@@ -327,4 +346,5 @@
     Pi    {} -> return (Just False)
     Sort  {} -> return (Just False)
     MetaV {} -> return Nothing
+    Shared{} -> __IMPOSSIBLE__
     DontCare{} -> __IMPOSSIBLE__
diff --git a/src/full/Agda/TypeChecking/Rules/Decl.hs b/src/full/Agda/TypeChecking/Rules/Decl.hs
--- a/src/full/Agda/TypeChecking/Rules/Decl.hs
+++ b/src/full/Agda/TypeChecking/Rules/Decl.hs
@@ -1,12 +1,21 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, TupleSections #-}
 
 module Agda.TypeChecking.Rules.Decl where
 
 import Control.Monad
+import Control.Monad.Error
+import Control.Monad.Reader
 import Control.Monad.Trans
+import Control.Monad.State (modify)
+
+import qualified Data.Foldable as Fold
+import Data.Maybe
 import qualified Data.Map as Map
 import Data.Map (Map)
-import qualified Agda.Utils.IO.Locale as LocIO
+import qualified Data.List as List
+import qualified Data.Set as Set
+import Data.Set (Set)
+import Data.Sequence ((|>))
 
 import Agda.Syntax.Abstract (AnyAbstract(..))
 import qualified Agda.Syntax.Abstract as A
@@ -15,19 +24,24 @@
 import Agda.Syntax.Position
 import Agda.Syntax.Common
 
+import Agda.TypeChecking.Errors
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Monad.Mutual
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Positivity
+import Agda.TypeChecking.Polarity
 import Agda.TypeChecking.Primitive hiding (Nat)
+import Agda.TypeChecking.ProjectionLike
 import Agda.TypeChecking.Conversion
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.SizedTypes
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Forcing
+import Agda.TypeChecking.Injectivity
+import Agda.TypeChecking.InstanceArguments (solveIrrelevantMetas)
 
 import Agda.TypeChecking.Rules.Term
 import Agda.TypeChecking.Rules.Data    ( checkDataDef )
@@ -39,7 +53,14 @@
 
 import Agda.Utils.Size
 import Agda.Utils.Monad
+import qualified Agda.Utils.HashMap as HMap
+-- import Agda.Utils.NubList -- reverted
 
+import Agda.Interaction.Highlighting.Generate
+
+import Agda.Termination.TermCheck
+import Agda.Interaction.Options
+
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
@@ -51,64 +72,193 @@
   -- whenM onTopLevel unfreezeMetas
 
 -- | Type check a single declaration.
+
 checkDecl :: A.Declaration -> TCM ()
 checkDecl d = do
     -- Issue 418 fix: freeze metas before checking an abstract things
     when isAbstract freezeMetas
-    leaveTopLevelConditionally d $ case d of
-	A.Axiom i rel x e        -> checkAxiom i rel x e
-        A.Field{}                -> typeError FieldOutsideRecord
-	A.Primitive i x e        -> checkPrimitive i x e
-	A.Mutual i ds            -> checkMutual i ds
-	A.Section i x tel ds     -> checkSection i x tel ds
-	A.Apply i x modapp rd rm -> checkSectionApplication i x modapp rd rm
-	A.Import i x             -> checkImport i x
-	A.Pragma i p             -> checkPragma i p
-	A.ScopedDecl scope ds    -> setScope scope >> checkDecls ds
-        A.FunDef i x cs          -> check x i $ checkFunDef NotDelayed i x cs
-        A.DataDef i x ps cs      -> check x i $ checkDataDef i x ps cs
-        A.RecDef i x c ps tel cs -> check x i $ checkRecDef i x c ps tel cs
-        A.DataSig i x ps t       -> checkAxiom i Relevant x (A.Pi (Info.ExprRange (fuseRange ps t)) ps t)
-        A.RecSig i x ps t        -> checkAxiom i Relevant x (A.Pi (Info.ExprRange (fuseRange ps t)) ps t)
-        A.Open _ _               -> return ()
-    top <- onTopLevel
-    when top $ solveSizeConstraints >> freezeMetas
+
+    let -- What kind of final checks/computations should be performed
+        -- if we're not inside a mutual block?
+        none       m = m >> return Nothing
+        meta       m = m >> return (Just (return []))
+        mutual     m = m >>= return . Just . mutualChecks
+        impossible m = m >> return __IMPOSSIBLE__
+                       -- We're definitely inside a mutual block.
+
+    topLevelKind <- case d of
+      A.Axiom{}                -> meta $ checkTypeSignature d
+      A.Field{}                -> typeError FieldOutsideRecord
+      A.Primitive i x e        -> meta $ checkPrimitive i x e
+      A.Mutual i ds            -> mutual $ checkMutual i ds
+      A.Section i x tel ds     -> meta $ checkSection i x tel ds
+      A.Apply i x modapp rd rm -> meta $ checkSectionApplication i x modapp rd rm
+      A.Import i x             -> none $ checkImport i x
+      A.Pragma i p             -> none $ checkPragma i p
+      A.ScopedDecl scope ds    -> none $ setScope scope >> checkDecls ds
+      A.FunDef i x delayed cs  -> impossible $ check x i $ checkFunDef delayed i x cs
+      A.DataDef i x ps cs      -> impossible $ check x i $ checkDataDef i x ps cs
+      A.RecDef i x ind c ps tel cs -> mutual $ check x i $ do
+                                    checkRecDef i x ind c ps tel cs
+                                    return (Set.singleton x)
+      A.DataSig i x ps t       -> impossible $ checkSig i x ps t
+      A.RecSig i x ps t        -> none $ checkSig i x ps t
+                                  -- A record signature is always followed by a
+                                  -- record definition. Metas should not be
+                                  -- frozen until after the definition has been
+                                  -- checked. NOTE: Metas are not frozen
+                                  -- immediately after the last field. Perhaps
+                                  -- they should be (unless we're in a mutual
+                                  -- block).
+      A.Open _ _               -> none $ return ()
+                                  -- Open is just an artifact from the concrete
+                                  -- syntax, retained for highlighting purposes.
+
+    unlessM (isJust . envMutualBlock <$> ask) $ do
+      termErrs <- case topLevelKind of
+        Nothing           -> return []
+        Just mutualChecks -> do
+
+          solveSizeConstraints
+          solveIrrelevantMetas
+          wakeupConstraints_   -- solve emptyness constraints
+          freezeMetas
+
+          mutualChecks
+
+      -- Syntax highlighting.
+      let highlight d = generateAndPrintSyntaxInfo d (Full termErrs)
+      case d of
+        A.Axiom{}                -> highlight d
+        A.Field{}                -> __IMPOSSIBLE__
+        A.Primitive{}            -> highlight d
+        A.Mutual{}               -> highlight d
+        A.Apply{}                -> highlight d
+        A.Import{}               -> highlight d
+        A.Pragma{}               -> highlight d
+        A.ScopedDecl{}           -> return ()
+        A.FunDef{}               -> __IMPOSSIBLE__
+        A.DataDef{}              -> __IMPOSSIBLE__
+        A.DataSig{}              -> __IMPOSSIBLE__
+        A.Open{}                 -> highlight d
+        A.Section i x tel _      -> highlight (A.Section i x tel [])
+          -- Each block in the section has already been highlighted,
+          -- all that remains is the module declaration.
+        A.RecSig{}               -> highlight d
+        A.RecDef i x ind c ps tel cs ->
+          highlight (A.RecDef i x ind c [] tel (fields cs))
+          -- The telescope and all record module declarations except
+          -- for the fields have already been highlighted.
+          where
+          fields (A.ScopedDecl _ ds1 : ds2) = fields ds1 ++ fields ds2
+          fields (d@A.Field{}        : ds)  = d : fields ds
+          fields (_                  : ds)  = fields ds
+          fields []                         = []
+
     where
-        unScope (A.ScopedDecl scope ds) = setScope scope >> unScope d
-        unScope d = return d
+    unScope (A.ScopedDecl scope ds) = setScope scope >> unScope d
+    unScope d = return d
 
-        check x i m = do
-          reportSDoc "tc.decl" 5 $ text "Checking" <+> prettyTCM x <> text "."
-          r <- abstract (Info.defAbstract i) m
-          reportSDoc "tc.decl" 5 $ text "Checked" <+> prettyTCM x <> text "."
-          return r
+    checkSig i x ps t = checkTypeSignature $
+      A.Axiom i Relevant x (A.Pi (Info.ExprRange (fuseRange ps t)) ps t)
 
-        isAbstract = fmap Info.defAbstract (A.getDefInfo d) == Just AbstractDef
+    check x i m = do
+      reportSDoc "tc.decl" 5 $ text "Checking" <+> prettyTCM x <> text "."
+      r <- abstract (Info.defAbstract i) m
+      reportSDoc "tc.decl" 5 $ text "Checked" <+> prettyTCM x <> text "."
+      return r
 
-        -- Concrete definitions cannot use information about abstract things.
-        abstract ConcreteDef = inConcreteMode
-        abstract AbstractDef = inAbstractMode
-	    -- open is just an artifact from the concrete syntax
-            -- retained for highlighting purposes
+    isAbstract = fmap Info.defAbstract (A.getDefInfo d) == Just AbstractDef
 
-        leaveTopLevelConditionally d =
-          case d of
-            A.Section{}    -> id
-            A.ScopedDecl{} -> id
-            _              -> leaveTopLevel
+    -- Concrete definitions cannot use information about abstract things.
+    abstract ConcreteDef = inConcreteMode
+    abstract AbstractDef = inAbstractMode
 
+    -- Some checks that should be run at the end of a mutual
+    -- block (or non-mutual record declaration). The set names
+    -- contains the names defined in the mutual block.
+    mutualChecks names = do
+
+      checkStrictlyPositive names
+
+      -- Andreas, 2012-02-13: Polarity computation uses info from
+      -- positivity check, so it needs happen after positivity
+      -- check.
+      let -- | Do we need to compute polarity information for the
+          -- definition corresponding to the given name?
+          relevant q = do
+            def <- theDef <$> getConstInfo q
+            return $ case def of
+              Function{}    -> Just q
+              Datatype{}    -> Just q
+              Record{}      -> Just q
+              Axiom{}       -> Nothing
+              Constructor{} -> Nothing
+              Primitive{}   -> Nothing
+      mapM_ computePolarity =<<
+        (catMaybes <$> mapM relevant (Set.toList names))
+
+      -- Andreas, 2012-09-11:  Injectivity check stores clauses
+      -- whose 'Relevance' is affected by polarity computation,
+      -- so do it here.
+
+      let checkInj (q, def@Defn{ theDef = d@Function{ funClauses = cs }}) = do
+            inv <- checkInjectivity q cs
+            modifySignature $ updateDefinition q $ const $
+              def { theDef = d { funInv = inv }}
+          checkInj _ = return ()
+
+      namesDefs <- mapM (\ q -> (q,) <$> getConstInfo q) $ Set.toList names
+      mapM_ checkInj namesDefs
+
+      -- Non-mutual definitions can be considered for
+      -- projection likeness
+      case Set.toList names of
+        [d] -> do
+          def <- getConstInfo d
+          case theDef def of
+            Function{} -> makeProjection (defName def)
+            _          -> return ()
+        _ -> return ()
+
+      -- Termination checking.
+      termErrs <-
+        ifM (optTerminationCheck <$> pragmaOptions)
+          (disableDestructiveUpdate $ case d of
+             A.RecDef {} -> return []
+                            -- Record module definitions should not be
+                            -- termination-checked twice.
+             _           -> do
+               termErrs <- {- nubList <$> -} termDecl d
+               modify $ \st ->
+                 st { stTermErrs = Fold.foldl' (|>) (stTermErrs st) termErrs }
+               return termErrs)
+          (return [])
+
+      return termErrs
+
 -- | Type check an axiom.
 checkAxiom :: Info.DefInfo -> Relevance -> QName -> A.Expr -> TCM ()
-checkAxiom i rel x e = do
+checkAxiom i rel0 x e = do
+  -- Andreas, 2012-04-18  if we are in irrelevant context, axioms is irrelevant
+  -- even if not declared as such (Issue 610).
+  rel <- max rel0 <$> asks envRelevance
+  -- rel <- ifM ((Irrelevant ==) <$> asks envRelevance) (return Irrelevant) (return rel0)
   t <- isType_ e
   reportSDoc "tc.decl.ax" 10 $ sep
-    [ text "checked axiom"
-    , nest 2 $ prettyTCM rel <> prettyTCM x <+> text ":" <+> (prettyTCM =<< instantiateFull t)
+    [ text $ "checked type signature"
+    , nest 2 $ prettyTCM rel <> prettyTCM x <+> text ":" <+> prettyTCM t
     ]
   -- Not safe. See Issue 330
   -- t <- addForcingAnnotations t
-  addConstant x (Defn rel x t (defaultDisplayForm x) 0 noCompiledRep Axiom)
-  solveSizeConstraints
+  addConstant x (Defn rel x t [] [] (defaultDisplayForm x) 0 noCompiledRep Axiom)
+
+  -- for top-level axioms (postulates) try to solve irrelevant metas
+  -- when postulate $
+  maybe solveIrrelevantMetas (const $ return ()) =<< asks envMutualBlock
+
+  traceCall (IsType_ e) $ solveSizeConstraints  -- need Range for error message
+
   -- Andreas, 2011-05-31, that freezing below is probably wrong:
   -- when (Info.defAbstract i == AbstractDef) $ freezeMetas
 
@@ -116,12 +266,12 @@
 checkPrimitive :: Info.DefInfo -> QName -> A.Expr -> TCM ()
 checkPrimitive i x e =
     traceCall (CheckPrimitive (getRange i) (qnameName x) e) $ do  -- TODO!! (qnameName)
-    PrimImpl t' pf <- lookupPrimitiveFunction (nameString $ qnameName x)
+    (_, PrimImpl t' pf) <- lookupPrimitiveFunctionQ x
     t <- isType_ e
     noConstraints $ equalType t t'
     let s  = show $ nameConcrete $ qnameName x
-    bindPrimitive s $ pf { primFunName = x }
-    addConstant x (Defn Relevant x t (defaultDisplayForm x) 0 noCompiledRep $
+    bindPrimitive s pf
+    addConstant x (Defn Relevant x t [] [] (defaultDisplayForm x) 0 noCompiledRep $
                 Primitive (Info.defAbstract i) s Nothing Nothing)
     where
 	nameString (Name _ x _ _) = show x
@@ -205,7 +355,7 @@
 	A.OptionsPragma _   -> __IMPOSSIBLE__	-- not allowed here
         A.EtaPragma r -> modifySignature eta
           where
-            eta sig = sig { sigDefinitions = Map.adjust setEta r defs }
+            eta sig = sig { sigDefinitions = HMap.adjust setEta r defs }
               where
                 setEta def = def { theDef = setEtad $ theDef def }
                 setEtad d   = case d of
@@ -214,19 +364,22 @@
                 defs	  = sigDefinitions sig
 
 -- | Type check a bunch of mutual inductive recursive definitions.
-checkMutual :: Info.DeclInfo -> [A.Declaration] -> TCM ()
+--
+-- All definitions which have so far been assigned to the given mutual
+-- block are returned.
+checkMutual :: Info.MutualInfo -> [A.Declaration] -> TCM (Set QName)
 checkMutual i ds = inMutualBlock $ do
-  mapM_ checkDecl ds
 
-  checkStrictlyPositive =<< currentMutualBlock
-  let unScope (A.ScopedDecl _ ds) = concatMap unScope ds
-      unScope d = [d]
-  case concatMap unScope ds of
-    -- Non-mutual definitions can be considered for projection likeness
-    [A.Axiom _ _ x _, A.FunDef _ y _] | x == y -> makeProjection x
-    _   -> return ()
+  verboseS "tc.decl.mutual" 20 $ do
+    blockId <- currentOrFreshMutualBlock
+    reportSDoc "" 0 $ vcat $
+      (text "Checking mutual block" <+> text (show blockId) <> text ":") :
+      map (nest 2 . prettyA) ds
 
+  mapM_ checkDecl ds
 
+  lookupMutualBlock =<< currentOrFreshMutualBlock
+
 -- | Type check the type signature of an inductive or recursive definition.
 checkTypeSignature :: A.TypeSignature -> TCM ()
 checkTypeSignature (A.ScopedDecl scope ds) = do
@@ -248,8 +401,8 @@
       dx   <- prettyTCM x
       dtel <- mapM prettyA tel
       dtel' <- prettyTCM =<< lookupSection x
-      liftIO $ LocIO.putStrLn $ "checking section " ++ show dx ++ " " ++ show dtel
-      liftIO $ LocIO.putStrLn $ "    actual tele: " ++ show dtel'
+      reportSLn "" 0 $ "checking section " ++ show dx ++ " " ++ show dtel
+      reportSLn "" 0 $ "    actual tele: " ++ show dtel'
     withCurrentModule x $ checkDecls ds
 
 checkModuleArity :: ModuleName -> Telescope -> [NamedArg A.Expr] -> TCM Telescope
@@ -259,7 +412,7 @@
 
     check eta []             = return eta
     check EmptyTel (_:_)     = bad
-    check (ExtendTel (Arg h _ _) btel) args0@(Arg h' _ (Named name _) : args) =
+    check (ExtendTel (Dom h _ _) btel) args0@(Arg h' _ (Named name _) : args) =
       let y   = absName btel
           tel = absBody btel in
       case (h, h', name) of
@@ -326,7 +479,7 @@
       telInst = instFinal tel
       instFinal :: Telescope -> Telescope
       instFinal (ExtendTel _ NoAbs{}) = __IMPOSSIBLE__
-      instFinal (ExtendTel (Arg h r t) (Abs n EmptyTel)) = ExtendTel (Arg Instance r t) (Abs n EmptyTel)
+      instFinal (ExtendTel (Dom h r t) (Abs n EmptyTel)) = ExtendTel (Dom Instance r t) (Abs n EmptyTel)
       instFinal (ExtendTel arg (Abs n tel)) = ExtendTel arg (Abs n (instFinal tel))
       instFinal EmptyTel = __IMPOSSIBLE__
       args = teleArgs tel
diff --git a/src/full/Agda/TypeChecking/Rules/Def.hs b/src/full/Agda/TypeChecking/Rules/Def.hs
--- a/src/full/Agda/TypeChecking/Rules/Def.hs
+++ b/src/full/Agda/TypeChecking/Rules/Def.hs
@@ -9,11 +9,12 @@
 import Control.Monad.Reader hiding (mapM)
 import Control.Monad.Error hiding (mapM)
 import Control.Monad hiding (mapM)
+
+import Data.Function
 import Data.List hiding (sort)
 import Data.Traversable
 import Data.Set (Set)
 import qualified Data.Set as Set
-import qualified Agda.Utils.IO.Locale as LocIO
 
 import Agda.Syntax.Common
 import Agda.Syntax.Position
@@ -43,11 +44,14 @@
 import Agda.TypeChecking.Injectivity
 import Agda.TypeChecking.Polarity
 import Agda.TypeChecking.Irrelevance
+import Agda.TypeChecking.Implicit
 import Agda.TypeChecking.SizedTypes
+import Agda.TypeChecking.CompiledClause (CompiledClauses(..))
 import Agda.TypeChecking.CompiledClause.Compile
 
-import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, checkTelescope_, isType_ )
+import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, inferExprForWith, inferOrCheck, checkTelescope_, isType_ )
 import Agda.TypeChecking.Rules.LHS                 ( checkLeftHandSide )
+import Agda.TypeChecking.Rules.LHS.Implicit        ( insertImplicitPatterns )
 import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl ( checkDecls )
 import Agda.TypeChecking.Rules.Data                ( isCoinductive )
 
@@ -72,9 +76,61 @@
         -- Get the type and relevance of the function
         t    <- typeOfConst name
         rel  <- relOfConst name
-        checkFunDef' t rel delayed i name cs
+        case trivialClause cs of
+          -- if we have just one clause without pattern matching and
+          -- without a type signature, then infer, to allow
+          -- "aliases" for things starting with hidden abstractions
+          Just e | isMeta (ignoreSharing $ unEl t) ->
+            traceCall (CheckFunDef (getRange i) (qnameName name) cs) $
+              checkAlias t rel delayed i name e
+          _ -> checkFunDef' t rel delayed i name cs
+  where
+    isMeta MetaV{} = True
+    isMeta _       = False
+    trivialClause [A.Clause (A.LHS i (A.LHSHead f []) []) (A.RHS e) []] = Just e
+    trivialClause _ = Nothing
 
--- | Type check a definition by pattern matching. The first argument
+-- | Check a trivial definition of the form @f = e@
+checkAlias :: Type -> Relevance -> Delayed -> Info.DefInfo -> QName -> A.Expr -> TCM ()
+checkAlias t' rel delayed i name e = do
+  reportSDoc "tc.def.alias" 10 $ text "checkAlias" <+> vcat
+    [ text (show name) <+> colon  <+> prettyTCM t'
+    , text (show name) <+> equals <+> prettyTCM e
+    ]
+  -- Infer the type of the rhs
+  (v, t) <- applyRelevanceToContext rel $ inferOrCheck e (Just t')
+  -- v <- coerce v t t'
+  reportSDoc "tc.def.alias" 20 $ text "checkAlias: finished checking"
+
+  solveSizeConstraints
+
+  v <- instantiateFull v  -- if we omit this, we loop (stdlib: Relation.Binary.Sum)
+    -- or the termination checker might stumble over levels in sorts
+    -- that cannot be converted to expressions without the level built-ins
+    -- (test/succeed/Issue655.agda)
+
+  -- Add the definition
+  addConstant name $ Defn rel name t [] [] (defaultDisplayForm name) 0 noCompiledRep
+                   $ Function
+                      { funClauses        = [Clause (getRange i) EmptyTel (idP 0) [] $ Body v] -- trivial clause @name = v@
+                      , funCompiled       = Done [] v
+                      , funDelayed        = delayed
+                      , funInv            = NotInjective
+                      , funAbstr          = Info.defAbstract i
+{-
+                      , funPolarity       = []
+                      , funArgOccurrences = []
+-}
+                      , funMutual         = []
+                      , funProjection     = Nothing
+                      , funStatic         = False
+                      , funCopy           = False
+                      , funTerminates     = Nothing
+                      }
+  reportSDoc "tc.def.alias" 20 $ text "checkAlias: leaving"
+
+
+-- | Type check a definition by pattern matching. The third argument
 -- specifies whether the clauses are delayed or not.
 checkFunDef' :: Type -> Relevance -> Delayed -> Info.DefInfo -> QName -> [A.Clause] -> TCM ()
 checkFunDef' t rel delayed i name cs =
@@ -86,19 +142,24 @@
               , nest 2 $ text "full type:" <+> (prettyTCM . defType =<< getConstInfo name)
               ]
 
+        -- Ensure that all clauses have the same number of trailing hidden patterns
+        -- This is necessary since trailing implicits are no longer eagerly inserted.
+        cs <- trailingImplicits t cs
+
         -- Check the clauses
         let check c = do
               c <- applyRelevanceToContext rel $ checkClause t c
               solveSizeConstraints
               return c
-        cs <- mapM check cs
+        cs <- traceCall NoHighlighting $  -- To avoid flicker.
+                mapM check cs
 
         -- Check that all clauses have the same number of arguments
         unless (allEqual $ map npats cs) $ typeError DifferentArities
 
         reportSDoc "tc.cc" 15 $ do
           sep [ text "clauses before rebindClause"
-              , nest 2 $ prettyTCM (map (NamedClause name) cs)
+              , nest 2 $ prettyTCM (map (QNamed name) cs)
               ]
 
         -- Annotate the clauses with which arguments are actually used.
@@ -114,11 +175,11 @@
 
         reportSDoc "tc.cc" 15 $ do
           sep [ text "clauses before compilation"
-              , nest 2 $ prettyTCM (map (NamedClause name) cs)
+              , nest 2 $ prettyTCM (map (QNamed name) cs)
               ]
 
-        -- Compile the clauses
-        cc <- compileClauses True cs
+        -- Coverage check and compile the clauses
+        cc <- compileClauses (Just (name, t)) cs
 
         reportSDoc "tc.cc" 10 $ do
           sep [ text "compiled clauses of" <+> prettyTCM name
@@ -126,39 +187,151 @@
               ]
 
         -- Add the definition
-        addConstant name $ Defn rel name t (defaultDisplayForm name) 0 noCompiledRep
+        addConstant name $ Defn rel name t [] [] (defaultDisplayForm name) 0 noCompiledRep
                          $ Function
                             { funClauses        = cs
                             , funCompiled       = cc
                             , funDelayed        = delayed
                             , funInv            = inv
                             , funAbstr          = Info.defAbstract i
+{-
                             , funPolarity       = []
                             , funArgOccurrences = []
+-}
+                            , funMutual         = []
                             , funProjection     = Nothing
                             , funStatic         = False
+                            , funCopy           = False
+                            , funTerminates     = Nothing
                             }
-        computePolarity name
+
+        -- Andreas 2012-02-13: postpone polarity computation until after positivity check
+        -- computePolarity name
+
         reportSDoc "tc.def.fun" 10 $ do
           sep [ text "added " <+> prettyTCM name <+> text ":"
               , nest 2 $ prettyTCM . defType =<< getConstInfo name
               ]
-
-        -- Check pattern coverage
-        checkCoverage name
-
-        reportSLn "tc.def.fun.compile" 10 $
-          "compiled clauses for " ++ show name ++ ":\n" ++ show cc
     where
         npats = size . clausePats
 
+{- | Ensure that all clauses have the same number of trailing implicits.
+Example:
 
+@
+  test : Bool → {A B : Set} → Set
+  test true  {A}     = A
+  test false {B = B} = B
+@
+
+@trailingImplicits@ patches these clauses to
+
+@
+  test : Bool → {A B : Set} → Set
+  test true  {A} {_}     = A
+  test false {_} {B = B} = B
+@
+
+such that the arity of the clauses of @test@ is uniform.
+-}
+trailingImplicits :: Type -> [A.Clause] -> TCM [A.Clause]
+trailingImplicits t []       = __IMPOSSIBLE__
+trailingImplicits t cs@(c:_) = do
+  pps@((ps,ips):_) <- mapM splitTrailingImplicits cs
+  -- compute the trailing implicits from type t
+  TelV tel t0 <- telView t
+  let -- number of non-hidden patterns
+      nh  = genericLength $ filter ((NotHidden ==) . argHiding) ps
+      -- drop nh non-hidden domains from t
+      l   = dropNonHidden nh $ telToList tel
+      -- take the hidden domains immediately after the dropped stuff
+      is   = takeWhile ((NotHidden /=) . domHiding) l
+      itel = telFromList is
+      -- get the trailing implicit patterns
+      ipss = map snd pps
+  -- complete the implicit pattern lists
+  ipss <- mapM (\ ps -> insertImplicitPatterns DontExpandLast ps itel) ipss
+  let longest = head $ sortBy (compare `on` ((0-) . length)) ipss
+      pps' = zip (map fst pps) ipss
+  return $ zipWith (patchUpTrailingImplicits longest) pps' cs
+
+-- | @dropNonHidden n tel@ drops @n@ non-hidden domains from @tel@,
+--   including all hidden domains that come before the @n@th non-hidden one.
+dropNonHidden :: Nat -> [Dom (String, Type)] -> [Dom (String, Type)]
+dropNonHidden 0 l = l
+dropNonHidden n l = case dropWhile ((NotHidden /=) . domHiding) l of
+  []    -> [] -- or raise a type checking error "too many arguments in lhs"
+  (_:l) -> dropNonHidden (n-1) l
+
+-- | @splitTrailingImplicits c@ returns the patterns of clause @c@
+--   as pair @(ps, ips)@ where @ips@ are the trailing implicit patterns
+--   and @ps@ is the rest.
+splitTrailingImplicits :: A.Clause -> TCM (A.Patterns, A.Patterns)
+splitTrailingImplicits (A.Clause (A.LHS _ A.LHSProj{} []) _ _) =
+  typeError $ NotImplemented "type checking definitions by copatterns"
+splitTrailingImplicits (A.Clause (A.LHS _ _ ps@(_ : _)) _ _) =
+  typeError $ UnexpectedWithPatterns ps
+splitTrailingImplicits (A.Clause (A.LHS _ (A.LHSHead _ aps) []) _ _) = do
+  let (ips, ps) = span ((Hidden==) . argHiding) $ reverse aps
+  return (reverse ps, reverse ips)
+
+{- UNUSED
+-- | Compute the difference between two list of hidden patterns.
+--   The first pattern list must be longer.
+--   Both pattern lists must be complete, i.e., not skip any hidden patterns.
+patternDiff :: A.Patterns -> A.Patterns -> A.Patterns
+patternDiff ps1 ps2 = drop (length ps2) ps1
+-}
+
+-- | @patchUpTrailingImplicits should (ps, is) c@ takes a clause @c@ whose
+--   patterns are split into @(ps, is)@ where @is@ are the trailing
+--   implicit patterns and @ps@ the rest.  @is@ has already been patched
+--   with omitted implicit patterns (which can occur if named implicit patterns
+--   are there originally).  @should@ is an extension of @is@.
+--   The returned clause contains an extension of @is@ by new wildcards
+--   to match @should@.
+patchUpTrailingImplicits :: A.Patterns -> (A.Patterns, A.Patterns) -> A.Clause -> A.Clause
+patchUpTrailingImplicits should (ps, is) c | length is >= length should = c
+patchUpTrailingImplicits should (ps, is) (A.Clause (A.LHS i (A.LHSHead x aps) []) rhs0 wh) =
+  let imp  = Arg Hidden Relevant $ Named Nothing $ A.ImplicitP $
+               Info.PatRange noRange
+      imps = replicate (length should - length is) imp
+  in  A.Clause (A.LHS i (A.LHSHead x (ps ++ is ++ imps)) []) rhs0 wh
+patchUpTrailingImplicits _ _ _ = __IMPOSSIBLE__
+
+{- OLD
+-- | Ensure that all clauses have the same number of trailing implicits.
+trailingImplicits :: [A.Clause] -> TCM [A.Clause]
+trailingImplicits [] = __IMPOSSIBLE__
+trailingImplicits cs = do
+  ns <- mapM numberOfTrailingImplicits cs
+  let n = maximum ns
+  return $ zipWith (patchUpTrailingImplicits n) ns cs
+
+numberOfTrailingImplicits :: A.Clause -> TCM Int
+numberOfTrailingImplicits (A.Clause (A.LHS _ A.LHSProj{} []) _ _) =
+  typeError $ NotImplemented "type checking definitions by copatterns"
+numberOfTrailingImplicits (A.Clause (A.LHS _ _ ps@(_ : _)) _ _) =
+  typeError $ UnexpectedWithPatterns ps
+numberOfTrailingImplicits (A.Clause (A.LHS _ (A.LHSHead _ aps) []) _ _) =
+  return $ length $ takeWhile ((Hidden==) . argHiding) $ reverse aps
+
+patchUpTrailingImplicits :: Int -> Int -> A.Clause -> A.Clause
+patchUpTrailingImplicits should is c | is >= should = c
+patchUpTrailingImplicits should is (A.Clause (A.LHS i (A.LHSHead x aps) []) rhs0 wh) =
+  let imp  = Arg Hidden Relevant $ Named Nothing $ A.ImplicitP $
+               Info.PatRange noRange
+      imps = replicate (should - is) imp
+  in  A.Clause (A.LHS i (A.LHSHead x (aps ++ imps)) []) rhs0 wh
+patchUpTrailingImplicits _ _ _ = __IMPOSSIBLE__
+-}
+
 -- | Insert some patterns in the in with-clauses LHS of the given RHS
 insertPatterns :: [A.Pattern] -> A.RHS -> A.RHS
 insertPatterns pats (A.WithRHS aux es cs) = A.WithRHS aux es (map insertToClause cs)
-    where insertToClause (A.Clause (A.LHS i x aps ps) rhs ds)
+    where insertToClause (A.Clause (A.LHS i lhscore ps) rhs ds)
 --              = A.Clause (A.LHS i x (aps ++ map (Arg NotHidden . unnamed) pats) (ps)) (insertPatterns pats rhs) ds
-              = A.Clause (A.LHS i x aps (pats ++ ps)) (insertPatterns pats rhs) ds
+              = A.Clause (A.LHS i lhscore (pats ++ ps)) (insertPatterns pats rhs) ds
 insertPatterns pats (A.RewriteRHS qs eqs rhs wh) = A.RewriteRHS qs eqs (insertPatterns pats rhs) wh
 insertPatterns pats rhs = rhs
 
@@ -180,21 +353,27 @@
 
 -- | Type check a function clause.
 checkClause :: Type -> A.Clause -> TCM Clause
-checkClause t c@(A.Clause (A.LHS i x aps []) rhs0 wh) =
+checkClause t c@(A.Clause (A.LHS i (A.LHSProj{}) []) rhs0 wh) =
+  typeError $ NotImplemented "type checking definitions by copatterns"
+checkClause t c@(A.Clause (A.LHS i (A.LHSHead x aps) []) rhs0 wh) =
     traceCall (CheckClause t c) $
-    checkLeftHandSide c aps t $ \gamma delta sub xs ps t' perm -> do
-      let mkBody v = foldr (\x t -> Bind $ Abs x t) (Body $ substs sub v) xs
-      (body, with) <- checkWhere (size delta) wh $ let
+    checkLeftHandSide (CheckPatternShadowing c) aps t $ \ mgamma delta sub xs ps t' perm -> do
+      let mkBody v = foldr (\x t -> Bind $ Abs x t) (Body $ applySubst sub v) xs
+      -- introduce trailing implicits for checking the where decls
+      TelV htel t0 <- telViewUpTo' (-1) ((Hidden==) . domHiding) t'
+      let n = size htel
+      (body, with) <- addCtxTel htel $ checkWhere (size delta + n) wh $ escapeContext (size htel) $ let
+          -- for the body, we remove the implicits again
           handleRHS rhs =
               case rhs of
                 A.RHS e
-                  | any (containsAbsurdPattern . namedThing . unArg) aps ->
+                  | any (containsAbsurdPattern . namedArg) aps ->
                     typeError $ AbsurdPatternRequiresNoRHS aps
                   | otherwise -> do
                     v <- checkExpr e t'
                     return (mkBody v, NoWithFunction)
                 A.AbsurdRHS
-                  | any (containsAbsurdPattern . namedThing . unArg) aps
+                  | any (containsAbsurdPattern . namedArg) aps
                               -> return (NoBody, NoWithFunction)
                   | otherwise -> typeError $ NoRHSRequiresAbsurdPattern aps
                 A.RewriteRHS [] (_:_) _ _ -> __IMPOSSIBLE__
@@ -205,19 +384,20 @@
                      (proof,t) <- inferExpr eq
                      t' <- reduce =<< instantiateFull t
                      equality <- primEquality >>= \eq ->
-                      let lamV (Lam h b) = ((h:) *** id) $ lamV (unAbs b)
-                          lamV v         = ([], v) in
+                      let lamV (Lam h b)  = ((h:) *** id) $ lamV (unAbs b)
+                          lamV (Shared p) = lamV (derefPtr p)
+                          lamV v          = ([], v) in
                       return $ case lamV eq of
                         ([Hidden, Hidden], Def equality _) -> equality
                         ([Hidden],         Def equality _) -> equality
                         ([],               Def equality _) -> equality
                         _                                  -> __IMPOSSIBLE__
-                     reflCon <- primRefl >>= \refl -> return $ case refl of
+                     reflCon <- primRefl >>= \refl -> return $ case ignoreSharing refl of
                          Con reflCon [] -> reflCon
                          _              -> __IMPOSSIBLE__
-                     (rewriteType,rewriteFrom,rewriteTo) <- case t' of
-                         El _Set0 (Def equality' [_level, Arg Hidden Relevant rewriteType,
-                                                  Arg NotHidden Relevant rewriteFrom, Arg NotHidden Relevant rewriteTo])
+                     (rewriteType,rewriteFrom,rewriteTo) <- case ignoreSharing $ unEl t' of
+                         Def equality' [_level, Arg Hidden Relevant rewriteType,
+                                        Arg NotHidden Relevant rewriteFrom, Arg NotHidden Relevant rewriteTo]
                             | equality' == equality ->
                               return (rewriteType, rewriteFrom, rewriteTo)
                          _ -> do
@@ -225,17 +405,17 @@
                           typeError $ GenericError $ show err
 
                      let info = PatRange noRange
-                         metaInfo = Info.MetaInfo noRange emptyScopeInfo Nothing
+                         metaInfo = Info.emptyMetaInfo
                          underscore = A.Underscore metaInfo
 
                      [rewriteFromExpr,rewriteToExpr,rewriteTypeExpr, proofExpr] <-
-                      disableDisplayForms $ setShowImplicitArguments True $ reify
+                      disableDisplayForms $ withShowAllArguments $ reify
                         [rewriteFrom,   rewriteTo,    rewriteType    , proof]
                      let (inner, outer) -- the where clauses should go on the inner-most with
                            | null eqs  = ([], wh)
                            | otherwise = (wh, [])
                          newRhs = A.WithRHS qname [rewriteFromExpr, proofExpr]
-                                  [A.Clause (A.LHS i x aps pats)
+                                  [A.Clause (A.LHS i (A.LHSHead x aps) pats)
                                     (A.RewriteRHS names eqs (insertPatterns pats rhs) inner)
                                     outer]
                          pats = [A.DotP info underscore, -- rewriteToExpr,
@@ -254,7 +434,7 @@
                   reportSDoc "tc.with.top" 30 $
                     prettyA c
                   -- Infer the types of the with expressions
-                  vas <- mapM inferExpr es
+                  vas <- mapM inferExprForWith es
                   (vs0, as) <- instantiateFull (unzip vas)
                   (vs, as)  <- normalise (vs0, as)
 
@@ -268,11 +448,15 @@
                       SplitTel delta1 delta2 perm' = splitTelescope fv delta
                       finalPerm = composeP perm' perm
 
-                  reportSDoc "tc.with.top" 25 $ vcat
+                  -- Andreas, 2012-09-17: for printing delta,
+                  -- we should remove it from the context first
+                  reportSDoc "tc.with.top" 25 $ escapeContext (size delta) $ vcat
                     [ text "delta  =" <+> prettyTCM delta
                     , text "delta1 =" <+> prettyTCM delta1
                     , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2)
-                    , text "vs     =" <+> prettyTCM vs
+                    ]
+                  reportSDoc "tc.with.top" 25 $ vcat
+                    [ text "vs     =" <+> prettyTCM vs
                     , text "as     =" <+> prettyTCM as
                     , text "perm'  =" <+> text (show perm')
                     , text "perm   =" <+> text (show perm)
@@ -280,11 +464,17 @@
                     ]
 
                   -- Create the body of the original function
+{- OLD
                   ctx <- getContextTelescope
                   let n    = size ctx
                       m    = size delta
                       -- All the context variables
-                      us   = [ Arg h r (Var i []) | (i, Arg h r _) <- zip [n - 1,n - 2..0] $ telToList ctx ]
+                      us   = [ Arg h r (var i) | (i, Arg h r _) <- zip [n - 1,n - 2..0] $ telToList ctx ]
+-}
+                  -- All the context variables
+                  us <- getContextArgs
+                  let n    = size us
+                      m    = size delta
                       -- First the variables bound outside this definition
                       (us0, us1') = genericSplitAt (n - m) us
                       -- Then permute the rest and grab those needed to for the with arguments
@@ -296,21 +486,20 @@
                   t' <- return $ renameP (reverseP perm') t'
                   -- and Δ₁ ⊢ vs : as
                   (vs, as) <- do
-                    let var = flip Var []
-                        -- We know that as does not depend on Δ₂
-                        rho = replicate (size delta2) __IMPOSSIBLE__ ++ map var [0..]
-                    return $ substs rho $ renameP (reverseP perm') (vs, as)
+                    let -- We know that as does not depend on Δ₂
+                        rho = parallelS (replicate (size delta2) __IMPOSSIBLE__)
+                    return $ applySubst rho $ renameP (reverseP perm') (vs, as)
 
                   reportSDoc "tc.with.top" 20 $ vcat
-                    [ text "    with arguments" <+> prettyList (map prettyTCM vs)
-                    , text "             types" <+> prettyList (map prettyTCM as)
+                    [ text "    with arguments" <+> do escapeContext (size delta2) $ prettyList (map prettyTCM vs)
+                    , text "             types" <+> do escapeContext (size delta2) $ prettyList (map prettyTCM as)
                     , text "with function call" <+> prettyTCM v
                     , text "           context" <+> (prettyTCM =<< getContextTelescope)
-                    , text "             delta" <+> prettyTCM delta
+                    , text "             delta" <+> do escapeContext (size delta) $ prettyTCM delta
                     , text "                fv" <+> text (show fv)
                     , text "              body" <+> (addCtxTel delta $ prettyTCM $ mkBody v)
                     ]
-
+                  gamma <- maybe (typeError $ NotImplemented "with clauses for functions with unfolding arity") return mgamma
                   return (mkBody v, WithFunction x aux gamma delta1 delta2 vs as t' ps perm' finalPerm cs)
           in handleRHS rhs0
       escapeContext (size delta) $ checkWithFunction with
@@ -334,7 +523,7 @@
                , clauseBody  = body
                }
 
-checkClause t (A.Clause (A.LHS _ _ _ ps@(_ : _)) _ _) = typeError $ UnexpectedWithPatterns ps
+checkClause t (A.Clause (A.LHS _ _ ps@(_ : _)) _ _) = typeError $ UnexpectedWithPatterns ps
 
 checkWithFunction :: WithFunctionProblem -> TCM ()
 checkWithFunction NoWithFunction = return ()
@@ -344,11 +533,11 @@
     [ text "checkWithFunction"
     , nest 2 $ vcat
       [ text "delta1 =" <+> prettyTCM delta1
-      , text "delta2 =" <+> prettyTCM delta2
+      , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2)
       , text "gamma  =" <+> prettyTCM gamma
       , text "as     =" <+> addCtxTel delta1 (prettyTCM as)
       , text "vs     =" <+> addCtxTel delta1 (prettyTCM vs)
-      , text "b      =" <+> prettyTCM b
+      , text "b      =" <+> do addCtxTel delta1 $ addCtxTel delta2 $ prettyTCM b
       , text "qs     =" <+> text (show qs)
       , text "perm'  =" <+> text (show perm')
       , text "perm   =" <+> text (show perm)
@@ -365,18 +554,25 @@
   -- Generate the type of the with function
   candidateType <- withFunctionType delta1 vs as delta2 b
   reportSDoc "tc.with.type" 10 $ sep [ text "candidate type:", nest 2 $ prettyTCM candidateType ]
-  absAuxType <- setShowImplicitArguments True
+  reportSDoc "tc.with.type" 50 $ sep [ text "candidate type:", nest 2 $ text $ show candidateType ]
+  absAuxType <- withShowAllArguments
                 $ disableDisplayForms
                 $ dontReifyInteractionPoints
                 $ reify candidateType
-  reportSDoc "tc.with.top" 15 $
+  reportSDoc "tc.with.type" 15 $
     vcat [ text "type of with function:"
          , nest 2 $ prettyTCM absAuxType
          ]
+  reportSDoc "tc.with.type" 50 $
+    vcat [ text "type of with function:"
+         , nest 2 $ text $ show absAuxType
+         ]
   -- The ranges in the generated type are completely bogus, so we kill them.
-  auxType <- setCurrentRange (getRange cs) (isType_ $ killRange absAuxType)
-    `catchError` \err -> case errError err of
-      TypeError _ e -> enterClosure e $ traceCall (CheckWithFunctionType absAuxType) . typeError
+  auxType <- setCurrentRange (getRange cs)
+               (traceCall NoHighlighting $  -- To avoid flicker.
+                  isType_ $ killRange absAuxType)
+    `catchError` \err -> case err of
+      TypeError s e -> put s >> enterClosure e (traceCall (CheckWithFunctionType absAuxType) . typeError)
       _             -> throwError err
 
   case df of
@@ -385,7 +581,7 @@
       , prettyList $ map prettyTCM ts
       , prettyTCM dt
       ]
-  addConstant aux (Defn Relevant aux auxType [df] 0 noCompiledRep Axiom)
+  addConstant aux (Defn Relevant aux auxType [] [] [df] 0 noCompiledRep Axiom)
   solveSizeConstraints
 
   reportSDoc "tc.with.top" 10 $ sep
@@ -418,10 +614,9 @@
       dx   <- prettyTCM m
       dtel <- mapM prettyA tel
       dtel' <- prettyTCM =<< lookupSection m
-      liftIO $ LocIO.putStrLn $ "checking where section " ++ show dx ++ " " ++ show dtel
-      liftIO $ LocIO.putStrLn $ "        actual tele: " ++ show dtel'
-    x <- withCurrentModule m $ checkDecls ds >> ret
-    return x
+      reportSLn "" 0 $ "checking where section " ++ show dx ++ " " ++ show dtel
+      reportSLn "" 0 $ "        actual tele: " ++ show dtel'
+    withCurrentModule m $ checkDecls ds >> ret
 checkWhere _ _ _ = __IMPOSSIBLE__
 
 -- | Check if a pattern contains an absurd pattern. For instance, @suc ()@
@@ -434,253 +629,20 @@
     A.DotP _ _    -> False
     A.LitP _      -> False
     A.AsP _ _ p   -> containsAbsurdPattern p
-    A.ConP _ _ ps -> any (containsAbsurdPattern . namedThing . unArg) ps
+    A.ConP _ _ ps -> any (containsAbsurdPattern . namedArg) ps
     A.DefP _ _ _  -> __IMPOSSIBLE__
-
-{-
--- | Type check a left-hand side.
-checkLHS :: [NamedArg A.Pattern] -> Type -> ([Term] -> [String] -> [Arg Pattern] -> Type -> TCM a) -> TCM a
-checkLHS ps t ret = do
-
-    verbose 15 $ do
-      dt  <- prettyTCM t
-      dps <- mapM prettyA ps
-      liftIO $ LocIO.putStrLn $ "checking clause " ++ show dps ++ " : " ++ show dt
-
-    -- Save the state for later. (should this be done with the undo monad, or
-    -- would that interfere with normal undo?)
-    rollback <- do
-        st  <- get
-        env <- ask
-        return $ \k -> do put st; local (const env) k
-
-    -- Preliminary type checking to decide what should be variables and what
-    -- should be dotted. Ignore empty types.
-    runCheckPatM (checkPatterns ps t) $ \xs metas _ (ps0, ps, ts, a) -> do
-
-    -- Build the new pattern, turning implicit patterns into variables when
-    -- they couldn't be solved.
-    ps1 <- evalStateT (buildNewPatterns ps0) metas
-
-    verbose 10 $ do
-        d0 <- A.showA ps0
-        d1 <- A.showA ps1
-        liftIO $ do
-        LocIO.putStrLn $ "first check"
-        LocIO.putStrLn $ "  xs    = " ++ show xs
-        LocIO.putStrLn $ "  metas = " ++ show metas
-        LocIO.putStrLn $ "  ps0   = " ++ d0
-        LocIO.putStrLn $ "  ps1   = " ++ d1
-
-    verbose 10 $ do
-        is <- mapM (instantiateFull . flip MetaV []) metas
-        ds <- mapM prettyTCM is
-        dts <- mapM prettyTCM =<< mapM instantiateFull ts
-        liftIO $ LocIO.putStrLn $ "  is    = " ++ concat (intersperse ", " $ map show ds)
-        liftIO $ LocIO.putStrLn $ "  ts    = " ++ concat (intersperse ", " $ map show dts)
-
-    -- Now we forget that we ever type checked anything and type check the new
-    -- pattern.
-    rollback $ runCheckPatM (checkPatterns ps1 t)
-             $ \xs metas emptyTypes (_, ps, ts, a) -> do
-
-    -- Check that the empty types are indeed empty
-    mapM_ isEmptyType emptyTypes
-
-    verbose 10 $ liftIO $ do
-        LocIO.putStrLn $ "second check"
-        LocIO.putStrLn $ "  xs    = " ++ show xs
-        LocIO.putStrLn $ "  metas = " ++ show metas
-
-    verbose 10 $ do
-        is <- mapM (instantiateFull . flip MetaV []) metas
-        ds <- mapM prettyTCM is
-        liftIO $ LocIO.putStrLn $ "  is    = " ++ concat (intersperse ", " $ map show ds)
-
-    -- Finally we type check the dot patterns and check that they match their
-    -- instantiations.
-    evalStateT (checkDotPatterns ps1) metas
-
-    reportLn 15 "dot patterns check out"
-
-    -- Sanity check. Make sure that all metas were instantiated.
-    is <- mapM lookupMeta metas
-    case [ getRange i | i <- is, FirstOrder <- [mvInstantiation i] ] of
-        [] -> return ()
-        rs -> fail $ "unsolved pattern metas at\n" ++ unlines (map show rs)
-
-    -- Make sure to purge the type and the context from any first-order metas.
-    a    <- instantiateFull a
-    flat <- instantiateFull =<< flatContext
-
-    -- The context might not be well-formed. We may have to do some reordering.
-    reportLn 20 $ "Before reordering:"
-    verbose 20 $ dumpContext flat
-
-    flat' <- reorderCtx flat
-
-    -- Compute renamings to and from the new context
-    let sub  = (computeSubst `on` map (fst . unArg)) flat flat'
-        rsub = (computeSubst `on` map (fst . unArg)) flat' flat
-
-    -- Apply the reordering to the types in the new context
-    let flat'' = map (fmap $ id -*- substs sub) flat'
-
-    reportLn 20 $ "After reordering:"
-    verbose 20 $ dumpContext flat'
-
-    -- Deflatten the context
-    let ctx = mkContext flat''
-
-    inContext ctx $ do
-
-        verbose 20 $ do
-            d <- prettyTCM ctx
-            dt <- prettyTCM (substs sub a)
-            liftIO $ LocIO.putStrLn $ "context = " ++ show d
-            liftIO $ LocIO.putStrLn $ "type    = " ++ show dt
-
-        reportLn 20 $ "finished type checking left hand side"
-        ret rsub xs ps (substs sub a)
-    where
-        popMeta = do
-            x : xs <- get
-            put xs
-            return x
-
-        buildNewPatterns :: [NamedArg A.Pattern] -> StateT [MetaId] TCM [NamedArg A.Pattern]
-        buildNewPatterns = mapM buildNewPattern'
-
-        buildNewPattern' = (traverse . traverse) buildNewPattern
-
-        buildNewPattern :: A.Pattern -> StateT [MetaId] TCM A.Pattern
-        buildNewPattern (A.ImplicitP i) = do
-            x <- popMeta
-            v <- lift $ instantiate (MetaV x [])
-            lift $ verbose 6 $ do
-                d <- prettyTCM v
-                liftIO $ LocIO.putStrLn $ "new pattern for " ++ show x ++ " = " ++ show d
-            case v of
-                -- Unsolved metas become variables
-                MetaV y _ | x == y  -> return $ A.WildP i
-                -- Anything else becomes dotted
-                _                   -> do
-                    lift $ verbose 6 $ do
-                        d <- prettyTCM =<< instantiateFull v
-                        liftIO $ LocIO.putStrLn $ show x ++ " := " ++ show d
-                    scope <- lift getScope
-                    return $ A.DotP i (A.Underscore $ info scope)
-                    where info s = Info.MetaInfo (getRange i) s Nothing
-
-        buildNewPattern p@(A.VarP _)    = return p
-        buildNewPattern p@(A.WildP _)   = return p
-        buildNewPattern p@(A.DotP _ _)  = popMeta >> return p
-        buildNewPattern (A.AsP i x p)   = A.AsP i x <$> buildNewPattern p
-        buildNewPattern (A.ConP i c ps) = A.ConP i c <$> buildNewPatterns ps
-        buildNewPattern (A.DefP i c ps) = A.DefP i c <$> buildNewPatterns ps
-        buildNewPattern p@(A.AbsurdP _) = return p
-        buildNewPattern p@(A.LitP _)    = return p
-
-        checkDotPatterns :: [NamedArg A.Pattern] -> StateT [MetaId] TCM ()
-        checkDotPatterns = mapM_ checkDotPattern'
-
-        checkDotPattern' p = (traverse . traverse) checkDotPattern p >> return ()
-
-        checkDotPattern :: A.Pattern -> StateT [MetaId] TCM ()
-        checkDotPattern (A.ImplicitP i) = __IMPOSSIBLE__    -- there should be no implicits left at this point
-        checkDotPattern p@(A.VarP _)    = return ()
-        checkDotPattern p@(A.WildP _)   = return ()
-        checkDotPattern p@(A.DotP i e)  = do
-            x <- popMeta
-            lift $ do
-                firstOrder <- isFirstOrder x    -- first order and uninstantiated
-                when firstOrder $ typeError
-                                $ InternalError -- TODO: proper error
-                                $ "uninstantiated dot pattern at " ++ show (getRange i)
-                HasType _ o <- mvJudgement <$> lookupMeta x
-                a <- getOpen o
-                v <- checkExpr e a
-                noConstraints $ equalTerm t v (MetaV x [])
-        checkDotPattern (A.AsP i x p)   = checkDotPattern p
-        checkDotPattern (A.ConP i c ps) = checkDotPatterns ps
-        checkDotPattern (A.DefP i c ps) = checkDotPatterns ps
-        checkDotPattern p@(A.AbsurdP _) = return ()
-        checkDotPattern p@(A.LitP _)    = return ()
-
-        -- Get the flattened context
-        flatContext :: TCM Context
-        flatContext = do
-            n <- size <$> getContext
-            mapM f [0..n - 1]
-            where
-                f i = do
-                    Arg h t <- instantiateFull =<< typeOfBV' i
-                    x <- nameOfBV i
-                    return $ Arg h (x, t)
-
-        -- Reorder a flat context to make sure it's valid.
-        reorderCtx :: Context -> TCM Context
-        reorderCtx ctx = reverse <$> reorder (reverse ctx)
-            where
-                free t = mapM nameOfBV (Set.toList $ allVars $ freeVars t)
-
-                reorder :: [Arg (Name, Type)] -> TCM [Arg (Name, Type)]
-                reorder []            = return []
-                reorder (Arg h (x,t) : tel) = do
-                    tel' <- reorder tel
-                    xs   <- free t
-                    verbose 20 $ do
-                        d <- prettyTCM t
-                        liftIO $ LocIO.putStrLn $ "freeIn " ++ show x ++ " : " ++ show d ++ " are " ++ show xs
-                    case intersect (map (fst . unArg) tel') xs of
-                        [] -> return $ Arg h (x,t) : tel'
-                        zs -> return $ ins zs (Arg h (x,t)) tel'
-
-                ins [] p tel               = p : tel
-                ins xs p (Arg h (x,t):tel) = Arg h (x,t) : ins (delete x xs) p tel
-                ins (_:_) _ []             = __IMPOSSIBLE__
-
-        -- Compute a renaming from the first names to the second.
-        computeSubst :: [Name] -> [Name] -> [Term]
-        computeSubst old new = map ix old
-            where
-                ix x = case findIndex (==x) new of
-                        Just i  -> Var i []
-                        Nothing -> __IMPOSSIBLE__
-
-        -- Take a flat (but valid) context and turn it into a proper context.
-        mkContext :: [Arg (Name, Type)] -> Context
-        mkContext = reverse . mkCtx . reverse
-            where
-                mkCtx []          = []
-                mkCtx ctx0@(Arg h (x,t) : ctx) = Arg h (x, substs sub t) : mkCtx ctx
-                    where
-                        sub = map err ctx0 ++ [ Var i [] | i <- [0..] ]
-
-                        err (Arg _ (y,_)) = error $ show y ++ " occurs in the type of " ++ show x
-
-        -- Print a flat context
-        dumpContext :: Context -> TCM ()
-        dumpContext ctx = do
-            let pr (Arg h (x,t)) = do
-                  d <- prettyTCM t
-                  return $ "  " ++ par h (show x ++ " : " ++ show d)
-                par Hidden    s = "{" ++ s ++ "}"
-                par NotHidden s = "(" ++ s ++ ")"
-            ds <- mapM pr ctx
-            liftIO $ LocIO.putStr $ unlines $ reverse ds
--}
+    A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- False
 
 actualConstructor :: QName -> TCM QName
 actualConstructor c = do
     v <- constructorForm =<< normalise (Con c [])
-    case v of
+    case ignoreSharing v of
         Con c _ -> return c
         _       -> actualConstructor =<< stripLambdas v
     where
-        stripLambdas v = case v of
+        stripLambdas v = case ignoreSharing v of
             Con c _ -> return c
             Lam h b -> do
                 x <- freshName_ $ absName b
-                addCtx x (Arg h Relevant $ sort Prop) $ stripLambdas (absBody b)
+                addCtx x (Dom h Relevant $ sort Prop) $ stripLambdas (absBody b)
             _       -> typeError $ GenericError $ "Not a constructor: " ++ show c
diff --git a/src/full/Agda/TypeChecking/Rules/LHS.hs b/src/full/Agda/TypeChecking/Rules/LHS.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS.hs
@@ -20,22 +20,27 @@
 import Agda.TypeChecking.Records -- isRecord
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute hiding (Substitution)
+import qualified Agda.TypeChecking.Substitute as S (Substitution)
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Conversion
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Irrelevance
 import Agda.TypeChecking.Primitive (constructorForm)
-import {-# SOURCE #-} Agda.TypeChecking.Empty (isReallyEmptyType)
-import Agda.TypeChecking.Telescope (renamingR, teleArgs)
+import {-# SOURCE #-} Agda.TypeChecking.Empty
+-- Duplicate import??
+-- import Agda.TypeChecking.Telescope (renamingR, teleArgs)
 
-import Agda.TypeChecking.Rules.Term (checkExpr)
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr)
 import Agda.TypeChecking.Rules.LHS.Problem
+import Agda.TypeChecking.Rules.LHS.ProblemRest
 import Agda.TypeChecking.Rules.LHS.Unify
 import Agda.TypeChecking.Rules.LHS.Split
 import Agda.TypeChecking.Rules.LHS.Implicit
 import Agda.TypeChecking.Rules.LHS.Instantiate
 import Agda.TypeChecking.Rules.Data
 
+import Agda.Interaction.Highlighting.Generate
+
 import Agda.Utils.Permutation
 import Agda.Utils.Size
 import Agda.Utils.Monad
@@ -43,58 +48,48 @@
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
-data DotPatternInst = DPI A.Expr Term Type
-data AsBinding      = AsB Name Term Type
-
-instance Subst DotPatternInst where
-  substs us      (DPI e v a) = uncurry (DPI e) $ substs us (v,a)
-  substUnder n u (DPI e v a) = uncurry (DPI e) $ substUnder n u (v,a)
-
-instance PrettyTCM DotPatternInst where
-  prettyTCM (DPI e v a) = sep [ prettyA e <+> text "="
-                              , nest 2 $ prettyTCM v <+> text ":"
-                              , nest 2 $ prettyTCM a
-                              ]
-
-instance Subst AsBinding where
-  substs us      (AsB x v a) = uncurry (AsB x) $ substs us (v, a)
-  substUnder n u (AsB x v a) = uncurry (AsB x) $ substUnder n u (v, a)
-
-instance Raise AsBinding where
-  raiseFrom m k (AsB x v a) = uncurry (AsB x) $ raiseFrom m k (v, a)
-  renameFrom m k (AsB x v a) = uncurry (AsB x) $ renameFrom m k (v, a)
-
-instance PrettyTCM AsBinding where
-  prettyTCM (AsB x v a) =
-    sep [ prettyTCM x <> text "@" <> parens (prettyTCM v)
-        , nest 2 $ text ":" <+> prettyTCM a
-        ]
-
 -- | Compute the set of flexible patterns in a list of patterns. The result is
 --   the deBruijn indices of the flexible patterns. A pattern is flexible if it
 --   is dotted or implicit.
-flexiblePatterns :: [NamedArg A.Pattern] -> FlexibleVars
-flexiblePatterns nps = [ i | (i, p) <- zip [0..] $ reverse ps, flexible p ]
+flexiblePatterns :: [NamedArg A.Pattern] -> TCM FlexibleVars
+flexiblePatterns nps = map fst <$> filterM (flexible . snd) (zip [0..] $ reverse ps)
   where
-    ps = map (namedThing . unArg) nps
-    flexible (A.DotP _ _)    = True
-    flexible (A.ImplicitP _) = True
-    flexible _               = False
+    ps = map namedArg nps
+    flexible (A.DotP _ _)    = return True
+    flexible (A.ImplicitP _) = return True
+    flexible (A.ConP _ (A.AmbQ [c]) qs) =
+      ifM (isJust <$> isRecordConstructor c)
+          (andM $ map (flexible . namedArg) qs)
+          (return False)
+    flexible _               = return False
 
 -- | Compute the dot pattern instantiations.
-dotPatternInsts :: [NamedArg A.Pattern] -> Substitution -> [Type] -> [DotPatternInst]
-dotPatternInsts ps s as = dpi (map (namedThing . unArg) ps) (reverse s) as
+dotPatternInsts :: [NamedArg A.Pattern] -> Substitution -> [Dom Type] -> TCM [DotPatternInst]
+dotPatternInsts ps s as = dpi (map namedArg ps) (reverse s) as
   where
     dpi (_ : _)  []            _       = __IMPOSSIBLE__
     dpi (_ : _)  (Just _ : _)  []      = __IMPOSSIBLE__
     -- the substitution also contains entries for module parameters, so it can
     -- be longer than the pattern
-    dpi []       _             _       = []
+    dpi []       _             _       = return []
     dpi (_ : ps) (Nothing : s) as      = dpi ps s as
     dpi (p : ps) (Just u : s) (a : as) =
       case p of
-        A.DotP _ e    -> DPI e u a : dpi ps s as
+        A.DotP _ e    -> (DPI e u a :) <$> dpi ps s as
         A.ImplicitP _ -> dpi ps s as
+        -- record pattern
+        A.ConP _ (A.AmbQ [c]) qs -> do
+          Def r vs   <- ignoreSharing <$> reduce (unEl $ unDom a)
+          (ftel, us) <- etaExpandRecord r vs u
+          qs <- insertImplicitPatterns ExpandLast qs ftel
+          let instTel EmptyTel _                   = []
+              instTel (ExtendTel arg tel) (u : us) = arg : instTel (absApp tel u) us
+              instTel ExtendTel{} []               = __IMPOSSIBLE__
+              bs0 = instTel ftel (map unArg us)
+              -- Andreas, 2012-09-19 propagate relevance info to dot patterns
+              bs  = map (mapDomRelevance (composeRelevance (domRelevance a))) bs0
+          dpi (map namedArg qs ++ ps) (map (Just . unArg) us ++ s) (bs ++ as)
+
         _           -> __IMPOSSIBLE__
 
 instantiatePattern :: Substitution -> Permutation -> [Arg Pattern] -> [Arg Pattern]
@@ -139,7 +134,7 @@
 
 -- | Check if a problem is solved. That is, if the patterns are all variables.
 isSolvedProblem :: Problem -> Bool
-isSolvedProblem = all (isVar . snd . asView . namedThing . unArg) . problemInPat
+isSolvedProblem = all (isVar . snd . asView . namedArg) . problemInPat
   where
     isVar (A.VarP _)      = True
     isVar (A.WildP _)     = True
@@ -154,26 +149,34 @@
 --
 -- Precondition: The problem has to be solved.
 
+{-
 noShadowingOfConstructors
   :: A.Clause
      -- ^ The entire clause (used for error reporting).
   -> Problem -> TCM ()
 noShadowingOfConstructors c problem =
   traceCall (CheckPatternShadowing c) $ do
-    let pat = map (snd . asView . namedThing . unArg) $
+-}
+noShadowingOfConstructors
+  :: (Maybe r -> Call) -- ^ Trace, e.g., @CheckPatternShadowing clause@
+  -> Problem -> TCM ()
+noShadowingOfConstructors mkCall problem =
+  traceCall mkCall $ do
+    let pat = map (snd . asView . namedArg) $
                   problemInPat problem
-        tel = map (unEl . snd . unArg) $ telToList $ problemTel problem
+        tel = map (unEl . snd . unDom) $ telToList $ problemTel problem
     zipWithM' noShadowing pat tel
     return ()
   where
   noShadowing (A.WildP     {}) t = return ()
   noShadowing (A.AbsurdP   {}) t = return ()
   noShadowing (A.ImplicitP {}) t = return ()
-  noShadowing (A.ConP      {}) t = __IMPOSSIBLE__
+  noShadowing (A.ConP      {}) t = return ()  -- only happens for eta expanded record patterns
   noShadowing (A.DefP      {}) t = __IMPOSSIBLE__
   noShadowing (A.AsP       {}) t = __IMPOSSIBLE__
   noShadowing (A.DotP      {}) t = __IMPOSSIBLE__
   noShadowing (A.LitP      {}) t = __IMPOSSIBLE__
+  noShadowing (A.PatternSynP {}) t = __IMPOSSIBLE__
   noShadowing (A.VarP x)       t = do
     t <- normalise t
     case t of
@@ -197,6 +200,7 @@
       Var   {} -> return ()
       Pi    {} -> return ()
       Sort  {} -> return ()
+      Shared p -> noShadowing (A.VarP x) $ derefPtr p
       MetaV {} -> return ()
       -- TODO: If the type is a meta-variable, should the test be
       -- postponed? If there is a problem, then it will be caught when
@@ -211,7 +215,7 @@
 
 -- | Check that a dot pattern matches it's instantiation.
 checkDotPattern :: DotPatternInst -> TCM ()
-checkDotPattern (DPI e v a) =
+checkDotPattern (DPI e v (Dom h r a)) =
   traceCall (CheckDotPattern e v) $ do
   reportSDoc "tc.lhs.dot" 15 $
     sep [ text "checking dot pattern"
@@ -219,26 +223,42 @@
         , nest 2 $ text "=" <+> prettyTCM v
         , nest 2 $ text ":" <+> prettyTCM a
         ]
-  u <- checkExpr e a
-  -- Should be ok to do noConstraints here
-  noConstraints $ equalTerm a u v
+  applyRelevanceToContext r $ do
+    u <- checkExpr e a
+    -- Should be ok to do noConstraints here
+    noConstraints $ equalTerm a u v
 
 -- | Bind the variables in a left hand side. Precondition: the patterns should
 --   all be 'A.VarP', 'A.WildP', or 'A.ImplicitP' and the telescope should have
 --   the same size as the pattern list.
+--   There could also be 'A.ConP's resulting from eta expanded implicit record
+--   patterns.
 bindLHSVars :: [NamedArg A.Pattern] -> Telescope -> TCM a -> TCM a
 bindLHSVars []       (ExtendTel _ _)   _   = __IMPOSSIBLE__
 bindLHSVars (_ : _)   EmptyTel         _   = __IMPOSSIBLE__
 bindLHSVars []        EmptyTel         ret = ret
 bindLHSVars (p : ps) (ExtendTel a tel) ret =
-  case namedThing $ unArg p of
+  case namedArg p of
     A.VarP x      -> addCtx x a $ bindLHSVars ps (absBody tel) ret
     A.WildP _     -> bindDummy (absName tel)
     A.ImplicitP _ -> bindDummy (absName tel)
-    A.AbsurdP _   -> do
-      isReallyEmptyType $ unArg a
+    A.AbsurdP pi  -> do
+      -- Andreas, 2012-03-15: allow postponement of emptyness check
+      isEmptyType (getRange pi) $ unDom a
+      -- OLD CODE: isReallyEmptyType $ unArg a
       bindDummy (absName tel)
-    _             -> __IMPOSSIBLE__
+    A.ConP _ (A.AmbQ [c]) qs -> do -- eta expanded record pattern
+      Def r vs <- reduce (unEl $ unDom a)
+      ftel     <- (`apply` vs) <$> getRecordFieldTypes r
+      let n   = size ftel
+          eta = Con c [ Var i [] <$ (namedThing <$> q) | (q, i) <- zip qs [n - 1, n - 2..0] ]
+      bindLHSVars (qs ++ ps) (ftel `abstract` absApp (raise (size ftel) tel) eta) ret
+    A.ConP{}        -> __IMPOSSIBLE__
+    A.DefP{}        -> __IMPOSSIBLE__
+    A.AsP{}         -> __IMPOSSIBLE__
+    A.DotP{}        -> __IMPOSSIBLE__
+    A.LitP{}        -> __IMPOSSIBLE__
+    A.PatternSynP{} -> __IMPOSSIBLE__
     where
       name "_" = freshNoName_
       name s   = freshName_ ("." ++ s)
@@ -256,60 +276,39 @@
         ]
   addLetBinding Relevant x v a $ bindAsPatterns asb ret
 
--- | Rename the variables in a telescope using the names from a given pattern
-useNamesFromPattern :: [NamedArg A.Pattern] -> Telescope -> Telescope
-useNamesFromPattern ps = telFromList . zipWith ren (toPats ps ++ repeat dummy) . telToList
-  where
-    dummy = A.WildP __IMPOSSIBLE__
-    ren (A.VarP x) (Arg NotHidden r (_, a)) = Arg NotHidden r (show x, a)
-    ren _ a = a
-    toPats = map (namedThing . unArg)
-
 -- | Check a LHS. Main function.
 checkLeftHandSide
-  :: A.Clause
-     -- ^ The entire clause.
+  :: (Maybe r -> Call)
+     -- ^ Trace, e.g. @CheckPatternShadowing clause@
   -> [NamedArg A.Pattern]
      -- ^ The patterns.
   -> Type
-     -- ^ The expected type.
-  -> (Telescope -> Telescope -> [Term] -> [String] -> [Arg Pattern]
-      -> Type -> Permutation -> TCM a)
+     -- ^ The expected type @a = Γ → b@.
+  -> (Maybe Telescope   -- Γ : The types of the patterns.
+                        -- 'Nothing' if more patterns than domain types in @a@.
+                        -- Used only to construct a @with@ function; see 'stripwithClausePatterns'.
+      -> Telescope      -- Δ : The types of the pattern variables.
+      -> S.Substitution -- σ : The patterns in form of a substitution Δ ⊢ σ : Γ
+      -> [String]       -- Names for the variables in Δ, for binding the body.
+      -> [Arg Pattern]  -- The patterns in internal syntax.
+      -> Type           -- The type of the body. Is @bσ@ if @Γ@ is defined.
+      -> Permutation    -- The permutation from pattern vars to @Δ@.
+      -> TCM a)
      -- ^ Continuation.
   -> TCM a
 checkLeftHandSide c ps a ret = do
-  TelV tel0' b0 <- telView a
-  ps <- insertImplicitPatterns ps tel0'
-  unless (size tel0' >= size ps) $ typeError $ TooManyArgumentsInLHS (size ps) a
-  let tel0     = useNamesFromPattern ps tel0'
-      (as, bs) = splitAt (size ps) $ telToList tel0
-      gamma    = telFromList as
-      b        = telePi (telFromList bs) b0
-
-      -- internal patterns start as all variables
-      ips      = map (fmap (VarP . fst)) as
-
-      problem  = Problem ps (idP $ size ps, ips) gamma
-
-  reportSDoc "tc.lhs.top" 10 $
-    vcat [ text "checking lhs:"
-	 , nest 2 $ vcat
-	   [ text "ps    =" <+> fsep (map prettyA ps)
-	   , text "a     =" <+> (prettyTCM =<< normalise a)
-	   , text "a'    =" <+> prettyTCM (telePi tel0  b0)
-	   , text "a''   =" <+> prettyTCM (telePi tel0' b0)
-           , text "xs    =" <+> text (show $ map (fst . unArg) as)
-	   , text "tel0  =" <+> prettyTCM tel0
-	   , text "b0    =" <+> prettyTCM b0
-	   , text "gamma =" <+> prettyTCM gamma
-	   , text "b     =" <+> addCtxTel gamma (prettyTCM b)
-	   ]
-	 ]
+  problem <- problemFromPats ps a
+  unless (noProblemRest problem) $ typeError $ TooManyArgumentsInLHS a
+  let (Problem _ _ gamma (ProblemRest _ b)) = problem
+      mgamma = if noProblemRest problem then Just gamma else Nothing
+      st     = LHSState problem idS [] []
 
-  let idsub = [ Var i [] | i <- [0..] ]
+  -- doing the splits:
+  LHSState (Problem ps (perm, qs) delta rest) sigma dpi asb <- checkLHS st
+  unless (null $ restPats rest) $ typeError $ TooManyArgumentsInLHS a
 
-  (Problem ps (perm, qs) delta, sigma, dpi, asb) <- checkLHS problem idsub [] []
-  let b' = substs sigma b
+  -- let b' = applySubst sigma b
+  let b' = restType rest
 
   noPatternMatchingOnCodata qs
 
@@ -333,18 +332,19 @@
     let rho = renamingR perm -- I'm not certain about this...
         Perm n _ = perm
         xs  = [ "h" ++ show n | n <- [0..n - 1] ]
-    ret gamma delta rho xs qs b' perm
+    ret mgamma delta rho xs qs b' perm
   where
-    checkLHS :: Problem -> [Term] -> [DotPatternInst] -> [AsBinding] ->
-                TCM (Problem, [Term], [DotPatternInst], [AsBinding])
-    checkLHS problem sigma dpi asb
-      | isSolvedProblem problem = do
-        problem <- insertImplicitProblem problem -- inserting implicit patterns preserves solvedness
-        noShadowingOfConstructors c problem
-        return (problem, sigma, dpi, asb)
-      | otherwise               = do
-        sp <- splitProblem =<< insertImplicitProblem problem
-        reportSDoc "tc.lhs.top" 20 $ text "splitting completed"
+    -- the loop: split at a variable in the problem until problem is solved
+    checkLHS :: LHSState -> TCM LHSState
+    checkLHS st@(LHSState problem sigma dpi asb) = do
+      problem <- insertImplicitProblem problem  -- inserting implicits no longer preserve solvedness
+      if isSolvedProblem problem                -- since we might insert eta expanded record patterns
+        then do
+          noShadowingOfConstructors c problem
+          return $ st { lhsProblem = problem }
+        else do
+        sp <- splitProblem problem
+        reportSDoc "tc.lhs.split" 20 $ text "splitting completed"
         case sp of
           Left NothingToSplit   -> nothingToSplitError problem
           Left (SplitPanic err) -> __IMPOSSIBLE__
@@ -354,27 +354,28 @@
 
             -- plug the hole with a lit pattern
             let ip    = plugHole (LitP lit) iph
-                iperm = expandP (fromIntegral hix) 0 $ fst (problemOutPat problem)
+                iperm = expandP hix 0 $ fst (problemOutPat problem)
 
             -- substitute the literal in p1 and sigma and dpi and asb
             let delta1 = problemTel p0
                 delta2 = absApp (fmap problemTel p1) (Lit lit)
-                rho    = [ var i | i <- [0..size delta2 - 1] ]
-                      ++ [ raise (size delta2) $ Lit lit ]
-                      ++ [ var i | i <- [size delta2 ..] ]
-                  where
-                    var i = Var i []
-                sigma'   = substs rho sigma
-                dpi'     = substs rho dpi
-                asb0     = substs rho asb
-                ip'      = substs rho ip
+                rho    = liftS (size delta2) $ singletonS (Lit lit)
+                -- rho    = [ var i | i <- [0..size delta2 - 1] ]
+                --       ++ [ raise (size delta2) $ Lit lit ]
+                --       ++ [ var i | i <- [size delta2 ..] ]
+                sigma'   = applySubst rho sigma
+                dpi'     = applySubst rho dpi
+                asb0     = applySubst rho asb
+                ip'      = applySubst rho ip
+                rest'    = applySubst rho (problemRest problem)
 
             -- Compute the new problem
             let ps'      = problemInPat p0 ++ problemInPat (absBody p1)
                 delta'   = abstract delta1 delta2
-                problem' = Problem ps' (iperm, ip') delta'
+                problem' = Problem ps' (iperm, ip') delta' rest'
                 asb'     = raise (size delta2) (map (\x -> AsB x (Lit lit) a) xs) ++ asb0
-            checkLHS problem' sigma' dpi' asb'
+            st' <- updateProblemRest (LHSState problem' sigma' dpi' asb')
+            checkLHS st'
 
           -- Split on constructor pattern
           Right (Split p0 xs (Arg h rel
@@ -396,7 +397,7 @@
             let delta1 = problemTel p0
             let typeOfSplitVar = Arg h rel a
 
-            reportSDoc "tc.lhs.top" 10 $ sep
+            reportSDoc "tc.lhs.split" 10 $ sep
               [ text "checking lhs"
               , nest 2 $ text "tel =" <+> prettyTCM (problemTel problem)
               , nest 2 $ text "rel =" <+> (text $ show rel)
@@ -412,11 +413,11 @@
                 ]
               ]
 
-            Con c' [] <- constructorForm =<< normalise (Con c [])
+            Con c' [] <- ignoreSharing <$> (constructorForm =<< normalise (Con c []))
             c  <- return $ c' `withRangeOf` c
             ca <- defType <$> getConstInfo c
 
-            reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat
+            reportSDoc "tc.lhs.split" 20 $ nest 2 $ vcat
               [ text "ca =" <+> prettyTCM ca
               , text "vs =" <+> prettyList (map prettyTCM vs)
               ]
@@ -425,7 +426,10 @@
             let a = ca `piApply` vs
 
             -- It will end in an application of the datatype
-            TelV gamma' ca@(El _ (Def d' us)) <- telView a
+            (gamma', ca, d', us) <- do
+              TelV gamma' ca@(El _ def) <- telView a
+              let Def d' us = ignoreSharing def
+              return (gamma', ca, d', us)
 
             -- This should be the same datatype as we split on
             unless (d == d') $ typeError $ ShouldBeApplicationOf ca d'
@@ -444,7 +448,7 @@
               ]
 -}
             -- Insert implicit patterns
-            qs' <- insertImplicitPatterns qs gamma'
+            qs' <- insertImplicitPatterns ExpandLast qs gamma'
 
             unless (size qs' == size gamma') $
               typeError $ WrongNumberOfConstructorArguments c (size gamma') (size qs')
@@ -455,7 +459,7 @@
             da <- (`piApply` vs) . defType <$> getConstInfo d
 
             -- Compute the flexible variables
-            let flex = flexiblePatterns (problemInPat p0 ++ qs')
+            flex <- flexiblePatterns (problemInPat p0 ++ qs')
 
 	    reportSDoc "tc.lhs.top" 15 $ addCtxTel delta1 $
 	      sep [ text "preparing to unify"
@@ -473,17 +477,17 @@
             sub0 <- addCtxTel (delta1 `abstract` gamma) $
                     unifyIndices_ flex (raise (size gamma) da) (drop (size vs) us) (raise (size gamma) ws)
 
-            -- We should subsitute c ys for x in Δ₂ and sigma
+            -- We should substitute c ys for x in Δ₂ and sigma
             let ys     = teleArgs gamma
                 delta2 = absApp (raise (size gamma) $ fmap problemTel p1) (Con c ys)
-                rho0 = [ var i | i <- [0..size delta2 - 1] ]
-                    ++ [ raise (size delta2) $ Con c ys ]
-                    ++ [ var i | i <- [size delta2 + size gamma ..] ]
-                  where
-                    var i = Var i []
-                sigma0 = substs rho0 sigma
-                dpi0   = substs rho0 dpi
-                asb0   = substs rho0 asb
+                rho0   = liftS (size delta2) $ Con c ys :# raiseS (size gamma)
+                -- rho0 = [ var i | i <- [0..size delta2 - 1] ]
+                --     ++ [ raise (size delta2) $ Con c ys ]
+                --     ++ [ var i | i <- [size delta2 + size gamma ..] ]
+                sigma0 = applySubst rho0 sigma
+                dpi0   = applySubst rho0 dpi
+                asb0   = applySubst rho0 asb
+                rest0  = applySubst rho0 (problemRest problem)
 
             reportSDoc "tc.lhs.top" 15 $ addCtxTel (delta1 `abstract` gamma) $ nest 2 $ vcat
               [ text "delta2 =" <+> prettyTCM delta2
@@ -500,14 +504,14 @@
             -- all variables which will be bound by patterns.
             -- Thus, it has to be raised by 1 (the "hole" variable)
             -- plus the length of delta2 (the variables coming after the hole).
-            storedPatternType <- ifM (isRecord d)
+            storedPatternType <- ifM (isJust <$> isRecord d)
               (return $ Just $ raise (1 + size delta2) $ typeOfSplitVar)
               (return $ Nothing)
 
             -- Plug the hole in the out pattern with c ys
-            let ysp = map (fmap (VarP . fst)) $ telToList gamma
+            let ysp = map (argFromDom . fmap (VarP . fst)) $ telToList gamma
                 ip  = plugHole (ConP c storedPatternType ysp) iph
-                ip0 = substs rho0 ip
+                ip0 = applySubst rho0 ip
 
             -- Δ₁Γ ⊢ sub0, we need something in Δ₁ΓΔ₂
             -- Also needs to be padded with Nothing's to have the right length.
@@ -523,8 +527,8 @@
               , text "ip0  =" <+> text (show ip0)
               ]
             reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat
-              [ text "rho0 =" <+> text (show $ take (size delta1 + size gamma + size delta2) rho0)
-              ]  -- Andreas, this is showing some inital segment of rho0, not necessarily the most meaningful one
+              [ text "rho0 =" <+> text (show rho0)
+              ]
 
             -- Instantiate the new telescope with the given substitution
             (delta', perm, rho, instTypes) <- instantiateTel sub newTel
@@ -547,16 +551,17 @@
 -}
             -- Compute the new dot pattern instantiations
             let ps0'   = problemInPat p0 ++ qs' ++ problemInPat (absBody p1)
-                newDpi = dotPatternInsts ps0' (substs rho sub) instTypes
 
             reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat
-              [ text "subst rho sub =" <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) (substs rho sub))
+              [ text "subst rho sub =" <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) (applySubst rho sub))
               , text "ps0'  =" <+> brackets (fsep $ punctuate comma $ map prettyA ps0')
               ]
 
+            newDpi <- dotPatternInsts ps0' (applySubst rho sub) instTypes
+
             -- The final dpis and asbs are the new ones plus the old ones substituted by ρ
-            let dpi' = substs rho dpi0 ++ newDpi
-                asb' = substs rho $ asb0 ++ raise (size delta2) (map (\x -> AsB x (Con c ys) ca) xs)
+            let dpi' = applySubst rho dpi0 ++ newDpi
+                asb' = applySubst rho $ asb0 ++ raise (size delta2) (map (\x -> AsB x (Con c ys) ca) xs)
 
             reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat
               [ text "dpi' = " <+> brackets (fsep $ punctuate comma $ map prettyTCM dpi')
@@ -564,7 +569,8 @@
               ]
 
             -- Apply the substitution to the type
-            let sigma'   = substs rho sigma0
+            let sigma'   = applySubst rho sigma0
+                rest'    = applySubst rho rest0
 
             reportSDoc "tc.lhs.inst" 15 $
               nest 2 $ text "ps0 = " <+> brackets (fsep $ punctuate comma $ map prettyA ps0')
@@ -575,15 +581,15 @@
            -- Compute the new permutation of the out patterns. This is the composition of
             -- the new permutation with the expansion of the old permutation to
             -- reflect the split.
-            let perm'  = expandP (fromIntegral hix) (size gamma) $ fst (problemOutPat problem)
+            let perm'  = expandP hix (size gamma) $ fst (problemOutPat problem)
                 iperm' = perm `composeP` perm'
 
             -- Instantiate the out patterns
             let ip'    = instantiatePattern sub perm' ip0
-                newip  = substs rho ip'
+                newip  = applySubst rho ip'
 
             -- Construct the new problem
-            let problem' = Problem ps' (iperm', newip) delta'
+            let problem' = Problem ps' (iperm', newip) delta' rest'
 
             reportSDoc "tc.lhs.top" 12 $ sep
               [ text "new problem"
@@ -602,8 +608,23 @@
               , text "newip  =" <+> text (show newip)
               ]
 
+            -- if rest type reduces,
+            -- extend the split problem by previously not considered patterns
+            st'@(LHSState problem'@(Problem ps' (iperm', ip') delta' rest')
+                          sigma' dpi' asb')
+              <- updateProblemRest $ LHSState problem' sigma' dpi' asb'
+
+            reportSDoc "tc.lhs.top" 12 $ sep
+              [ text "new problem from rest"
+              , nest 2 $ vcat
+                [ text "ps'    = " <+> fsep (map prettyA ps')
+                , text "delta' = " <+> prettyTCM delta'
+                , text "ip'    =" <+> text (show ip')
+                , text "iperm' =" <+> text (show iperm')
+                ]
+              ]
             -- Continue splitting
-            checkLHS problem' sigma' dpi' asb'
+            checkLHS st'
 
 -- Ensures that we are not performing pattern matching on codata.
 
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs b/src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs
@@ -1,7 +1,8 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, PatternGuards #-}
 
 module Agda.TypeChecking.Rules.LHS.Implicit where
 
+import Data.Maybe
 import Control.Applicative
 
 import Agda.Syntax.Common
@@ -14,27 +15,32 @@
 import Agda.TypeChecking.Implicit
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Records
+import Agda.TypeChecking.Reduce
 
 import Agda.TypeChecking.Rules.LHS.Problem
 
+import Agda.Utils.Monad
+
 #include "../../../undefined.h"
 import Agda.Utils.Impossible
 
 -- | Insert implicit patterns in a problem.
 insertImplicitProblem :: Problem -> TCM Problem
-insertImplicitProblem (Problem ps qs tel) = do
+insertImplicitProblem (Problem ps qs tel pr) = do
   reportSDoc "tc.lhs.imp" 15 $
     sep [ text "insertImplicits"
 	, nest 2 $ brackets $ fsep $ punctuate comma $ map prettyA ps
 	, nest 2 $ prettyTCM tel
 	]
-  ps' <- insertImplicitPatterns ps tel
-  return $ Problem ps' qs tel
+  ps' <- insertImplicitPatterns ExpandLast ps tel
+  return $ Problem ps' qs tel pr
 
 -- | Insert implicit patterns in a list of patterns.
-insertImplicitPatterns :: [NamedArg A.Pattern] -> Telescope -> TCM [NamedArg A.Pattern]
-insertImplicitPatterns ps EmptyTel = return ps
-insertImplicitPatterns ps tel@(ExtendTel _ tel') = case ps of
+insertImplicitPatterns :: ExpandHidden -> [NamedArg A.Pattern] -> Telescope -> TCM [NamedArg A.Pattern]
+insertImplicitPatterns exh            ps EmptyTel = return ps
+insertImplicitPatterns DontExpandLast [] tel      = return []
+insertImplicitPatterns exh ps tel@(ExtendTel arg tel') = case ps of
   [] -> do
     i <- insImp dummy tel
     case i of
@@ -45,16 +51,38 @@
     i <- insImp p tel
     case i of
       Just []	-> __IMPOSSIBLE__
-      Just hs	-> insertImplicitPatterns (implicitPs hs ++ p : ps) tel
-      Nothing	-> (p :) <$> insertImplicitPatterns ps (absBody tel')
+      Just hs	-> insertImplicitPatterns exh (implicitPs hs ++ p : ps) tel
+      Nothing
+        | A.ImplicitP{} <- namedArg p,
+          argHiding p /= Instance -> do
+          -- Eta expand implicit patterns of record type (issue 473),
+          -- but not instance arguments since then they won't be found
+          -- by the instance search
+          a <- reduce (unDom arg)
+          case ignoreSharing $ unEl a of
+            Def d _ ->
+              -- Andreas, 2012-06-10: only expand guarded records,
+              -- otherwise we might run into an infinite loop
+              ifM (isEtaRecord d) (do
+                c  <- getRecordConstructor d
+                fs <- getRecordFieldNames d
+                let qs = map (implicitP <$) fs
+                continue ((A.ConP (PatRange noRange) (A.AmbQ [c]) qs <$) <$> p)
+              ) (continue p)
+            _ -> continue p
+        | otherwise -> continue p
+        where
+          continue p = (p :) <$> insertImplicitPatterns exh ps (absBody tel')
   where
-    dummy = defaultArg $ unnamed ()
+    dummy = defaultNamedArg ()
 
-    insImp x tel = case insertImplicit x $ map (fmap fst) $ telToList tel of
+    insImp x tel = case insertImplicit x $ map (argFromDom . fmap fst) $ telToList tel of
       BadImplicits   -> typeError $ WrongHidingInLHS (telePi tel $ sort Prop)
       NoSuchName x   -> typeError $ WrongHidingInLHS (telePi tel $ sort Prop)
       ImpInsert n    -> return $ Just n
       NoInsertNeeded -> return Nothing
 
+    implicitP = unnamed $ A.ImplicitP $ PatRange $ noRange
+
     implicitPs [] = []
-    implicitPs (h : hs) = (Arg h Relevant $ unnamed $ A.ImplicitP $ PatRange $ noRange) : implicitPs hs
+    implicitPs (h : hs) = (Arg h Relevant implicitP) : implicitPs hs
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs b/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs
@@ -8,14 +8,17 @@
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Substitute hiding (Substitution)
+import qualified Agda.TypeChecking.Substitute as S (Substitution)
 import Agda.TypeChecking.Free
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Telescope
 
 import Agda.TypeChecking.Rules.LHS.Problem
+-- import Agda.TypeChecking.Rules.LHS.ProblemRest
 import Agda.TypeChecking.Rules.LHS.Split ( asView )
 
+import Agda.Utils.List
 import Agda.Utils.Permutation
 import Agda.Utils.Size
 
@@ -25,7 +28,7 @@
 -- | Instantiate a telescope with a substitution. Might reorder the telescope.
 --   @instantiateTel (Γ : Tel)(σ : Γ --> Γ) = Γσ~@
 --   Monadic only for debugging purposes.
-instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, [Term], [Type])
+instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, S.Substitution, [Dom Type])
 instantiateTel s tel = liftTCM $ do
 
   tel <- normalise tel
@@ -38,9 +41,18 @@
     ]
 
   -- Shrinking permutation (removing Justs) (and its complement, and reverse)
-  let ps  = Perm (size s) [ i | (i, Nothing) <- zip [0..] $ reverse s ]
+  let n   = size s
+      {- OLD CODE, leave as documentation
+      ps  = Perm n [ i | (i, Nothing) <- zip [0..] $ reverse s ]
       psR = reverseP ps
-      psC = Perm (size s) [ i | (i, Just _)  <- zip [0..] $ reverse s ]
+      psC = Perm n [ i | (i, Just _)  <- zip [0..] $ reverse s ]
+      -}
+      deal (i, Nothing) = Left i
+      deal (i, Just _ ) = Right i
+      (is, isC) = mapEither deal $ zip [0..] $ reverse s
+      ps  = Perm n is
+      psR = reverseP ps
+      psC = Perm n isC
 
   reportSDoc "tc.lhs.inst" 10 $ vcat
     [ nest 2 $ text $ "ps   = " ++ show ps
@@ -57,6 +69,9 @@
   -- rho : [Tm Γσ]Γ
   let rho = mkSubst s'
 
+  reportSDoc "tc.lhs.inst" 15 $ nest 2 $
+    text "rho = " <+> text (show rho)
+
   -- tel1 : [Type Γ]Γ
   let tel1   = flattenTel tel
       names1 = teleNames tel
@@ -67,7 +82,7 @@
     ]
 
   -- tel2 : [Type Γσ]Γ
-  let tel2 = substs rho tel1
+  let tel2 = applySubst rho tel1
 
   reportSDoc "tc.lhs.inst" 15 $ nest 2 $
     text "tel2 =" <+> brackets (fsep $ punctuate comma $ map prettyTCM tel2)
@@ -83,7 +98,7 @@
   p <- case reorderTel tel3 of
     Nothing -> inContext [] $ do
       xs <- mapM freshName_ names3
-      addCtxs xs (Arg NotHidden Relevant prop) $ do
+      addCtxs xs (Dom NotHidden Relevant prop) $ do
         err <- sep [ text "Recursive telescope in left hand side:"
                    , fsep [ parens (prettyTCM x <+> text ":" <+> prettyTCM t)
                           | (x, t) <- zip xs tel3 ]
@@ -97,7 +112,7 @@
   let rho' = renaming (reverseP p)
 
   -- tel4 : [Type Γσ~]Γσ~
-  let tel4   = substs rho' (permute p tel3)
+  let tel4   = applySubst rho' (permute p tel3)
       names4 = permute p names3
 
   reportSDoc "tc.lhs.inst" 15 $ nest 2 $
@@ -111,34 +126,33 @@
 
   -- remember the types of the instantiations
   -- itypes : [Type Γσ~]Γ*
-  let itypes = substs rho' $ permute psC $ map unArg tel2
+  let itypes = applySubst rho' $ permute psC tel2
 
-  return (tel5, composeP p ps, substs rho' rho, itypes)
+  return (tel5, composeP p ps, applySubst rho' rho, itypes)
   where
 
-    -- Turn a Substitution ([Maybe Term]) into a substitution ([Term])
-    -- (The result is an infinite list)
-    mkSubst :: [Maybe Term] -> [Term]
+    -- Turn a Substitution ([Maybe Term]) into a substitution (S.Substitution)
+    mkSubst :: [Maybe Term] -> S.Substitution
     mkSubst s = rho 0 s'
-      where s'  = s ++ repeat Nothing
-	    rho i (Nothing : s) = Var i [] : rho (i + 1) s
-	    rho i (Just u  : s) = u : rho i s
-	    rho _ []		= __IMPOSSIBLE__
+      where s'  = s
+	    rho i (Nothing : s) = var i :# rho (i + 1) s
+	    rho i (Just u  : s) = u :# rho i s
+	    rho i []		= raiseS i
 
 -- | Produce a nice error message when splitting failed
 nothingToSplitError :: Problem -> TCM a
-nothingToSplitError (Problem ps _ tel) = splitError ps tel
+nothingToSplitError (Problem ps _ tel pr) = splitError ps tel
   where
     splitError []	EmptyTel    = __IMPOSSIBLE__
     splitError (_:_)	EmptyTel    = __IMPOSSIBLE__
     splitError []	ExtendTel{} = __IMPOSSIBLE__
     splitError (p : ps) (ExtendTel a tel)
-      | isBad p   = traceCall (CheckPattern (strip p) EmptyTel (unArg a)) $ case strip p of
+      | isBad p   = traceCall (CheckPattern (strip p) EmptyTel (unDom a)) $ case strip p of
 	  A.DotP _ e -> typeError $ UninstantiatedDotPattern e
-	  p	     -> typeError $ IlltypedPattern p (unArg a)
+	  p	     -> typeError $ IlltypedPattern p (unDom a)
       | otherwise = underAbstraction a tel $ \tel -> splitError ps tel
       where
-	strip = snd . asView . namedThing . unArg
+	strip = snd . asView . namedArg
 	isBad p = case strip p of
 	  A.DotP _ _   -> True
 	  A.ConP _ _ _ -> True
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Problem.hs b/src/full/Agda/TypeChecking/Rules/LHS/Problem.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/Problem.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/Problem.hs
@@ -1,8 +1,8 @@
-
+{-# LANGUAGE CPP #-}
 module Agda.TypeChecking.Rules.LHS.Problem where
 
 import Control.Monad.Error
-import Data.Monoid
+import Data.Monoid ( Monoid(mappend,mempty) )
 
 import Agda.Syntax.Common
 import Agda.Syntax.Literal
@@ -11,49 +11,128 @@
 import Agda.Syntax.Internal.Pattern
 import qualified Agda.Syntax.Abstract as A
 
-import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Substitute as S
+import Agda.TypeChecking.Pretty
 
 import Agda.Utils.Permutation
 
+{- UNUSED
+#include "../../../undefined.h"
+import Agda.Utils.Impossible
+-}
+
 type Substitution   = [Maybe Term]
 type FlexibleVars   = [Nat]
 
+-- | State of typechecking a LHS; input to 'split'.
+--   [Ulf Norell's PhD, page. 35]
+--
+--   In @Problem ps p delta@,
+--   @ps@ are the user patterns of supposed type @delta@.
+--   @p@ is the pattern resulting from the splitting.
 data Problem' p	    = Problem { problemInPat  :: [NamedArg A.Pattern]
 			      , problemOutPat :: p
 			      , problemTel    :: Telescope
+                              , problemRest   :: ProblemRest
 			      }
+
+-- | User patterns that could not be given a type yet.
+--
+--   Example:
+--   @
+--      f : (b : Bool) -> if b then Nat else Nat -> Nat
+--      f true          = zero
+--      f false zero    = zero
+--      f false (suc n) = n
+--   @
+--   In this sitation, for clause 2, we construct an initial problem
+--   @
+--      problemInPat = [false]
+--      problemTel   = (b : Bool)
+--      problemRest.restPats = [zero]
+--      problemRest.restType = if b then Nat else Nat -> Nat
+--   @
+--   As we instantiate @b@ to @false@, the 'restType' reduces to
+--   @Nat -> Nat@ and we can move pattern @zero@ over to @problemInPat@.
+data ProblemRest    = ProblemRest
+  { restPats :: [NamedArg A.Pattern]  -- ^ non-empty list of user patterns which could not yet be typed
+  , restType :: Type                  -- ^ type eliminated by 'restPats'
+  }
+
 data Focus	    = Focus   { focusCon      :: QName
 			      , focusConArgs  :: [NamedArg A.Pattern]
 			      , focusRange    :: Range
 			      , focusOutPat   :: OneHolePatterns
-			      , focusHoleIx   :: Int  -- ^ index of focused variable in the out patterns
+			      , focusHoleIx   :: Int  -- ^ Index of focused variable in the out patterns.
 			      , focusDatatype :: QName
 			      , focusParams   :: [Arg Term]
 			      , focusIndices  :: [Arg Term]
-                              , focusType     :: Type -- type of variable we are splitting, kept for record patterns (Andreas, 2010-09-09)
+                              , focusType     :: Type -- ^ Type of variable we are splitting, kept for record patterns.
 			      }
 		    | LitFocus Literal OneHolePatterns Int Type
+
 data SplitProblem   = Split ProblemPart [Name] (Arg Focus) (Abs ProblemPart)
                       -- ^ the [Name]s give the as-bindings for the focus
 
 data SplitError	    = NothingToSplit
 		    | SplitPanic String
 
-type ProblemPart = Problem' ()
-
-instance Raise (Problem' p) where
-  raiseFrom  m k p = p { problemTel = raiseFrom  m k $  problemTel p }
-  renameFrom m k p = p { problemTel = renameFrom m k $  problemTel p }
-
 -- | The permutation should permute @allHoles@ of the patterns to correspond to
 --   the abstract patterns in the problem.
 type Problem	 = Problem' (Permutation, [Arg Pattern])
+type ProblemPart = Problem' ()
 
+data DotPatternInst = DPI A.Expr Term (Dom Type)
+data AsBinding      = AsB Name Term Type
+
+-- | State worked on during the main loop of checking a lhs.
+data LHSState = LHSState
+  { lhsProblem :: Problem
+  , lhsSubst   :: S.Substitution
+  , lhsDPI     :: [DotPatternInst]
+  , lhsAsB     :: [AsBinding]
+  }
+
+instance Subst ProblemRest where
+  applySubst rho p = p { restType = applySubst rho $ restType p }
+
+instance Subst (Problem' p) where
+  applySubst rho p = p { problemTel  = applySubst rho $ problemTel p
+                       , problemRest = applySubst rho $ problemRest p }
+
+instance Subst DotPatternInst where
+  applySubst rho (DPI e v a) = uncurry (DPI e) $ applySubst rho (v,a)
+
+instance Subst AsBinding where
+  applySubst rho (AsB x v a) = uncurry (AsB x) $ applySubst rho (v, a)
+
+instance PrettyTCM DotPatternInst where
+  prettyTCM (DPI e v a) = sep
+    [ prettyA e <+> text "="
+    , nest 2 $ prettyTCM v <+> text ":"
+    , nest 2 $ prettyTCM a
+    ]
+
+instance PrettyTCM AsBinding where
+  prettyTCM (AsB x v a) =
+    sep [ prettyTCM x <> text "@" <> parens (prettyTCM v)
+        , nest 2 $ text ":" <+> prettyTCM a
+        ]
+
 instance Error SplitError where
   noMsg  = NothingToSplit
   strMsg = SplitPanic
 
+-- | 'ProblemRest' is a right dominant monoid.
+--   @pr1 \`mappend\` pr2 = pr2@ unless @pr2 = mempty@, then it is @pr1@.
+--   Basically, this means that the left 'ProblemRest' is discarded, so
+--   use it wisely!
+instance Monoid ProblemRest where
+  mempty = ProblemRest [] typeDontCare
+  mappend pr (ProblemRest [] _) = pr
+  mappend _  pr                 = pr
+
 instance Monoid p => Monoid (Problem' p) where
-  mempty = Problem [] mempty EmptyTel
-  Problem ps1 qs1 tel1 `mappend` Problem ps2 qs2 tel2 =
-    Problem (ps1 ++ ps2) (mappend qs1 qs2) (abstract tel1 tel2)
+  mempty = Problem [] mempty EmptyTel mempty
+  Problem ps1 qs1 tel1 pr1 `mappend` Problem ps2 qs2 tel2 pr2 =
+    Problem (ps1 ++ ps2) (mappend qs1 qs2) (abstract tel1 tel2) (mappend pr1 pr2)
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs b/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE CPP, TupleSections #-}
+
+module Agda.TypeChecking.Rules.LHS.ProblemRest where
+
+import Control.Applicative
+
+import Data.Monoid
+
+import Agda.Syntax.Common
+import Agda.Syntax.Position
+import Agda.Syntax.Info
+import Agda.Syntax.Internal
+import qualified Agda.Syntax.Abstract as A
+
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Telescope
+import Agda.TypeChecking.Implicit
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Pretty
+
+import Agda.TypeChecking.Rules.LHS.Problem
+import Agda.TypeChecking.Rules.LHS.Implicit
+
+import Agda.Utils.Size
+import Agda.Utils.Permutation
+
+#include "../../../undefined.h"
+import Agda.Utils.Impossible
+
+
+-- MOVED from LHS:
+-- | Rename the variables in a telescope using the names from a given pattern
+useNamesFromPattern :: [NamedArg A.Pattern] -> Telescope -> Telescope
+useNamesFromPattern ps = telFromList . zipWith ren (toPats ps ++ repeat dummy) . telToList
+  where
+    dummy = A.WildP __IMPOSSIBLE__
+    ren (A.VarP x) (Dom NotHidden r (_, a)) = Dom NotHidden r (show x, a)
+    ren A.PatternSynP{} _ = __IMPOSSIBLE__  -- ensure there are no syns left
+    ren _ a = a
+    toPats = map namedArg
+
+-- | Are there any untyped user patterns left?
+noProblemRest :: Problem -> Bool
+noProblemRest (Problem _ _ _ (ProblemRest ps _)) = null ps
+
+-- | Get the type of clause.  Only valid if 'noProblemRest'.
+typeFromProblem :: Problem -> Type
+typeFromProblem (Problem _ _ _ (ProblemRest _ a)) = a
+
+-- | Construct an initial 'split' 'Problem' from user patterns.
+problemFromPats :: [NamedArg A.Pattern] -- ^ The user patterns.
+  -> Type            -- ^ The type the user patterns eliminate.
+  -> TCM Problem     -- ^ The initial problem constructed from the user patterns.
+problemFromPats ps a = do
+  TelV tel0' b0 <- telView a
+  -- For the initial problem, do not insert trailing implicits.
+  -- This has the effect of not including trailing hidden domains in the problem telescope.
+  -- In all later call to insertImplicitPatterns, we can then use ExpandLast.
+  ps <- insertImplicitPatterns DontExpandLast ps tel0'
+  -- unless (size tel0' >= size ps) $ typeError $ TooManyArgumentsInLHS a
+  let tel0      = useNamesFromPattern ps tel0'
+      (as, bs)  = splitAt (size ps) $ telToList tel0
+      (ps1,ps2) = splitAt (size as) ps
+      gamma     = telFromList as
+      b         = telePi (telFromList bs) b0
+      -- now (gamma -> b) = a and |gamma| = |ps1|
+      pr        = ProblemRest ps2 b
+      -- patterns ps2 eliminate type b
+
+      -- internal patterns start as all variables
+      ips      = map (argFromDom . fmap (VarP . fst)) as
+
+      -- the initial problem for starting the splitting
+      problem  = Problem ps1 (idP $ size ps1, ips) gamma pr
+  reportSDoc "tc.lhs.problem" 10 $
+    vcat [ text "checking lhs -- generated an initial split problem:"
+	 , nest 2 $ vcat
+	   [ text "ps    =" <+> fsep (map prettyA ps)
+	   , text "a     =" <+> prettyTCM a
+	   , text "a'    =" <+> prettyTCM (telePi tel0  b0)
+	   , text "a''   =" <+> prettyTCM (telePi tel0' b0)
+           , text "xs    =" <+> text (show $ map (fst . unDom) as)
+	   , text "tel0  =" <+> prettyTCM tel0
+	   , text "b0    =" <+> prettyTCM b0
+	   , text "gamma =" <+> prettyTCM gamma
+	   , text "b     =" <+> addCtxTel gamma (prettyTCM b)
+	   ]
+	 ]
+  return problem
+
+{-
+todoProblemRest :: ProblemRest
+todoProblemRest = mempty
+-}
+
+-- | Try to move patterns from the problem rest into the problem.
+--   Possible if type of problem rest has been updated to a function type.
+updateProblemRest_ :: Problem -> TCM (Nat, Problem)
+updateProblemRest_ p@(Problem _ _ _ (ProblemRest [] _)) = return (0, p)
+updateProblemRest_ p@(Problem ps0 (perm0@(Perm n0 is0), qs0) tel0 (ProblemRest ps a)) = do
+  TelV tel' b0 <- telView a
+  case tel' of
+    EmptyTel -> return (0, p)  -- no progress
+    ExtendTel{} -> do     -- a did reduce to a pi-type
+      ps <- insertImplicitPatterns DontExpandLast ps tel'
+      let tel       = useNamesFromPattern ps tel'
+          (as, bs)  = splitAt (size ps) $ telToList tel
+          (ps1,ps2) = splitAt (size as) ps
+          tel1      = telFromList $ telToList tel0 ++ as
+          b         = telePi (telFromList bs) b0
+          pr        = ProblemRest ps2 b
+          qs1       = map (argFromDom . fmap (VarP . fst)) as
+          n         = size as
+          perm1     = liftP n perm0 -- IS: Perm (n0 + n) $ is0 ++ [n0..n0+n-1]
+      return $ (n,) $ Problem (ps0 ++ ps1) (perm1, raise n qs0 ++ qs1) tel1 pr
+
+updateProblemRest :: LHSState -> TCM LHSState
+updateProblemRest st@LHSState { lhsProblem = p } = do
+  (n, p') <- updateProblemRest_ p
+  if (n == 0) then return st else do
+    let tau = raiseS n
+    return $ LHSState
+      { lhsProblem = p'
+      , lhsSubst   = applySubst tau (lhsSubst st)
+      , lhsDPI     = applySubst tau (lhsDPI st)
+      , lhsAsB     = applySubst tau (lhsAsB st)
+      }
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Split.hs b/src/full/Agda/TypeChecking/Rules/LHS/Split.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/Split.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/Split.hs
@@ -4,7 +4,7 @@
 
 import Control.Applicative
 import Control.Monad.Error
-import Data.Monoid
+import Data.Monoid (mempty, mappend)
 import Data.List
 import Data.Traversable hiding (mapM, sequence)
 
@@ -25,7 +25,8 @@
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Conversion
 import Agda.TypeChecking.Rules.LHS.Problem
-import Agda.TypeChecking.Rules.Term
+import Agda.TypeChecking.Rules.LHS.ProblemRest
+-- import Agda.TypeChecking.Rules.Term
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Free
 import Agda.TypeChecking.Irrelevance
@@ -56,10 +57,10 @@
                         ++ "the literal to the corresponding constructor pattern, so "
                         ++ "you probably don't want to do it this way."
         | otherwise -> do
-          Con z _ <- primZero
-          Con s _ <- primSuc
+          Con z _ <- ignoreSharing <$> primZero
+          Con s _ <- ignoreSharing <$> primSuc
           let zero  = A.ConP info (A.AmbQ [setRange r z]) []
-              suc p = A.ConP info (A.AmbQ [setRange r s]) [defaultArg $ unnamed p]
+              suc p = A.ConP info (A.AmbQ [setRange r s]) [defaultNamedArg p]
               info  = A.PatRange r
               p'    = foldr ($) zero $ genericReplicate n suc
           return $ foldr (A.AsP info) p' xs
@@ -68,7 +69,7 @@
 -- | Split a problem at the first constructor of datatype type. Implicit
 --   patterns should have been inserted.
 splitProblem :: Problem -> TCM (Either SplitError SplitProblem)
-splitProblem (Problem ps (perm, qs) tel) = do
+splitProblem (Problem ps (perm, qs) tel pr) = do
     reportS "tc.lhs.split" 20 $ "initiating splitting\n"
     runErrorT $
       splitP ps (permute perm $ zip [0..] $ allHoles qs) tel
@@ -81,7 +82,7 @@
     splitP (p : ps) ((i, q) : qs) tel0@(ExtendTel a tel) = do
       let tryAgain = splitP (p : ps) ((i, q) : qs) tel0
       p <- lift $ expandLitPattern p
-      case asView $ namedThing $ unArg p of
+      case asView $ namedArg p of
 
         -- Case: literal pattern
 	(xs, p@(A.LitP lit))  -> do
@@ -90,45 +91,45 @@
           -- not indexed.
 
           -- Andreas, 2010-09-07 cannot split on irrelevant args
-          when (unusableRelevance $ argRelevance a) $
+          when (unusableRelevance $ domRelevance a) $
             typeError $ SplitOnIrrelevant p a
 	  b <- lift $ litType lit
 	  ok <- lift $ do
-	      noConstraints (equalType (unArg a) b)
+	      noConstraints (equalType (unDom a) b)
 	      return True
 	    `catchError` \_ -> return False
 	  if ok
 	    then return $
 	      Split mempty
 		    xs
-		    (fmap (LitFocus lit q i) a)
-		    (fmap (Problem ps ()) tel)
+		    (argFromDom $ fmap (LitFocus lit q i) a)
+		    (fmap (\ tel -> Problem ps () tel __IMPOSSIBLE__) tel)
 	    else keepGoing
 
         -- Case: constructor pattern
 	(xs, p@(A.ConP _ (A.AmbQ cs) args)) -> do
-	  a' <- liftTCM $ reduce $ unArg a
-	  case unEl a' of
-
-            -- Type is a meta and constructor is unambiguous,
-            -- in this case try to instantiate the meta.
-            MetaV{} | [c] <- cs -> do
-              ok <- lift $ do
-                Constructor{ conData = d } <- theDef <$> getConstInfo c
-                dt            <- defType <$> getConstInfo d
-                vs            <- newArgsMeta dt
-                El _ (Sort s) <- reduce $ apply dt vs
-                (True <$ noConstraints (equalType a' (El s $ Def d vs)))
-                  `catchError` \_ -> return False
-              if not ok then keepGoing else
-                tryAgain
+          let tryInstantiate a'
+                | [c] <- cs = do
+                    -- Type is blocked by a meta and constructor is unambiguous,
+                    -- in this case try to instantiate the meta.
+                  ok <- lift $ do
+                    Constructor{ conData = d } <- theDef <$> getConstInfo c
+                    dt     <- defType <$> getConstInfo d
+                    vs     <- newArgsMeta dt
+                    Sort s <- ignoreSharing . unEl <$> reduce (apply dt vs)
+                    (True <$ noConstraints (equalType a' (El s $ Def d vs)))
+                      `catchError` \_ -> return False
+                  if ok then tryAgain else keepGoing
+                | otherwise = keepGoing
+          ifBlockedType (unDom a) (const tryInstantiate) $ \ a' -> do
+	  case ignoreSharing $ unEl a' of
 
             -- Subcase: split type is a Def
 	    Def d vs	-> do
 	      def <- liftTCM $ theDef <$> getConstInfo d
               unless (defIsRecord def) $
                 -- cannot split on irrelevant or non-strict things
-                when (unusableRelevance $ argRelevance a) $ do
+                when (unusableRelevance $ domRelevance a) $ do
                   -- Andreas, 2011-10-04 unless allowed by option
                   allowed <- liftTCM $ optExperimentalIrrelevance <$> pragmaOptions
                   unless allowed $ typeError $ SplitOnIrrelevant p a
@@ -140,7 +141,7 @@
               case mp of
                 Nothing -> keepGoing
                 Just np ->
-		  liftTCM $ traceCall (CheckPattern p EmptyTel (unArg a)) $ do  -- TODO: wrong telescope
+		  liftTCM $ traceCall (CheckPattern p EmptyTel (unDom a)) $ do  -- TODO: wrong telescope
                   -- Check that we construct something in the right datatype
                   c <- do
                       cs' <- mapM canonicalName cs
@@ -168,50 +169,118 @@
 			 ]
 
                   whenM (optWithoutK <$> pragmaOptions) $
-                    wellFormedIndices pars ixs
+                    wellFormedIndices a'
 
 		  return $ Split mempty
 				 xs
-				 (fmap (Focus c args (getRange p) q i d pars ixs) a)
-				 (fmap (Problem ps ()) tel)
+				 (argFromDom $ fmap (Focus c args (getRange p) q i d pars ixs) a)
+				 (fmap (\ tel -> Problem ps () tel __IMPOSSIBLE__) tel)
             -- Subcase: split type is not a Def
 	    _	-> keepGoing
         -- Case: neither literal nor constructor pattern
 	p -> keepGoing
       where
 	keepGoing = do
-	  let p0 = Problem [p] () (ExtendTel a $ fmap (const EmptyTel) tel)
+	  let p0 = Problem [p] () (ExtendTel a $ fmap (const EmptyTel) tel) mempty
 	  Split p1 xs foc p2 <- underAbstraction a tel $ \tel -> splitP ps qs tel
 	  return $ Split (mappend p0 p1) xs foc p2
 
--- | Checks that the indices are constructors (or literals) applied to
--- distinct variables which do not occur free in the parameters.
+-- | Takes a type, which must be a data or record type application,
+-- and checks that the indices are constructors (or literals) applied
+-- to distinct variables which do not occur free in the parameters.
+-- For the purposes of this check parameters count as constructor
+-- arguments; parameters are reconstructed from the given type.
+--
+-- Precondition: The type must be a data or record type application.
 
-wellFormedIndices
-  :: [Arg Term] -- ^ Parameters.
-  -> [Arg Term] -- ^ Indices.
-  -> TCM ()
-wellFormedIndices pars ixs = do
-  pars <- normalise pars
-  ixs  <- normalise ixs
-  vs   <- case constructorApplications ixs of
-            Nothing -> typeError $ IndicesNotConstructorApplications ixs
-            Just vs -> return vs
+wellFormedIndices :: Type -> TCM ()
+wellFormedIndices t = do
+  t <- reduce t
+
+  reportSDoc "tc.lhs.split.well-formed" 10 $
+    fsep [ text "Checking if indices are well-formed:"
+         , nest 2 $ prettyTCM t
+         ]
+
+  (pars, ixs) <- normalise =<< case ignoreSharing $ unEl t of
+    Def d args -> do
+      def       <- getConstInfo d
+      typedArgs <- args `withTypesFrom` defType def
+
+      let noPars = case theDef def of
+            Datatype { dataPars = n } -> n
+            Record   { recPars  = n } -> n
+            _                         -> __IMPOSSIBLE__
+          (pars, ixs) = genericSplitAt noPars typedArgs
+      return (map fst pars, ixs)
+
+    _ -> __IMPOSSIBLE__
+
+  mvs <- constructorApplications ixs
+  vs  <- case mvs of
+           Nothing -> typeError $
+                        IndicesNotConstructorApplications (map fst ixs)
+           Just vs -> return vs
+
   unless (fastDistinct vs) $
-    typeError $ IndexVariablesNotDistinct ixs
-  case filter snd $ zip vs (map (`freeIn` pars) vs) of
-    []          -> return ()
-    (v , _) : _ -> typeError $ IndexFreeInParameter v pars
+    typeError $ IndexVariablesNotDistinct vs (map fst ixs)
+
+  case map fst $ filter snd $ zip vs (map (`freeIn` pars) vs) of
+    [] -> return ()
+    vs ->
+      typeError $ IndicesFreeInParameters vs (map fst ixs) pars
+
   where
   -- | If the term consists solely of constructors (or literals)
-  -- applied to variables, then the variables are returned, and
-  -- otherwise nothing.
-  constructorApplication :: Term -> Maybe [Nat]
-  constructorApplication (Var x [])   = Just [x]
-  constructorApplication (Con c args) = constructorApplications args
-  constructorApplication (Lit {})     = Just []
-  constructorApplication _            = Nothing
+  -- applied to variables (after parameter reconstruction), then the
+  -- variables are returned, and otherwise nothing.
+  constructorApplication :: Term
+                         -> Type  -- ^ The term's type.
+                         -> TCM (Maybe [Nat])
+  constructorApplication (Var x [])      _ = return (Just [x])
+  constructorApplication (Lit {})        _ = return (Just [])
+  constructorApplication (Shared p)      t  = constructorApplication (derefPtr p) t
+  constructorApplication (Con c conArgs) (El _ (Def d dataArgs)) = do
+    conDef  <- getConstInfo c
+    dataDef <- getConstInfo d
 
-  constructorApplications :: [Arg Term] -> Maybe [Nat]
-  constructorApplications args =
-    concat <$> mapM (constructorApplication . unArg) args
+    let noPars = case theDef dataDef of
+          Datatype { dataPars = n } -> n
+          Record   { recPars  = n } -> n
+          _                         -> __IMPOSSIBLE__
+        pars    = genericTake noPars dataArgs
+        allArgs = pars ++ conArgs
+
+    reportSDoc "tc.lhs.split.well-formed" 20 $
+      fsep [ text "Reconstructed parameters:"
+           , nest 2 $
+               prettyTCM (Con c []) <+>
+               text "(:" <+> prettyTCM (defType conDef) <> text ")" <+>
+               text "<<" <+> prettyTCM pars <+> text ">>" <+>
+               prettyTCM conArgs
+           ]
+
+    constructorApplications =<< allArgs `withTypesFrom` defType conDef
+
+  constructorApplication _ _ = return Nothing
+
+  constructorApplications :: [(Arg Term, Dom Type)] -> TCM (Maybe [Nat])
+  constructorApplications args = do
+    xs <- mapM (\(e, t) -> constructorApplication (unArg e) (ignoreSharingType $ unDom t))
+               args
+    return (concat <$> sequence xs)
+
+-- | @args \`withTypesFrom\` t@ returns the arguments @args@ paired up
+-- with their types, taken from @t@, which is assumed to be a @length
+-- args@-ary pi.
+--
+-- Precondition: @t@ has to start with @length args@ pis.
+
+withTypesFrom :: Args -> Type -> TCM [(Arg Term, Dom Type)]
+[]           `withTypesFrom` _ = return []
+(arg : args) `withTypesFrom` t = do
+  t <- reduce t
+  case ignoreSharing $ unEl t of
+    Pi a b -> ((arg, a) :) <$>
+              args `withTypesFrom` absApp b (unArg arg)
+    _      -> __IMPOSSIBLE__
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs b/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/Unify.hs
@@ -15,7 +15,7 @@
 import qualified Data.Map as Map
 import Data.List hiding (sort)
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.Foldable (Foldable)
 import Data.Traversable (Traversable,traverse)
 
@@ -32,6 +32,7 @@
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Substitute hiding (Substitution)
+import qualified Agda.TypeChecking.Substitute as S
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Free
 import Agda.TypeChecking.Records
@@ -86,13 +87,7 @@
 reportPostponing :: Unify ()
 reportPostponing = tell Possibly
 
-{-
 -- | Check whether unification proceeded without postponement.
-listenResult :: Unify () -> Unify UnifyOutput
-listenResult m = snd <$> listen m
--}
-
--- | Check whether unification proceeded without postponement.
 ifClean :: Unify () -> Unify a -> Unify a -> Unify a
 ifClean m t e = do
   ok <- snd <$> listen m
@@ -100,16 +95,6 @@
     Definitely -> t
     Possibly ->   e
 
-{-
--- | Check whether unification proceeded without postponement.
-ifClean :: Unify a -> (a -> Unify b) -> (a -> Unify b) -> Unify b
-ifClean m t e = do
-  (ok, a) <- listen m
-  case ok of
-    Definitely -> t a
-    Possibly ->   e a
--}
-
 data Equality = Equal TypeHH Term Term
 type Sub = Map Nat Term
 
@@ -134,17 +119,7 @@
 constructorMismatchHH :: TypeHH -> Term -> Term -> Unify a
 constructorMismatchHH aHH = constructorMismatch (leftHH aHH)
   -- do not report heterogenity
-{-
-constructorMismatchHH (Hom a) u v = constructorMismatch a u v
-constructorMismatchHH (Het a1 a2) u v = constructorMismatch a1 u v
--}
 
-{-
-instance MonadReader TCEnv Unify where
-  ask           = U . lift  $ ask
-  local k (U m) = U . lift . lift . lift $ local k m
--}
-
 instance MonadState TCState Unify where
   get = U . lift . lift . lift . lift $ get
   put = U . lift . lift . lift . lift . put
@@ -153,13 +128,8 @@
   liftTCM = U . lift . lift . lift . lift
 
 instance Subst Equality where
-  substs us	 (Equal a s t) = Equal (substs us a)	  (substs us s)	     (substs us t)
-  substUnder n u (Equal a s t) = Equal (substUnder n u a) (substUnder n u s) (substUnder n u t)
-
-{- UNUSED
-getSub :: Unify Sub
-getSub = U $ gets uniSub
--}
+  applySubst rho (Equal a s t) =
+    Equal (applySubst rho a) (applySubst rho s) (applySubst rho t)
 
 onSub :: (Sub -> a) -> Unify a
 onSub f = U $ gets $ f . uniSub
@@ -187,20 +157,7 @@
     if ok then return () else addEquality a u v
 checkEqualityHH aHH@(Het a1 a2) u v = -- reportPostponing -- enter "dirty" mode
     addEqualityHH aHH u v -- postpone, enter "dirty" mode
-{-
-checkEqualityHH (Het a1 a2) u v = noConstraints $ do
-  equalType a1 a2
-  equalTerm a1 u v
--}
-{-
-checkEqualityHH :: MonadTCM tcm => TypeHH -> Term -> Term -> tcm ()
-checkEqualityHH aHH u v = do
-  a  <- forceHom aHH
-  cs <- equalTerm a u v
-  if null cs then return () else addEquality a u v
--}
 
-
 -- | Check whether heterogeneous situation is really homogeneous.
 --   If not, give up.
 forceHom :: TypeHH -> TCM Type
@@ -217,24 +174,6 @@
   reportPostponing
   U $ modify $ \s -> s { uniConstr = Equal aHH u v : uniConstr s }
 
-{-
-addEquality :: Type -> Term -> Term -> Unify ()
-addEquality a u v = do
-  reportPostponing
-  U $ modify $ \s -> s { uniConstr = Equal a u v : uniConstr s }
--}
-
-{-
-addEquality :: Type -> Term -> Term -> Unify ()
-addEquality a u v = do
-   p <- askPostpone
-   case p of
-     MayPostpone ->  do
-       reportPostponing
-       U $ modify $ \s -> s { uniConstr = Equal a u v : uniConstr s }
-     MayNotPostpone -> checkEquality a u v
--}
-
 takeEqualities :: Unify [Equality]
 takeEqualities = U $ do
   s <- get
@@ -246,7 +185,7 @@
 occursCheck :: Nat -> Term -> Type -> Unify ()
 occursCheck i u a = do
   let fv = freeVars u
-      v  = Var i []
+      v  = var i
   case occurrence i fv of
     -- Andreas, 2011-04-14
     -- a strongly rigid recursive occurrences signals unsolvability
@@ -265,13 +204,20 @@
 (|->) :: Nat -> (Term, Type) -> Unify ()
 i |-> (u, a) = do
   occursCheck i u a
-  liftTCM $ reportSDoc "tc.lhs.unify" 15 $ prettyTCM (Var i []) <+> text ":=" <+> prettyTCM u
+  liftTCM $ reportSDoc "tc.lhs.unify" 15 $ prettyTCM (var i) <+> text ":=" <+> prettyTCM u
   modSub $ Map.insert i (killRange u)
+  -- Apply substitution to itself (issue 552)
+  rho  <- onSub id
+  rho' <- traverse ureduce rho
+  modSub $ const rho'
 
-makeSubstitution :: Sub -> [Term]
-makeSubstitution sub = map val [0..]
+makeSubstitution :: Sub -> S.Substitution
+makeSubstitution sub
+  | Map.null sub = idS
+  | otherwise    = map val [0 .. highestIndex] ++# raiseS (highestIndex + 1)
   where
-    val i = maybe (Var i []) id $ Map.lookup i sub
+    highestIndex = fst $ Map.findMax sub
+    val i = maybe (var i) id $ Map.lookup i sub
 
 -- | Apply the current substitution on a term and reduce to weak head normal form.
 class UReduce t where
@@ -280,14 +226,14 @@
 instance UReduce Term where
   ureduce u = doEtaContractImplicit $ do
     rho <- onSub makeSubstitution
-    liftTCM $ etaContract =<< normalise (substs rho u)
+    liftTCM $ etaContract =<< normalise (applySubst rho u)
 -- Andreas, 2011-06-22, fix related to issue 423
 -- To make eta contraction work better, I switched reduce to normalise.
 -- I hope the performance penalty is not big (since we are dealing with
 -- l.h.s. terms only).
 -- A systematic solution would make unification type-directed and
 -- eta-insensitive...
---   liftTCM $ etaContract =<< reduce (substs rho u)
+--   liftTCM $ etaContract =<< reduce (applySubst rho u)
 
 instance UReduce Type where
   ureduce (El s t) = El s <$> ureduce t
@@ -302,7 +248,7 @@
 
 -- | Take a substitution σ and ensure that no variables from the domain appear
 --   in the targets. The context of the targets is not changed.
---   TODO: can this be expressed using makeSubstitution and substs?
+--   TODO: can this be expressed using makeSubstitution and applySubst?
 flattenSubstitution :: Substitution -> Substitution
 flattenSubstitution s = foldr instantiate s is
   where
@@ -312,12 +258,11 @@
     instantiate :: Nat -> Substitution -> Substitution
     instantiate i s = map (fmap $ inst i u) s
       where
-	Just u = s !! fromIntegral i
+	Just u = s !! i
 
     inst :: Nat -> Term -> Term -> Term
-    inst i u v = substs us v
-      where us = [var j | j <- [0..i - 1] ] ++ [u] ++ [var j | j <- [i + 1..] ]
-	    var j = Var j []
+    inst i u v = applySubst us v
+      where us = [var j | j <- [0..i - 1] ] ++# u :# raiseS (i + 1)
 
 data UnificationResult = Unifies Substitution | NoUnify Type Term Term | DontKnow TCErr
 
@@ -325,7 +270,7 @@
 data HomHet a
   = Hom a    -- ^ homogeneous
   | Het a a  -- ^ heterogeneous
-  deriving (Typeable, Data, Show, Eq, Ord, Functor, Foldable, Traversable)
+  deriving (Typeable, Show, Eq, Ord, Functor, Foldable, Traversable)
 
 isHom :: HomHet a -> Bool
 isHom Hom{} = True
@@ -343,13 +288,8 @@
 rightHH (Hom a) = a
 rightHH (Het a1 a2) = a2
 
-instance (Raise a) => Raise (HomHet a) where
-  raiseFrom n m  = fmap (raiseFrom n m)
-  renameFrom n f = fmap (renameFrom n f)
-
 instance (Subst a) => Subst (HomHet a) where
-  substUnder n u = fmap (substUnder n u)
-  substs us      = fmap (substs us)
+  applySubst rho u = fmap (applySubst rho) u
 
 instance (PrettyTCM a) => PrettyTCM (HomHet a) where
   prettyTCM (Hom a) = prettyTCM a
@@ -358,7 +298,7 @@
 type TermHH    = HomHet Term
 type TypeHH    = HomHet Type
 --type FunViewHH = FunV TypeHH
-type TelHH     = Tele (Arg TypeHH)
+type TelHH     = Tele (Dom TypeHH)
 type TelViewHH = TelV TypeHH
 
 absAppHH :: SubstHH t tHH => Abs t -> TermHH -> tHH
@@ -405,6 +345,10 @@
   substUnderHH n u = fmap $ substUnderHH n u
   trivialHH = fmap trivialHH
 
+instance SubstHH a b => SubstHH (Dom a) (Dom b) where
+  substUnderHH n u = fmap $ substUnderHH n u
+  trivialHH = fmap trivialHH
+
 instance SubstHH a b => SubstHH (Abs a) (Abs b) where
   substUnderHH n u (Abs   x v) = Abs x $ substUnderHH (n + 1) u v
   substUnderHH n u (NoAbs x v) = NoAbs x $ substUnderHH n u v
@@ -452,7 +396,7 @@
       Left (StronglyRigidOccurrence a u v)  -> return $ NoUnify a u v
       Left (GenericUnifyException     err)  -> fail err
       Right _                               -> do
-        checkEqualities $ substs (makeSubstitution s) eqs
+        checkEqualities $ applySubst (makeSubstitution s) eqs
         let n = maximum $ (-1) : flex
         return $ Unifies $ flattenSubstitution [ Map.lookup i s | i <- [0..n] ]
   `catchError` \err -> return $ DontKnow err
@@ -460,6 +404,7 @@
     flexible i = i `elem` flex
 
     flexibleTerm (Var i []) = flexible i
+    flexibleTerm (Shared p) = flexibleTerm (derefPtr p)
     flexibleTerm _          = False
 
     {- Andreas, 2011-09-12
@@ -501,7 +446,7 @@
     unifyConArgs _ [] (_ : _) = __IMPOSSIBLE__
     unifyConArgs _ []      [] = return ()
     unifyConArgs EmptyTel _ _ = __IMPOSSIBLE__
-    unifyConArgs tel0@(ExtendTel a@(Arg _ rel bHH) tel) us0@(arg@(Arg _ _ u) : us) vs0@(Arg _ _ v : vs) = do
+    unifyConArgs tel0@(ExtendTel a@(Dom _ rel bHH) tel) us0@(arg@(Arg _ _ u) : us) vs0@(Arg _ _ v : vs) = do
       liftTCM $ reportSDoc "tc.lhs.unify" 15 $ sep
         [ text "unifyConArgs"
 	-- , nest 2 $ parens (prettyTCM tel0)
@@ -513,7 +458,7 @@
         (text $ "tel0 = " ++ show tel0)
 
 
-      -- Andreas, Ulf, 2011-09-08 (AIM XVI)
+      -- Andreas, Ulf, 2011-09-08 (AIM XIV)
       -- in case of dependent function type, we cannot postpone
       -- unification of u and v, otherwise us or vs might be ill-typed
       -- skip irrelevant parts
@@ -531,11 +476,6 @@
       unifyConArgs (tel `absAppHH` uHH) us vs
 
 
-{-
-    unifyArgs :: Type -> [Arg Term] -> [Arg Term] -> Unify ()
-    unifyArgs a = unifyArgsHH (Hom a)
--}
-
     -- | Used for arguments of a 'Def', not 'Con'.
     unifyArgs :: Type -> [Arg Term] -> [Arg Term] -> Unify ()
     unifyArgs _ (_ : _) [] = __IMPOSSIBLE__
@@ -549,21 +489,22 @@
 	, nest 2 $ prettyList $ map prettyTCM vs0
         ]
       a <- ureduce a  -- Q: reduce sufficient?
-      case unEl a of
+      case ignoreSharing $ unEl a of
 	Pi b _  -> do
           -- Andreas, Ulf, 2011-09-08 (AIM XVI)
           -- in case of dependent function type, we cannot postpone
           -- unification of u and v, otherwise us or vs might be ill-typed
           let dep = dependent $ unEl a
           -- skip irrelevant parts
-	  unless (argRelevance b == Irrelevant) $
+	  unless (domRelevance b == Irrelevant) $
             (if dep then noPostponing else id) $
-              unify (unArg b) u v
+              unify (unDom b) u v
           arg <- traverse ureduce arg
 	  unifyArgs (a `piApply` [arg]) us vs
 	_	  -> __IMPOSSIBLE__
       where dependent (Pi _ NoAbs{}) = False
             dependent (Pi b c)       = 0 `relevantIn` absBody c
+            dependent (Shared p)     = dependent (derefPtr p)
             dependent _              = False
 
     -- | Check using conversion check.
@@ -604,9 +545,10 @@
     unifyHH aHH u v = do
       u <- liftTCM . constructorForm =<< ureduce u
       v <- liftTCM . constructorForm =<< ureduce v
+      aHH <- ureduce aHH
       liftTCM $ reportSDoc "tc.lhs.unify" 15 $
 	sep [ text "unifyHH"
-	    , nest 2 $ parens $ prettyTCM u
+	    , nest 2 $ (parens $ prettyTCM u) <+> text "=?="
 	    , nest 2 $ parens $ prettyTCM v
 	    , nest 2 $ text ":" <+> prettyTCM aHH
 	    ]
@@ -614,7 +556,7 @@
       isSizeName <- liftTCM isSizeNameTest
 
       -- check whether types have the same shape
-      (aHH, sh) <- shapeViewHH =<< ureduce aHH
+      (aHH, sh) <- shapeViewHH aHH
       case sh of
         ElseSh  -> checkEqualityHH aHH u v -- not a type or not same types
 
@@ -641,18 +583,18 @@
 	    , nest 2 $ prettyTCM v <> if flexibleTerm v then text " (flexible)" else empty
 	    , nest 2 $ text ":" <+> prettyTCM aHH
 	    ]
-      case (u, v) of
+      case (ignoreSharing u, ignoreSharing v) of
         -- Ulf, 2011-06-19
         -- We don't want to worry about levels here.
-        (Level l, v) -> do
+        (Level l, _) -> do
             u <- liftTCM $ reallyUnLevelView l
             unifyAtomHH aHH u v
-        (u, Level l) -> do
+        (_, Level l) -> do
             v <- liftTCM $ reallyUnLevelView l
             unifyAtomHH aHH u v
 	(Var i us, Var j vs) | i == j  -> checkEqualityHH aHH u v
-	(Var i [], v) | homogeneous && flexible i -> i |->> (v, a)
-	(u, Var j []) | homogeneous && flexible j -> j |->> (u, a)
+	(Var i [], _) | homogeneous && flexible i -> i |->> (v, a)
+	(_, Var j []) | homogeneous && flexible j -> j |->> (u, a)
 	(Con c us, Con c' vs)
           | c == c' -> do
               r <- ureduce =<< liftTCM (dataOrRecordTypeHH c aHH)
@@ -684,7 +626,7 @@
 
         -- We can instantiate metas if the other term is inert (constructor application)
         -- Andreas, 2011-09-13: test/succeed/IndexInference needs this feature.
-        (MetaV m us, v) | homogeneous -> do
+        (MetaV m us, _) | homogeneous -> do
             ok <- liftTCM $ instMeta a m us v
             liftTCM $ reportSDoc "tc.lhs.unify" 40 $
               vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]
@@ -692,7 +634,7 @@
                    ]
             if ok then unify a u v
                   else addEquality a u v
-        (u, MetaV m vs) | homogeneous -> do
+        (_, MetaV m vs) | homogeneous -> do
             ok <- liftTCM $ instMeta a m vs u
             liftTCM $ reportSDoc "tc.lhs.unify" 40 $
               vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]
@@ -728,104 +670,10 @@
 
     unify :: Type -> Term -> Term -> Unify ()
     unify a = unifyHH (Hom a)
-{-
-    unify :: Type -> Term -> Term -> Unify ()
-    unify a u v = do
-      u <- constructorForm =<< ureduce u
-      v <- constructorForm =<< ureduce v
-      reportSDoc "tc.lhs.unify" 15 $
-	sep [ text "unify"
-	    , nest 2 $ parens $ prettyTCM u
-	    , nest 2 $ parens $ prettyTCM v
-	    , nest 2 $ text ":" <+> prettyTCM a
-	    ]
-      isSize <- isSizeType a
-      if isSize then unifySizes u v
-                else unifyAtom a u v
--}
 
     unifyAtom :: Type -> Term -> Term -> Unify ()
     unifyAtom a = unifyAtomHH (Hom a)
 
-{-
-    unifyAtom :: Type -> Term -> Term -> Unify ()
-    unifyAtom a u v = do
-      reportSDoc "tc.lhs.unify" 15 $
-	sep [ text "unifyAtom"
-	    , nest 2 $ prettyTCM u <> if flexibleTerm u then text " (flexible)" else empty
-            , nest 2 $ text "=?="
-	    , nest 2 $ prettyTCM v <> if flexibleTerm v then text " (flexible)" else empty
-	    , nest 2 $ text ":" <+> prettyTCM a
-	    ]
-      case (u, v) of
-        -- Ulf, 2011-06-19
-        -- We don't want to worry about levels here.
-        (Level l, v) -> do
-            u <- liftTCM $ reallyUnLevelView l
-            unifyAtom a u v
-        (u, Level l) -> do
-            v <- liftTCM $ reallyUnLevelView l
-            unifyAtom a u v
-        -- Andreas, 2011-05-30
-        -- Force equality now rather than postponing it with addEquality
-	(Var i us, Var j vs) | i == j  -> checkEquality a u v
-	(Var i [], v) | flexible i -> i |->> (v, a)
-	(u, Var j []) | flexible j -> j |->> (u, a)
-	(Con c us, Con c' vs)
-          | c == c' -> do
-              a' <- dataOrRecordType c a
-              unifyArgs a' us vs
-          | otherwise -> constructorMismatch a u v
-        -- Definitions are ok as long as they can't reduce (i.e. datatypes/axioms)
-	(Def d us, Def d' vs)
-          | d == d' -> do
-              -- d must be a data, record or axiom
-              def <- getConstInfo d
-              let ok = case theDef def of
-                    Datatype{} -> True
-                    Record{}   -> True
-                    Axiom{}    -> True
-                    _          -> False
-              inj <- optInjectiveTypeConstructors <$> pragmaOptions
-              if inj && ok
-                then unifyArgs (defType def) us vs
-                else addEquality a u v
-{- Andreas: checkEquality breaks Data.Vec.Equality
-   we need an injectivity test for data types, Vec A n is injective!
-                else checkEquality a u v
-                -- Andreas: force equality now instead of postponing
-                -- We do not want to end up in a heterogeneous situation,
-                -- where u and v have different types
--}
-          -- Andreas, 2011-05-30: if heads disagree, abort
-          -- but do not raise "mismatch" because otherwise type constructors
-          -- would be distinct
-          | otherwise -> typeError $ UnequalTerms CmpEq u v a
-        (Lit l1, Lit l2)
-          | l1 == l2  -> return ()
-          | otherwise -> constructorMismatch a u v
-
-        -- We can instantiate metas if the other term is inert (constructor application)
-        (MetaV m us, v) -> do
-            ok <- liftTCM $ instMeta a m us v
-            reportSDoc "tc.lhs.unify" 40 $
-              vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]
-                   , nest 2 $ sep [ prettyTCM u, text ":=", prettyTCM =<< normalise u ]
-                   ]
-            if ok then unify a u v
-                  else addEquality a u v
-        (u, MetaV m vs) -> do
-            ok <- liftTCM $ instMeta a m vs u
-            reportSDoc "tc.lhs.unify" 40 $
-              vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]
-                   , nest 2 $ sep [ prettyTCM v, text ":=", prettyTCM =<< normalise v ]
-                   ]
-            if ok then unify a u v
-                  else addEquality a u v
-        -- Andreas, 2011-05-30: If I put checkEquality below, then Issue81 fails
-        -- because there are definitions blocked by flexibles that need postponement
-	_  -> addEquality a u v
--}
     -- The contexts are transient when unifying, so we should just instantiate to
     -- constructor heads and generate fresh metas for the arguments. Beware of
     -- constructors that aren't fully applied.
@@ -841,14 +689,14 @@
         Just (v', b, vs) -> do
             margs <- do
               -- The new metas should have the same dependencies as the original meta
-              mi <- getMetaInfo <$> lookupMeta m
+              mv <- lookupMeta m
 
               -- Only generate metas for the arguments v' is actually applied to
               -- (in case of partial application)
               TelV tel0 _ <- telView b
               let tel = telFromList $ take (length vs) $ telToList tel0
                   b'  = telePi tel (sort Prop)
-              withMetaInfo mi $ do
+              withMetaInfo' mv $ do
                 tel <- getContextTelescope
                 -- important: create the meta in the same environment as the original meta
                 newArgsMetaCtx b' tel us
@@ -858,13 +706,8 @@
 
     inertApplication :: Type -> Term -> TCM (Maybe (Term, Type, Args))
     inertApplication a v =
-      case v of
+      case ignoreSharing v of
         Con c vs -> fmap (\ b -> (Con c [], b, vs)) <$> dataOrRecordType c a
-{-
-        Con c vs -> do
-          b <- dataOrRecordType c a
-          return $ Just (Con c [], b, vs)
--}
         Def d vs -> do
           def <- getConstInfo d
           let ans = Just (Def d [], defType def, vs)
@@ -896,7 +739,10 @@
            --   data/record parameters
 dataOrRecordType' c a = do
   -- The telescope ends with a datatype or a record.
-  TelV _ (El _ (Def d args)) <- telView a
+  (d, args) <- do
+    TelV _ (El _ def) <- telView a
+    let Def d args = ignoreSharing def
+    return (d, args)
   def <- theDef <$> getConstInfo d
   r <- case def of
     Datatype{dataPars = n} -> Just . ((,) n) . defType <$> getConstInfo c
@@ -934,61 +780,22 @@
     _ -> return Nothing
 
 
-{-
-dataOrRecordType :: MonadTCM tcm
-  => QName -- ^ Constructor name.
-  -> Type  -- ^ Type of constructor application (must end in data/record).
-  -> tcm (Maybe Type) -- ^ Type of constructor, applied to pars.
-dataOrRecordType c a = fmap snd <$> dataOrRecordType' c a
-
-dataOrRecordType' :: MonadTCM tcm
-  => QName -- ^ Constructor name.
-  -> Type  -- ^ Type of constructor application (must end in data/record).
-  -> tcm (Maybe (QName, -- ^ Name of data/record type.
-                 Type))  -- ^ Type of constructor, applied to pars.
-dataOrRecordType' c a = do
-  -- The telescope ends with a datatype or a record.
-  TelV _ (El _ (Def d args)) <- telView a
-  def <- theDef <$> getConstInfo d
-  r <- case def of
-    Datatype{dataPars = n} -> Just . ((,) n) . defType <$> getConstInfo c
-    Record  {recPars  = n} -> Just . ((,) n) <$> getRecordConstructorType d
-    _		           -> return Nothing
-  return $ fmap (\ (n, a') -> (d, a' `apply` genericTake n args)) r
-
--- | Heterogeneous situation.
---   @a1@ and @a2@ need to end in same datatype/record.
-dataOrRecordTypeHH :: MonadTCM tcm
-  => QName      -- ^ Constructor name.
-  -> TypeHH     -- ^ Type(s) of constructor application (must end in same data/record).
-  -> tcm (Maybe TypeHH) -- ^ Type of constructor, instantiated possibly heterogeneously to parameters.
-dataOrRecordTypeHH c (Hom a) = fmap Hom <$> dataOrRecordType c a
-dataOrRecordTypeHH c (Het a1 a2) = do
-  r1 <- dataOrRecordType' c a1
-  r2 <- dataOrRecordType' c a2  -- b2 may have different parameters than b1!
-  return $ case (r1, r2) of
-    (Just (d1, b1), Just (d2, b2)) | d1 == d2 -> Just $ Het b1 b2
-    _ -> Nothing
--}
-
 -- | Views an expression (pair) as type shape.  Fails if not same shape.
 data ShapeView a
-  = PiSh (Arg a) (Abs a)
-  | FunSh (Arg a) a
+  = PiSh (Dom a) (Abs a)
+  | FunSh (Dom a) a
   | DefSh QName   -- ^ data/record
   | VarSh Nat     -- ^ neutral type
   | LitSh Literal -- ^ built-in type
   | SortSh
   | MetaSh        -- ^ some meta
   | ElseSh        -- ^ not a type or not definitely same shape
-  deriving (Typeable, Data, Show, Eq, Ord, Functor)
+  deriving (Typeable, Show, Eq, Ord, Functor)
 
 -- | Return the type and its shape.  Expects input in (u)reduced form.
 shapeView :: Type -> Unify (Type, ShapeView Type)
 shapeView t = do
---  t <- liftTCM $ reduce t  -- DO NOT REDUCE!
--- --  t <- ureduce t  -- BUG!! substitutes bound variables in telescope!
-  return . (t,) $ case unEl t of
+  return . (t,) $ case ignoreSharing $ unEl t of
     Pi a (NoAbs _ b) -> FunSh a b
     Pi a (Abs x b) -> PiSh a (Abs x b)
     Def d vs       -> DefSh d
@@ -1008,13 +815,13 @@
   (a2, sh2) <- shapeView a2
   return . (Het a1 a2,) $ case (sh1, sh2) of
 
-    (PiSh (Arg h1 r1 a1) b1, PiSh (Arg h2 r2 a2) b2)
+    (PiSh (Dom h1 r1 a1) b1, PiSh (Dom h2 r2 a2) b2)
       | h1 == h2 ->
-      PiSh (Arg h1 (min r1 r2) (Het a1 a2)) (Abs (absName b1) (Het (absBody b1) (absBody b2)))
+      PiSh (Dom h1 (min r1 r2) (Het a1 a2)) (Abs (absName b1) (Het (absBody b1) (absBody b2)))
 
-    (FunSh (Arg h1 r1 a1) b1, FunSh (Arg h2 r2 a2) b2)
+    (FunSh (Dom h1 r1 a1) b1, FunSh (Dom h2 r2 a2) b2)
       | h1 == h2 ->
-      FunSh (Arg h1 (min r1 r2) (Het a1 a2)) (Het b1 b2)
+      FunSh (Dom h1 (min r1 r2) (Het a1 a2)) (Het b1 b2)
 
     (DefSh d1, DefSh d2) | d1 == d2 -> DefSh d1
     (VarSh x1, VarSh x2) | x1 == x2 -> VarSh x1
diff --git a/src/full/Agda/TypeChecking/Rules/Record.hs b/src/full/Agda/TypeChecking/Rules/Record.hs
--- a/src/full/Agda/TypeChecking/Rules/Record.hs
+++ b/src/full/Agda/TypeChecking/Rules/Record.hs
@@ -13,7 +13,9 @@
 import qualified Agda.Syntax.Info as Info
 
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin ( primIrrAxiom )
 import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Polarity
@@ -26,7 +28,11 @@
 
 import Agda.Utils.Size
 import Agda.Utils.Permutation
+import Agda.Utils.Monad
 
+import Agda.Interaction.Options
+
+
 #include "../../undefined.h"
 import Agda.Utils.Impossible
 
@@ -46,9 +52,9 @@
 --
 --     [@fields@]  List of field signatures.
 --
-checkRecDef :: Info.DefInfo -> QName -> Maybe A.QName -> --Maybe A.Constructor ->
-               [A.LamBinding] -> A.Expr -> [A.Constructor] -> TCM ()
-checkRecDef i name con ps contel fields =
+checkRecDef :: Info.DefInfo -> QName -> Maybe Induction -> Maybe A.QName ->
+               [A.LamBinding] -> A.Expr -> [A.Field] -> TCM ()
+checkRecDef i name ind con ps contel fields =
   traceCall (CheckRecDef (getRange i) (qnameName name) ps fields) $ do
     reportSDoc "tc.rec" 10 $ vcat
       [ text "checking record def" <+> prettyTCM name
@@ -74,33 +80,18 @@
           -- A record is irrelevant if all of its fields are.
           -- In this case, the associated module parameter will be irrelevant.
           -- See issue 392.
-          recordRelevance = minimum $ Irrelevant : (map argRelevance $ telToList ftel)
+          recordRelevance = minimum $ Irrelevant : (map domRelevance $ telToList ftel)
 
       -- Compute correct type of constructor
 
       -- t = tel -> t0 where t0 must be a sort s
       t0' <- normalise t0
-      s <- case unEl t0' of
+      s <- case ignoreSharing $ unEl t0' of
 	Sort s	-> return s
 	_	-> typeError $ ShouldBeASort t0
       gamma <- getContextTelescope
-      let m               = qnameToMName name
-          -- make record parameters hidden and non-stricts irrelevant
-	  htel		  = map hideAndRelParams $ telToList tel
-          -- record type (name applied to parameters)
-	  rect		  = El s $ Def name $ reverse
-			    [ Arg h r (Var i [])
-			    | (i, Arg h r _) <- zip [0..] $ reverse $ telToList gamma
-			    ]
-	  telh' h	  = telFromList $ htel ++ [Arg h recordRelevance ("r", rect)]
-	  tel'		  = telh' NotHidden
-	  telIFS	  = telh' Instance
-          extWithRH h ret = underAbstraction (Arg h recordRelevance rect) (Abs "" ()) $ \_ -> ret
-          extWithR        = extWithRH NotHidden
-          ext     (Arg h r (x, t)) = addCtx x (Arg h r t)
-{- UNUSED
-          extHide (Arg h r (x, t)) = addCtx x (Arg Hidden r t)
--}
+      -- record type (name applied to parameters)
+      let rect = El s $ Def name $ teleArgs gamma
 
       -- Put in @rect@ as correct target of constructor type.
       -- Andreas, 2011-05-10 use telePi_ instead of telePi to preserve
@@ -123,7 +114,9 @@
 	  getName (A.ScopedDecl _ [f]) = getName f
 	  getName _		       = []
 
-      addConstant name $ Defn Relevant name t0 (defaultDisplayForm name) 0 noCompiledRep
+          indCo = maybe Inductive id ind -- default is 'Inductive' for backwards compatibility but should maybe be 'Coinductive'
+
+      addConstant name $ Defn Relevant name t0 [] [] (defaultDisplayForm name) 0 noCompiledRep
 		       $ Record { recPars           = 0
                                 , recClause         = Nothing
                                 , recCon            = conName
@@ -133,24 +126,30 @@
                                 , recTel            = ftel
 				, recAbstr          = Info.defAbstract i
                                 , recEtaEquality    = True
+                                , recInduction      = indCo
+                                -- determined by positivity checker:
+                                , recRecursive      = False
+{-
                                 , recPolarity       = []
                                 , recArgOccurrences = []
+-}
+                                , recMutual         = []
                                 }
 
       -- Add record constructor to signature
       -- Andreas, 2011-05-19 moved this here, it was below the record module
       --   creation
       addConstant conName $
-        Defn Relevant conName contype (defaultDisplayForm conName) 0 noCompiledRep $
+        Defn Relevant conName contype [] [] (defaultDisplayForm conName) 0 noCompiledRep $
              Constructor { conPars   = 0
                          , conSrcCon = conName
                          , conData   = name
                          , conAbstr  = Info.defAbstract conInfo
-                         , conInd    = Inductive
+                         , conInd    = indCo
                          }
 
       -- Check that the fields fit inside the sort
-      let dummy = Var 0 []  -- We're only interested in the sort here
+      let dummy = var 0  -- We're only interested in the sort here
       telePi ftel (El s dummy) `fitsIn` s
 
       {- Andreas, 2011-04-27 WRONG because field types are checked again
@@ -161,9 +160,18 @@
       -}
 
       -- make record parameters hidden
-      ctx <- (reverse . map hide . take (size tel)) <$> getContext
+      ctx <- (reverse . map (mapDomHiding $ const Hidden) . take (size tel)) <$> getContext
 
-      escapeContext (size tel) $ flip (foldr ext) ctx $ extWithR $ do
+      let -- name of record module
+          m    = qnameToMName name
+          -- make record parameters hidden and non-stricts irrelevant
+	  htel = map hideAndRelParams $ telToList tel
+	  tel' = telFromList $ htel ++ [Dom NotHidden recordRelevance ("r", rect)]
+          ext (Dom h r (x, t)) = addCtx x (Dom h r t)
+
+      escapeContext (size tel) $ flip (foldr ext) ctx $
+       -- the record variable has the empty name by intention, see issue 208
+       underAbstraction (Dom NotHidden recordRelevance rect) (Abs "" ()) $ \_ -> do
 	reportSDoc "tc.rec.def" 10 $ sep
 	  [ text "record section:"
 	  , nest 2 $ sep
@@ -177,13 +185,13 @@
 	addSection m (size tel')
 
         -- Check the types of the fields
-        -- ftel <- checkRecordFields m name tel s [] (size fields) fields
         withCurrentModule m $
           checkRecordProjections m name conName tel' (raise 1 ftel) fields
 
       -- Andreas, 2011-05-19 here was the code "Add record constr..."
 
-      computePolarity name
+        -- Andreas 2012-02-13: postpone polarity computation until after positivity check
+        -- computePolarity name
 
       return ()
 
@@ -195,7 +203,7 @@
 
     [@q@    ]  name of the record constructor
 
-    [@tel@  ]  parameters
+    [@tel@  ]  parameters and record variable r ("self")
 
     [@ftel@ ]  telescope of fields
 
@@ -214,21 +222,21 @@
     checkProjs ftel1 ftel2 (A.ScopedDecl scope fs' : fs) =
       setScope scope >> checkProjs ftel1 ftel2 (fs' ++ fs)
 
-    checkProjs ftel1 (ExtendTel _ ftel2) (A.Field info x (Arg h rel t) : fs) = do
-      -- check the type (in the context of the telescope)
-      -- the previous fields will be free in
+    checkProjs ftel1 (ExtendTel (Dom h rel t) ftel2) (A.Field info x _ : fs) = do
+      -- Andreas, 2012-06-07:
+      -- Issue 387: It is wrong to just type check field types again
+      -- because then meta variables are created again.
+      -- Instead, we take the field type t from the field telescope.
       reportSDoc "tc.rec.proj" 5 $ sep
-	[ text "checking projection"
+	[ text "checking projection" <+> text (show x)
 	, nest 2 $ vcat
 	  [ text "top   =" <+> (inContext [] . prettyTCM =<< getContextTelescope)
+          , text "tel   =" <+> prettyTCM tel
 	  , text "ftel1 =" <+> prettyTCM ftel1
-	  , text "ftel2 =" <+> addCtxTel ftel1 (underAbstraction_ ftel2 prettyTCM)
 	  , text "t     =" <+> prettyTCM t
+	  , text "ftel2 =" <+> addCtxTel ftel1 (underAbstraction_ ftel2 prettyTCM)
 	  ]
 	]
-      -- Andreas, 2011-04-27 work on rhs of ':'
-      -- WRONG: t <- workOnTypes $ isType_ t
-      t <- isType_ t
 
       -- Andreas, 2010-09-09 The following comments are misleading, TODO: update
       -- in fact, tel includes the variable of record type as last one
@@ -249,11 +257,20 @@
       -- The type of the projection function should be
       --  {tel} -> (r : R Δ) -> t
       -- where Δ = Γ, tel is the current context
-
-
       let finalt   = telePi tel t
 	  projname = qualify m $ qnameName x
+          projcall = Def projname [defaultArg $ var 0]
+          -- the recursive call
+          recurse  = checkProjs (abstract ftel1 $ ExtendTel (Dom h rel t)
+                                 $ Abs (show $ qnameName projname) EmptyTel)
+                                (ftel2 `absApp` projcall) fs
 
+      reportSDoc "tc.rec.proj" 25 $ nest 2 $ text "finalt=" <+> prettyTCM finalt
+
+      -- Andreas, 2012-02-20 do not add irrelevant projections if
+      -- disabled by --no-irrelevant-projections
+      ifM (return (rel == Irrelevant) `and2M` do not . optIrrelevantProjections <$> pragmaOptions) recurse $ do
+
       reportSDoc "tc.rec.proj" 10 $ sep
 	[ text "adding projection"
 	, nest 2 $ prettyTCM projname <+> text ":" <+> inContext [] (prettyTCM finalt)
@@ -264,23 +281,42 @@
       -- Ulf, 2011-08-22: actually we're dropping the parameters from the
       -- projection functions so the body is now
       --  P.xi (r _ .. x .. _) = x
+      -- Andreas, 2012-01-12: irrelevant projections get translated to
+      --  P.xi (r _ .. x .. _) = irrAxiom {level of t} {t} x
+      -- PROBLEM: because of dropped parameters, cannot refer to t
 
+      -- compute body modification for irrelevant projections
+      bodyMod <- do
+        case rel of
+          Relevant   -> return $ \ n x -> x -- no modification
+          Irrelevant -> return $ \ n x -> DontCare x
+
+{- 2012-04-02: DontCare instead of irrAxiom
+          Irrelevant -> do
+            irrAxiom <- primIrrAxiom
+            let sortToLevel (Type l) = l
+                sortToLevel _        = Max [ClosedLevel 0] -- something random here, we don't care a lot
+                levelOfT = Level $ sortToLevel $ getSort t
+            return $ \ n x -> let -- mkArg t = Arg Hidden Relevant $ raise n t
+                                  -- ERR: Variables of t not in Scope!
+                                  mkArg t = Arg Hidden Relevant $ Sort Prop
+                              in  apply irrAxiom [mkArg levelOfT, mkArg (unEl t), Arg NotHidden Irrelevant x]
+-}
+          _          -> __IMPOSSIBLE__
+
       let -- Andreas, 2010-09-09: comment for existing code
           -- split the telescope into parameters (ptel) and the type or the record
           -- (rt) which should be  R ptel
           (ptel,[rt]) = splitAt (size tel - 1) $ telToList tel
 	  conp	 = defaultArg
-		 $ ConP q (Just (fmap snd rt))
-                   $ zipWith3 Arg
-                              (map argHiding (telToList ftel))
-                              (map argRelevance (telToList ftel))
-			      [ VarP "x" | _ <- [1..size ftel] ]
+		 $ ConP q (Just (argFromDom $ fmap snd rt))
+                   [ Arg h r (VarP "x") | Dom h r _ <- telToList ftel ]
 	  nobind 0 = id
 	  nobind n = Bind . Abs "_" . nobind (n - 1)
 	  body	 = nobind (size ftel1)
 		 $ Bind . Abs "x"
 		 $ nobind (size ftel2)
-		 $ Body $ Var (size ftel2) []
+		 $ Body $ bodyMod (size ftel) $ Var (size ftel2) []
           cltel  = ftel
 	  clause = Clause { clauseRange = getRange info
                           , clauseTel   = killRange cltel
@@ -289,11 +325,21 @@
                           , clauseBody  = body
                           }
 
+      reportSDoc "tc.rec.proj" 20 $ sep
+	[ text "adding projection"
+	, nest 2 $ prettyTCM projname <+> text (show clause)
+	]
+      reportSDoc "tc.rec.proj" 10 $ sep
+	[ text "adding projection"
+	, nest 2 $ prettyTCM projname <+> text (show (clausePats clause)) <+> text "=" <+>
+                     inContext [] (addCtxTel ftel (prettyTCM (clauseBody clause)))
+	]
+
             -- Record patterns should /not/ be translated when the
             -- projection functions are defined. Record pattern
             -- translation is defined in terms of projection
             -- functions.
-      cc <- compileClauses False [clause]
+      cc <- compileClauses Nothing [clause]
 
       reportSDoc "tc.cc" 10 $ do
         sep [ text "compiled clauses of " <+> prettyTCM projname
@@ -301,24 +347,28 @@
             ]
 
       escapeContext (size tel) $ do
-	addConstant projname $ Defn rel projname (killRange finalt) (defaultDisplayForm projname) 0 noCompiledRep
+	addConstant projname $ Defn rel projname (killRange finalt) [] [StrictPos] (defaultDisplayForm projname) 0 noCompiledRep
           $ Function { funClauses        = [clause]
                      , funCompiled       = cc
                      , funDelayed        = NotDelayed
                      , funInv            = NotInjective
                      , funAbstr          = ConcreteDef
+{-
                      , funPolarity       = []
-                     , funArgOccurrences = [Negative]
+                     , funArgOccurrences = [StrictPos]
+-}
+                     , funMutual         = []
                      , funProjection     = Just (r, size ptel + 1)
                        -- name of the record type and
                        -- index of the record argument (in the type), start counting with 1
                      , funStatic         = False
+                     , funCopy           = False
+                     , funTerminates     = Just True
                      }
         computePolarity projname
 
-      checkProjs (abstract ftel1 $ ExtendTel (Arg h rel t)
-                                 $ Abs (show $ qnameName projname) EmptyTel
-                 ) (absBody ftel2) fs
+      recurse
+
     checkProjs ftel1 ftel2 (d : fs) = do
       checkDecl d
       checkProjs ftel1 ftel2 fs
diff --git a/src/full/Agda/TypeChecking/Rules/Term.hs b/src/full/Agda/TypeChecking/Rules/Term.hs
--- a/src/full/Agda/TypeChecking/Rules/Term.hs
+++ b/src/full/Agda/TypeChecking/Rules/Term.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, PatternGuards #-}
+{-# LANGUAGE CPP, PatternGuards, TupleSections #-}
 
 module Agda.TypeChecking.Rules.Term where
 
@@ -9,10 +9,9 @@
 import Control.Monad.Error
 import Data.Maybe
 import Data.List hiding (sort)
-import qualified Agda.Utils.IO.Locale as LocIO
 import qualified Data.Map as Map
 import qualified Data.Set as Set
-import Data.Traversable (traverse)
+import Data.Traversable (traverse,sequenceA)
 
 import Agda.Interaction.Options
 
@@ -26,7 +25,6 @@
 import Agda.Syntax.Concrete.Pretty
 import Agda.Syntax.Fixity
 import Agda.Syntax.Internal
-import Agda.Syntax.Internal.Generic
 import Agda.Syntax.Position
 import Agda.Syntax.Literal
 import Agda.Syntax.Abstract.Views
@@ -40,10 +38,13 @@
 import Agda.TypeChecking.MetaVars
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Records
+import Agda.TypeChecking.RecordPatterns
 import Agda.TypeChecking.Conversion
+import Agda.TypeChecking.Implicit (implicitArgs)
+import Agda.TypeChecking.InstanceArguments
 import Agda.TypeChecking.Primitive
 import Agda.TypeChecking.Constraints
-import Agda.TypeChecking.Free
+import Agda.TypeChecking.Free hiding (Occurrence(..))
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Datatypes
 import Agda.TypeChecking.Irrelevance
@@ -52,10 +53,12 @@
 import Agda.TypeChecking.CompiledClause
 import Agda.TypeChecking.Level
 import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction
+import Agda.TypeChecking.Rules.LHS (checkLeftHandSide)
 
 import Agda.Utils.Fresh
 import Agda.Utils.Tuple
 import Agda.Utils.Permutation
+import Agda.Utils.List (zipWithTails)
 
 import {-# SOURCE #-} Agda.TypeChecking.Empty (isEmptyType)
 import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl (checkSectionApplication)
@@ -81,12 +84,12 @@
 -- | Check that an expression is a type without knowing the sort.
 isType_ :: A.Expr -> TCM Type
 isType_ e =
-  traceCall (IsType_ e) $
-  case e of
-    A.Fun i a b -> do
-      a <- traverse isType_ a
+  traceCall (IsType_ e) $ sharedType <$>
+  case unScope e of
+    A.Fun i (Arg h r t) b -> do
+      a <- Dom h r <$> isType_ t
       b <- isType_ b
-      return $ El (sLub (getSort $ unArg a) (getSort b)) (Pi a (NoAbs "_" b))
+      return $ El (sLub (getSort $ unDom a) (getSort b)) (Pi a (NoAbs "_" b))
     A.Pi _ tel e -> do
       checkTelescope_ tel $ \tel -> do
         t   <- instantiateFull =<< isType_ e
@@ -115,9 +118,9 @@
 isTypeEqualTo e t = case e of
   A.ScopedExpr _ e -> isTypeEqualTo e t
   A.Underscore i | A.metaNumber i == Nothing -> return t
-  e -> do
+  e -> workOnTypes $ do
     t' <- isType e (getSort t)
-    t' <$ leqType_ t t'
+    t' <$ leqType t t'
 
 leqType_ :: Type -> Type -> TCM ()
 leqType_ t t' = workOnTypes $ leqType t t'
@@ -150,35 +153,7 @@
 -- * Telescopes
 ---------------------------------------------------------------------------
 
-{- UNUSED
 -- | Type check a telescope. Binds the variables defined by the telescope.
-checkTelescope :: A.Telescope -> Sort -> (Telescope -> TCM a) -> TCM a
-checkTelescope [] s ret = ret EmptyTel
-checkTelescope (b : tel) s ret =
-    checkTypedBindings b s $ \tel1 ->
-    checkTelescope tel s   $ \tel2 ->
-	ret $ abstract tel1 tel2
-
--- | Check a typed binding and extends the context with the bound variables.
---   The telescope passed to the continuation is valid in the original context.
-checkTypedBindings :: A.TypedBindings -> Sort -> (Telescope -> TCM a) -> TCM a
-checkTypedBindings (A.TypedBindings i (Arg h rel b)) s ret =
-    checkTypedBinding h rel s b $ \bs ->
-    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel bs
-
-checkTypedBinding :: Hiding -> Relevance -> Sort -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a
-checkTypedBinding h rel s (A.TBind i xs e) ret = do
-    t <- isType e s
-    addCtxs xs (Arg h rel t) $ ret $ mkTel xs t
-    where
-	mkTel [] t     = []
-	mkTel (x:xs) t = (show $ nameConcrete x,t) : mkTel xs (raise 1 t)
-checkTypedBinding h rel s (A.TNoBind e) ret = do
-    t <- isType e s
-    ret [("_",t)]
--}
-
--- | Type check a telescope. Binds the variables defined by the telescope.
 checkTelescope_ :: A.Telescope -> (Telescope -> TCM a) -> TCM a
 checkTelescope_ [] ret = ret EmptyTel
 checkTelescope_ (b : tel) ret =
@@ -201,7 +176,7 @@
 checkTypedBindings :: LamOrPi -> A.TypedBindings -> (Telescope -> TCM a) -> TCM a
 checkTypedBindings lamOrPi (A.TypedBindings i (Arg h rel b)) ret =
     checkTypedBinding lamOrPi h rel b $ \bs ->
-    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel bs
+    ret $ foldr (\(x,t) -> ExtendTel (Dom h rel t) . Abs x) EmptyTel bs
 
 checkTypedBinding :: LamOrPi -> Hiding -> Relevance -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a
 checkTypedBinding lamOrPi h rel (A.TBind i xs e) ret = do
@@ -210,7 +185,7 @@
     -- 2011-10-04 if flag --experimental-irrelevance is set
     allowed <- optExperimentalIrrelevance <$> pragmaOptions
     t <- modEnv lamOrPi allowed $ isType_ e
-    addCtxs xs (Arg h (modRel lamOrPi allowed rel) t) $ ret $ mkTel xs t
+    addCtxs xs (Dom h (modRel lamOrPi allowed rel) t) $ ret $ mkTel xs t
     where
         -- if we are checking a typed lambda, we resurrect before we check the
         -- types, but do not modify the new context entries
@@ -230,8 +205,9 @@
 checkLambda :: Arg A.TypedBinding -> A.Expr -> Type -> TCM Term
 checkLambda (Arg _ _ A.TNoBind{}) _ _ = __IMPOSSIBLE__
 checkLambda (Arg h r (A.TBind _ xs typ)) body target = do
-  TelV tel btyp <- telViewUpTo (length xs) target
-  if size tel < size xs || length xs /= 1
+  let numbinds = length xs
+  TelV tel btyp <- telViewUpTo numbinds target
+  if size tel < size xs || numbinds /= 1
     then dontUseTargetType
     else useTargetType tel btyp
   where
@@ -240,7 +216,7 @@
       verboseS "tc.term.lambda" 5 $ tick "lambda-no-target-type"
 
       -- First check that argsT is a valid type
-      argsT <- workOnTypes $ Arg h r <$> isType_ typ
+      argsT <- workOnTypes $ Dom h r <$> isType_ typ
 
       -- In order to have as much type information as possible when checking
       -- body, we first unify (xs : argsT) → ?t₁ with the target type. If this
@@ -248,30 +224,37 @@
       -- fresh problem for the check.
       t1 <- addCtxs xs argsT $ workOnTypes newTypeMeta_
       let tel = telFromList $ mkTel xs argsT
-      pid <- newProblem_ $ leqType (telePi tel t1) target
-
-      -- Now check body : ?t₁
-      v <- addCtxs xs argsT $ checkExpr body t1
-
-      -- Block on the type comparison
-      blockTermOnProblem target (teleLam tel v) pid
+      -- Do not coerce hidden lambdas
+      if (h /= NotHidden) then do
+        pid <- newProblem_ $ leqType (telePi tel t1) target
+        -- Now check body : ?t₁
+        v <- addCtxs xs argsT $ checkExpr body t1
+        -- Block on the type comparison
+        blockTermOnProblem target (teleLam tel v) pid
+       else do
+        -- Now check body : ?t₁
+        v <- addCtxs xs argsT $ checkExpr body t1
+        -- Block on the type comparison
+        coerce (teleLam tel v) (telePi tel t1) target
 
-    useTargetType tel@(ExtendTel arg (Abs _ EmptyTel)) btyp = do
+    useTargetType tel@(ExtendTel arg (Abs y EmptyTel)) btyp = do
         verboseS "tc.term.lambda" 5 $ tick "lambda-with-target-type"
-        unless (argHiding    arg == h) $ typeError $ WrongHidingInLambda target
+        unless (domHiding    arg == h) $ typeError $ WrongHidingInLambda target
         -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given
-        let r' = argRelevance arg -- relevance of function type
+        let r' = domRelevance arg -- relevance of function type
         when (r == Irrelevant && r' /= r) $ typeError $ WrongIrrelevanceInLambda target
 --        unless (argRelevance arg == r) $ typeError $ WrongIrrelevanceInLambda target
         -- We only need to block the final term on the argument type
         -- comparison. The body will be blocked if necessary. We still want to
         -- compare the argument types first, so we spawn a new problem for that
         -- check.
-        (pid, argT) <- newProblem $ isTypeEqualTo typ (unArg arg)
-        v <- addCtx x (Arg h r' argT) $ checkExpr body btyp
+        (pid, argT) <- newProblem $ isTypeEqualTo typ (unDom arg)
+        v <- add x y (Dom h r' argT) $ checkExpr body btyp
         blockTermOnProblem target (Lam h $ Abs (show $ nameConcrete x) v) pid
       where
         [x] = xs
+        add x y | C.isNoName (nameConcrete x) = addCtxString y
+                | otherwise                   = addCtx x
     useTargetType _ _ = __IMPOSSIBLE__
 
 
@@ -286,17 +269,10 @@
 checkLiteral :: Literal -> Type -> TCM Term
 checkLiteral lit t = do
   t' <- litType lit
-  blockTerm t $ Lit lit <$ leqType_ t' t
+  coerce (Lit lit) t' t
 
-litType :: Literal -> TCM Type
-litType l = case l of
-    LitInt _ _	  -> el <$> primNat
-    LitFloat _ _  -> el <$> primFloat
-    LitChar _ _   -> el <$> primChar
-    LitString _ _ -> el <$> primString
-    LitQName _ _  -> el <$> primQName
-  where
-    el t = El (mkType 0) t
+-- moved to TypeChecking.Monad.Builtin to avoid import cycles:
+-- litType :: Literal -> TCM Type
 
 ---------------------------------------------------------------------------
 -- * Terms
@@ -305,7 +281,7 @@
 -- TODO: move somewhere suitable
 reduceCon :: QName -> TCM QName
 reduceCon c = do
-  Con c [] <- constructorForm =<< reduce (Con c [])
+  Con c [] <- ignoreSharing <$> (constructorForm =<< reduce (Con c []))
   return c
 
 -- | @checkArguments' exph r args t0 t e k@ tries @checkArguments exph args t0 t@.
@@ -315,10 +291,10 @@
 --
 -- Checks @e := ((_ : t0) args) : t@.
 checkArguments' ::
-  ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type -> A.Expr ->
+  ExpandHidden -> ExpandInstances -> Range -> [NamedArg A.Expr] -> Type -> Type -> A.Expr ->
   (Args -> Type -> TCM Term) -> TCM Term
-checkArguments' exph r args t0 t e k = do
-  z <- runErrorT $ checkArguments exph r args t0 t
+checkArguments' exph expIFS r args t0 t e k = do
+  z <- runErrorT $ checkArguments exph expIFS r args t0 t
   case z of
     Right (vs, t1) -> k vs t1
       -- vs = evaluated args
@@ -333,8 +309,8 @@
 -- | Type check an expression.
 checkExpr :: A.Expr -> Type -> TCM Term
 checkExpr e t =
-    verboseBracket "tc.term.expr.top" 5 "checkExpr" $
-    traceCall (CheckExpr e t) $ localScope $ do
+  verboseBracket "tc.term.expr.top" 5 "checkExpr" $
+  traceCall (CheckExpr e t) $ localScope $ shared <$> do
     reportSDoc "tc.term.expr.top" 15 $
         text "Checking" <+> sep
 	  [ fsep [ prettyTCM e, text ":", prettyTCM t ]
@@ -352,9 +328,10 @@
         unScope e                      = e
 
     e <- scopedExpr e
+
     case e of
 	-- Insert hidden lambda if appropriate
-	_   | Pi (Arg h rel _) _ <- unEl t
+	_   | Pi (Dom h rel _) _ <- ignoreSharing $ unEl t
             , not (hiddenLambdaOrHole h e)
             , h /= NotHidden                          -> do
 		x <- freshName r (argName t)
@@ -374,12 +351,12 @@
 		hiddenLambdaOrHole _ (A.QuestionMark _)				       = True
 		hiddenLambdaOrHole _ _						       = False
 
-                hiddenLHS (A.Clause (A.LHS _ _ (a : _) _) _ _) = elem (argHiding a) [Hidden, Instance]
+                hiddenLHS (A.Clause (A.LHS _ (A.LHSHead _ (a : _)) _) _ _) = elem (argHiding a) [Hidden, Instance]
                 hiddenLHS _ = False
 
         -- a meta variable without arguments: type check directly for efficiency
 	A.QuestionMark i -> checkMeta newQuestionMark t i
-	A.Underscore i   -> checkMeta newValueMeta t i
+	A.Underscore i   -> checkMeta (newValueMeta RunMetaOccursCheck) t i
 
 	A.WithApp _ e es -> typeError $ NotImplemented "type checking of with application"
 
@@ -398,7 +375,7 @@
             reportSDoc "tc.univ.poly" 10 $
               text "checking Set " <+> prettyTCM n <+>
               text "against" <+> prettyTCM t
-            blockTerm t $ Sort (Type n) <$ leqType_ (sort $ sSuc $ Type n) t
+            coerce (Sort $ Type n) (sort $ sSuc $ Type n) t
 
         A.App i q (Arg NotHidden r e)
           | A.Quote _ <- unScope q -> do
@@ -409,13 +386,13 @@
               quoted _                  = typeError $ GenericError $ "quote: not a defined name"
           x <- quoted (namedThing e)
           ty <- qNameType
-          blockTerm t $ quoteName x <$ leqType_ ty t
+          coerce (quoteName x) ty t
 
           | A.QuoteTerm _ <- unScope q ->
              do (et, _) <- inferExpr (namedThing e)
                 q <- quoteTerm =<< normalise et
                 ty <- el primAgdaTerm
-                blockTerm t $ q <$ leqType_ ty t
+                coerce q ty t
 
 	  | A.Unquote _ <- unScope q ->
 	     do e1 <- checkExpr (namedThing e) =<< el primAgdaTerm
@@ -424,19 +401,16 @@
         A.Quote _ -> typeError $ GenericError "quote must be applied to a defined name"
         A.QuoteTerm _ -> typeError $ GenericError "quoteTerm must be applied to a term"
         A.Unquote _ -> typeError $ GenericError "unquote must be applied to a term"
-
         A.AbsurdLam i h -> do
-          t <- reduceB =<< instantiateFull t
-          case t of
-            Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t
-            NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t
-            NotBlocked t' -> case unEl t' of
-              Pi (Arg h' _ a) _
-                | h == h' && not (null $ foldTerm metas a) ->
-                    postponeTypeCheckingProblem e (ignoreBlocking t) $
-                      null . foldTerm metas <$> instantiateFull a
+          t <- instantiateFull t
+          ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ e t') $ \ t' -> do
+            case ignoreSharing $ unEl t' of
+              Pi dom@(Dom h' r a) _
+                | h == h' && not (null $ allMetas a) ->
+                    postponeTypeCheckingProblem e t' $
+                      null . allMetas <$> instantiateFull a
                 | h == h' -> blockTerm t' $ do
-                  isEmptyType a
+                  isEmptyType (getRange i) a
                   -- Add helper function
                   top <- currentModule
                   let name = "absurd"
@@ -448,92 +422,75 @@
                     [ text "Adding absurd function" <+> prettyTCM rel <> prettyTCM aux
                     , nest 2 $ text "of type" <+> prettyTCM t'
                     ]
-                  addConstant aux $ Defn rel aux t' (defaultDisplayForm aux) 0 noCompiledRep
-                                  $ Function
-                                    { funClauses        =
-                                        [Clause { clauseRange = getRange e
-                                                , clauseTel   = EmptyTel
-                                                , clausePerm  = Perm 0 []
-                                                , clausePats  = [Arg h Relevant $ VarP "()"]
-                                                , clauseBody  = NoBody
-                                                }
-                                        ]
-                                    , funCompiled       = Fail
-                                    , funDelayed        = NotDelayed
-                                    , funInv            = NotInjective
-                                    , funAbstr          = ConcreteDef
-                                    , funPolarity       = [Covariant]
-                                    , funArgOccurrences = [Unused]
-                                    , funProjection     = Nothing
-                                    , funStatic         = False
-                                    }
-                  return (Def aux [])
+                  addConstant aux
+                    $ Defn rel aux t' [Nonvariant] [Unused] (defaultDisplayForm aux) 0 noCompiledRep
+                    $ Function
+                      { funClauses        =
+                          [Clause
+                            { clauseRange = getRange e
+                            , clauseTel   = EmptyTel   -- telFromList [fmap ("()",) dom]
+                            , clausePerm  = Perm 1 []  -- Perm 1 [0]
+                            , clausePats  = [Arg h r $ VarP "()"]
+                            , clauseBody  = Bind $ NoAbs "()" NoBody
+                            }
+                          ]
+                      , funCompiled       = Fail
+                      , funDelayed        = NotDelayed
+                      , funInv            = NotInjective
+                      , funAbstr          = ConcreteDef
+{-
+                      , funPolarity       = [Nonvariant] -- WAS: [Covariant]
+                      , funArgOccurrences = [Unused]
+-}
+                      , funMutual         = []
+                      , funProjection     = Nothing
+                      , funStatic         = False
+                      , funCopy           = False
+                      , funTerminates     = Just True
+                      }
+                  -- Andreas 2012-01-30: since aux is lifted to toplevel
+                  -- it needs to be applied to the current telescope (issue 557)
+                  tel <- getContextTelescope
+                  return $ Def aux $ teleArgs tel
+                  -- WAS: return (Def aux [])
                 | otherwise -> typeError $ WrongHidingInLambda t'
               _ -> typeError $ ShouldBePi t'
-          where
-            metas (MetaV m _) = [m]
-            metas _           = []
+
+{- OLD
         A.ExtendedLam i di qname cs -> do
              t <- reduceB =<< instantiateFull t
+             let isMeta t = case ignoreSharing $ unEl t of { MetaV{} -> True; _ -> False }
              case t of
                Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t
-               NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t
+               NotBlocked t' | isMeta t' -> postponeTypeCheckingProblem_ e $ ignoreBlocking t
                NotBlocked t -> do
-                 j   <- currentMutualBlock
-                 rel <- asks envRelevance
-                 addConstant qname (Defn rel qname t (defaultDisplayForm qname) j noCompiledRep Axiom)
-                 reportSDoc "tc.term.exlam" 50 $ text "extended lambda's implementation \"" <> prettyTCM qname <>
-                                                 text "\" has type: " $$ prettyTCM t -- <+>
---                                                 text " where clauses: " <+> text (show cs)
-                 abstract (A.defAbstract di) $ checkFunDef' t rel NotDelayed di qname cs
-                 tel <- getContextTelescope
-                 addExtLambdaTele qname (counthidden tel , countnothidden tel)
-                 reduce $ (Def qname [] `apply` (mkArgs tel))
+-}
+        A.ExtendedLam i di qname cs -> do
+           t <- instantiateFull t
+           ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ e t') $ \ t -> do
+             j   <- currentOrFreshMutualBlock
+             rel <- asks envRelevance
+             addConstant qname $
+               Defn rel qname t [] [] (defaultDisplayForm qname) j noCompiledRep Axiom
+             reportSDoc "tc.term.exlam" 50 $
+               text "extended lambda's implementation \"" <> prettyTCM qname <>
+               text "\" has type: " $$ prettyTCM t -- <+>
+--               text " where clauses: " <+> text (show cs)
+             abstract (A.defAbstract di) $ checkFunDef' t rel NotDelayed di qname cs
+             args     <- getContextArgs
+             top      <- currentModule
+             freevars <- getSecFreeVars top
+             let argsNoParam = genericDrop freevars args -- don't count module parameters
+             let (hid, notHid) = partition ((Hidden ==) . argHiding) argsNoParam
+             addExtLambdaTele qname (length hid, length notHid)
+             reduce $ (Def qname [] `apply` args)
           where
 	    -- Concrete definitions cannot use information about abstract things.
 	    abstract ConcreteDef = inConcreteMode
 	    abstract AbstractDef = inAbstractMode
-            mkArgs :: Telescope -> Args
-            mkArgs tel = map arg [n - 1, n - 2..0]
-              where
-                n     = size tel
-                arg i = defaultArg (Var i [])
 
-            metas (MetaV m _) = [m]
-            metas _           = []
-
-            counthidden :: Telescope -> Int
-            counthidden t = length $ filter (\ (Arg h r a) -> h == Hidden ) $ teleArgs t
-
-            countnothidden :: Telescope -> Int
-            countnothidden t = length $ filter (\ (Arg h r a) -> h == NotHidden ) $ teleArgs t
-
-
-{- Andreas, 2011-04-27 DOES NOT WORK
-   -- a telescope is not for type checking abstract syn
-
-	A.Lam i (A.DomainFull b) e -> do
-            -- check the types, get the telescope with unchanged relevance
-	    (tel, t1, cs) <- workOnTypes $ checkTypedBindings_ b $ \tel -> do
-	       t1 <- newTypeMeta_
-               cs <- escapeContext (size tel) $ leqType (telePi tel t1) t
-               return (tel, t1, cs)
-            -- check the body under the unchanged telescope
-            v <- addCtxTel tel $ do teleLam tel <$> checkExpr e t1
-	    blockTerm t v (return cs)
--}
 	A.Lam i (A.DomainFull (A.TypedBindings _ b)) e -> checkLambda b e t
 
-        -- 	A.Lam i (A.DomainFull b) e -> do
-        -- 	    (v, cs) <- checkTypedBindings LamNotPi b $ \tel -> do
-        --         (t1, cs) <- workOnTypes $ do
-        -- 	          t1 <- newTypeMeta_
-        --           cs <- escapeContext (size tel) $ leqType (telePi tel t1) t
-        --           return (t1, cs)
-        --         v <- checkExpr e t1
-        --         return (teleLam tel v, cs)
-        -- 	    blockTerm t v (return cs)
-
 	A.Lam i (A.DomainFree h rel x) e0 -> checkExpr (A.Lam i (domainFree h rel x) e0) t
 
 	A.Lit lit    -> checkLiteral lit t
@@ -549,23 +506,23 @@
                    , nest 2 $ text "t   =" <+> prettyTCM t'
                    , nest 2 $ text "cxt =" <+> (prettyTCM =<< getContextTelescope)
                    ]
-	    blockTerm t $ unEl t' <$ leqType_ (sort s) t
+	    coerce (unEl t') (sort s) t
 	A.Fun _ (Arg h r a) b -> do
 	    a' <- isType_ a
 	    b' <- isType_ b
 	    s <- reduce $ getSort a' `sLub` getSort b'
-	    blockTerm t $ Pi (Arg h r a') (NoAbs "_" b') <$ leqType_ (sort s) t
+	    coerce (Pi (Dom h r a') (NoAbs "_" b')) (sort s) t
 	A.Set _ n    -> do
           n <- ifM typeInType (return 0) (return n)
-	  blockTerm t $ Sort (mkType n) <$ leqType_ (sort $ mkType $ n + 1) t
+	  coerce (Sort $ mkType n) (sort $ mkType $ n + 1) t
 	A.Prop _     -> do
           typeError $ GenericError "Prop is no longer supported"
           -- s <- ifM typeInType (return $ mkType 0) (return Prop)
-	  -- blockTerm t (Sort Prop) $ leqType_ (sort $ mkType 1) t
+	  -- coerce (Sort Prop) (sort $ mkType 1) t
 
 	A.Rec _ fs  -> do
 	  t <- reduce t
-	  case unEl t of
+	  case ignoreSharing $ unEl t of
 	    Def r vs  -> do
 	      axs    <- getRecordFieldNames r
               let xs = map unArg axs
@@ -575,9 +532,9 @@
               let arg x e =
                     case [ a | a <- axs, unArg a == x ] of
                       [a] -> unnamed e <$ a
-                      _   -> defaultArg $ unnamed e -- we only end up here if the field names are bad
-              let meta = A.Underscore $ A.MetaInfo (getRange e) scope Nothing
-                  missingExplicits = [ (unArg a, [unnamed meta <$ a])
+                      _   -> defaultNamedArg e -- we only end up here if the field names are bad
+              let meta x = A.Underscore $ A.MetaInfo (getRange e) scope Nothing (show x)
+                  missingExplicits = [ (unArg a, [unnamed . meta <$> a])
                                      | a <- axs, argHiding a == NotHidden
                                      , notElem (unArg a) (map fst fs) ]
               -- In es omitted explicit fields are replaced by underscores
@@ -605,13 +562,16 @@
                   def <- getConstInfo r
                   vs  <- newArgsMeta (defType def)
                   let target = piApply (defType def) vs
-                      s      = case unEl target of
+                      s      = case ignoreSharing $ unEl target of
                                  Level l -> Type l
                                  Sort s  -> s
                                  _       -> __IMPOSSIBLE__
                       inferred = El s $ Def r vs
                   v <- checkExpr e inferred
-                  blockTerm t $ v <$ leqType_ t inferred
+                  coerce v inferred t
+                  -- Andreas 2012-04-21: OLD CODE, WRONG DIRECTION, I GUESS:
+                  -- blockTerm t $ v <$ leqType_ t inferred
+
                   -- If there are more than one possible record we postpone
                 _:_:_ -> do
                   reportSDoc "tc.term.expr.rec" 10 $ sep
@@ -622,7 +582,7 @@
 	    _         -> typeError $ ShouldBeRecordType t
 
         A.RecUpdate ei recexpr fs -> do
-          case unEl t of
+          case ignoreSharing $ unEl t of
             Def r vs  -> do
               rec <- checkExpr recexpr t
               name <- freshNoName (getRange recexpr)
@@ -636,21 +596,24 @@
                 checkExpr (A.Rec ei [ (x, e) | (x, Just e) <- zip xs es' ]) t
             MetaV _ _ -> do
               inferred <- inferExpr recexpr >>= reduce . snd
-              case unEl inferred of
+              case ignoreSharing $ unEl inferred of
                 MetaV _ _ -> postponeTypeCheckingProblem_ e t
                 _         -> do
                   v <- checkExpr e inferred
-                  blockTerm t $ v <$ leqType_ t inferred
+                  coerce v inferred t
             _         -> typeError $ ShouldBeRecordType t
           where
             replaceFields :: Name -> A.ExprInfo -> Arg A.QName -> Maybe A.Expr -> Maybe A.Expr
-            replaceFields n ei (Arg NotHidden _ p) Nothing  = Just $ A.App ei (A.Def p) $ defaultArg (unnamed $ A.Var n)
+            replaceFields n ei (Arg NotHidden _ p) Nothing  = Just $ A.App ei (A.Def p) $ defaultNamedArg $ A.Var n
             replaceFields _ _  (Arg _         _ _) Nothing  = Nothing
             replaceFields _ _  _                   (Just e) = Just $ e
 
-	A.DontCare e -> -- can happen in the context of with functions
-          checkExpr e t
-{- Andreas, 2011-10-03 why do I get an internal error for Issue337?
+	A.DontCare e -> -- resurrect vars
+          ifM ((Irrelevant ==) <$> asks envRelevance)
+            (DontCare <$> do applyRelevanceToContext Irrelevant $ checkExpr e t)
+            (internalError "DontCare may only appear in irrelevant contexts")
+{- STALE?:
+   Andreas, 2011-10-03 why do I get an internal error for Issue337?
                         -- except that should be fixed now (issue 337)
                         __IMPOSSIBLE__
 -}
@@ -658,17 +621,14 @@
 
         e0@(A.QuoteGoal _ x e) -> do
           t' <- etaContract =<< normalise t
-          let metas = foldTerm (\v -> case v of
-                                       MetaV m _ -> [m]
-                                       _         -> []
-                               ) t'
+          let metas = allMetas t'
           case metas of
-            _:_ -> postponeTypeCheckingProblem e0 t' $ and <$> mapM isInstantiatedMeta metas
+            _:_ -> postponeTypeCheckingProblem e0 t' $ andM $ map isInstantiatedMeta metas
             []  -> do
               quoted <- quoteTerm (unEl t')
               tmType <- agdaTermType
               (v, ty) <- addLetBinding Relevant x quoted tmType (inferExpr e)
-              blockTerm t' $ v <$ leqType_ ty t'
+              blockTerm t' $ coerce v ty t'
 
         A.ETel _   -> __IMPOSSIBLE__
 
@@ -694,14 +654,14 @@
                 -- Type error
                 let badCon t = typeError $ DoesNotConstructAnElementOf
                                             (fst $ head cs) t
-
+{- OLD CODE
                 -- Lets look at the target type at this point
                 let getCon = do
                       TelV _ t1 <- telView t
                       t1 <- reduceB $ unEl t1
                       reportSDoc "tc.check.term.con" 40 $ nest 2 $
                         text "target type: " <+> prettyTCM t1
-                      case t1 of
+                      case ignoreSharing <$> t1 of
                         NotBlocked (Def d _) -> do
                           let dataOrRec = case [ c | (d', c) <- dcs, d == d' ] of
                                 [c] -> do
@@ -719,7 +679,23 @@
                         NotBlocked (MetaV _ _)  -> return Nothing
                         Blocked{} -> return Nothing
                         _ -> badCon (ignoreBlocking t1)
-                let unblock = isJust <$> getCon
+-}
+                -- Lets look at the target type at this point
+                let getCon = do
+                     TelV _ t1 <- telView t
+                     reportSDoc "tc.check.term.con" 40 $ nest 2 $
+                       text "target type: " <+> prettyTCM t1
+                     ifBlocked (unEl t1) (\ m t -> return Nothing) $ \ t' ->
+                       (isDataOrRecord t' >>=) $ maybe (badCon t') $ \ d ->
+                           case [ c | (d', c) <- dcs, d == d' ] of
+                                [c] -> do
+                                  reportSLn "tc.check.term" 40 $ "  decided on: " ++ show c
+                                  return (Just c)
+                                []  -> badCon (Def d [])
+                                cs  -> typeError $ GenericError $
+                                        "Can't resolve overloaded constructors targeting the same datatype (" ++ show d ++
+                                        "): " ++ unwords (map show cs)
+                let unblock = isJust <$> getCon -- to unblock, call getCon later again
                 mc <- getCon
                 case mc of
                   Just c  -> checkConstructorApplication e t c args
@@ -728,6 +704,18 @@
               -- Subcase: non-ambiguous constructor
             | Application (A.Con (AmbQ [c])) args <- appView e ->
                 checkConstructorApplication e t c args
+
+              -- Subcase: pattern synonym
+            | Application (A.PatternSyn n) args <- appView e -> do
+                (ns, p) <- lookupPatternSyn n
+                -- Expand the pattern synonym by substituting for
+                -- the arguments we have got and lambda-lifting
+                -- over the ones we haven't.
+                let (zs, ns', as) = zipWithTails (\n a -> (n, namedThing (unArg a))) ns args
+                    p'            = A.patternToExpr $ setRange (getRange n) p
+                    e'            = A.lambdaLiftExpr ns' (A.substExpr zs p') `A.app` as
+                checkExpr e' t
+
               -- Subcase: defined symbol or variable.
             | Application hd args <- appView e ->
                 checkHeadApplication e t hd args
@@ -736,19 +724,26 @@
   A.DomainFull $ A.TypedBindings r $ Arg h rel $ A.TBind r [x] $ A.Underscore info
   where
     r = getRange x
-    info = A.MetaInfo{ A.metaRange = r, A.metaScope = emptyScopeInfo, A.metaNumber = Nothing }
+    info = A.MetaInfo
+      { A.metaRange          = r
+      , A.metaScope          = emptyScopeInfo
+      , A.metaNumber         = Nothing
+      , A.metaNameSuggestion = show x
+      }
 
 checkMeta :: (Type -> TCM Term) -> Type -> A.MetaInfo -> TCM Term
 checkMeta newMeta t i = do
   case A.metaNumber i of
     Nothing -> do
       setScope (A.metaScope i)
-      newMeta t
+      v <- newMeta t
+      setValueMetaName v (A.metaNameSuggestion i)
+      return v
     -- Rechecking an existing metavariable
     Just n -> do
       let v = MetaV (MetaId n) []
       t' <- jMetaType . mvJudgement <$> lookupMeta (MetaId n)
-      blockTerm t $ v <$ leqType t' t
+      coerce v t' t
 
 inferMeta :: (Type -> TCM Term) -> A.MetaInfo -> TCM (Args -> Term, Type)
 inferMeta newMeta i =
@@ -768,9 +763,9 @@
 inferHead :: A.Expr -> TCM (Args -> Term, Type)
 inferHead (A.Var x) = do -- traceCall (InferVar x) $ do
   (u, a) <- getVarInfo x
-  when (unusableRelevance $ argRelevance a) $
+  when (unusableRelevance $ domRelevance a) $
     typeError $ VariableIsIrrelevant x
-  return (apply u, unArg a)
+  return (apply u, unDom a)
 inferHead (A.Def x) = do
   proj <- isProjection x
   case proj of
@@ -805,13 +800,13 @@
   Constructor{conPars = n} <- theDef <$> (instantiateDef =<< getConstInfo c)
 
   verboseS "tc.term.con" 7 $ do
-    liftIO $ LocIO.putStrLn $ unwords [show c, "has", show n, "parameters."]
+    reportSLn "" 0 $ unwords [show c, "has", show n, "parameters."]
 
   -- So when applying the constructor throw away the parameters.
   return (apply u . genericDrop n, a)
 inferHead (A.Con _) = __IMPOSSIBLE__  -- inferHead will only be called on unambiguous constructors
 inferHead (A.QuestionMark i)  = inferMeta newQuestionMark i
-inferHead (A.Underscore i) = inferMeta newValueMeta i
+inferHead (A.Underscore i) = inferMeta (newValueMeta RunMetaOccursCheck) i
 inferHead e = do (term, t) <- inferExpr e
                  return (apply term, t)
 
@@ -833,27 +828,49 @@
       ds <- mapM prettyTCM vs
       dx <- prettyTCM x
       dt <- prettyTCM $ defType d
-      liftIO $ LocIO.putStrLn $ "inferred def " ++ unwords (show dx : map show ds) ++ " : " ++ show dt
+      reportSLn "" 0 $ "inferred def " ++ unwords (show dx : map show ds) ++ " : " ++ show dt
     return (mkTerm x vs, defType d)
 
 -- | Check the type of a constructor application. This is easier than
 --   a general application since the implicit arguments can be inserted
 --   without looking at the arguments to the constructor.
 checkConstructorApplication :: A.Expr -> Type -> QName -> [NamedArg A.Expr] -> TCM Term
-checkConstructorApplication org t c args
-  | hiddenArg = fallback
-  | otherwise = do
+checkConstructorApplication org t c args = do
+  reportSDoc "tc.term.con" 50 $ vcat
+    [ text "entering checkConstructorApplication"
+    , nest 2 $ vcat
+      [ text "org  =" <+> prettyTCM org
+      , text "t    =" <+> prettyTCM t
+      , text "c    =" <+> prettyTCM c
+      , text "args =" <+> prettyTCM args
+    ] ]
+  let (args', paramsGiven) = checkForParams args
+  if paramsGiven then fallback else do
+    reportSDoc "tc.term.con" 50 $ text "checkConstructorApplication: no parameters explicitly supplied, continuing..."
     cdef  <- getConstInfo c
     let Constructor{conData = d} = theDef cdef
-    case unEl t of -- Only fully applied constructors get special treatment
-      Def d' vs | d' == d -> do
-        def <- theDef <$> getConstInfo d
-        let npars = case def of
-                      Datatype{ dataPars = n } -> Just n
-                      Record{ recPars = n }    -> Just n
-                      _                        -> Nothing
-        flip (maybe fallback) npars $ \n -> do
-        let ps    = genericTake n vs
+    reportSDoc "tc.term.con" 50 $ nest 2 $ text "d    =" <+> prettyTCM d
+    -- Issue 661: t maybe an evaluated form of d .., so we evaluate d
+    -- as well and then check wether we deal with the same datatype
+    t0 <- reduce (Def d [])
+    case (ignoreSharing t0, ignoreSharing $ unEl t) of -- Only fully applied constructors get special treatment
+      (Def d0 _, Def d' vs) -> do
+       reportSDoc "tc.term.con" 50 $ nest 2 $ text "d0   =" <+> prettyTCM d0
+       reportSDoc "tc.term.con" 50 $ nest 2 $ text "d'   =" <+> prettyTCM d'
+       reportSDoc "tc.term.con" 50 $ nest 2 $ text "vs   =" <+> prettyTCM vs
+       if d' /= d0 then fallback else do
+        -- Issue 661: d' may take more parameters than d, in particular
+        -- these additional parameters could be a module parameter telescope.
+        -- Since we get the constructor type ctype from d but the parameters
+        -- from t = Def d' vs, we drop the additional parameters.
+        npars  <- getNumberOfParameters d
+        npars' <- getNumberOfParameters d'
+        flip (maybe fallback) (sequenceA $ List2 (npars, npars')) $ \(List2 (n,n')) -> do
+        reportSDoc "tc.term.con" 50 $ nest 2 $ text $ "n    = " ++ show n
+        reportSDoc "tc.term.con" 50 $ nest 2 $ text $ "n'   = " ++ show n'
+        -- when (n > n') __IMPOSSIBLE__ -- NOT IN SCOPE `__IMPOSSIBLE__' WHY???
+        when (n > n') bla
+        let ps    = genericTake n $ genericDrop (n' - n) vs
             ctype = defType cdef
         reportSDoc "tc.term.con" 20 $ vcat
           [ text "special checking of constructor application of" <+> prettyTCM c
@@ -861,22 +878,34 @@
                           , text "ctype  =" <+> prettyTCM ctype ] ]
         let ctype' = ctype `piApply` ps
         reportSDoc "tc.term.con" 20 $ nest 2 $ text "ctype' =" <+> prettyTCM ctype'
-        checkArguments' ExpandLast (getRange c) args ctype' t org $ \us t' -> do
+        -- check the non-parameter arguments
+        checkArguments' ExpandLast ExpandInstanceArguments (getRange c) args' ctype' t org $ \us t' -> do
           reportSDoc "tc.term.con" 20 $ nest 2 $ vcat
             [ text "us     =" <+> prettyTCM us
             , text "t'     =" <+> prettyTCM t' ]
-          blockTerm t $ Con c us <$ leqType_ t' t
-      _ -> fallback
+          coerce (Con c us) t' t
+      _ -> do
+        reportSDoc "tc.term.con" 50 $ nest 2 $ text "we are not at a datatype, falling back"
+        fallback
   where
     fallback = checkHeadApplication org t (A.Con (AmbQ [c])) args
+    bla = __IMPOSSIBLE__
 
     -- Check if there are explicitly given hidden arguments,
     -- in which case we fall back to default type checking.
     -- We could work harder, but let's not for now.
-    hiddenArg = case args of
-      Arg Hidden _ _ : _ -> True
-      _                  -> False
+    --
+    -- Andreas, 2012-04-18: if all inital args are underscores, ignore them
+    checkForParams args =
+      let (hargs, rest) = span isHiddenArg args
+          removeScope (A.ScopedExpr _ e) = removeScope e
+          removeScope e                  = e
+          notUnderscore A.Underscore{} = False
+          notUnderscore _              = True
+      in  (rest,) $ any notUnderscore $ map (removeScope . namedArg) hargs
 
+{- UNUSED CODE, BUT DON'T REMOVE (2012-04-18)
+
     -- Split the arguments to a constructor into those corresponding
     -- to parameters and those that don't. Dummy underscores are inserted
     -- for parameters that are not given explicitly.
@@ -894,6 +923,7 @@
         mname = nameOf (unArg arg)
 
     dummyUnderscore = Arg Hidden Relevant (unnamed $ A.Underscore $ A.MetaInfo noRange emptyScopeInfo Nothing)
+-}
 
 -- | @checkHeadApplication e t hd args@ checks that @e@ has type @t@,
 -- assuming that @e@ has the form @hd args@. The corresponding
@@ -920,7 +950,7 @@
         [ text "checkHeadApplication inferred" <+>
           prettyTCM c <+> text ":" <+> prettyTCM t0
         ]
-      checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 -> do
+      checkArguments' ExpandLast ExpandInstanceArguments (getRange hd) args t0 t e $ \vs t1 -> do
         TelV eTel eType <- telView t
         -- If the expected type @eType@ is a metavariable we have to make
         -- sure it's instantiated to the proper pi type
@@ -950,9 +980,11 @@
           "coinductive constructor in the scope of a let-bound variable"
 
       -- The name of the fresh function.
-      i <- fresh :: TCM Integer
+      i <- fresh :: TCM Int
       let name = filter (/= '_') (show $ A.qnameName c) ++ "-" ++ show i
-      c' <- liftM2 qualify (killRange <$> currentModule) (freshName_ name)
+      c' <- setRange (getRange c) <$>
+              liftM2 qualify (killRange <$> currentModule)
+                             (freshName_ name)
 
       -- The application of the fresh function to the relevant
       -- arguments.
@@ -960,20 +992,20 @@
 
       -- Add the type signature of the fresh function to the
       -- signature.
-      i   <- currentMutualBlock
+      i   <- currentOrFreshMutualBlock
       tel <- getContextTelescope
       -- If we are in irrelevant position, add definition irrelevantly.
       -- TODO: is this sufficient?
       rel <- asks envRelevance
-      addConstant c' (Defn rel c' t (defaultDisplayForm c') i noCompiledRep $ Axiom)
+      addConstant c' (Defn rel c' t [] [] (defaultDisplayForm c') i noCompiledRep $ Axiom)
 
       -- Define and type check the fresh function.
       ctx <- getContext
       let info   = A.mkDefInfo (A.nameConcrete $ A.qnameName c') defaultFixity'
                                PublicAccess ConcreteDef noRange
-          pats   = map (fmap $ \(n, _) -> Named Nothing (A.VarP n)) $
+          pats   = map (\ (Dom h r (n, _)) -> Arg h r $ Named Nothing $ A.VarP n) $
                        reverse ctx
-          clause = A.Clause (A.LHS (A.LHSRange noRange) c' pats [])
+          clause = A.Clause (A.LHS (A.LHSRange noRange) (A.LHSHead c' pats) [])
                             (A.RHS $ unAppView (A.Application (A.Con (AmbQ [c])) args))
                             []
 
@@ -988,7 +1020,7 @@
           , nest 2 $ prettyA clause <> text "."
           ]
 
-      escapeContext (size ctx) $ checkFunDef Delayed info c' [clause]
+      escapeContextToTopLevel $ checkFunDef Delayed info c' [clause]
 
       reportSDoc "tc.term.expr.coind" 15 $ do
         def <- theDef <$> getConstInfo c'
@@ -1001,10 +1033,8 @@
   where
   defaultResult = do
     (f, t0) <- inferHead hd
-    checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 ->
-      blockTerm t $ f vs <$ leqType_ t1 t
-
-data ExpandHidden = ExpandLast | DontExpandLast
+    checkArguments' ExpandLast ExpandInstanceArguments (getRange hd) args t0 t e $ \vs t1 ->
+      coerce (f vs) t1 t
 
 instance Error Type where
   strMsg _ = __IMPOSSIBLE__
@@ -1028,69 +1058,100 @@
 --   that have to be solved for everything to be well-formed.
 --
 --   TODO: doesn't do proper blocking of terms
-checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->
+checkArguments :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg A.Expr] -> Type -> Type ->
                   ErrorT Type TCM (Args, Type)
-checkArguments DontExpandLast _ [] t0 t1 = return ([], t0)
-checkArguments exh r [] t0 t1 =
+checkArguments DontExpandLast _ _ [] t0 t1 = return ([], t0)
+checkArguments exh    expandIFS r [] t0 t1 =
+    traceCallE (CheckArguments r [] t0 t1) $ lift $ do
+      t1' <- unEl <$> reduce t1
+      implicitArgs (-1) (expand t1') t0
+    where
+      expand (Pi  (Dom h   _ _) _) Hidden = h /= Hidden
+      expand _                     Hidden = True
+      expand (Pi  (Dom h _ _) _) Instance = h /= Instance && expandIFS == ExpandInstanceArguments
+      expand _                   Instance = expandIFS == ExpandInstanceArguments
+      expand _                  NotHidden = False
+
+{- OLD CODE
+checkArguments exh expandIFS r [] t0 t1 =
     traceCallE (CheckArguments r [] t0 t1) $ do
 	t0' <- lift $ reduce t0
 	t1' <- lift $ reduce t1
-	case unEl t0' of
-	    Pi (Arg Hidden rel a) _ | notHPi Hidden $ unEl t1'  -> do
-		v  <- lift $ applyRelevanceToContext rel $ newValueMeta a
+	case ignoreSharing $ unEl t0' of
+	    Pi (Dom Hidden rel a) _ | notHPi Hidden $ unEl t1'  -> do
+		v  <- lift $ applyRelevanceToContext rel $ newValueMeta RunMetaOccursCheck a
 		let arg = Arg Hidden rel v
-		(vs, t0'') <- checkArguments exh r [] (piApply t0' [arg]) t1'
+		(vs, t0'') <- checkArguments exh expandIFS r [] (piApply t0' [arg]) t1'
 		return (arg : vs, t0'')
-	    Pi (Arg Instance rel a) _ | notHPi Instance $ unEl t1'  -> do
+	    Pi (Dom Instance rel a) _ | expandIFS == ExpandInstanceArguments &&
+                                        (notHPi Instance $ unEl t1')  -> do
                 lift $ reportSLn "tc.term.args.ifs" 15 $ "inserting implicit meta for type " ++ show a
-		v <- lift $ applyRelevanceToContext rel $ newIFSMeta a
+		v <- lift $ applyRelevanceToContext rel $ initializeIFSMeta a
 		let arg = Arg Instance rel v
-		(vs, t0'') <- checkArguments exh r [] (piApply t0' [arg]) t1'
+		(vs, t0'') <- checkArguments exh expandIFS r [] (piApply t0' [arg]) t1'
 		return (arg : vs, t0'')
 	    _ -> return ([], t0')
     where
-	notHPi h (Pi  (Arg h' _ _) _) | h == h' = False
+	notHPi h (Pi  (Dom h' _ _) _) | h == h' = False
+        notHPi h (Shared p) = notHPi h $ derefPtr p
 	notHPi _ _		        = True
+-}
 
-checkArguments exh r args0@(Arg h _ e : args) t0 t1 =
+checkArguments exh expandIFS r args0@(Arg h _ e : args) t0 t1 =
     traceCallE (CheckArguments r args0 t0 t1) $ do
+      lift $ reportSDoc "tc.term.args" 30 $ sep
+        [ text "checkArguments"
+--        , text "  args0 =" <+> prettyA args0
+        , nest 2 $ vcat
+          [ text "e     =" <+> prettyA e
+          , text "t0    =" <+> prettyTCM t0
+          , text "t1    =" <+> prettyTCM t1
+          ]
+        ]
       t0b <- lift $ reduceB t0
+      let isMeta t = case ignoreSharing $ unEl t of { MetaV{} -> True; _ -> False }
       case t0b of
-        Blocked{}                 -> throwError $ ignoreBlocking t0b
-        NotBlocked (El _ MetaV{}) -> throwError $ ignoreBlocking t0b
+        Blocked{}                   -> throwError $ ignoreBlocking t0b
+        NotBlocked t0' | isMeta t0' -> throwError $ ignoreBlocking t0b
         NotBlocked t0' -> do
           -- (t0', cs) <- forcePi h (name e) t0
           e' <- return $ namedThing e
-          case unEl t0' of
-              Pi (Arg h' rel a) _ |
+          case ignoreSharing $ unEl t0' of
+              Pi (Dom h' rel a) _ |
                 h == h' && (h == NotHidden || sameName (nameOf e) (nameInPi $ unEl t0')) -> do
                   u  <- lift $ applyRelevanceToContext rel $ checkExpr e' a
                   let arg = Arg h rel u  -- save relevance info in argument
-                  (us, t0'') <- checkArguments exh (fuseRange r e) args (piApply t0' [arg]) t1
-                  return (nukeIfIrrelevant arg : us, t0'')
+                  (us, t0'') <- checkArguments exh expandIFS (fuseRange r e) args (piApply t0' [arg]) t1
+                  return (arg : us, t0'')
+{- UNUSED.  2012-04-02 do not insert DontCare (is redundant anyway)
                          where nukeIfIrrelevant arg =
                                  if argRelevance arg == Irrelevant then
    -- Andreas, 2011-09-09 keep irr. args. until after termination checking
                                    arg { unArg = DontCare $ unArg arg }
                                   else arg
-              Pi (Arg Instance rel a) _ -> insertIFSUnderscore rel a
-              Pi (Arg Hidden rel a) _   -> insertUnderscore rel
-              Pi (Arg NotHidden _ _) _  -> lift $ typeError $ WrongHidingInApplication t0'
+-}
+              Pi (Dom Instance rel a) b | expandIFS == ExpandInstanceArguments ->
+                insertIFSUnderscore rel (absName b) a
+              Pi (Dom Hidden rel a) b   -> insertUnderscore rel (absName b)
+              Pi (Dom NotHidden _ _) _  -> lift $ typeError $ WrongHidingInApplication t0'
               _ -> lift $ typeError $ ShouldBePi t0'
     where
-	insertIFSUnderscore rel a = do v <- lift $ applyRelevanceToContext rel $ newIFSMeta a
-                                       lift $ reportSLn "tc.term.args.ifs" 15 $ "inserting implicit meta (2) for type " ++ show a
-                                       let arg = Arg Instance rel v
-                                       (vs, t0'') <- checkArguments exh r args0 (piApply t0 [arg]) t1
-                                       return (arg : vs, t0'')
-	insertUnderscore rel = do
+	insertIFSUnderscore rel x a = do
+          lift $ reportSLn "tc.term.args.ifs" 15 $ "inserting implicit meta (2) for type " ++ show a
+          v <- lift $ applyRelevanceToContext rel $ initializeIFSMeta x a
+          let arg = Arg Instance rel v
+          (vs, t0'') <- checkArguments exh expandIFS r args0 (piApply t0 [arg]) t1
+          return (arg : vs, t0'')
+
+	insertUnderscore rel x = do
 	  scope <- lift $ getScope
 	  let m = A.Underscore $ A.MetaInfo
 		  { A.metaRange  = r
 		  , A.metaScope  = scope
 		  , A.metaNumber = Nothing
+                  , A.metaNameSuggestion = x
 		  }
-	  checkArguments exh r (Arg Hidden rel (unnamed m) : args0) t0 t1
+	  checkArguments exh expandIFS r (Arg Hidden rel (unnamed m) : args0) t0 t1
 
 	name (Named _ (A.Var x)) = show x
 	name (Named (Just x) _)    = x
@@ -1099,28 +1160,79 @@
 	sameName Nothing _  = True
 	sameName n1	 n2 = n1 == n2
 
-	nameInPi (Pi _ b)  = Just $ absName b
-	nameInPi _	   = __IMPOSSIBLE__
+	nameInPi (Pi _ b)   = Just $ absName b
+        nameInPi (Shared p) = nameInPi (derefPtr p)
+	nameInPi _          = __IMPOSSIBLE__
 
 
 -- | Check that a list of arguments fits a telescope.
 checkArguments_ :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Telescope -> TCM Args
 checkArguments_ exh r args tel = do
-    z <- runErrorT $ checkArguments exh r args (telePi tel $ sort Prop) (sort Prop)
+    z <- runErrorT $ checkArguments exh ExpandInstanceArguments r args (telePi tel $ sort Prop) (sort Prop)
     case z of
       Right (args, _) -> return args
       Left _          -> __IMPOSSIBLE__
 
 
 -- | Infer the type of an expression. Implemented by checking against a meta
---   variable.
+--   variable.  Except for neutrals, for them a polymorphic type is inferred.
 inferExpr :: A.Expr -> TCM (Term, Type)
-inferExpr e = do
-    -- Andreas, 2011-04-27
-    t <- workOnTypes $ newTypeMeta_
-    v <- checkExpr e t
-    return (v,t)
+inferExpr e = inferOrCheck e Nothing
+{-
+case e of
+  _ | Application hd args <- appView e, defOrVar hd -> traceCall (InferExpr e) $ do
+    (f, t0) <- inferHead hd
+    res <- runErrorT $ checkArguments DontExpandLast ExpandInstanceArguments (getRange hd) args t0 (sort Prop)
+    case res of
+      Right (vs, t1) -> return (f vs, t1)
+      Left t1 -> fallback -- blocked on type t1
+  _ -> fallback
+  where
+    fallback = do
+      t <- workOnTypes $ newTypeMeta_
+      v <- checkExpr e t
+      return (v,t)
+-}
 
+defOrVar :: A.Expr -> Bool
+defOrVar A.Var{} = True
+defOrVar A.Def{} = True
+defOrVar _     = False
+
+inferOrCheck :: A.Expr -> Maybe Type -> TCM (Term, Type)
+inferOrCheck e mt = case e of
+  _ | Application hd args <- appView e, defOrVar hd -> traceCall (InferExpr e) $ do
+    (f, t0) <- inferHead hd
+    res <- runErrorT $ checkArguments DontExpandLast ExpandInstanceArguments (getRange hd) args t0 $ maybe (sort Prop) id mt
+    case res of
+      Right (vs, t1) -> maybe (return (f vs, t1))
+                              (\ t -> (,t) <$> coerce (f vs) t1 t)
+                              mt
+      Left t1        -> fallback -- blocked on type t1
+  _ -> fallback
+  where
+    fallback = do
+      t <- maybe (workOnTypes $ newTypeMeta_) return mt
+      v <- checkExpr e t
+      return (v,t)
+
+-- | Infer the type of an expression, and if it is of the form
+--   @{tel} -> D vs@ for some datatype @D@ then insert the hidden
+--   arguments.  Otherwise, leave the type polymorphic.
+inferExprForWith :: A.Expr -> TCM (Term, Type)
+inferExprForWith e = do
+  (v, t) <- inferExpr e
+  TelV tel t0 <- telViewUpTo' (-1) ((NotHidden /=) . domHiding) t
+  case ignoreSharing $ unEl t0 of
+    Def d vs -> do
+      res <- isDataOrRecordType d
+      case res of
+        Nothing -> return (v, t)
+        Just{}  -> do
+          (args, t1) <- implicitArgs (-1) (NotHidden /=) t
+          return (v `apply` args, t1)
+    _ -> return (v, t)
+
 checkTerm :: Term -> Type -> TCM Term
 checkTerm tm ty = do atm <- reify tm
                      checkExpr atm ty
@@ -1133,11 +1245,71 @@
 checkLetBindings = foldr (.) id . map checkLetBinding
 
 checkLetBinding :: A.LetBinding -> TCM a -> TCM a
+
 checkLetBinding b@(A.LetBind i rel x t e) ret =
   traceCallCPS_ (CheckLetBinding b) ret $ \ret -> do
     t <- isType_ t
     v <- applyRelevanceToContext rel $ checkExpr e t
     addLetBinding rel x v t ret
+
+checkLetBinding b@(A.LetPatBind i p e) ret =
+  traceCallCPS_ (CheckLetBinding b) ret $ \ret -> do
+    (v, t) <- inferExpr e
+    let -- construct a type  t -> dummy  for use in checkLeftHandSide
+        t0 = El (getSort t) $ Pi (Dom NotHidden Relevant t) (NoAbs "_" typeDontCare)
+        p0 = Arg NotHidden Relevant (Named Nothing p)
+    reportSDoc "tc.term.let.pattern" 10 $ vcat
+      [ text "let-binding pattern p at type t"
+      , nest 2 $ vcat
+        [ text "p (A) =" <+> text (show p) -- prettyTCM p
+        , text "t     =" <+> prettyTCM t
+        ]
+      ]
+    checkLeftHandSide (CheckPattern p EmptyTel t) [p0] t0 $ \ mgamma delta sub xs ps t' perm -> do
+      -- A single pattern in internal syntax is returned.
+      let p = case ps of [p] -> unArg p; _ -> __IMPOSSIBLE__
+      reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat
+        [ text "p (I) =" <+> text (show p)
+        , text "delta =" <+> text (show delta)
+        ]
+      -- We translate it into a list of projections.
+      fs <- recordPatternToProjections p
+      -- We remove the bindings for the pattern variables from the context.
+      cxt0 <- getContext
+      let (binds, cxt) = splitAt (size delta) cxt0
+      escapeContext (length binds) $ do
+        reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat
+          [ text "delta =" <+> prettyTCM delta
+          , text "binds =" <+> text (show binds) -- prettyTCM binds
+          ]
+{- WE CANNOT USE THIS BINDING
+       -- We add a first let-binding for the value of e.
+       x <- freshNoName (getRange e)
+       addLetBinding Relevant x v t $ do
+ -}
+        -- We create a substitution for the let-bound variables
+        -- (unfortunately, we cannot refer to x in internal syntax
+        -- so we have to copy v).
+        let sigma = zipWith ($) fs (repeat v)
+        -- We apply the types of the let bound-variables to this substitution.
+        -- The 0th variable in a context is the last one, so we reverse.
+        -- Further, we need to lower all other de Bruijn indices by
+        -- the size of delta, so we append the identity substitution.
+        let sub    = parallelS (reverse sigma)
+        let fdelta = flattenTel delta
+        reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat
+          [ text "fdelta =" <+> text (show fdelta)
+          ]
+        let tsl  = applySubst sub fdelta
+        -- We get a list of types
+        let ts   = map unDom tsl
+        -- and relevances.
+        let rels = map domRelevance tsl
+        -- We get list of names of the let-bound vars from the context.
+        let xs   = map (fst . unDom) (reverse binds)
+        -- We add all the bindings to the context.
+        foldr (uncurry4 addLetBinding) ret $ zip4 rels xs sigma ts
+
 checkLetBinding (A.LetApply i x modapp rd rm) ret = do
   -- Any variables in the context that doesn't belong to the current
   -- module should go with the new module.
diff --git a/src/full/Agda/TypeChecking/Rules/Term.hs-boot b/src/full/Agda/TypeChecking/Rules/Term.hs-boot
--- a/src/full/Agda/TypeChecking/Rules/Term.hs-boot
+++ b/src/full/Agda/TypeChecking/Rules/Term.hs-boot
@@ -3,6 +3,15 @@
 
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Internal
+import Agda.Syntax.Common
+import Agda.Syntax.Position
 import Agda.TypeChecking.Monad.Base
+import Control.Monad.Error (ErrorT)
 
+isType_ :: A.Expr -> TCM Type
+
 checkExpr :: A.Expr -> Type -> TCM Term
+
+checkArguments :: ExpandHidden -> ExpandInstances -> Range -> [NamedArg A.Expr] -> Type -> Type ->
+                  ErrorT Type TCM (Args, Type)
+
diff --git a/src/full/Agda/TypeChecking/Serialise.hs b/src/full/Agda/TypeChecking/Serialise.hs
--- a/src/full/Agda/TypeChecking/Serialise.hs
+++ b/src/full/Agda/TypeChecking/Serialise.hs
@@ -53,10 +53,12 @@
 
 import Agda.Syntax.Common
 import Agda.Syntax.Concrete.Name as C
+import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Abstract.Name as A
+import Agda.Syntax.Info
 import Agda.Syntax.Internal as I
 import Agda.Syntax.Scope.Base
-import Agda.Syntax.Position (Position(..), Range)
+import Agda.Syntax.Position (Position, Range, noRange)
 import qualified Agda.Syntax.Position as P
 import Agda.Syntax.Common
 import Agda.Syntax.Fixity
@@ -69,10 +71,13 @@
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.CompiledClause
+import Agda.TypeChecking.Pretty
 import Agda.Utils.FileName
 import Agda.Utils.Monad
 import Agda.Utils.Tuple
 import Agda.Utils.Permutation
+import Agda.Utils.HashMap (HashMap)
+import qualified Agda.Utils.HashMap as HMap
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
@@ -82,7 +87,7 @@
 -- 32-bit machines). Word64 does not have these problems.
 
 currentInterfaceVersion :: Word64
-currentInterfaceVersion = 20111026 * 10 + 0
+currentInterfaceVersion = 20121106 * 10 + 0
 
 -- | Constructor tag (maybe omitted) and argument indices.
 
@@ -101,25 +106,17 @@
                 , stringD   :: !(HashTable String  Int32)
                 , integerD  :: !(HashTable Integer Int32)
                 , doubleD   :: !(HashTable Double  Int32)
+                , termD     :: !(HashTable (Ptr Term) Int32)
                 , nodeC     :: !(IORef Int32)  -- counters for fresh indexes
                 , stringC   :: !(IORef Int32)
                 , integerC  :: !(IORef Int32)
                 , doubleC   :: !(IORef Int32)
+                , sharingStats :: !(IORef (Int32, Int32))
                 , fileMod   :: !SourceToModule
                 }
 
 data U    = forall a . Typeable a => U !a
-type Memo = HashTable (Int32, TypeRep') U    -- (node index, type rep)
-
--- | A newtype is used to avoid introducing an orphan instance of
--- Hashable.
-newtype TypeRep' = TypeRep' { unTypeRep' :: TypeRep }
-  deriving Eq
-
--- | With direct access to the internals of 'TypeRep' this instance
--- could presumably be improved.
-instance Hashable TypeRep' where
-  hash = hash . show . unTypeRep'
+type Memo = HashTable (Int32, TypeRep) U    -- (node index, type rep)
 
 data St = St
   { nodeE     :: !(Array Int32 Node)
@@ -161,12 +158,17 @@
 encode :: EmbPrj a => a -> TCM ByteString
 encode a = do
     fileMod <- sourceToModule
-    liftIO $ do
-      newD@(Dict nD sD iD dD _ _ _ _ _) <- emptyDict fileMod
+    (x, shared, total) <- liftIO $ do
+      newD@(Dict nD sD iD dD _ _ _ _ _ stats _) <- emptyDict fileMod
       root <- runReaderT (icode a) newD
       nL <- l nD; sL <- l sD; iL <- l iD; dL <- l dD
-      return $ B.encode currentInterfaceVersion `L.append`
-               G.compress (B.encode (root, nL, sL, iL, dL))
+      (shared, total) <- readIORef stats
+      return (B.encode currentInterfaceVersion `L.append`
+              G.compress (B.encode (root, nL, sL, iL, dL)), shared, total)
+    verboseS "profile.sharing" 10 $ do
+      tickN "pointers (reused)" $ fromIntegral shared
+      tickN "pointers" $ fromIntegral total
+    return x
   where
   l h = List.map fst . List.sortBy (compare `on` snd) <$> H.toList h
 
@@ -184,11 +186,11 @@
   -- input is malformed. The decoder is (intended to be) strict enough
   -- to ensure that all such errors can be caught by the handler here.
 
-  (mf, x) <- liftIO $ E.handle (\(E.ErrorCall {}) -> noResult) $ do
+  (mf, r) <- liftIO $ E.handle (\(E.ErrorCall s) -> noResult s) $ do
 
     (ver, s, _) <- return $ B.runGetState B.get s 0
     if ver /= currentInterfaceVersion
-     then noResult
+     then noResult "Wrong interface version."
      else do
 
       ((r, nL, sL, iL, dL), s, _) <-
@@ -196,27 +198,31 @@
       if s /= L.empty
          -- G.decompress seems to throw away garbage at the end, so
          -- the then branch is possibly dead code.
-       then noResult
+       then noResult "Garbage at end."
        else do
 
         st <- St (ar nL) (ar sL) (ar iL) (ar dL)
                 <$> liftIO H.new
                 <*> return mf <*> return incs
         (r, st) <- runStateT (runErrorT (value r)) st
-        return (Just (modFile st), case r of
-          Left  _ -> Nothing
-          Right x -> Just x)
+        return (Just (modFile st), r)
 
   case mf of
     Nothing -> return ()
     Just mf -> modify $ \s -> s { stModuleToSource = mf }
 
-  return x
+  case r of
+    Right x   -> return (Just x)
+    Left  err -> do
+      reportSDoc "import.iface" 5 $
+        text "Error when decoding interface file:" $+$
+        nest 2 (prettyTCM err)
+      return Nothing
 
   where
   ar l = listArray (0, List.genericLength l - 1) l
 
-  noResult = return (Nothing, Nothing)
+  noResult s = return (Nothing, Left $ GenericError s)
 
 -- | Encodes something. To ensure relocatability file paths in
 -- positions are replaced with module names.
@@ -373,8 +379,8 @@
                            valu _      = malformed
 
 instance EmbPrj Scope where
-  icode (Scope a b c d) = icode4' a b c d
-  value = vcase valu where valu [a, b, c, d] = valu4 Scope a b c d
+  icode (Scope a b c d e) = icode5' a b c d e
+  value = vcase valu where valu [a, b, c, d, e] = valu5 Scope a b c d e
                            valu _            = malformed
 
 instance EmbPrj NameSpaceId where
@@ -414,8 +420,11 @@
 instance EmbPrj KindOfName where
   icode DefName = icode0'
   icode ConName = icode0 1
+  icode FldName = icode0 2
+  icode PatternSynName = icode0 2
   value = vcase valu where valu []  = valu0 DefName
                            valu [1] = valu0 ConName
+                           valu [2] = valu0 FldName
                            valu _   = malformed
 
 instance EmbPrj Agda.Syntax.Fixity.Fixity where
@@ -446,6 +455,10 @@
   value = vcase valu where valu [a, b] = valu2 A.QName a b
                            valu _      = malformed
 
+instance EmbPrj A.AmbiguousQName where
+  icode (A.AmbQ a) = icode a
+  value n = A.AmbQ `fmap` value n
+
 instance EmbPrj A.ModuleName where
   icode (A.MName a) = icode a
   value n = A.MName `fmap` value n
@@ -455,6 +468,136 @@
   value = vcase valu where valu [a, b, c, d] = valu4 A.Name a b c d
                            valu _            = malformed
 
+instance (EmbPrj s, EmbPrj t) => EmbPrj (Named s t) where
+  icode (Named a b) = icode2' a b
+  value = vcase valu where valu [a, b] = valu2 Named a b
+                           valu _      = malformed
+
+instance EmbPrj A.Expr where
+  icode (A.Var n)               = icode1 0 n
+  icode (A.Def n)               = icode1 1 n
+  icode (A.Con ns)              = icode1 2 ns
+  icode (A.Lit l)               = icode1 3 l
+  icode (A.QuestionMark _)      = icode0 4
+  icode (A.Underscore _)        = icode0 5
+  icode (A.App _ a b)           = icode2 6 a b
+  icode (A.WithApp _ a b)       = icode2 7 a b
+  icode (A.Lam  _ a b)          = icode2 8 a b
+  icode (A.AbsurdLam _ a)       = icode1 9 a
+  icode (A.ExtendedLam _ _ _ _) = icode0 10
+  icode (A.Pi   _ a b)          = icode2 11 a b
+  icode (A.Fun  _ a b)          = icode2 12 a b
+  icode (A.Set  _ a)            = icode1 13 a
+  icode (A.Prop _)              = icode0 14
+  icode (A.Let  _ a b)          = icode2 15 a b
+  icode (A.ETel a)              = icode1 16 a
+  icode (A.Rec  _ a)            = icode1 17 a
+  icode (A.RecUpdate _ a b)     = icode2 18 a b
+  icode (A.ScopedExpr a b)      = icode2 19 a b
+  icode (A.QuoteGoal _ a b)     = icode2 20 a b
+  icode (A.Quote _)             = icode0 21
+  icode (A.QuoteTerm _)         = icode0 22
+  icode (A.Unquote _)           = icode0 23
+  icode (A.DontCare a)          = icode1 24 a
+  icode (A.PatternSyn a)        = icode1 25 a
+
+  value = vcase valu
+    where
+      valu [0, a]     = valu1 A.Var a
+      valu [1, a]     = valu1 A.Def a
+      valu [2, a]     = valu1 A.Con a
+      valu [3, a]     = valu1 A.Lit a
+      valu [4]        = valu0 (A.QuestionMark emptyMetaInfo)
+      valu [5]        = valu0 (A.Underscore emptyMetaInfo)
+      valu [6, a, b]  = valu2 (A.App i) a b
+      valu [7, a, b]  = valu2 (A.WithApp i) a b
+      valu [8, a, b]  = valu2 (A.Lam i) a b
+      valu [9, a]     = valu1 (A.AbsurdLam i) a
+      valu [10]       = throwError $ NotSupported
+                            "importing pattern synonym containing extended lambda"
+      valu [11, a, b] = valu2 (A.Pi i) a b
+      valu [12, a, b] = valu2 (A.Fun i) a b
+      valu [13, a]    = valu1 (A.Set i) a
+      valu [14]       = valu0 (A.Prop i)
+      valu [15, a, b] = valu2 (A.Let i) a b
+      valu [16, a]    = valu1 A.ETel a
+      valu [17, a]    = valu1 (A.Rec i) a
+      valu [18, a, b] = valu2 (A.RecUpdate i) a b
+      valu [19, a, b] = valu2 A.ScopedExpr a b
+      valu [20, a, b] = valu2 (A.QuoteGoal i) a b
+      valu [21]       = valu0 (A.Quote i)
+      valu [22]       = valu0 (A.QuoteTerm i)
+      valu [23]       = valu0 (A.Unquote i)
+      valu [24, a]    = valu1 A.DontCare a
+      valu [25, a]    = valu1 A.PatternSyn a
+      valu _          = malformed
+
+      i = ExprRange noRange
+
+instance EmbPrj A.Pattern where
+  icode (A.VarP a)            = icode1 0 a
+  icode (A.ConP _ a b)        = icode2 1 a b
+  icode (A.DefP _ a b)        = icode2 2 a b
+  icode (A.WildP _)           = icode0 3
+  icode (A.AsP _ a b)         = icode2 4 a b
+  icode (A.DotP _ a)          = icode1 5 a
+  icode (A.AbsurdP _)         = icode0 6
+  icode (A.LitP a)            = icode1 7 a
+  icode (A.ImplicitP _)       = icode0 8
+  icode (A.PatternSynP _ a b) = icode2 9 a b
+
+  value = vcase valu
+    where
+     valu [0, a]    = valu1 A.VarP a
+     valu [1, a, b] = valu2 (A.ConP i) a b
+     valu [2, a, b] = valu2 (A.DefP i) a b
+     valu [3]       = valu0 (A.WildP i)
+     valu [4, a, b] = valu2 (A.AsP i) a b
+     valu [5, a]    = valu1 (A.DotP i) a
+     valu [6]       = valu0 (A.AbsurdP i)
+     valu [7, a]    = valu1 (A.LitP) a
+     valu [8]       = valu0 (A.ImplicitP i)
+     valu [9, a, b] = valu2 (A.PatternSynP i) a b
+     valu _         = malformed
+
+     i = PatRange noRange
+
+instance EmbPrj A.LamBinding where
+  icode (A.DomainFree a b c) = icode3 0 a b c
+  icode (A.DomainFull a)     = icode1 1 a
+
+  value = vcase valu where valu [0, a, b, c] = valu3 A.DomainFree a b c
+                           valu [1, a]       = valu1 A.DomainFull a
+                           valu _            = malformed
+
+instance EmbPrj A.TypedBindings where
+  icode (A.TypedBindings a b) = icode2' a b
+
+  value = vcase valu where valu [a, b] = valu2 A.TypedBindings a b
+                           valu _      = malformed
+
+instance EmbPrj A.TypedBinding where
+  icode (A.TBind a b c) = icode3 0 a b c
+  icode (A.TNoBind a)   = icode1 1 a
+
+  value = vcase valu where valu [0, a, b, c] = valu3 A.TBind a b c
+                           valu [1, a]       = valu1 A.TNoBind a
+                           valu _            = malformed
+
+instance EmbPrj A.LetBinding where
+  icode (A.LetBind _ a b c d)  = icode4 0 a b c d
+  icode (A.LetPatBind _ a b )  = icode2 1 a b
+  icode (A.LetApply _ _ _ _ _) = icode0 2
+  icode (A.LetOpen _ _)        = icode0 2
+
+  value = vcase valu
+    where
+      valu [0, a, b, c, d] = valu4 (A.LetBind (LetRange noRange)) a b c d
+      valu [1, a, b]       = valu2 (A.LetPatBind (LetRange noRange)) a b
+      valu [2]             = throwError $ NotSupported
+                                 "importing pattern synonym containing let module"
+      valu _               = malformed
+
 instance EmbPrj NameId where
   icode (NameId a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 NameId a b
@@ -465,6 +608,10 @@
   value = vcase valu where valu [a, b] = valu2 Sig a b
                            valu _      = malformed
 
+instance (Eq k, Hashable k, EmbPrj k, EmbPrj v) => EmbPrj (HashMap k v) where
+  icode m = icode (HMap.toList m)
+  value m = HMap.fromList `fmap` value m
+
 instance EmbPrj Section where
   icode (Section a b) = icode2' a b
   value = vcase valu where valu [a, b] = valu2 Section a b
@@ -487,6 +634,11 @@
   value = vcase valu where valu [a, b, c] = valu3 Arg a b c
                            valu _         = malformed
 
+instance (EmbPrj a) => EmbPrj (Agda.Syntax.Common.Dom a) where
+  icode (Dom a b c) = icode3' a b c
+  value = vcase valu where valu [a, b, c] = valu3 Dom a b c
+                           valu _         = malformed
+
 instance EmbPrj Agda.Syntax.Common.Induction where
   icode Inductive   = icode0'
   icode CoInductive = icode0 1
@@ -508,10 +660,12 @@
   icode Irrelevant = icode0 1
   icode Forced     = icode0 2
   icode NonStrict  = icode0 3
+  icode UnusedArg  = icode0 4
   value = vcase valu where valu []  = valu0 Relevant
                            valu [1] = valu0 Irrelevant
                            valu [2] = valu0 Forced
                            valu [3] = valu0 NonStrict
+                           valu [4] = valu0 UnusedArg
                            valu _   = malformed
 
 instance EmbPrj I.Type where
@@ -537,17 +691,32 @@
   icode (MetaV    a b) = __IMPOSSIBLE__
   icode (DontCare a  ) = icode1 8 a
   icode (Level    a  ) = icode1 9 a
-  value = vcase valu where valu [0, a, b] = valu2 Var   a b
-                           valu [1, a, b] = valu2 Lam   a b
-                           valu [2, a]    = valu1 Lit   a
-                           valu [3, a, b] = valu2 Def   a b
-                           valu [4, a, b] = valu2 Con   a b
-                           valu [5, a, b] = valu2 Pi    a b
-                           valu [7, a]    = valu1 Sort  a
-                           valu [8, a]    = valu1 DontCare a
-                           valu [9, a]    = valu1 Level a
-                           valu _         = malformed
+  icode (Shared p)     = do
+    h  <- asks termD
+    mi <- liftIO $ H.lookup h p
+    st <- asks sharingStats
+    case mi of
+      Just i  -> liftIO $ modifyIORef st (\(a, b) -> ((,) $! a + 1) b) >> return i
+      Nothing -> do
+        liftIO $ modifyIORef st (\(a, b) -> (,) a $! b + 1)
+        n <- icode (derefPtr p)
+        liftIO $ H.insert h p n
+        return n
 
+  value r = vcase valu' r
+    where
+      valu' xs = shared <$> valu xs
+      valu [0, a, b] = valu2 Var   a b
+      valu [1, a, b] = valu2 Lam   a b
+      valu [2, a]    = valu1 Lit   a
+      valu [3, a, b] = valu2 Def   a b
+      valu [4, a, b] = valu2 Con   a b
+      valu [5, a, b] = valu2 Pi    a b
+      valu [7, a]    = valu1 Sort  a
+      valu [8, a]    = valu1 DontCare a
+      valu [9, a]    = valu1 Level a
+      valu _         = malformed
+
 instance EmbPrj Level where
   icode (Max a) = icode1' a
   value = vcase valu where valu [a] = valu1 Max a
@@ -624,9 +793,9 @@
   value n = MutId `fmap` value n
 
 instance EmbPrj Definition where
-  icode (Defn rel a b c d e f) = icode7' rel a b c d e f
-  value = vcase valu where valu [rel, a, b, c, d, e, f] = valu7 Defn rel a b c d e f
-                           valu _                       = malformed
+  icode (Defn rel a b c d e f g h) = icode9' rel a (P.killRange b) c d e f g h
+  value = vcase valu where valu [rel, a, b, c, d, e, f, g, h] = valu9 Defn rel a b c d e f g h
+                           valu _                             = malformed
 
 instance EmbPrj HaskellRepresentation where
   icode (HsType a)   = icode1' a
@@ -688,22 +857,30 @@
   icode Covariant     = icode0'
   icode Contravariant = icode0 1
   icode Invariant     = icode0 2
+  icode Nonvariant    = icode0 3
 
   value = vcase valu where
     valu []  = valu0 Covariant
     valu [1] = valu0 Contravariant
     valu [2] = valu0 Invariant
+    valu [3] = valu0 Nonvariant
     valu _   = malformed
 
 instance EmbPrj Occurrence where
-  icode Positive = icode0'
-  icode Negative = icode0 1
-  icode Unused   = icode0 2
+  icode StrictPos = icode0'
+  icode Mixed     = icode0 1
+  icode Unused    = icode0 2
+  icode GuardPos  = icode0 3
+  icode JustPos   = icode0 4
+  icode JustNeg   = icode0 5
 
   value = vcase valu where
-    valu []  = valu0 Positive
-    valu [1] = valu0 Negative
+    valu []  = valu0 StrictPos
+    valu [1] = valu0 Mixed
     valu [2] = valu0 Unused
+    valu [3] = valu0 GuardPos
+    valu [4] = valu0 JustPos
+    valu [5] = valu0 JustNeg
     valu _   = malformed
 
 instance EmbPrj CompiledRepresentation where
@@ -712,21 +889,28 @@
                            valu _         = malformed
 
 instance EmbPrj Defn where
-  icode Axiom                               = icode0 0
-  icode (Function    a b c d e f g h i)     = icode9 1 a b c d e f g h i
-  icode (Datatype    a b c d e f g h i)     = icode9 2 a b c d e f g h i
-  icode (Record      a b c d e f g h i j k) = icode11 3 a b c d e f g h i j k
-  icode (Constructor a b c d e)             = icode5 4 a b c d e
-  icode (Primitive   a b c d)               = icode4 5 a b c d
+  icode Axiom                                   = icode0 0
+  icode (Function    a b c d e f g h i j)       = icode10 1 a b c d e f g h i j
+  icode (Datatype    a b c d e f g h)           = icode8 2 a b c d e f g h
+  icode (Record      a b c d e f g h i j k l)   = icode12 3 a b c d e f g h i j k l
+  icode (Constructor a b c d e)                 = icode5 4 a b c d e
+  icode (Primitive   a b c d)                   = icode4 5 a b c d
   value = vcase valu where
-    valu [0]                                  = valu0 Axiom
-    valu [1, a, b, c, d, e, f, g, h, i]       = valu9 Function    a b c d e f g h i
-    valu [2, a, b, c, d, e, f, g, h, i]       = valu9 Datatype    a b c d e f g h i
-    valu [3, a, b, c, d, e, f, g, h, i, j, k] = valu11 Record     a b c d e f g h i j k
-    valu [4, a, b, c, d, e]                   = valu5 Constructor a b c d e
-    valu [5, a, b, c, d]                      = valu4 Primitive   a b c d
-    valu _                                    = malformed
+    valu [0]                                    = valu0 Axiom
+    valu [1, a, b, c, d, e, f, g, h, i, j]      = valu10 Function a b c d e f g h i j
+    valu [2, a, b, c, d, e, f, g, h]            = valu8 Datatype a b c d e f g h
+    valu [3, a, b, c, d, e, f, g, h, i, j, k, l]= valu12 Record  a b c d e f g h i j k l
+    valu [4, a, b, c, d, e]                     = valu5 Constructor a b c d e
+    valu [5, a, b, c, d]                        = valu4 Primitive   a b c d
+    valu _                                      = malformed
 
+instance EmbPrj a => EmbPrj (WithArity a) where
+  icode (WithArity a b) = icode2' a b
+
+  value = vcase valu where
+    valu [a, b] = valu2 WithArity a b
+    valu _      = malformed
+
 instance EmbPrj a => EmbPrj (Case a) where
   icode (Branches a b c) = icode3' a b c
 
@@ -736,7 +920,7 @@
 
 instance EmbPrj CompiledClauses where
   icode Fail       = icode0'
-  icode (Done a b) = icode2' a b
+  icode (Done a b) = icode2' a (P.killRange b)
   icode (Case a b) = icode2 2 a b
 
   value = vcase valu where
@@ -855,6 +1039,8 @@
   icode HP.UnsolvedMeta       = icode0 2
   icode HP.TerminationProblem = icode0 3
   icode HP.IncompletePattern  = icode0 4
+  icode HP.TypeChecks         = icode0 5
+  icode HP.UnsolvedConstraint = icode0 6
 
   value = vcase valu where
     valu [0] = valu0 HP.Error
@@ -862,6 +1048,8 @@
     valu [2] = valu0 HP.UnsolvedMeta
     valu [3] = valu0 HP.TerminationProblem
     valu [4] = valu0 HP.IncompletePattern
+    valu [5] = valu0 HP.TypeChecks
+    valu [6] = valu0 HP.UnsolvedConstraint
     valu _   = malformed
 
 instance EmbPrj HP.MetaInfo where
@@ -901,10 +1089,19 @@
   value = vcase valu where valu [a, b, c, d] = valu4 ScopeInfo a b c d
                            valu _            = malformed
 
+instance EmbPrj HP.CompressedFile where
+  icode (HP.CompressedFile f) = icode1' f
+  value = vcase valu
+    where
+    valu [f] = valu1 HP.CompressedFile f
+    valu _   = malformed
+
 instance EmbPrj Interface where
-  icode (Interface a b c d e f g h i) = icode9' a b c d e f g h i
-  value = vcase valu where valu [a, b, c, d, e, f, g, h, i] = valu9 Interface a b c d e f g h i
-                           valu _                           = malformed
+  icode (Interface a b c d e f g h i j) = icode10' a b c d e f g h i j
+  value = vcase valu
+    where
+      valu [a, b, c, d, e, f, g, h, i, j] = valu10 Interface a b c d e f g h i j
+      valu _                              = malformed
 
 -- This is used for the Epic compiler backend
 instance EmbPrj Epic.EInterface where
@@ -942,8 +1139,6 @@
     valu [1, a] = valu1 Epic.PrimTag a
     valu _      = malformed
 
-{-# SPECIALIZE icodeX :: (Dict -> HashTable [Int32] Int32) ->
-                         (Dict -> IORef Int32) -> [Int32] -> S Int32 #-}
 icodeX :: (Eq k, Hashable k) =>
           (Dict -> HashTable k Int32) -> (Dict -> IORef Int32) ->
           k -> S Int32
@@ -968,7 +1163,7 @@
 vcase valu = \ix -> do
     memo <- gets nodeMemo
     (aTyp, maybeU) <- liftIO $ do
-      let aTyp = TypeRep' $ typeOf (undefined :: a)
+      let aTyp = typeOf (undefined :: a)
       maybeU <- H.lookup memo (ix, aTyp)
       return (aTyp, maybeU)
     case maybeU of
@@ -991,6 +1186,8 @@
 icode10 tag a b c d e f g h i j   = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]
 icode11 tag a b c d e f g h i j k = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k]
 icode12 tag a b c d e f g h i j k l = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]
+icode13 tag a b c d e f g h i j k l m = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m]
+icode14 tag a b c d e f g h i j k l m n = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n]
 
 icode0'                        = icodeN []
 icode1'  a                     = icodeN =<< sequence [icode a]
@@ -1005,20 +1202,24 @@
 icode10' a b c d e f g h i j   = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]
 icode11' a b c d e f g h i j k = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k]
 icode12' a b c d e f g h i j k l = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]
+icode13' a b c d e f g h i j k l m = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m]
+icode14' a b c d e f g h i j k l m n = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n]
 
-valu0  z                         = return z
-valu1  z a                       = valu0 z                        `ap` value a
-valu2  z a b                     = valu1 z a                      `ap` value b
-valu3  z a b c                   = valu2 z a b                    `ap` value c
-valu4  z a b c d                 = valu3 z a b c                  `ap` value d
-valu5  z a b c d e               = valu4 z a b c d                `ap` value e
-valu6  z a b c d e f             = valu5 z a b c d e              `ap` value f
-valu7  z a b c d e f g           = valu6 z a b c d e f            `ap` value g
-valu8  z a b c d e f g h         = valu7 z a b c d e f g          `ap` value h
-valu9  z a b c d e f g h i       = valu8 z a b c d e f g h        `ap` value i
-valu10 z a b c d e f g h i j     = valu9 z a b c d e f g h i      `ap` value j
-valu11 z a b c d e f g h i j k   = valu10 z a b c d e f g h i j   `ap` value k
-valu12 z a b c d e f g h i j k l = valu11 z a b c d e f g h i j k `ap` value l
+valu0  z                           = return z
+valu1  z a                         = valu0 z                        `ap` value a
+valu2  z a b                       = valu1 z a                      `ap` value b
+valu3  z a b c                     = valu2 z a b                    `ap` value c
+valu4  z a b c d                   = valu3 z a b c                  `ap` value d
+valu5  z a b c d e                 = valu4 z a b c d                `ap` value e
+valu6  z a b c d e f               = valu5 z a b c d e              `ap` value f
+valu7  z a b c d e f g             = valu6 z a b c d e f            `ap` value g
+valu8  z a b c d e f g h           = valu7 z a b c d e f g          `ap` value h
+valu9  z a b c d e f g h i         = valu8 z a b c d e f g h        `ap` value i
+valu10 z a b c d e f g h i j       = valu9 z a b c d e f g h i      `ap` value j
+valu11 z a b c d e f g h i j k     = valu10 z a b c d e f g h i j   `ap` value k
+valu12 z a b c d e f g h i j k l   = valu11 z a b c d e f g h i j k `ap` value l
+valu13 z a b c d e f g h i j k l m = valu12 z a b c d e f g h i j k l `ap` value m
+valu14 z a b c d e f g h i j k l m n = valu13 z a b c d e f g h i j k l m `ap` value n
 
 -- | Creates an empty dictionary.
 
@@ -1032,8 +1233,10 @@
   <*> H.new
   <*> H.new
   <*> H.new
+  <*> H.new
   <*> newIORef 0
   <*> newIORef 0
   <*> newIORef 0
   <*> newIORef 0
+  <*> newIORef (0, 0)
   <*> return fileMod
diff --git a/src/full/Agda/TypeChecking/SizedTypes.hs b/src/full/Agda/TypeChecking/SizedTypes.hs
--- a/src/full/Agda/TypeChecking/SizedTypes.hs
+++ b/src/full/Agda/TypeChecking/SizedTypes.hs
@@ -1,31 +1,106 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP, PatternGuards #-}
 module Agda.TypeChecking.SizedTypes where
 
 import Control.Monad.Error
 import Control.Monad
+
+import Data.Function
 import Data.List
 import qualified Data.Map as Map
 
 import Agda.Interaction.Options
+
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.MetaVars
+import {-# SOURCE #-} Agda.TypeChecking.MetaVars
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Telescope
 import {-# SOURCE #-} Agda.TypeChecking.Conversion
-import Agda.TypeChecking.Constraints
+import {-# SOURCE #-} Agda.TypeChecking.Constraints
+
 import qualified Agda.Utils.Warshall as W
 import Agda.Utils.List
+import Agda.Utils.Maybe
 import Agda.Utils.Monad
 import Agda.Utils.Impossible
 import Agda.Utils.Size
+import Agda.Utils.Tuple
+import Agda.Utils.Pretty (render)
 
 #include "../undefined.h"
 
+builtinSizeHook :: String -> QName -> Term -> Type -> TCM ()
+builtinSizeHook s q e' t = do
+  when (s `elem` [builtinSizeLt, builtinSizeSuc]) $ do
+    modifySignature $ updateDefinition q
+      $ updateDefPolarity       (const [Covariant])
+      . updateDefArgOccurrences (const [StrictPos])
+  when (s == builtinSizeMax) $ do
+    modifySignature $ updateDefinition q
+      $ updateDefPolarity       (const [Covariant, Covariant])
+      . updateDefArgOccurrences (const [StrictPos, StrictPos])
+{-
+      . updateDefType           (const tmax)
+  where
+    -- TODO: max : (i j : Size) -> Size< (suc (max i j))
+    tmax =
+-}
+
+-- | Compute the deep size view of a term.
+--   Precondition: sized types are enabled.
+deepSizeView :: Term -> TCM DeepSizeView
+deepSizeView v = do
+  Def inf [] <- ignoreSharing <$> primSizeInf
+  Def suc [] <- ignoreSharing <$> primSizeSuc
+  let loop v = do
+      v <- reduce v
+      case ignoreSharing v of
+        Def x []  | x == inf -> return $ DSizeInf
+        Def x [u] | x == suc -> sizeViewSuc_ suc <$> loop (unArg u)
+        Var i []             -> return $ DSizeVar i 0
+        MetaV x us           -> return $ DSizeMeta x us 0
+        _                    -> return $ DOtherSize v
+  loop v
+
+sizeMaxView :: Term -> TCM SizeMaxView
+sizeMaxView v = do
+  inf <- getBuiltinDefName builtinSizeInf
+  suc <- getBuiltinDefName builtinSizeSuc
+  max <- getBuiltinDefName builtinSizeMax
+  let loop v = do
+      v <- reduce v
+      case v of
+        Def x []      | Just x == inf -> return $ [DSizeInf]
+        Def x [u]     | Just x == suc -> maxViewSuc_ (fromJust suc) <$> loop (unArg u)
+        Def x [u1,u2] | Just x == max -> maxViewMax <$> loop (unArg u1) <*> loop (unArg u2)
+        Var i []                      -> return $ [DSizeVar i 0]
+        MetaV x us                    -> return $ [DSizeMeta x us 0]
+        _                             -> return $ [DOtherSize v]
+  loop v
+
+-- | Account for subtyping @Size< i =< Size@
+--   Preconditions:
+--   @m = x els1@, @n = y els2@, @m@ and @n@ are not equal.
+trySizeUniv :: Comparison -> Type -> Term -> Term
+  -> QName -> [Elim] -> QName -> [Elim] -> TCM ()
+trySizeUniv cmp t m n x els1 y els2 = do
+  let failure = typeError $ UnequalTerms cmp m n t
+      forceInfty u = compareSizes CmpEq (unArg u) =<< primSizeInf
+  (size, sizelt) <- flip catchError (const failure) $ do
+     Def size   _ <- ignoreSharing <$> primSize
+     Def sizelt _ <- ignoreSharing <$> primSizeLt
+     return (size, sizelt)
+  case (cmp, els1, els2) of
+     (CmpLeq, [_], [])  | x == sizelt && y == size -> return ()
+     (_, [Apply u], []) | x == sizelt && y == size -> forceInfty u
+     (_, [], [Apply u]) | x == size && y == sizelt -> forceInfty u
+     _                                             -> failure
+
 -- | Compare two sizes. Only with --sized-types.
 compareSizes :: Comparison -> Term -> Term -> TCM ()
 compareSizes cmp u v = do
@@ -35,12 +110,123 @@
                    , prettyTCM v
                    ]
     ]
+{-
   u <- reduce u
   v <- reduce v
   reportSDoc "tc.conv.size" 15 $
       nest 2 $ sep [ text (show u) <+> prettyTCM cmp
                    , text (show v)
                    ]
+-}
+  us <- sizeMaxView u
+  vs <- sizeMaxView v
+  compareMaxViews cmp us vs
+
+compareMaxViews :: Comparison -> SizeMaxView -> SizeMaxView -> TCM ()
+compareMaxViews cmp us vs = case (cmp, us, vs) of
+  (CmpLeq, _, (DSizeInf : _)) -> return ()
+  (cmp,   [u], [v]) -> compareSizeViews cmp u v
+  (CmpLeq, us, [v]) -> forM_ us $ \ u -> compareSizeViews cmp u v
+  (CmpLeq, us, vs)  -> forM_ us $ \ u -> compareBelowMax u vs
+  (CmpEq,  us, vs)  -> compareMaxViews CmpLeq us vs >> compareMaxViews CmpLeq vs us
+--  _ -> typeError $ NotImplemented "compareMaxViews"
+
+-- | @compareBelowMax u vs@ checks @u <= max vs@.  Precondition: @size vs >= 2@
+compareBelowMax :: DeepSizeView -> SizeMaxView -> TCM ()
+compareBelowMax u vs =
+  alt (dontAssignMetas $ alts $ map (compareSizeViews CmpLeq u) vs) $ do
+    u <- unDeepSizeView u
+    v <- unMaxView vs
+    size <- sizeType
+    addConstraint $ ValueCmp CmpLeq size u v
+  where alt  c1 c2 = c1 `catchError` const c2
+        alts []     = __IMPOSSIBLE__
+        alts [c]    = c
+        alts (c:cs) = c `alt` alts cs
+
+compareSizeViews :: Comparison -> DeepSizeView -> DeepSizeView -> TCM ()
+compareSizeViews cmp s1' s2' = do
+  size <- sizeType
+  let (s1, s2) = removeSucs (s1', s2')
+      withUnView cont = do
+        u <- unDeepSizeView s1
+        v <- unDeepSizeView s2
+        cont u v
+      failure = withUnView $ \ u v -> typeError $ UnequalTerms cmp u v size
+      continue cmp = withUnView $ compareAtom cmp size
+  case (cmp, s1, s2) of
+    (CmpLeq, _,            DSizeInf)   -> return ()
+    (CmpEq,  DSizeInf,     DSizeInf)   -> return ()
+    (CmpEq,  DSizeVar{},   DSizeInf)   -> failure
+    (_    ,  DSizeInf,     DSizeVar{}) -> failure
+    (_    ,  DSizeInf,     _         ) -> continue CmpEq
+    (CmpLeq, DSizeVar i n, DSizeVar j m) | i == j -> unless (n <= m) failure
+    (CmpLeq, DSizeVar i n, DSizeVar j m) | i /= j -> do
+       res <- isBounded i
+       case res of
+         BoundedNo -> failure
+         BoundedLt u' -> do
+            -- now we have i < u', in the worst case i+1 = u'
+            -- and we want to check i+n <= v
+            v <- unDeepSizeView s2
+            if n > 0 then do
+              u'' <- sizeSuc (n - 1) u'
+              compareSizes cmp u'' v
+             else compareSizes cmp u' =<< sizeSuc 1 v
+    (CmpLeq, s1,        s2)         -> withUnView $ \ u v -> do
+      unlessM (trivial u v) $ addConstraint $ ValueCmp CmpLeq size u v
+    (CmpEq, s1, s2) -> continue cmp
+
+{-
+-- | Compare two sizes. Only with --sized-types.
+compareSizes :: Comparison -> Term -> Term -> TCM ()
+compareSizes cmp u v = do
+  reportSDoc "tc.conv.size" 10 $ vcat
+    [ text "Comparing sizes"
+    , nest 2 $ sep [ prettyTCM u <+> prettyTCM cmp
+                   , prettyTCM v
+                   ]
+    ]
+  u <- reduce u
+  v <- reduce v
+  reportSDoc "tc.conv.size" 15 $
+      nest 2 $ sep [ text (show u) <+> prettyTCM cmp
+                   , text (show v)
+                   ]
+  s1'  <- deepSizeView u
+  s2'  <- deepSizeView v
+  size <- sizeType
+  let failure = typeError $ UnequalTerms cmp u v size
+      (s1, s2) = removeSucs (s1', s2')
+      continue cmp = do
+        u <- unDeepSizeView s1
+        v <- unDeepSizeView s2
+        compareAtom cmp size u v
+  case (cmp, s1, s2) of
+    (CmpLeq, _,            DSizeInf)   -> return ()
+    (CmpEq,  DSizeInf,     DSizeInf)   -> return ()
+    (CmpEq,  DSizeVar{},   DSizeInf)   -> failure
+    (_    ,  DSizeInf,     DSizeVar{}) -> failure
+    (_    ,  DSizeInf,     _         ) -> continue CmpEq
+    (CmpLeq, DSizeVar i n, DSizeVar j m) | i == j -> unless (n <= m) failure
+    (CmpLeq, DSizeVar i n, DSizeVar j m) | i /= j -> do
+       res <- isBounded i
+       case res of
+         BoundedNo -> failure
+         BoundedLt u' ->
+            -- now we have i < u', in the worst case i+1 = u'
+            -- and we want to check i+n <= v
+            if n > 0 then do
+              u'' <- sizeSuc (n - 1) u'
+              compareSizes cmp u'' v
+             else compareSizes cmp u' =<< sizeSuc 1 v
+    (CmpLeq, s1,        s2)         -> do
+      u <- unDeepSizeView s1
+      v <- unDeepSizeView s2
+      unlessM (trivial u v) $ addConstraint $ ValueCmp CmpLeq size u v
+    (CmpEq, s1, s2) -> continue cmp
+-}
+{-
   s1   <- sizeView u
   s2   <- sizeView v
   size <- sizeType
@@ -51,103 +237,205 @@
     (_,      SizeInf,   SizeSuc v) -> compareSizes CmpEq u v
     (_,      SizeSuc u, SizeSuc v) -> compareSizes cmp u v
     (CmpLeq, _,         _)         ->
-      ifM (trivial u v) (return ()) $
-        addConstraint $ ValueCmp CmpLeq size u v
+      unlessM (trivial u v) $ addConstraint $ ValueCmp CmpLeq size u v
     _ -> compareAtom cmp size u v
+-}
 
+isBounded :: Nat -> TCM BoundedSize
+isBounded i = do
+  t <- reduce =<< typeOfBV i
+  case ignoreSharing $ unEl t of
+    Def x [u] -> do
+      sizelt <- getBuiltin' builtinSizeLt
+      return $ if (Just (Def x []) == sizelt) then BoundedLt $ unArg u else BoundedNo
+    _ -> return BoundedNo
+
 trivial :: Term -> Term -> TCM Bool
 trivial u v = do
     a <- sizeExpr u
     b <- sizeExpr v
+    let triv = case (a, b) of
+          -- Andreas, 2012-02-24  filtering out more trivial constraints fixes
+          -- test/lib-succeed/SizeInconsistentMeta4.agda
+          ((e, n), (e', n')) -> e == e' && n <= n'
+        {-
+          ((Rigid i, n), (Rigid j, m)) -> i == j && n <= m
+          _ -> False
+        -}
     reportSDoc "tc.conv.size" 15 $
-      nest 2 $ sep [ text (show a) <+> text "<="
+      nest 2 $ sep [ if triv then text "trivial constraint" else empty
+                   , text (show a) <+> text "<="
                    , text (show b)
                    ]
-    return $ case (a, b) of
-      ((Rigid i, n), (Rigid j, m)) -> i == j && n <= m
-      _ -> False
+    return triv
   `catchError` \_ -> return False
 
+-- | Whenever we create a bounded size meta, add a constraint
+--   expressing the bound.
+--   In @boundedSizeMetaHook v tel a@, @tel@ includes the current context.
+boundedSizeMetaHook :: Term -> Telescope -> Type -> TCM ()
+boundedSizeMetaHook v tel0 a = do
+  res <- isSizeType a
+  case res of
+    Just (BoundedLt u) -> do
+      n <- getContextSize
+      let tel | n > 0     = telFromList $ genericDrop n $ telToList tel0
+              | otherwise = tel0
+      addCtxTel tel $ do
+        v <- sizeSuc 1 $ raise (size tel) v `apply` teleArgs tel
+        -- compareSizes CmpLeq v u
+        size <- sizeType
+        addConstraint $ ValueCmp CmpLeq size v u
+    _ -> return ()
+
+-- | Test whether a problem consists only of size constraints.
+isSizeProblem :: ProblemId -> TCM Bool
+isSizeProblem pid = andM . map (isSizeConstraint . theConstraint) =<< getConstraintsForProblem pid
+
+-- | Test is a constraint speaks about sizes.
+isSizeConstraint :: Closure Constraint -> TCM Bool
+isSizeConstraint (Closure{ clValue = ValueCmp _ s _ _ }) = isJust <$> isSizeType s
+isSizeConstraint _ = return False
+
 -- | Find the size constraints.
-getSizeConstraints :: TCM [SizeConstraint]
+getSizeConstraints :: TCM [Closure Constraint]
 getSizeConstraints = do
   cs   <- getAllConstraints
-  size <- sizeType
-  let sizeConstraints cl@(Closure{ clValue = ValueCmp CmpLeq s _ _ })
-        | s == size = [cl]
-      sizeConstraints _ = []
-  scs <- mapM computeSizeConstraint $ concatMap (sizeConstraints . theConstraint) cs
-  return [ c | Just c <- scs ]
+  test <- isSizeTypeTest
+  let sizeConstraint cl@Closure{ clValue = ValueCmp CmpLeq s _ _ }
+              | isJust (test s) = Just cl
+      sizeConstraint _ = Nothing
+  return $ mapMaybe (sizeConstraint . theConstraint) cs
 
 getSizeMetas :: TCM [(MetaId, Int)]
 getSizeMetas = do
   ms <- getOpenMetas
-  sz <- sizeType
+  test <- isSizeTypeTest
   let sizeCon m = do
+        let nothing  = return []
         mi <- lookupMeta m
         case mvJudgement mi of
           HasType _ a -> do
             TelV tel b <- telView =<< instantiateFull a
-            if b /= sz
-              then return []
-              else return [(m, size tel)]
-          _ -> return []
+            case test b of
+              Nothing -> nothing
+              Just _  -> return [(m, size tel)]
+          _ -> nothing
   concat <$> mapM sizeCon ms
 
-data SizeExpr = SizeMeta MetaId [CtxId]
-              | Rigid CtxId
+{- ROLLED BACK
+getSizeMetas :: TCM ([(MetaId, Int)], [SizeConstraint])
+getSizeMetas = do
+  ms <- getOpenMetas
+  test <- isSizeTypeTest
+  let sizeCon m = do
+        let nothing  = return ([], [])
+        mi <- lookupMeta m
+        case mvJudgement mi of
+          HasType _ a -> do
+            TelV tel b <- telView =<< instantiateFull a
+            let noConstr = return ([(m, size tel)], [])
+            case test b of
+              Nothing            -> nothing
+              Just BoundedNo     -> noConstr
+              Just (BoundedLt u) -> noConstr
+{- WORKS NOT
+              Just (BoundedLt u) -> flip catchError (const $ noConstr) $ do
+                -- we assume the metavariable is used in an
+                -- extension of its creation context
+                ctxIds <- getContextId
+                let a = SizeMeta m $ take (size tel) $ reverse ctxIds
+                (b, n) <- sizeExpr u
+                return ([(m, size tel)], [Leq a (n-1) b])
+-}
+          _ -> nothing
+  (mss, css) <- unzip <$> mapM sizeCon ms
+  return (concat mss, concat css)
+-}
 
--- Leq a n b = (a =< b + n)
-data SizeConstraint = Leq SizeExpr Int SizeExpr
+-- | Atomic size expressions.
+data SizeExpr
+  = SizeMeta MetaId [Int] -- ^ A size meta applied to de Bruijn levels.
+  | Rigid Int             -- ^ A de Bruijn level.
+  deriving (Eq)
 
 instance Show SizeExpr where
   show (SizeMeta m _) = "X" ++ show (fromIntegral m :: Int)
-  show (Rigid i) = "c" ++ show (fromIntegral i :: Int)
+  show (Rigid i)      = "c" ++ show i
 
+-- | Size constraints we can solve.
+data SizeConstraint
+  = Leq SizeExpr Int SizeExpr -- ^ @Leq a +n b@ represents @a =< b + n@.
+                              --   @Leq a -n b@ represents @a + n =< b@.
+
 instance Show SizeConstraint where
   show (Leq a n b)
     | n == 0    = show a ++ " =< " ++ show b
     | n > 0     = show a ++ " =< " ++ show b ++ " + " ++ show n
     | otherwise = show a ++ " + " ++ show (-n) ++ " =< " ++ show b
 
-computeSizeConstraint :: Closure Constraint -> TCM (Maybe SizeConstraint)
-computeSizeConstraint cl =
-  enterClosure cl $ \c ->
-    case c of
+-- | Compute a set of size constraints that all live in the same context
+--   from constraints over terms of type size that may live in different
+--   contexts.
+--
+--   cf. 'Agda.TypeChecking.LevelConstraints.simplifyLevelConstraint'
+computeSizeConstraints :: [Closure Constraint] -> TCM [SizeConstraint]
+computeSizeConstraints [] = return [] -- special case to avoid maximum []
+computeSizeConstraints cs = do
+  scs <- mapM computeSizeConstraint leqs
+  return [ c | Just c <- scs ]
+  where
+    -- get the constraints plus contexts they are defined in
+    unClosure cl = (envContext $ clEnv cl, clValue cl)
+    (gammas, ls) = unzip $ map unClosure cs
+    -- compute the longest context (common water level)
+    gamma        = maximumBy (compare `on` size) gammas
+    waterLevel   = size gamma
+    -- convert deBruijn indices to deBruijn levels to
+    -- enable comparing constraints under different contexts
+    leqs = zipWith raise (map ((waterLevel -) . size) gammas) ls
+
+-- | Turn a constraint over de Bruijn levels into a size constraint.
+computeSizeConstraint :: Constraint -> TCM (Maybe SizeConstraint)
+computeSizeConstraint c = case c of
       ValueCmp CmpLeq _ u v -> do
+          reportSDoc "tc.size.solve" 50 $ sep
+            [ text "converting size constraint"
+            , prettyTCM c
+            ]
           (a, n) <- sizeExpr u
           (b, m) <- sizeExpr v
           return $ Just $ Leq a (m - n) b
-        `catchError` \err -> case errError err of
+        `catchError` \err -> case err of
           PatternErr _ -> return Nothing
           _            -> throwError err
       _ -> __IMPOSSIBLE__
 
--- | Throws a 'patternViolation' if the term isn't a proper size expression.
+-- | Turn a term with de Bruijn levels into a size expression with offset.
+--
+--   Throws a 'patternViolation' if the term isn't a proper size expression.
 sizeExpr :: Term -> TCM (SizeExpr, Int)
 sizeExpr u = do
   u <- reduce u -- Andreas, 2009-02-09.
                 -- This is necessary to surface the solutions of metavariables.
+  reportSDoc "tc.conv.size" 60 $ text "sizeExpr:" <+> prettyTCM u
   s <- sizeView u
   case s of
-    SizeSuc u -> do
-      (e, n) <- sizeExpr u
-      return (e, n + 1)
-    SizeInf -> patternViolation
-    OtherSize u -> case u of
-      Var i []  -> do
-        cxt <- getContextId
-        return (Rigid (cxt !! fromIntegral i), 0)
-      MetaV m args
-        | all isVar args && distinct args -> do
-          cxt <- getContextId
-          return (SizeMeta m [ cxt !! fromIntegral i | Arg _ _ (Var i []) <- args ], 0)
+    SizeInf     -> patternViolation
+    SizeSuc u   -> mapSnd (+1) <$> sizeExpr u
+    OtherSize u -> case ignoreSharing u of
+      Var i []  -> return (Rigid i, 0)  -- i is already a de Bruijn level.
+      MetaV m args | Just xs <- mapM isVar args, fastDistinct xs
+                -> return (SizeMeta m xs, 0)
       _ -> patternViolation
   where
-    isVar (Arg _ _ (Var _ [])) = True
-    isVar _ = False
+    isVar v = case ignoreSharing $ unArg v of
+      Var i [] -> Just i
+      _        -> Nothing
 
-flexibleVariables :: SizeConstraint -> [(MetaId, [CtxId])]
+-- | Compute list of size metavariables with their arguments
+--   appearing in a constraint.
+flexibleVariables :: SizeConstraint -> [(MetaId, [Int])]
 flexibleVariables (Leq a _ b) = flex a ++ flex b
   where
     flex (Rigid _)       = []
@@ -155,89 +443,166 @@
 
 haveSizedTypes :: TCM Bool
 haveSizedTypes = do
-    Def _ [] <- primSize
-    Def _ [] <- primSizeInf
-    Def _ [] <- primSizeSuc
+    Def _ [] <- ignoreSharing <$> primSize
+    Def _ [] <- ignoreSharing <$> primSizeInf
+    Def _ [] <- ignoreSharing <$> primSizeSuc
     optSizedTypes <$> pragmaOptions
   `catchError` \_ -> return False
 
+-- | Convert size constraint into form where each meta is applied
+--   to levels @0,1,..,n-1@ where @n@ is the arity of that meta.
+--
+--   @X[σ] <= t@ beomes @X[id] <= t[σ^-1]@
+--
+--   @X[σ] ≤ Y[τ]@ becomes @X[id] ≤ Y[τ[σ^-1]]@ or @X[σ[τ^1]] ≤ Y[id]@
+--   whichever is defined.  If none is defined, we give up.
+--
+canonicalizeSizeConstraint :: SizeConstraint -> Maybe SizeConstraint
+canonicalizeSizeConstraint c@(Leq a n b) =
+  case (a,b) of
+    (Rigid{}, Rigid{})       -> return c
+    (SizeMeta m xs, Rigid i) -> do
+      j <- findIndex (==i) xs
+      return $ Leq (SizeMeta m [0..size xs-1]) n (Rigid j)
+    (Rigid i, SizeMeta m xs) -> do
+      j <- findIndex (==i) xs
+      return $ Leq (Rigid j) n (SizeMeta m [0..size xs-1])
+    (SizeMeta m xs, SizeMeta l ys)
+         -- try to invert xs on ys
+       | Just ys' <- mapM (\ y -> findIndex (==y) xs) ys ->
+           return $ Leq (SizeMeta m [0..size xs-1]) n (SizeMeta l ys')
+         -- try to invert ys on xs
+       | Just xs' <- mapM (\ x -> findIndex (==x) ys) xs ->
+           return $ Leq (SizeMeta m xs') n (SizeMeta l [0..size ys-1])
+         -- give up
+       | otherwise -> Nothing
+
 solveSizeConstraints :: TCM ()
 solveSizeConstraints = whenM haveSizedTypes $ do
-  cs <- getSizeConstraints
+  reportSLn "tc.size.solve" 70 $ "Considering to solve size constraints"
+  cs0 <- getSizeConstraints
+  cs <- computeSizeConstraints cs0
   ms <- getSizeMetas
+{- ROLLED BACK
+  cs0 <- getSizeConstraints
+  cs1 <- computeSizeConstraints cs0
+  (ms,cs2) <- getSizeMetas
+  let cs = cs2 ++ cs1
+-}
   when (not (null cs) || not (null ms)) $ do
   reportSLn "tc.size.solve" 10 $ "Solving size constraints " ++ show cs
 
-  let metas0 = map mkMeta $ groupOn fst $ concatMap flexibleVariables cs
+  cs <- return $ mapMaybe canonicalizeSizeConstraint cs
+  reportSLn "tc.size.solve" 10 $ "Canonicalized constraints: " ++ show cs
+
+  let -- Error for giving up
+      cannotSolve = typeError . GenericDocError =<<
+        vcat (text "Cannot solve size constraints" : map prettyTCM cs0)
+
+{- OLD, before canonicalize
+
+      -- Ensure that each occurrence of a meta is applied to the same
+      -- arguments ("flexible variables").
+      -- Andreas, 2012-10-16 this is now redundant
+      mkMeta :: [(MetaId, [Int])] -> TCM (MetaId, [Int])
       mkMeta ms@((m, xs) : _)
-        | allEqual (map snd ms) = (m, xs)
-        | otherwise             = error $ "Inconsistent meta: " ++ show m ++ " " ++ show (map snd ms)
+        | allEqual (map snd ms) = return (m, xs)
+        | otherwise             = do
+            reportSLn "tc.size.solve" 20 $
+              "Size meta variable " ++ show m ++ " not always applied to same arguments: " ++ show (nub (map snd ms))
+            cannotSolve
       mkMeta _ = __IMPOSSIBLE__
 
-      mkFlex (m, xs) = W.NewFlex (fromIntegral m) $ \i -> fromIntegral i `elem` xs
+  metas0 <- mapM mkMeta $ groupOn fst $ concatMap flexibleVariables cs
 
+
+  let mkFlex (m, xs) = W.NewFlex (fromIntegral m) $ \i -> fromIntegral i `elem` xs
+-}
+
+  let metas0 :: [(MetaId, Int)]  -- meta id + arity
+      metas0 = nub $ map (mapSnd length) $ concatMap flexibleVariables cs
+
+      mkFlex (m, ar) = W.NewFlex (fromIntegral m) $ \i -> fromIntegral i < ar
+
       mkConstr (Leq a n b)  = W.Arc (mkNode a) n (mkNode b)
-      mkNode (Rigid i)      = W.Rigid $ W.RVar $ fromIntegral i
+      mkNode (Rigid i)      = W.Rigid $ W.RVar i
       mkNode (SizeMeta m _) = W.Flex $ fromIntegral m
 
       found (m, _) = elem m $ map fst metas0
 
+      -- Compute unconstrained metas
+      metas1 = filter (not . found) ms
+
+{- OLD, before canonicalize
   -- Compute unconstrained metas
   let metas1 = map mkMeta' $ filter (not . found) ms
       mkMeta' (m, n) = (m, [0..fromIntegral n - 1])
+-}
 
   let metas = metas0 ++ metas1
 
   reportSLn "tc.size.solve" 15 $ "Metas: " ++ show metas0 ++ ", " ++ show metas1
 
-  verboseS "tc.size.solve" 20 $ do
-    let meta (m, _) = do
-          j <- mvJudgement <$> lookupMeta m
-          reportSDoc "" 0 $ prettyTCM j
-    mapM_ meta metas
+  verboseS "tc.size.solve" 20 $
+      -- debug print the type of all size metas
+      forM_ metas $ \ (m, _) ->
+          reportSDoc "" 0 $ prettyTCM =<< mvJudgement <$> lookupMeta m
 
+  -- run the Warshall solver
   case W.solve $ map mkFlex metas ++ map mkConstr cs of
-    Nothing  -> do
-      typeError $ GenericError $ "Unsolvable size constraints: " ++ show cs
+    Nothing  -> cannotSolve
     Just sol -> do
       reportSLn "tc.size.solve" 10 $ "Solved constraints: " ++ show sol
-      inf <- primSizeInf
-      s <- primSizeSuc
+      s     <- primSizeSuc
+      infty <- primSizeInf
       let suc v = s `apply` [defaultArg v]
           plus v 0 = v
           plus v n = suc $ plus v (n - 1)
 
           inst (i, e) = do
-            let m = fromIntegral i
+
+            let m = fromIntegral i  -- meta variable identifier
+                ar = maybe __IMPOSSIBLE__ id $ lookup m metas  -- meta var arity
+
+{- OLD
                 args = case lookup m metas of
                   Just xs -> xs
                   Nothing -> __IMPOSSIBLE__
+-}
 
+                term (W.SizeConst W.Infinite) = infty
+                term (W.SizeVar j n) | j < ar = plus (var $ ar - j - 1) n
+                term _                        = __IMPOSSIBLE__
+
+{- OLD
                 term (W.SizeConst (W.Finite _)) = __IMPOSSIBLE__
-                term (W.SizeConst W.Infinite) = primSizeInf
                 term (W.SizeVar j n) = case findIndex (==fromIntegral j) $ reverse args of
-                  Just x -> return $ plus (Var (fromIntegral x) []) n
+                  Just x -> return $ plus (var x) n
                   Nothing -> __IMPOSSIBLE__
-
-                lam _ v = Lam NotHidden $ Abs "s" v
+-}
+                lam _ v = Lam NotHidden $ Abs "s" v -- hiding does not matter
 
-            b <- term e
-            let v = foldr lam b args -- TODO: correct hiding
+                -- convert size expression to term and abstract
+                v = flip (foldr lam) [0..ar-1] $ term e
 
             reportSDoc "tc.size.solve" 20 $ sep
               [ text (show m) <+> text ":="
               , nest 2 $ prettyTCM v
               ]
 
-            assignTerm m v
+            -- Andreas, 2012-09-25: do not assign interaction metas to \infty
+            let isInf (W.SizeConst W.Infinite) = True
+                isInf _                        = False
+            unlessM (isInteractionMeta m `and2M` return (isInf e)) $
+              assignTerm m v
 
       mapM_ inst $ Map.toList sol
 
--- type Solution = Map Int SizeExpr
--- data SizeExpr = SizeVar Int Int   -- e.g. x + 5
---               | SizeConst Weight  -- a number or infinity
--- data Weight = Finite Int | Infinite
--- data Node = Rigid Rigid
---           | Flex  FlexId
--- data Rigid = RConst Weight
---            | RVar RigidId
+      -- Andreas, 2012-09-19
+      -- The returned solution might not be consistent with
+      -- the hypotheses on rigid vars (j : Size< i).
+      -- Thus, we double check that all size constraints
+      -- have been solved correctly.
+      flip catchError (const cannotSolve) $
+        noConstraints $
+          forM_ cs0 $ \ cl -> enterClosure cl solveConstraint
diff --git a/src/full/Agda/TypeChecking/Substitute.hs b/src/full/Agda/TypeChecking/Substitute.hs
--- a/src/full/Agda/TypeChecking/Substitute.hs
+++ b/src/full/Agda/TypeChecking/Substitute.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances,
+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances, OverlappingInstances,
     DeriveDataTypeable, DeriveFunctor, StandaloneDeriving #-}
 module Agda.TypeChecking.Substitute where
 
@@ -6,7 +6,7 @@
 import Control.Monad.Reader
 import Control.Arrow ((***))
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.List hiding (sort)
 import qualified Data.List as List
 import Data.Function
@@ -16,9 +16,10 @@
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+import Agda.Syntax.Position
 
-import Agda.TypeChecking.Monad.Base
-import Agda.TypeChecking.Free
+import Agda.TypeChecking.Monad.Base as Base
+import Agda.TypeChecking.Free as Free
 import Agda.TypeChecking.CompiledClause
 
 import Agda.Utils.Monad
@@ -42,6 +43,7 @@
             Con c args'   -> Con c (args' ++ args)
             Lam _ u       -> absApp u (unArg a) `apply` args0
             MetaV x args' -> MetaV x (args' ++ args)
+            Shared p      -> Shared $ apply p args
             Lit{}         -> __IMPOSSIBLE__
             Level{}       -> __IMPOSSIBLE__
             Pi _ _        -> __IMPOSSIBLE__
@@ -56,47 +58,56 @@
   apply s [] = s
   apply s _  = __IMPOSSIBLE__
 
+instance Apply a => Apply (Ptr a) where
+  apply p xs = fmap (`apply` xs) p
+
 instance Subst a => Apply (Tele a) where
   apply tel               []       = tel
   apply EmptyTel          _        = __IMPOSSIBLE__
   apply (ExtendTel _ tel) (t : ts) = absApp tel (unArg t) `apply` ts
 
 instance Apply Definition where
-    apply (Defn rel x t df m c d) args = Defn rel x (piApply t args) df m c (apply d args)
+  apply (Defn rel x t pol occ df m c d) args = Defn rel x (piApply t args) (apply pol args) (apply occ args) df m c (apply d args)
 
+instance Apply [Base.Occurrence] where
+  apply occ args = drop (length args) occ
+
+instance Apply [Polarity] where
+  apply pol args = drop (length args) pol
+
 instance Apply Defn where
   apply d [] = d
   apply d args = case d of
     Axiom{} -> d
     Function{ funClauses = cs, funCompiled = cc, funInv = inv
-            , funProjection = Nothing, funArgOccurrences = occ } ->
+            , funProjection = Nothing {-, funArgOccurrences = occ -} } ->
       d { funClauses    = apply cs args
         , funCompiled   = apply cc args
         , funInv        = apply inv args
-        , funArgOccurrences = drop (length args) occ
+--        , funArgOccurrences = drop (length args) occ
         }
     Function{ funClauses = cs, funCompiled = cc, funInv = inv
-            , funProjection = Just (r, n), funArgOccurrences = occ }
+            , funProjection = Just (r, n) {-, funArgOccurrences = occ -} }
       | m < n  -> d { funProjection = Just (r, n - m) }
       | otherwise ->
         d { funClauses        = apply cs args'
           , funCompiled       = apply cc args'
           , funInv            = apply inv args'
           , funProjection     = Just (r, 0)
-          , funArgOccurrences = drop 1 occ
+--          , funArgOccurrences = drop 1 occ
           }
       where args' = [last args]
             m = size args
     Datatype{ dataPars = np, dataClause = cl
-            , dataArgOccurrences = occ } ->
+            {-, dataArgOccurrences = occ-} } ->
       d { dataPars = np - size args, dataClause = apply cl args
-        , dataArgOccurrences = drop (length args) occ
+--        , dataArgOccurrences = drop (length args) occ
         }
     Record{ recPars = np, recConType = t, recClause = cl, recTel = tel
-          , recArgOccurrences = occ } ->
+          {-, recArgOccurrences = occ-} } ->
       d { recPars = np - size args, recConType = apply t args
         , recClause = apply cl args, recTel = apply tel args
-        , recArgOccurrences = drop (length args) occ
+--        , recArgOccurrences = drop (length args) occ
         }
     Constructor{ conPars = np } ->
       d { conPars = np - size args }
@@ -116,9 +127,11 @@
     Fail     -> Fail
     Done hs t
       | length hs >= len -> Done (drop len hs)
-                                 (substs ([ Var (fromIntegral i) []
-                                          | i <- [0..length hs - len - 1]] ++
-                                          map unArg args) t)
+                                 (applySubst
+                                    (parallelS $
+                                       [ var i | i <- [0..length hs - len - 1]] ++
+                                       map unArg args)
+                                    t)
       | otherwise -> __IMPOSSIBLE__
     Case n bs
       | n >= len  -> Case (n - len) (apply bs args)
@@ -126,6 +139,9 @@
     where
       len = length args
 
+instance Apply a => Apply (WithArity a) where
+  apply (WithArity n a) args = WithArity n $ apply a args
+
 instance Apply a => Apply (Case a) where
   apply (Branches cs ls m) args =
     Branches (apply cs args) (apply ls args) (apply m args)
@@ -138,7 +154,7 @@
     apply  b                 []       = b
     apply (Bind (Abs   _ b)) (a:args) = subst (unArg a) b `apply` args
     apply (Bind (NoAbs _ b)) (_:args) = b `apply` args
-    apply (Body _)           (_:_)    = __IMPOSSIBLE__
+    apply (Body v)           args     = Body $ v `apply` args
     apply  NoBody             _       = NoBody
 
 instance Apply DisplayTerm where
@@ -182,6 +198,7 @@
 piApply :: Type -> Args -> Type
 piApply t []                      = t
 piApply (El _ (Pi  _ b)) (a:args) = absApp b (unArg a) `piApply` args
+piApply (El s (Shared p)) args    = piApply (El s $ derefPtr p) args
 piApply _ _                       = __IMPOSSIBLE__
 
 -- | @(abstract args v) args --> v[args]@.
@@ -203,29 +220,38 @@
   abstract (ExtendTel arg tel') tel = ExtendTel arg $ fmap (`abstract` tel) tel'
 
 instance Abstract Definition where
-    abstract tel (Defn rel x t df m c d) = Defn rel x (abstract tel t) df m c (abstract tel d)
+  abstract tel (Defn rel x t pol occ df m c d) =
+    Defn rel x (abstract tel t) (abstract tel pol) (abstract tel occ) df m c (abstract tel d)
 
+instance Abstract [Base.Occurrence] where
+  abstract tel []  = []
+  abstract tel occ = replicate (size tel) Mixed ++ occ -- TODO: check occurrence
+
+instance Abstract [Polarity] where
+  abstract tel []  = []
+  abstract tel pol = replicate (size tel) Invariant ++ pol -- TODO: check polarity
+
 instance Abstract Defn where
   abstract tel d = case d of
     Axiom{} -> d
     Function{ funClauses = cs, funCompiled = cc, funInv = inv
-            , funProjection = Nothing, funArgOccurrences = occ } ->
+            , funProjection = Nothing {-, funArgOccurrences = occ-} } ->
       d { funClauses = abstract tel cs, funCompiled = abstract tel cc
         , funInv = abstract tel inv
-        , funArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence
+--        , funArgOccurrences = replicate (size tel) Mixed ++ occ -- TODO: check occurrence
         }
     Function{ funClauses = cs, funCompiled = cc, funInv = inv
-            , funProjection = Just (r, n), funArgOccurrences = occ } ->
+            , funProjection = Just (r, n) {-, funArgOccurrences = occ-} } ->
       d { funProjection = Just (r, n + size tel) }
-    Datatype{ dataPars = np, dataClause = cl, dataArgOccurrences = occ } ->
+    Datatype{ dataPars = np, dataClause = cl {-, dataArgOccurrences = occ-} } ->
       d { dataPars = np + size tel, dataClause = abstract tel cl
-        , dataArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence
+--        , dataArgOccurrences = replicate (size tel) Mixed ++ occ -- TODO: check occurrence
         }
     Record{ recPars = np, recConType = t, recClause = cl, recTel = tel'
-          , recArgOccurrences = occ } ->
+          {-, recArgOccurrences = occ-} } ->
       d { recPars = np + size tel, recConType = abstract tel t
         , recClause = abstract tel cl, recTel = abstract tel tel'
-        , recArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence
+--        , recArgOccurrences = replicate (size tel) Mixed ++ occ -- TODO: check occurrence
         }
     Constructor{ conPars = np } ->
       d { conPars = np + size tel }
@@ -243,16 +269,20 @@
 
 instance Abstract CompiledClauses where
   abstract tel Fail = Fail
-  abstract tel (Done xs t) = Done (map (fmap fst) (telToList tel) ++ xs) t
+  abstract tel (Done xs t) = Done (map (argFromDom . fmap fst) (telToList tel) ++ xs) t
   abstract tel (Case n bs) =
     Case (n + fromIntegral (size tel)) (abstract tel bs)
 
+instance Abstract a => Abstract (WithArity a) where
+  abstract tel (WithArity n a) = WithArity n $ abstract tel a
+
 instance Abstract a => Abstract (Case a) where
   abstract tel (Branches cs ls m) =
     Branches (abstract tel cs) (abstract tel ls) (abstract tel m)
 
+telVars :: Telescope -> [Arg Pattern]
 telVars EmptyTel                    = []
-telVars (ExtendTel arg tel) = fmap (const $ VarP $ absName tel) arg : telVars (unAbs tel)
+telVars (ExtendTel (Dom h r a) tel) = Arg h r (VarP $ absName tel) : telVars (unAbs tel)
 
 instance Abstract FunctionInverse where
   abstract tel NotInjective  = NotInjective
@@ -274,262 +304,203 @@
 abstractArgs :: Abstract a => Args -> a -> a
 abstractArgs args x = abstract tel x
     where
-        tel   = foldr (\(Arg h r x) -> ExtendTel (Arg h r $ sort Prop) . Abs x) EmptyTel
+        tel   = foldr (\(Arg h r x) -> ExtendTel (Dom h r $ sort Prop) . Abs x) EmptyTel
               $ zipWith (fmap . const) names args
         names = cycle $ map (:[]) ['a'..'z']
 
 -- | Substitutions.
 
-type Substitution = [Term]
+infixr 4 :#
+data Substitution
 
--- | Substitute a term for the nth free variable.
---
-class Subst t where
-    substs     :: Substitution -> t -> t
-    substUnder :: Nat -> Term -> t -> t
+  = IdS                     -- Γ ⊢ IdS : Γ
 
-idSub :: Telescope -> Substitution
-idSub tel = [ Var i [] | i <- [0..size tel - 1] ]
+  | EmptyS                  -- Γ ⊢ EmptyS : ()
 
-subst :: Subst t => Term -> t -> t
-subst u t = substUnder 0 u t
+                            --      Γ ⊢ ρ : Δ
+  | Wk !Int Substitution    -- -------------------
+                            -- Γ, Ψ ⊢ Wk |Ψ| ρ : Δ
 
-instance Subst Term where
-    substs us t =
-        case t of
-            Var i vs    -> (us !!! i) `apply` substs us vs
-            Lam h m     -> Lam h $ substs us m
-            Def c vs    -> Def c $ substs us vs
-            Con c vs    -> Con c $ substs us vs
-            MetaV x vs  -> MetaV x $ substs us vs
-            Lit l       -> Lit l
-            Level l     -> levelTm $ substs us l
-            Pi a b      -> uncurry Pi $ substs us (a,b)
-            Sort s      -> sortTm $ substs us s
-            DontCare mv -> DontCare $ substs us mv
-        where
-            []     !!! n = __IMPOSSIBLE__
-            (x:xs) !!! 0 = x
-            (_:xs) !!! n = xs !!! (n - 1)
-    substUnder n u t =
-        case t of
-            Var i vs
-              | i == n    -> raise n u `apply` substUnder n u vs
-              | i < n     -> Var i $ substUnder n u vs
-              | otherwise -> Var (i - 1) $ substUnder n u vs
-            Lam h m    -> Lam h $ substUnder n u m
-            Def c vs   -> Def c $ substUnder n u vs
-            Con c vs   -> Con c $ substUnder n u vs
-            MetaV x vs -> MetaV x $ substUnder n u vs
-            Level l    -> levelTm $ substUnder n u l
-            Lit l      -> Lit l
-            Pi a b     -> uncurry Pi $ substUnder n u (a,b)
-            Sort s     -> sortTm $ substUnder n u s
-            DontCare mv -> DontCare $ substUnder n u mv
+                            -- Γ ⊢ u : Aρ  Γ ⊢ ρ : Δ
+  | Term :# Substitution    -- ---------------------
+                            --   Γ ⊢ u :# ρ : Δ, A
 
-instance Subst Type where
-    substs us (El s t) = substs us s `El` substs us t
-    substUnder n u (El s t) = substUnder n u s `El` substUnder n u t
+                            --        Γ ⊢ ρ : Δ
+  | Lift !Int Substitution  -- -------------------------
+                            -- Γ, Ψρ ⊢ Lift |Ψ| ρ : Δ, Ψ
+  deriving (Eq, Ord, Show)
 
-instance Subst Sort where
-    substs us s = case s of
-      Type n     -> levelSort $ sub n
-      Prop       -> Prop
-      Inf        -> Inf
-      DLub s1 s2 -> DLub (sub s1) (sub s2)
-      where sub x = substs us x
+idS :: Substitution
+idS = IdS
 
-    substUnder n u s = case s of
-      Type n     -> levelSort $ sub n
-      Prop       -> Prop
-      Inf        -> Inf
-      DLub s1 s2 -> DLub (sub s1) (sub s2)
-      where sub x = substUnder n u x
+wkS :: Int -> Substitution -> Substitution
+wkS 0 rho        = rho
+wkS n (Wk m rho) = Wk (n + m) rho
+wkS n EmptyS     = EmptyS
+wkS n rho        = Wk n rho
 
-instance Subst Level where
-  substs us (Max as) = Max $ substs us as
-  substUnder n u (Max as) = Max $ substUnder n u as
+raiseS :: Int -> Substitution
+raiseS n = wkS n idS
 
-instance Subst PlusLevel where
-  substs us l@ClosedLevel{} = l
-  substs us (Plus n l) = Plus n $ substs us l
-  substUnder n u l@ClosedLevel{} = l
-  substUnder n u (Plus m l) = Plus m $ substUnder n u l
+singletonS :: Term -> Substitution
+singletonS u = u :# idS
 
-instance Subst LevelAtom where
-  substs us      (MetaLevel m vs)   = MetaLevel m    $ substs us vs
-  substs us      (BlockedLevel m v) = BlockedLevel m $ substs us v
-  substs us      (NeutralLevel v)   = UnreducedLevel $ substs us v
-  substs us      (UnreducedLevel v) = UnreducedLevel $ substs us v
-  substUnder n u (MetaLevel m vs)   = MetaLevel m    $ substUnder n u vs
-  substUnder n u (BlockedLevel m v) = BlockedLevel m $ substUnder n u v
-  substUnder n u (NeutralLevel v)   = UnreducedLevel $ substUnder n u v
-  substUnder n u (UnreducedLevel v) = UnreducedLevel $ substUnder n u v
+liftS :: Int -> Substitution -> Substitution
+liftS 0 rho          = rho
+liftS k IdS          = IdS
+liftS k (Lift n rho) = Lift (n + k) rho
+liftS k rho          = Lift k rho
 
-instance Subst Pattern where
-  substs us p = case p of
-    VarP s       -> VarP s
-    LitP l       -> LitP l
-    ConP c mt ps -> ConP c (substs us mt) $ substs us ps
-    DotP t       -> DotP $ substs us t
-  substUnder n u p = case p of
-    VarP s       -> VarP s
-    LitP l       -> LitP l
-    ConP c mt ps -> ConP c (substUnder n u mt) $ substUnder n u ps
-    DotP t       -> DotP $ substUnder n u t
+dropS :: Int -> Substitution -> Substitution
+dropS 0 rho          = rho
+dropS n IdS          = raiseS n
+dropS n (Wk m rho)   = wkS m (dropS n rho)
+dropS n (u :# rho)   = dropS (n - 1) rho
+dropS n (Lift 0 rho) = __IMPOSSIBLE__
+dropS n (Lift m rho) = wkS 1 $ dropS (n - 1) $ liftS (m - 1) rho
+dropS n EmptyS       = __IMPOSSIBLE__
 
-instance Subst t => Subst (Blocked t) where
-    substs us b      = fmap (substs us) b
-    substUnder n u b = fmap (substUnder n u) b
+-- | @applySubst (ρ `composeS` σ) v == applySubst ρ (applySubst σ v)@
+composeS :: Substitution -> Substitution -> Substitution
+composeS rho IdS = rho
+composeS IdS sgm = sgm
+composeS rho EmptyS = EmptyS
+composeS rho (Wk n sgm) = composeS (dropS n rho) sgm
+composeS rho (u :# sgm) = applySubst rho u :# composeS rho sgm
+composeS rho (Lift 0 sgm) = __IMPOSSIBLE__
+composeS (u :# rho) (Lift n sgm) = u :# composeS rho (liftS (n - 1) sgm)
+composeS rho (Lift n sgm) = lookupS rho 0 :# composeS rho (wkS 1 (liftS (n - 1) sgm))
 
-instance Subst DisplayTerm where
-  substs us      (DTerm v)        = DTerm $ substs us v
-  substs us      (DDot v)         = DDot  $ substs us v
-  substs us      (DCon c vs)      = DCon c $ substs us vs
-  substs us      (DDef c vs)      = DDef c $ substs us vs
-  substs us      (DWithApp vs ws) = uncurry DWithApp $ substs us (vs, ws)
-  substUnder n u (DTerm v)        = DTerm $ substUnder n u v
-  substUnder n u (DDot  v)        = DDot  $ substUnder n u v
-  substUnder n u (DCon c vs)      = DCon c $ substUnder n u vs
-  substUnder n u (DDef c vs)      = DDef c $ substUnder n u vs
-  substUnder n u (DWithApp vs ws) = uncurry DWithApp $ substUnder n u (vs, ws)
+-- If Γ ⊢ ρ : Δ, Θ then splitS |Θ| ρ = (σ, δ), with
+--   Γ ⊢ σ : Δ
+--   Γ ⊢ δ : Θσ
+splitS :: Int -> Substitution -> (Substitution, Substitution)
+splitS 0 rho          = (rho, EmptyS)
+splitS n (u :# rho)   = id *** (u :#) $ splitS (n - 1) rho
+splitS n (Lift 0 _)   = __IMPOSSIBLE__
+splitS n (Wk m rho)   = wkS m *** wkS m $ splitS n rho
+splitS n IdS          = (raiseS n, liftS n EmptyS)
+splitS n (Lift m rho) = wkS 1 *** liftS 1 $ splitS (n - 1) (liftS (m - 1) rho)
+splitS n EmptyS       = __IMPOSSIBLE__
 
-instance Subst a => Subst (Tele a) where
-  substs us  EmptyTel              = EmptyTel
-  substs us (ExtendTel t tel)      = uncurry ExtendTel $ substs us (t, tel)
-  substUnder n u  EmptyTel         = EmptyTel
-  substUnder n u (ExtendTel t tel) = uncurry ExtendTel $ substUnder n u (t, tel)
+infixr 4 ++#
 
-instance Subst a => Subst (Abs a) where
-    substs us      (Abs   x t) = Abs   x $ substs (Var 0 [] : raise 1 us) t
-    substs us      (NoAbs x t) = NoAbs x $ substs us t
-    substUnder n u (Abs   x t) = Abs   x $ substUnder (n + 1) u t
-    substUnder n u (NoAbs x t) = NoAbs x $ substUnder n u t
+(++#) :: [Term] -> Substitution -> Substitution
+us ++# rho = foldr (:#) rho us
 
-instance Subst a => Subst (Arg a) where
-    substs us      = fmap (substs us)
-    substUnder n u = fmap (substUnder n u)
+parallelS :: [Term] -> Substitution
+parallelS us = us ++# idS
 
-instance Subst a => Subst (Maybe a) where
-  substs us      = fmap (substs us)
-  substUnder n u = fmap (substUnder n u)
+lookupS :: Substitution -> Nat -> Term
+lookupS rho i = case rho of
+  IdS                    -> var i
+  Wk n IdS               -> let j = i + n in
+                            if  j < 0 then __IMPOSSIBLE__ else var j
+  Wk n rho               -> applySubst (raiseS n) (lookupS rho i)
+  u :# rho   | i == 0    -> u
+             | i < 0     -> __IMPOSSIBLE__
+             | otherwise -> lookupS rho (i - 1)
+  Lift n rho | i < n     -> var i
+             | otherwise -> raise n $ lookupS rho (i - n)
+  EmptyS                 -> __IMPOSSIBLE__
 
-instance Subst a => Subst [a] where
-    substs us      = map (substs us)
-    substUnder n u = map (substUnder n u)
+-- | Apply a substitution.
 
-instance (Subst a, Subst b) => Subst (a,b) where
-    substs us (x,y)      = (substs us x, substs us y)
-    substUnder n u (x,y) = (substUnder n u x, substUnder n u y)
+-- For terms:
+--
+--  Γ ⊢ ρ : Δ
+--  Δ ⊢ t : σ
+-- -----------
+-- Γ ⊢ tρ : σρ
 
-instance Subst ClauseBody where
-    substs us (Body t)        = Body $ substs us t
-    substs us (Bind b)        = Bind $ substs us b
-    substs _   NoBody         = NoBody
-    substUnder n u (Body t)   = Body $ substUnder n u t
-    substUnder n u (Bind b)   = Bind $ substUnder n u b
-    substUnder _ _   NoBody   = NoBody
+class Subst t where
+  applySubst :: Substitution -> t -> t
 
--- | Add @k@ to index of each open variable in @x@.
-class Raise t where
-    raiseFrom :: Nat -> Nat -> t -> t
-    renameFrom :: Nat -> (Nat -> Nat) -> t -> t
+raise :: Subst t => Nat -> t -> t
+raise = raiseFrom 0
 
-instance Raise () where
-  raiseFrom  _ _ _ = ()
-  renameFrom _ _ _ = ()
+raiseFrom :: Subst t => Nat -> Nat -> t -> t
+raiseFrom n k = applySubst (liftS n $ raiseS k)
 
-instance Raise Term where
-    raiseFrom m k v =
-        case v of
-            Var i vs
-                | i < m     -> Var i $ rf vs
-                | otherwise -> Var (i + k) $ rf vs
-            Lam h m         -> Lam h $ rf m
-            Def c vs        -> Def c $ rf vs
-            Con c vs        -> Con c $ rf vs
-            MetaV x vs      -> MetaV x $ rf vs
-            Level l         -> Level $ rf l
-            Lit l           -> Lit l
-            Pi a b          -> uncurry Pi $ rf (a,b)
-            Sort s          -> Sort $ rf s
-            DontCare mv     -> DontCare $ rf mv
-        where
-            rf x = raiseFrom m k x
+subst :: Subst t => Term -> t -> t
+subst u t = substUnder 0 u t
 
-    renameFrom m k v =
-        case v of
-            Var i vs
-                | i < m     -> Var i $ rf vs
-                | otherwise -> Var (k (i - m) + m) $ rf vs
-            Lam h m         -> Lam h $ rf m
-            Def c vs        -> Def c $ rf vs
-            Con c vs        -> Con c $ rf vs
-            MetaV x vs      -> MetaV x $ rf vs
-            Level l         -> Level $ rf l
-            Lit l           -> Lit l
-            Pi a b          -> uncurry Pi $ rf (a,b)
-            Sort s          -> Sort $ rf s
-            DontCare mv     -> DontCare $ rf mv
-        where
-            rf x = renameFrom m k x
+substUnder :: Subst t => Nat -> Term -> t -> t
+substUnder n u = applySubst (liftS n (singletonS u))
 
-instance Raise Type where
-    raiseFrom m k (El s t) = raiseFrom m k s `El` raiseFrom m k t
-    renameFrom m k (El s t) = renameFrom m k s `El` renameFrom m k t
+instance Subst Substitution where
+  applySubst rho sgm = composeS rho sgm
 
-instance Raise Sort where
-    raiseFrom m k s = case s of
-      Type n     -> Type $ rf n
-      Prop       -> Prop
-      Inf        -> Inf
-      DLub s1 s2 -> DLub (rf s1) (rf s2)
-      where rf x = raiseFrom m k x
+instance Subst Term where
+  applySubst IdS t = t
+  applySubst rho t    = case t of
+    Var i vs    -> lookupS rho i `apply` applySubst rho vs
+    Lam h m     -> Lam h $ applySubst rho m
+    Def c vs    -> Def c $ applySubst rho vs
+    Con c vs    -> Con c $ applySubst rho vs
+    MetaV x vs  -> MetaV x $ applySubst rho vs
+    Lit l       -> Lit l
+    Level l     -> levelTm $ applySubst rho l
+    Pi a b      -> uncurry Pi $ applySubst rho (a,b)
+    Sort s      -> sortTm $ applySubst rho s
+    Shared p    -> Shared $ applySubst rho p
+    DontCare mv -> DontCare $ applySubst rho mv
 
-    renameFrom m k s = case s of
-      Type n     -> Type $ rf n
-      Prop       -> Prop
-      Inf        -> Inf
-      DLub s1 s2 -> DLub (rf s1) (rf s2)
-      where rf x = renameFrom m k x
+instance Subst a => Subst (Ptr a) where
+  applySubst rho = fmap (applySubst rho)
 
-instance Raise Level where
-  raiseFrom m k (Max as) = Max $ raiseFrom m k as
-  renameFrom m k (Max as) = Max $ renameFrom m k as
+instance Subst Type where
+  applySubst rho (El s t) = applySubst rho s `El` applySubst rho t
 
-instance Raise PlusLevel where
-  raiseFrom m k l@ClosedLevel{} = l
-  raiseFrom m k (Plus n l) = Plus n $ raiseFrom m k l
-  renameFrom m k l@ClosedLevel{} = l
-  renameFrom m k (Plus n l) = Plus n $ renameFrom m k l
+instance Subst Sort where
+  applySubst rho s = case s of
+    Type n     -> levelSort $ sub n
+    Prop       -> Prop
+    Inf        -> Inf
+    DLub s1 s2 -> DLub (sub s1) (sub s2)
+    where sub x = applySubst rho x
 
-instance Raise LevelAtom where
-  raiseFrom m k l = case l of
-    MetaLevel n vs   -> MetaLevel n $ raiseFrom m k vs
-    NeutralLevel v   -> NeutralLevel $ raiseFrom m k v
-    BlockedLevel n v -> BlockedLevel n $ raiseFrom m k v
-    UnreducedLevel v -> UnreducedLevel $ raiseFrom m k v
-  renameFrom m k l = case l of
-    MetaLevel n vs   -> MetaLevel n $ renameFrom m k vs
-    NeutralLevel v   -> NeutralLevel $ renameFrom m k v
-    BlockedLevel n v -> BlockedLevel n $ renameFrom m k v
-    UnreducedLevel v -> UnreducedLevel $ renameFrom m k v
+instance Subst Level where
+  applySubst rho (Max as) = Max $ applySubst rho as
 
-instance Raise Constraint where
-  raiseFrom m k c = case c of
-    ValueCmp cmp a u v       -> ValueCmp cmp (rf a) (rf u) (rf v)
-    ElimCmp ps a v e1 e2     -> ElimCmp ps (rf a) (rf v) (rf e1) (rf e2)
-    TypeCmp cmp a b          -> TypeCmp cmp (rf a) (rf b)
-    TelCmp a b cmp tel1 tel2 -> TelCmp (rf a) (rf b) cmp (rf tel1) (rf tel2)
-    SortCmp cmp s1 s2        -> SortCmp cmp (rf s1) (rf s2)
-    LevelCmp cmp l1 l2       -> LevelCmp cmp (rf l1) (rf l2)
-    Guarded c cs             -> Guarded (rf c) cs
-    IsEmpty a                -> IsEmpty (rf a)
-    FindInScope{}            -> c
-    UnBlock{}                -> c
-    where
-      rf x = raiseFrom m k x
-  renameFrom m k c = case c of
+instance Subst PlusLevel where
+  applySubst rho l@ClosedLevel{} = l
+  applySubst rho (Plus n l) = Plus n $ applySubst rho l
+
+instance Subst LevelAtom where
+  applySubst rho      (MetaLevel m vs)   = MetaLevel m    $ applySubst rho vs
+  applySubst rho      (BlockedLevel m v) = BlockedLevel m $ applySubst rho v
+  applySubst rho      (NeutralLevel v)   = UnreducedLevel $ applySubst rho v
+  applySubst rho      (UnreducedLevel v) = UnreducedLevel $ applySubst rho v
+
+instance Subst Pattern where
+  applySubst rho p = case p of
+    VarP s       -> VarP s
+    LitP l       -> LitP l
+    ConP c mt ps -> ConP c (applySubst rho mt) $ applySubst rho ps
+    DotP t       -> DotP $ applySubst rho t
+
+instance Subst t => Subst (Blocked t) where
+  applySubst rho b      = fmap (applySubst rho) b
+
+instance Subst DisplayForm where
+  applySubst rho (Display n ps v) =
+    Display n (applySubst (liftS 1 rho) ps)
+              (applySubst (liftS n rho) v)
+
+instance Subst DisplayTerm where
+  applySubst rho      (DTerm v)        = DTerm $ applySubst rho v
+  applySubst rho      (DDot v)         = DDot  $ applySubst rho v
+  applySubst rho      (DCon c vs)      = DCon c $ applySubst rho vs
+  applySubst rho      (DDef c vs)      = DDef c $ applySubst rho vs
+  applySubst rho      (DWithApp vs ws) = uncurry DWithApp $ applySubst rho (vs, ws)
+
+instance Subst a => Subst (Tele a) where
+  applySubst rho  EmptyTel              = EmptyTel
+  applySubst rho (ExtendTel t tel)      = uncurry ExtendTel $ applySubst rho (t, tel)
+
+instance Subst Constraint where
+  applySubst rho c = case c of
     ValueCmp cmp a u v       -> ValueCmp cmp (rf a) (rf u) (rf v)
     ElimCmp ps a v e1 e2     -> ElimCmp ps (rf a) (rf v) (rf e1) (rf e2)
     TypeCmp cmp a b          -> TypeCmp cmp (rf a) (rf b)
@@ -537,132 +508,76 @@
     SortCmp cmp s1 s2        -> SortCmp cmp (rf s1) (rf s2)
     LevelCmp cmp l1 l2       -> LevelCmp cmp (rf l1) (rf l2)
     Guarded c cs             -> Guarded (rf c) cs
-    IsEmpty a                -> IsEmpty (rf a)
-    FindInScope{}            -> c
+    IsEmpty r a              -> IsEmpty r (rf a)
+    FindInScope m cands      -> FindInScope m (rf cands)
     UnBlock{}                -> c
     where
-      rf x = renameFrom m k x
+      rf x = applySubst rho x
 
-instance Raise Elim where
-  raiseFrom m k e = case e of
-    Apply v -> Apply (raiseFrom m k v)
-    Proj{}  -> e
-  renameFrom m k e = case e of
-    Apply v -> Apply (renameFrom m k v)
+instance Subst Elim where
+  applySubst rho e = case e of
+    Apply v -> Apply (applySubst rho v)
     Proj{}  -> e
 
-instance Raise ClauseBody where
-  raiseFrom m k b = case b of
-    Body v   -> Body $ rf v
-    NoBody   -> NoBody
-    Bind b   -> Bind $ rf b
-    where rf x = raiseFrom m k x
-  renameFrom m k b = case b of
-    Body v   -> Body $ rf v
-    NoBody   -> NoBody
-    Bind b   -> Bind $ rf b
-    where rf x = renameFrom m k x
-
--- Andreas, 2010-09-09 raise dot patterns and type info embedded in a pattern
-instance Raise Pattern where
-    raiseFrom m k p = case p of
-      DotP t -> DotP $ raiseFrom m k t
-      ConP c mt ps -> ConP c (raiseFrom m k mt) (raiseFrom m k ps)
-      VarP x -> p
-      LitP l -> p
-    renameFrom m k p = case p of
-      DotP t -> DotP $ renameFrom m k t
-      ConP c mt ps -> ConP c (renameFrom m k mt) (renameFrom m k ps)
-      VarP x -> p
-      LitP l -> p
-
-instance Raise a => Raise (Tele a) where
-    raiseFrom m k EmptyTel          = EmptyTel
-    raiseFrom m k (ExtendTel a tel) = uncurry ExtendTel $ raiseFrom m k (a, tel)
-    renameFrom m k EmptyTel          = EmptyTel
-    renameFrom m k (ExtendTel a tel) = uncurry ExtendTel $ renameFrom m k (a, tel)
-
-instance Raise DisplayForm where
-  raiseFrom m k (Display n ps v) = Display n (raiseFrom (m + 1) k ps)
-                                             (raiseFrom (m + n) k v)
-  renameFrom m k (Display n ps v) = Display n (renameFrom (m + 1) k ps)
-                                             (renameFrom (m + n) k v)
-
-instance Raise DisplayTerm where
-  raiseFrom m k (DWithApp xs ys) = uncurry DWithApp $ raiseFrom m k (xs, ys)
-  raiseFrom m k (DTerm v)        = DTerm $ raiseFrom m k v
-  raiseFrom m k (DDot  v)        = DDot  $ raiseFrom m k v
-  raiseFrom m k (DCon c vs)      = DCon c $ raiseFrom m k vs
-  raiseFrom m k (DDef c vs)      = DDef c $ raiseFrom m k vs
-  renameFrom m k (DWithApp xs ys) = uncurry DWithApp $ renameFrom m k (xs, ys)
-  renameFrom m k (DTerm v)        = DTerm $ renameFrom m k v
-  renameFrom m k (DDot  v)        = DDot  $ renameFrom m k v
-  renameFrom m k (DCon c vs)      = DCon c $ renameFrom m k vs
-  renameFrom m k (DDef c vs)      = DDef c $ renameFrom m k vs
-
-instance Raise t => Raise (Abs t) where
-    raiseFrom m k (Abs x v)   = Abs x $ raiseFrom (m + 1) k v
-    raiseFrom m k (NoAbs x v) = NoAbs x $ raiseFrom m k v
-    renameFrom m k (Abs x v)   = Abs x $ renameFrom (m + 1) k v
-    renameFrom m k (NoAbs x v) = NoAbs x $ renameFrom m k v
-
-instance Raise t => Raise (Arg t) where
-    raiseFrom m k = fmap (raiseFrom m k)
-    renameFrom m k = fmap (renameFrom m k)
+instance Subst a => Subst (Abs a) where
+  applySubst rho (Abs x a)   = Abs x $ applySubst (liftS 1 rho) a
+  applySubst rho (NoAbs x a) = NoAbs x $ applySubst rho a
 
-instance Raise t => Raise (Blocked t) where
-    raiseFrom m k = fmap (raiseFrom m k)
-    renameFrom m k = fmap (renameFrom m k)
+instance Subst a => Subst (Arg a) where
+  applySubst rho = fmap (applySubst rho)
 
-instance Raise t => Raise [t] where
-    raiseFrom m k = fmap (raiseFrom m k)
-    renameFrom m k = fmap (renameFrom m k)
+instance Subst a => Subst (Dom a) where
+  applySubst rho = fmap (applySubst rho)
 
-instance Raise t => Raise (Maybe t) where
-    raiseFrom m k = fmap (raiseFrom m k)
-    renameFrom m k = fmap (renameFrom m k)
+instance Subst a => Subst (Maybe a) where
+  applySubst rho = fmap (applySubst rho)
 
-instance Raise v => Raise (Map k v) where
-    raiseFrom m k = fmap (raiseFrom m k)
-    renameFrom m k = fmap (renameFrom m k)
+instance Subst a => Subst [a] where
+  applySubst rho = map (applySubst rho)
 
-instance (Raise a, Raise b) => Raise (a,b) where
-    raiseFrom m k (x,y) = (raiseFrom m k x, raiseFrom m k y)
-    renameFrom m k (x,y) = (renameFrom m k x, renameFrom m k y)
+instance Subst () where
+  applySubst _ _ = ()
 
-raise :: Raise t => Nat -> t -> t
-raise = raiseFrom 0
+instance (Subst a, Subst b) => Subst (a,b) where
+  applySubst rho (x,y) = (applySubst rho x, applySubst rho y)
 
-rename :: Raise t => (Nat -> Nat) -> t -> t
-rename = renameFrom 0
+instance Subst ClauseBody where
+  applySubst rho (Body t) = Body $ applySubst rho t
+  applySubst rho (Bind b) = Bind $ applySubst rho b
+  applySubst _   NoBody   = NoBody
 
-data TelV a = TelV (Tele (Arg a)) a
-  deriving (Typeable, Data, Show, Eq, Ord, Functor)
+data TelV a = TelV (Tele (Dom a)) a
+  deriving (Typeable, Show, Eq, Ord, Functor)
 
 type TelView = TelV Type
--- data TelView = TelV Telescope Type
 
-telFromList :: [Arg (String, Type)] -> Telescope
-telFromList = foldr (\(Arg h r (x, a)) -> ExtendTel (Arg h r a) . Abs x) EmptyTel
+telFromList :: [Dom (String, Type)] -> Telescope
+telFromList = foldr (\(Dom h r (x, a)) -> ExtendTel (Dom h r a) . Abs x) EmptyTel
 
-telToList :: Telescope -> [Arg (String, Type)]
+telToList :: Telescope -> [Dom (String, Type)]
 telToList EmptyTel = []
 telToList (ExtendTel arg tel) = fmap ((,) $ absName tel) arg : telToList (absBody tel)
 
 telView' :: Type -> TelView
-telView' t = case unEl t of
+telView' t = case ignoreSharing $ unEl t of
   Pi a b  -> absV a (absName b) $ telView' (absBody b)
   _       -> TelV EmptyTel t
   where
     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t
 
+-- | @mkPi dom t = telePi (telFromList [dom]) t@
+mkPi :: Dom (String, Type) -> Type -> Type
+mkPi (Dom h r (x, a)) b = el $ Pi (Dom h r a) (mkAbs x b)
+  where
+    el = El $ dLub (getSort a) (Abs x (getSort b)) -- dLub checks x freeIn
+
 telePi :: Telescope -> Type -> Type
 telePi  EmptyTel         t = t
 telePi (ExtendTel u tel) t = el $ Pi u (reAbs b)
   where
     el = El (dLub s1 s2)
     b = fmap (flip telePi t) tel
-    s1 = getSort $ unArg u
+    s1 = getSort $ unDom u
     s2 = fmap getSort b
 
 -- | Everything will be a pi.
@@ -672,12 +587,12 @@
   where
     el = El (dLub s1 s2)
     b  = fmap (flip telePi_ t) tel
-    s1 = getSort $ unArg u
+    s1 = getSort $ unDom u
     s2 = fmap getSort b
 
 teleLam :: Telescope -> Term -> Term
 teleLam  EmptyTel	  t = t
-teleLam (ExtendTel u tel) t = Lam (argHiding u) $ flip teleLam t <$> tel
+teleLam (ExtendTel u tel) t = Lam (domHiding u) $ flip teleLam t <$> tel
 
 -- | Dependent least upper bound, to assign a level to expressions
 --   like @forall i -> Set i@.
@@ -687,7 +602,9 @@
 dLub s1 (NoAbs _ s2) = sLub s1 s2
 dLub s1 b@(Abs _ s2) = case occurrence 0 $ freeVars s2 of
   Flexible      -> DLub s1 b
+  Irrelevantly  -> DLub s1 b
   NoOccurrence  -> sLub s1 (absApp b __IMPOSSIBLE__)
+  Free.Unused   -> sLub s1 (absApp b __IMPOSSIBLE__)
   StronglyRigid -> Inf
   WeaklyRigid   -> Inf
 
@@ -699,26 +616,47 @@
 absApp (Abs   _ v) u = subst u v
 absApp (NoAbs _ v) _ = v
 
-absBody :: Raise t => Abs t -> t
+absBody :: Subst t => Abs t -> t
 absBody (Abs   _ v) = v
 absBody (NoAbs _ v) = raise 1 v
 
-mkAbs :: (Raise a, Free a) => String -> a -> Abs a
+mkAbs :: (Subst a, Free a) => String -> a -> Abs a
 mkAbs x v | 0 `freeIn` v = Abs x v
           | otherwise    = NoAbs x (raise (-1) v)
 
-reAbs :: (Raise a, Free a) => Abs a -> Abs a
+reAbs :: (Subst a, Free a) => Abs a -> Abs a
 reAbs (NoAbs x v) = NoAbs x v
 reAbs (Abs x v)   = mkAbs x v
 
-deriving instance (Raise a, Eq a) => Eq (Tele a)
-deriving instance (Raise a, Ord a) => Ord (Tele a)
+-- | @underAbs k a b@ applies @k@ to @a@ and the content of
+--   abstraction @b@ and puts the abstraction back.
+--   @a@ is raised if abstraction was proper such that
+--   at point of application of @k@ and the content of @b@
+--   are at the same context.
+--   Precondition: @a@ and @b@ are at the same context at call time.
+underAbs :: Subst a => (a -> b -> b) -> a -> Abs b -> Abs b
+underAbs cont a b = case b of
+  Abs   x t -> Abs   x $ cont (raise 1 a) t
+  NoAbs x t -> NoAbs x $ cont a t
 
+-- | @underLambdas n k a b@ drops @n@ initial 'Lam's from @b@,
+--   performs operation @k@ on @a@ and the body of @b@,
+--   and puts the 'Lam's back.  @a@ is raised correctly
+--   according to the number of abstractions.
+underLambdas :: Subst a => Int -> (a -> Term -> Term) -> a -> Term -> Term
+underLambdas n cont a v = loop n a v where
+  loop 0 a v = cont a v
+  loop n a v = case ignoreSharing v of
+    Lam h b -> Lam h $ underAbs (loop $ n-1) a b
+    _       -> __IMPOSSIBLE__
+
+deriving instance (Subst a, Eq a) => Eq (Tele a)
+deriving instance (Subst a, Ord a) => Ord (Tele a)
+
 deriving instance Eq Sort
 deriving instance Ord Sort
 deriving instance Eq Type
 deriving instance Ord Type
-deriving instance Ord Term
 deriving instance Eq Level
 deriving instance Ord Level
 deriving instance Eq PlusLevel
@@ -750,14 +688,50 @@
   Level l    == Level l'     = l == l'
   MetaV m vs == MetaV m' vs' = m == m' && vs == vs'
   DontCare _ == DontCare _   = True
+  Shared p   == Shared q     = p == q || derefPtr p == derefPtr q
+  Shared p   == b            = derefPtr p == b
+  a          == Shared q     = a == derefPtr q
   _          == _            = False
 
-instance (Raise a, Eq a) => Eq (Abs a) where
+instance Ord Term where
+  Shared a   `compare` Shared x | a == x = EQ
+  Shared a   `compare` x          = compare (derefPtr a) x
+  a          `compare` Shared x   = compare a (derefPtr x)
+  Var a b    `compare` Var x y    = compare (a, b) (x, y)
+  Var{}      `compare` _          = LT
+  _          `compare` Var{}      = GT
+  Def a b    `compare` Def x y    = compare (a, b) (x, y)
+  Def{}      `compare` _          = LT
+  _          `compare` Def{}      = GT
+  Con a b    `compare` Con x y    = compare (a, b) (x, y)
+  Con{}      `compare` _          = LT
+  _          `compare` Con{}      = GT
+  Lit a      `compare` Lit x      = compare a x
+  Lit{}      `compare` _          = LT
+  _          `compare` Lit{}      = GT
+  Lam a b    `compare` Lam x y    = compare (a, b) (x, y)
+  Lam{}      `compare` _          = LT
+  _          `compare` Lam{}      = GT
+  Pi a b     `compare` Pi x y     = compare (a, b) (x, y)
+  Pi{}       `compare` _          = LT
+  _          `compare` Pi{}       = GT
+  Sort a     `compare` Sort x     = compare a x
+  Sort{}     `compare` _          = LT
+  _          `compare` Sort{}     = GT
+  Level a    `compare` Level x    = compare a x
+  Level{}    `compare` _          = LT
+  _          `compare` Level{}    = GT
+  MetaV a b  `compare` MetaV x y  = compare (a, b) (x, y)
+  MetaV{}    `compare` _          = LT
+  _          `compare` MetaV{}    = GT
+  DontCare{} `compare` DontCare{} = EQ
+
+instance (Subst a, Eq a) => Eq (Abs a) where
   NoAbs _ a == NoAbs _ b = a == b
   Abs   _ a == Abs   _ b = a == b
   a         == b         = absBody a == absBody b
 
-instance (Raise a, Ord a) => Ord (Abs a) where
+instance (Subst a, Ord a) => Ord (Abs a) where
   NoAbs _ a `compare` NoAbs _ b = a `compare` b
   Abs   _ a `compare` Abs   _ b = a `compare` b
   a         `compare` b         = absBody a `compare` absBody b
@@ -774,9 +748,10 @@
 sLub a (DLub b c) = DLub (sLub a b) c
 
 lvlView :: Term -> Level
-lvlView (Level l)       = l
-lvlView (Sort (Type l)) = l
-lvlView v               = Max [Plus 0 $ UnreducedLevel v]
+lvlView v = case ignoreSharing v of
+  Level l       -> l
+  Sort (Type l) -> l
+  _             -> Max [Plus 0 $ UnreducedLevel v]
 
 levelMax :: [PlusLevel] -> Level
 levelMax as0 = Max $ ns ++ List.sort bs
@@ -784,10 +759,10 @@
     as = Prelude.concatMap expand as0
     ns = case [ n | ClosedLevel n <- as, n > 0 ] of
       []  -> []
-      ns  -> [ ClosedLevel n | n <- [Prelude.maximum ns], n > leastB ]
+      ns  -> [ ClosedLevel n | n <- [Prelude.maximum ns], n > greatestB ]
     bs = subsume [ b | b@Plus{} <- as ]
-    leastB | null bs   = 0
-           | otherwise = Prelude.minimum [ n | Plus n _ <- bs ]
+    greatestB | null bs   = 0
+              | otherwise = Prelude.maximum [ n | Plus n _ <- bs ]
 
     expand l@ClosedLevel{} = [l]
     expand (Plus n l) = map (plus n) $ expand0 $ expandAtom l
@@ -795,13 +770,16 @@
     expand0 [] = [ClosedLevel 0]
     expand0 as = as
 
-    expandAtom (BlockedLevel _ (Level (Max as)))       = as
-    expandAtom (NeutralLevel   (Level (Max as)))       = as
-    expandAtom (UnreducedLevel (Level (Max as)))       = as
-    expandAtom (BlockedLevel _ (Sort (Type (Max as)))) = as
-    expandAtom (NeutralLevel   (Sort (Type (Max as)))) = as
-    expandAtom (UnreducedLevel (Sort (Type (Max as)))) = as
-    expandAtom l                                       = [Plus 0 l]
+    expandAtom l = case l of
+      BlockedLevel _ v -> expandTm v
+      NeutralLevel v   -> expandTm v
+      UnreducedLevel v -> expandTm v
+      MetaLevel{}      -> [Plus 0 l]
+      where
+        expandTm v = case ignoreSharing v of
+          Level (Max as)       -> as
+          Sort (Type (Max as)) -> as
+          _                    -> [Plus 0 l]
 
     plus n (ClosedLevel m) = ClosedLevel (n + m)
     plus n (Plus m l)      = Plus (n + m) l
@@ -829,9 +807,10 @@
     infAtom MetaLevel{}        = False
     infAtom BlockedLevel{}     = False
     infTm (Sort Inf)           = True
+    infTm (Shared p)           = infTm $ derefPtr p
     infTm _                    = False
 levelSort l =
-  case levelTm l of
+  case ignoreSharing $ levelTm l of
     Sort s -> s
     _      -> Type l
 
@@ -846,3 +825,18 @@
 unLevelAtom (UnreducedLevel v) = v
 unLevelAtom (BlockedLevel _ v) = v
 
+-- Boring instances ----------------------------------------------------
+
+instance Sized Substitution where
+  size IdS          = 1
+  size EmptyS       = 1
+  size (Wk _ rho)   = 1 + size rho
+  size (t :# rho)   = 1 + size t + size rho
+  size (Lift _ rho) = 1 + size rho
+
+instance KillRange Substitution where
+  killRange IdS          = IdS
+  killRange EmptyS       = EmptyS
+  killRange (Wk n rho)   = killRange1 (Wk n) rho
+  killRange (t :# rho)   = killRange2 (:#) t rho
+  killRange (Lift n rho) = killRange1 (Lift n) rho
diff --git a/src/full/Agda/TypeChecking/Telescope.hs b/src/full/Agda/TypeChecking/Telescope.hs
--- a/src/full/Agda/TypeChecking/Telescope.hs
+++ b/src/full/Agda/TypeChecking/Telescope.hs
@@ -13,6 +13,7 @@
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Free
 
+import Agda.Utils.List
 import Agda.Utils.Permutation
 import Agda.Utils.Size
 import Agda.Utils.Tuple
@@ -22,67 +23,62 @@
 #include "../undefined.h"
 import Agda.Utils.Impossible
 
--- TODO: use rename instead of substs
 -- | The permutation should permute the corresponding telescope. (left-to-right list)
 renameP :: Subst t => Permutation -> t -> t
-renameP p = substs (renaming p)
+renameP p = applySubst (renaming p)
 
--- | If @permute π : [a]Γ -> [a]Δ@, then @substs (renaming π) : Term Γ -> Term Δ@
-renaming :: Permutation -> [Term]
+-- | If @permute π : [a]Γ -> [a]Δ@, then @applySubst (renaming π) : Term Γ -> Term Δ@
+renaming :: Permutation -> Substitution
 renaming p = gamma'
   where
     n	   = size p
     gamma  = permute (reverseP $ invertP $ reverseP p) $ map var [0..]
-    gamma' = gamma ++ map var [n..]
-    var i  = Var i []
+    gamma' = gamma ++# raiseS n
 
 -- | If @permute π : [a]Γ -> [a]Δ@, then @substs (renamingR π) : Term Δ -> Term Γ@
-renamingR :: Permutation -> [Term]
-renamingR p@(Perm n _) = permute (reverseP p) (map var [0..]) ++ map var [n..]
-  where
-    var i  = Var (fromIntegral i) []
+renamingR :: Permutation -> Substitution
+renamingR p@(Perm n _) = permute (reverseP p) (map var [0..]) ++# raiseS n
 
 -- | Flatten telescope: (Γ : Tel) -> [Type Γ]
-flattenTel :: Telescope -> [Arg Type]
+flattenTel :: Telescope -> [Dom Type]
 flattenTel EmptyTel	     = []
 flattenTel (ExtendTel a tel) = raise (size tel + 1) a : flattenTel (absBody tel)
 
 -- | Order a flattened telescope in the correct dependeny order: Γ ->
 --   Permutation (Γ -> Γ~)
-reorderTel :: [Arg Type] -> Maybe Permutation
+reorderTel :: [Dom Type] -> Maybe Permutation
 reorderTel tel = topoSort comesBefore tel'
   where
-    tel' = reverse $ zip [0..] $ reverse tel
-    (i, _) `comesBefore` (_, a) = i `freeIn` unEl (unArg a) -- a tiny bit unsafe
+    tel' = zip (downFrom $ size tel) tel
+    (i, _) `comesBefore` (_, a) = i `freeIn` unEl (unDom a) -- a tiny bit unsafe
 
-reorderTel_ :: [Arg Type] -> Permutation
+reorderTel_ :: [Dom Type] -> Permutation
 reorderTel_ tel = case reorderTel tel of
   Nothing -> __IMPOSSIBLE__
   Just p  -> p
 
 -- | Unflatten: turns a flattened telescope into a proper telescope. Must be
 --   properly ordered.
-unflattenTel :: [String] -> [Arg Type] -> Telescope
+unflattenTel :: [String] -> [Dom Type] -> Telescope
 unflattenTel []	  []	        = EmptyTel
 unflattenTel (x : xs) (a : tel) = ExtendTel a' (Abs x tel')
   where
     tel' = unflattenTel xs tel
-    a'   = substs rho a
-    rho  = replicate (size tel + 1) __IMPOSSIBLE_TERM__ ++ map var [0..]
-      where var i = Var i []
+    a'   = applySubst rho a
+    rho  = parallelS (replicate (size tel + 1) __IMPOSSIBLE_TERM__)
 unflattenTel [] (_ : _) = __IMPOSSIBLE__
 unflattenTel (_ : _) [] = __IMPOSSIBLE__
 
 -- | Get the suggested names from a telescope
 teleNames :: Telescope -> [String]
-teleNames = map (fst . unArg) . telToList
+teleNames = map (fst . unDom) . telToList
 
 teleArgNames :: Telescope -> [Arg String]
-teleArgNames = map (fmap fst) . telToList
+teleArgNames = map (argFromDom . fmap fst) . telToList
 
 teleArgs :: Telescope -> Args
-teleArgs tel =
-  reverse [ Arg h r (Var i []) | (i, Arg h r _) <- zip [0..] $ reverse (telToList tel) ]
+teleArgs tel = [ Arg h r (var i) | (i, Dom h r _) <- zip (downFrom $ size l) l ]
+  where l = telToList tel
 
 -- | A telescope split in two.
 data SplitTel = SplitTel
@@ -127,14 +123,20 @@
 telView = telViewUpTo (-1)
 
 -- | @telViewUpTo n t@ takes off the first @n@ function types of @t@.
--- Takes off all if $n < 0$.
+-- Takes off all if @n < 0@.
 telViewUpTo :: Int -> Type -> TCM TelView
-telViewUpTo 0 t = return $ TelV EmptyTel t
-telViewUpTo n t = do
+telViewUpTo n t = telViewUpTo' n (const True) t
+
+-- | @telViewUpTo' n p t@ takes off $t$
+--   the first @n@ (or arbitrary many if @n < 0@) function domains
+--   as long as they satify @p@.
+telViewUpTo' :: Int -> (Dom Type -> Bool) -> Type -> TCM TelView
+telViewUpTo' 0 p t = return $ TelV EmptyTel t
+telViewUpTo' n p t = do
   t <- reduce t
-  case unEl t of
-    Pi a b -> absV a (absName b) <$> telViewUpTo (n - 1) (absBody b)
-    _      -> return $ TelV EmptyTel t
+  case ignoreSharing $ unEl t of
+    Pi a b | p a -> absV a (absName b) <$> telViewUpTo' (n - 1) p (absBody b)
+    _            -> return $ TelV EmptyTel t
   where
     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t
 
@@ -144,6 +146,6 @@
 piApplyM t []           = return t
 piApplyM t (arg : args) = do
   t <- reduce t
-  case (t, arg) of
-    (El _ (Pi  _ b), arg) -> absApp b (unArg arg) `piApplyM` args
-    _                     -> __IMPOSSIBLE__
+  case ignoreSharing $ unEl t of
+    Pi  _ b -> absApp b (unArg arg) `piApplyM` args
+    _       -> __IMPOSSIBLE__
diff --git a/src/full/Agda/TypeChecking/Test/Generators.hs b/src/full/Agda/TypeChecking/Test/Generators.hs
--- a/src/full/Agda/TypeChecking/Test/Generators.hs
+++ b/src/full/Agda/TypeChecking/Test/Generators.hs
@@ -193,8 +193,10 @@
 
 instance GenC a => GenC (Arg a) where
   genC conf = (\ (h, a) -> Arg h Relevant a) <$> genC conf
---   genC conf = uncurry Arg <$> genC conf
 
+instance GenC a => GenC (Dom a) where
+  genC conf = (\ (h, a) -> Dom h Relevant a) <$> genC conf
+
 instance GenC a => GenC (Abs a) where
   genC conf = Abs "x" <$> genC (extendConf conf)
 
@@ -403,9 +405,12 @@
 
 instance ShrinkC a b => ShrinkC (Arg a) (Arg b) where
   shrinkC conf (Arg h r x) = (\ (h,x) -> Arg h r x) <$> shrinkC conf (h, x)
---  shrinkC conf (Arg h x) = uncurry Arg <$> shrinkC conf (h, x)
   noShrink = fmap noShrink
 
+instance ShrinkC a b => ShrinkC (Dom a) (Dom b) where
+  shrinkC conf (Dom h r x) = (\ (h,x) -> Dom h r x) <$> shrinkC conf (h, x)
+  noShrink = fmap noShrink
+
 instance ShrinkC a b => ShrinkC (Blocked a) (Blocked b) where
   shrinkC conf (Blocked m x)  = Blocked m <$> shrinkC conf x
   shrinkC conf (NotBlocked x) = NotBlocked <$> shrinkC conf x
@@ -434,7 +439,7 @@
 instance ShrinkC Term Term where
   shrinkC conf (DontCare _)  = []
   shrinkC conf (Sort Prop) = []
-  shrinkC conf t	   = filter validType $ case t of
+  shrinkC conf t	   = filter validType $ case ignoreSharing t of
     Var i args   -> map unArg args ++
 		    (uncurry Var <$> shrinkC conf (VarName i, NoType args))
     Def d args   -> map unArg args ++
@@ -444,11 +449,12 @@
     Lit l	 -> Lit <$> shrinkC conf l
     Level l      -> [] -- TODO
     Lam h b      -> killAbs b : (uncurry Lam <$> shrinkC conf (h, b))
-    Pi a b       -> unEl (unArg a) : unEl (killAbs b) :
+    Pi a b       -> unEl (unDom a) : unEl (killAbs b) :
 		    (uncurry Pi <$> shrinkC conf (a, b))
     Sort s       -> Sort <$> shrinkC conf s
     MetaV m args -> map unArg args ++ (MetaV m <$> shrinkC conf (NoType args))
     DontCare _   -> []
+    Shared{}     -> __IMPOSSIBLE__
     where
       validType t
 	| not (tcIsType conf) = True
@@ -467,7 +473,7 @@
   killVar :: Nat -> a -> a
 
 instance KillVar Term where
-  killVar i t = case t of
+  killVar i t = case ignoreSharing t of
     Var j args | j == i	   -> DontCare (Var j [])
 	       | j >  i	   -> Var (j - 1) $ killVar i args
 	       | otherwise -> Var j	  $ killVar i args
@@ -480,6 +486,7 @@
     Pi a b		   -> uncurry Pi  $ killVar i (a, b)
     MetaV m args	   -> MetaV m	  $ killVar i args
     DontCare mv            -> DontCare    $ killVar i mv
+    Shared{}               -> __IMPOSSIBLE__
 
 instance KillVar Type where
   killVar i (El s t) = El s $ killVar i t
@@ -489,6 +496,9 @@
   killVar i (ExtendTel a tel) = uncurry ExtendTel $ killVar i (a, tel)
 
 instance KillVar a => KillVar (Arg a) where
+  killVar i = fmap (killVar i)
+
+instance KillVar a => KillVar (Dom a) where
   killVar i = fmap (killVar i)
 
 instance KillVar a => KillVar (Abs a) where
diff --git a/src/full/Agda/TypeChecking/Tests.hs b/src/full/Agda/TypeChecking/Tests.hs
--- a/src/full/Agda/TypeChecking/Tests.hs
+++ b/src/full/Agda/TypeChecking/Tests.hs
@@ -62,7 +62,7 @@
       conf2 = conf1 { tcFreeVariables = map (size tel2 +) (tcFreeVariables conf1) }
       conf' = conf  { tcFreeVariables = map (size tel +) (tcFreeVariables conf) ++ vs }
   in  forAllShrink (genC conf') (shrinkC conf') $ \t ->
-      isWellScoped conf2 (substs (renamingR $ invertP perm) (t :: Term))
+      isWellScoped conf2 (applySubst (renamingR $ invertP perm) (t :: Term))
 
 {-
 -- | The permutation generated when splitting a telescope correctly translates
diff --git a/src/full/Agda/TypeChecking/UniversePolymorphism.hs b/src/full/Agda/TypeChecking/UniversePolymorphism.hs
--- a/src/full/Agda/TypeChecking/UniversePolymorphism.hs
+++ b/src/full/Agda/TypeChecking/UniversePolymorphism.hs
@@ -26,4 +26,3 @@
 
 isLevelConstraint LevelCmp{} = True
 isLevelConstraint _          = False
-
diff --git a/src/full/Agda/TypeChecking/With.hs b/src/full/Agda/TypeChecking/With.hs
--- a/src/full/Agda/TypeChecking/With.hs
+++ b/src/full/Agda/TypeChecking/With.hs
@@ -24,6 +24,7 @@
 import Agda.TypeChecking.EtaContract
 import Agda.TypeChecking.Telescope
 
+import Agda.Utils.List
 import Agda.Utils.Permutation
 import Agda.Utils.Size
 
@@ -58,12 +59,14 @@
                      Nat -> Nat -> [A.Clause] -> TCM [A.Clause]
 buildWithFunction aux gamma qs perm n1 n cs = mapM buildWithClause cs
   where
-    buildWithClause (A.Clause (LHS i _ ps wps) rhs wh) = do
+    buildWithClause (A.Clause (LHS i (A.LHSProj{}) wps) rhs wh) =
+      typeError $ NotImplemented "with clauses for definitions by copatterns"
+    buildWithClause (A.Clause (LHS i (A.LHSHead _ ps) wps) rhs wh) = do
       let (wps0, wps1) = genericSplitAt n wps
-          ps0          = map (defaultArg . unnamed) wps0
+          ps0          = map defaultNamedArg wps0
       rhs <- buildRHS rhs
       (ps1, ps2)  <- genericSplitAt n1 <$> stripWithClausePatterns gamma qs perm ps
-      let result = A.Clause (LHS i aux (ps1 ++ ps0 ++ ps2) wps1) rhs wh
+      let result = A.Clause (LHS i (A.LHSHead aux (ps1 ++ ps0 ++ ps2)) wps1) rhs wh
       reportSDoc "tc.with" 20 $ vcat
         [ text "buildWithClause returns" <+> prettyA result
         ]
@@ -90,7 +93,7 @@
 -}
 stripWithClausePatterns :: Telescope -> [Arg Pattern] -> Permutation -> [NamedArg A.Pattern] -> TCM [NamedArg A.Pattern]
 stripWithClausePatterns gamma qs perm ps = do
-  psi <- insertImplicitPatterns ps gamma
+  psi <- insertImplicitPatterns ExpandLast ps gamma
   unless (size psi == size gamma) $ fail $ "wrong number of arguments in with clause: given " ++ show (size psi) ++ ", expected " ++ show (size gamma)
   reportSDoc "tc.with.strip" 10 $ vcat
     [ text "stripping patterns"
@@ -128,36 +131,37 @@
           ps <- underAbstraction a tel $ \tel -> strip tel ps qs
           return $ p : ps
 
-        DotP v  -> case namedThing $ unArg p of
+        DotP v  -> case namedArg p of
           A.DotP _ _    -> ok
           A.ImplicitP _ -> ok
           _ -> do
             d <- prettyA p
             typeError $ GenericError $
                 "Inaccessible (dotted) patterns from the parent clause must " ++
-                "also be inaccesible in the with clause, when checking the " ++
+                "also be inaccessible in the with clause, when checking the " ++
                 "pattern " ++ show d ++ ","
           where
             ok = do
               ps <- strip (tel `absApp` v) ps qs
               return $ p : ps
 
-        ConP c _ qs' -> case namedThing $ unArg p of
+        ConP c _ qs' -> case namedArg p of
           A.ConP _ (A.AmbQ cs') ps' -> do
 
-            Con c' [] <- constructorForm =<< reduce (Con c [])
+            Con c' [] <- ignoreSharing <$> (constructorForm =<< reduce (Con c []))
             c <- return $ c' `withRangeOf` c
             let getCon (Con c []) = c
+                getCon (Shared p) = getCon (derefPtr p)
                 getCon _ = __IMPOSSIBLE__
             cs' <- map getCon <$> (mapM constructorForm =<< mapM (\c' -> reduce $ Con c' []) cs')
 
             unless (elem c cs') mismatch
 
             -- The type is a datatype
-            Def d us <- normalise $ unEl (unArg a)
+            Def d us <- ignoreSharing <$> normalise (unEl $ unDom a)
 
             -- Compute the argument telescope for the constructor
-            Con c []    <- constructorForm =<< normalise (Con c [])
+            Con c []    <- ignoreSharing <$> (constructorForm =<< normalise (Con c []))
             Defn {defType = ct, theDef = Constructor{conPars = np}}  <- getConstInfo c
             let ct' = ct `apply` genericTake np us
             TelV tel' _ <- telView ct'
@@ -171,7 +175,8 @@
                    ]
 
             -- Compute the new telescope
-            let v     = Con c $ reverse [ Arg h r (Var i []) | (i, Arg h r _) <- zip [0..] $ reverse qs' ]
+            let v     = Con c [ Arg h r (var i) | (i, Arg h r _) <- zip (downFrom $ size qs') qs' ]
+--            let v     = Con c $ reverse [ Arg h r (var i) | (i, Arg h r _) <- zip [0..] $ reverse qs' ]
                 tel'' = tel' `abstract` absApp (raise (size tel') tel) v
 
             reportSDoc "tc.with.strip" 15 $ sep
@@ -181,26 +186,28 @@
               ]
 
             -- Insert implicit patterns (just for the constructor arguments)
-            psi' <- insertImplicitPatterns ps' tel'
+            psi' <- insertImplicitPatterns ExpandLast ps' tel'
             unless (size psi' == size tel') $ typeError $ WrongNumberOfConstructorArguments c (size tel') (size psi')
 
             -- Do it again for everything (is this necessary?)
-            psi' <- insertImplicitPatterns (psi' ++ ps) tel''
+            psi' <- insertImplicitPatterns ExpandLast (psi' ++ ps) tel''
 
             -- Keep going
             strip tel'' psi' (qs' ++ qs)
           _ -> mismatch
 
-        LitP lit -> case namedThing $ unArg p of
+        LitP lit -> case namedArg p of
           A.LitP lit' | lit == lit' -> strip (tel `absApp` Lit lit) ps qs
           _ -> mismatch
       where
-        mismatch = typeError $ WithClausePatternMismatch (namedThing $ unArg p0) (unArg q)
+        mismatch = typeError $ WithClausePatternMismatch (namedArg p0) (unArg q)
     strip tel ps qs = error $ "huh? " ++ show (size tel) ++ " " ++ show (size ps) ++ " " ++ show (size qs)
 
 -- | Construct the display form for a with function. It will display
 --   applications of the with function as applications to the original function.
 --   For instance, @aux a b c@ as @f (suc a) (suc b) | c@
+--
+--   @n@ is the number of with arguments.
 withDisplayForm :: QName -> QName -> Telescope -> Telescope -> Nat -> [Arg Pattern] -> Permutation -> TCM DisplayForm
 withDisplayForm f aux delta1 delta2 n qs perm@(Perm m _) = do
   topArgs <- raise (n + size delta1 + size delta2) <$> getContextArgs
@@ -208,15 +215,20 @@
   let wild = Def (qualify (mnameFromList []) x) []
 
   let top = genericLength topArgs
-      vs = map (fmap DTerm) topArgs ++ (substs (sub ys wild) $ patsToTerms qs)
+      vs = map (fmap DTerm) topArgs ++ (applySubst (sub ys wild) $ patsToTerms qs)
       dt = DWithApp (DDef f vs : map DTerm withArgs) []
-      withArgs = reverse $ map var [size delta2..size delta2 + n - 1]
-      pats = genericReplicate (n + size delta1 + size delta2 + top) (Var 0 [])
+      withArgs = map var $ genericTake n $ downFrom $ size delta2 + n
+--      withArgs = reverse $ map var [size delta2..size delta2 + n - 1]
+      pats = genericReplicate (n + size delta1 + size delta2 + top) (var 0)
       -- Building the arguments to the with function
       (ys0, ys1) = splitAt (size delta1) (permute perm $ map Just [m - 1, m - 2..0])
       ys = reverse $ ys0 ++ genericReplicate n Nothing ++ ys1
 
   let display = Display (n + size delta1 + size delta2 + top) pats dt
+      addFullCtx = addCtxTel delta1
+                 . flip (foldr addCtxString_) (map ("w" ++) $ map show [1..n])
+                 . addCtxTel delta2
+          -- Andreas 2012-09-17: this seems to be the right order of contexts
 
   reportSDoc "tc.with.display" 20 $ vcat
     [ text "withDisplayForm"
@@ -224,40 +236,39 @@
       [ text "f      =" <+> text (show f)
       , text "aux    =" <+> text (show aux)
       , text "delta1 =" <+> prettyTCM delta1
-      , text "delta2 =" <+> prettyTCM delta2
+      , text "delta2 =" <+> do addCtxTel delta1 $ prettyTCM delta2
       , text "n      =" <+> text (show n)
       , text "perm   =" <+> text (show perm)
-      , text "top    =" <+> prettyTCM topArgs
+      , text "top    =" <+> do addFullCtx $ prettyTCM topArgs
       , text "qs     =" <+> text (show qs)
-      , text "dt     =" <+> prettyTCM dt
+      , text "dt     =" <+> do addFullCtx $ prettyTCM dt
       , text "ys     =" <+> text (show ys)
       , text "raw    =" <+> text (show display)
-      , text "qsToTm =" <+> prettyTCM (patsToTerms qs)
-      , text "sub qs =" <+> prettyTCM (substs (sub ys wild) $ patsToTerms qs)
+      , text "qsToTm =" <+> prettyTCM (patsToTerms qs) -- ctx would be permuted form of delta1 ++ delta2
+      , text "sub qs =" <+> prettyTCM (applySubst (sub ys wild) $ patsToTerms qs)
       ]
     ]
 
   return display
   where
-    var i = Var i []
-    sub rho wild = map term [0..] -- m - 1]
+    -- Note: The upper bound (m - 1) was previously commented out. I
+    -- restored it in order to make the substitution finite.
+    sub rho wild = parallelS $ map term [0 .. m - 1]
       where
         -- thinking required.. but ignored
         -- dropping the reverse seems to work better
         -- Andreas, 2010-09-09: I DISAGREE.
         -- Ulf, 2011-09-02: Thinking done. Neither was correct.
         -- We had the wrong permutation and we used it incorrectly. Should work now.
-        term i = case findIndex (Just i ==) rho of
-          Nothing -> wild
-          Just j  -> Var (fromIntegral j) []
+        term i = maybe wild var $ findIndex (Just i ==) rho
 
 patsToTerms :: [Arg Pattern] -> [Arg DisplayTerm]
 patsToTerms ps = evalState (toTerms ps) 0
   where
     mapMr f xs = reverse <$> mapM f (reverse xs)
 
-    var :: State Nat Nat
-    var = do
+    nextVar :: State Nat Nat
+    nextVar = do
       i <- get
       put (i + 1)
       return i
@@ -270,7 +281,7 @@
 
     toTerm :: Pattern -> State Nat DisplayTerm
     toTerm p = case p of
-      VarP _      -> var >>= \i -> return $ DTerm (Var i [])
+      VarP _      -> nextVar >>= \i -> return $ DTerm (var i)
       DotP t      -> return $ DDot t
       ConP c _ ps -> DCon c <$> toTerms ps
       LitP l      -> return $ DTerm (Lit l)
diff --git a/src/full/Agda/Utils/Either.hs b/src/full/Agda/Utils/Either.hs
--- a/src/full/Agda/Utils/Either.hs
+++ b/src/full/Agda/Utils/Either.hs
@@ -5,7 +5,8 @@
 ------------------------------------------------------------------------
 
 module Agda.Utils.Either
-  ( isLeft, isRight
+  ( mapEither, mapLeft, mapRight
+  , isLeft, isRight
   , allRight
   , tests
   ) where
@@ -16,6 +17,21 @@
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
+
+-- | 'Either' is a bifunctor.
+
+mapEither :: (a -> c) -> (b -> d) -> Either a b -> Either c d
+mapEither f g = either (Left . f) (Right . g)
+
+-- | 'Either _ b' is a functor.
+
+mapLeft :: (a -> c) -> Either a b -> Either c b
+mapLeft f = mapEither f id
+
+-- | 'Either a' is a functor.
+
+mapRight :: (b -> d) -> Either a b -> Either a d
+mapRight = mapEither id
 
 -- | Returns 'True' iff the argument is @'Right' x@ for some @x@.
 
diff --git a/src/full/Agda/Utils/FileName.hs b/src/full/Agda/Utils/FileName.hs
--- a/src/full/Agda/Utils/FileName.hs
+++ b/src/full/Agda/Utils/FileName.hs
@@ -7,13 +7,14 @@
   , mkAbsolute
   , absolute
   , (===)
+  , doesFileExistCaseSensitive
   , tests
   ) where
 
 import Agda.Utils.TestHelpers
 import Agda.Utils.QuickCheck
 import Data.Function
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.List
 import Data.Maybe
 import Control.Applicative
@@ -21,6 +22,11 @@
 import System.Directory
 import System.FilePath
 
+#if mingw32_HOST_OS
+import Control.Exception (bracket)
+import System.Win32 (findFirstFile, findClose, getFindDataFileName)
+#endif
+
 #include "../undefined.h"
 import Agda.Utils.Impossible
 
@@ -30,8 +36,11 @@
 -- paths point to the same files or directories.
 
 newtype AbsolutePath = AbsolutePath { filePath :: FilePath }
-  deriving (Show, Eq, Ord, Typeable, Data)
+  deriving (Eq, Ord, Typeable)
 
+instance Show AbsolutePath where
+  show = filePath
+
 -- | The paths have to be absolute, valid and normalised, without
 -- trailing path separators.
 
@@ -93,6 +102,22 @@
 
 (===) :: AbsolutePath -> AbsolutePath -> Bool
 (===) = equalFilePath `on` filePath
+
+-- | Case-sensitive doesFileExist for Windows.
+-- This is case-sensitive only on the file name part, not on the directory part.
+-- (Ideally, path components coming from module name components should be
+--  checked case-sensitively and the other path components should be checked
+--  case insenstively.)
+doesFileExistCaseSensitive :: FilePath -> IO Bool
+#if mingw32_HOST_OS
+doesFileExistCaseSensitive f = do
+  ex <- doesFileExist f
+  if ex then bracket (findFirstFile f) (findClose . fst) $
+               fmap (takeFileName f ==) . getFindDataFileName . snd
+        else return False
+#else
+doesFileExistCaseSensitive f = doesFileExist f
+#endif
 
 ------------------------------------------------------------------------
 -- Generators
diff --git a/src/full/Agda/Utils/Generics.hs b/src/full/Agda/Utils/Generics.hs
deleted file mode 100644
--- a/src/full/Agda/Utils/Generics.hs
+++ /dev/null
@@ -1,39 +0,0 @@
-{-# LANGUAGE Rank2Types #-}
-{-| Contains some generic utility functions and reexports certain
-    definitions from "Data.Generics".
--}
-module Agda.Utils.Generics
-  ( module Data.Generics
-  , isString
-  , everythingBut
-  , everywhereBut'
-  , everywhereButM'
-  ) where
-
--- The explicit import list is included in order to support several
--- versions of syb; one version of syb contains a definition named
--- everythingBut.
-import Data.Generics
-  (GenericQ, mkQ, extQ, gmapQ, GenericT, gmapT, GenericM, gmapM)
-
-isString :: GenericQ Bool
-isString = mkQ False (const True :: String -> Bool)
-
-everythingBut :: (r -> r -> r) -> GenericQ Bool -> GenericQ r -> GenericQ r
-everythingBut (+) stop collect x
-    | stop x	= collect x
-    | otherwise	= foldr1 (+) $
-		    collect x : gmapQ (everythingBut (+) stop collect) x
-
--- | Same as everywhereBut except that when the stop condition becomes
---   true, the function is called on the top level term (but not on the
---   children).
-everywhereBut' :: GenericQ Bool -> GenericT -> GenericT
-everywhereBut' q f x
-    | q x       = f x
-    | otherwise = f (gmapT (everywhereBut' q f) x)
-
-everywhereButM' :: Monad m => GenericQ Bool -> GenericM m -> GenericM m
-everywhereButM' q f x
-    | q x	= f x
-    | otherwise	= f =<< gmapM (everywhereButM' q f) x
diff --git a/src/full/Agda/Utils/Geniplate.hs b/src/full/Agda/Utils/Geniplate.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/Geniplate.hs
@@ -0,0 +1,43 @@
+{-# LANGUAGE TemplateHaskell #-}
+
+-- | Utilities related to Geniplate.
+
+module Agda.Utils.Geniplate
+  ( instanceUniverseBiT'
+  , instanceTransformBiMT'
+  , dontDescendInto
+  ) where
+
+import Data.Generics.Geniplate
+import Data.Map (Map)
+
+import qualified Agda.Syntax.Abstract.Name as A
+import qualified Agda.Syntax.Concrete.Name as C
+import qualified Agda.Syntax.Scope.Base as S
+
+-- | Types which Geniplate should not descend into.
+
+dontDescendInto =
+  [ [t| String |]
+  , [t| A.QName |]
+  , [t| A.Name |]
+  , [t| C.Name |]
+  , [t| S.ScopeInfo |]
+  , [t| Map A.QName A.QName |]
+  , [t| Map A.ModuleName A.ModuleName |]
+  , [t| A.AmbiguousQName |]
+  ]
+
+-- | A localised instance of 'instanceUniverseBiT'. The generated
+-- 'universeBi' functions neither descend into the types in
+-- 'dontDescendInto', nor into the types in the list argument.
+
+instanceUniverseBiT' ts p =
+  instanceUniverseBiT (ts ++ dontDescendInto) p
+
+-- | A localised instance of 'instanceTransformBiMT'. The generated
+-- 'transformBiM' functions neither descend into the types in
+-- 'dontDescendInto', nor into the types in the list argument.
+
+instanceTransformBiMT' ts p =
+  instanceTransformBiMT (ts ++ dontDescendInto) p
diff --git a/src/full/Agda/Utils/Graph.hs b/src/full/Agda/Utils/Graph.hs
--- a/src/full/Agda/Utils/Graph.hs
+++ b/src/full/Agda/Utils/Graph.hs
@@ -1,45 +1,132 @@
-{-# LANGUAGE DeriveFunctor #-}
-module Agda.Utils.Graph where
+{-# LANGUAGE DeriveFunctor, GeneralizedNewtypeDeriving #-}
 
+module Agda.Utils.Graph
+  ( Graph(..)
+  , invariant
+  , edges
+  , edgesFrom
+  , nodes
+  , filterEdges
+  , fromNodes
+  , fromList
+  , empty
+  , singleton
+  , insert
+  , removeNode
+  , removeEdge
+  , union
+  , unions
+  , Agda.Utils.Graph.lookup
+  , neighbours
+  , sccs'
+  , sccs
+  , acyclic
+  , transitiveClosure1
+  , transitiveClosure
+  , findPath
+  , allPaths
+  , nodeIn
+  , edgeIn
+  , tests
+  )
+  where
+
+import Control.Applicative ((<$>), (<*>))
+
+import Data.Function
+import qualified Data.Graph as Graph
+import qualified Data.List as List
 import qualified Data.Map as Map
-import qualified Data.Set as Set
 import Data.Map (Map)
+import qualified Data.Maybe as Maybe
+import qualified Data.Set as Set
 import Data.Set (Set)
 
+import qualified Agda.Utils.Map as Map
+import Agda.Utils.QuickCheck
 import Agda.Utils.SemiRing
+import Agda.Utils.TestHelpers
 
 -- Only one edge between any two nodes.
 newtype Graph n e = Graph { unGraph :: Map n (Map n e) }
-  deriving (Eq, Functor)
+  deriving (Eq, Functor, Show)
 
+-- | A structural invariant for the graphs.
+
+invariant :: Ord n => Graph n e -> Bool
+invariant g = connectedNodes `Set.isSubsetOf` nodes g
+  where
+  connectedNodes =
+    Set.fromList $ concatMap (\(a, b, _) -> [a, b]) $ edges g
+
 edges :: Ord n => Graph n e -> [(n, n, e)]
 edges g = concatMap onNode $ Map.assocs $ unGraph g
   where
     onNode (from, es) = map (onNeighbour from) $ Map.assocs es
     onNeighbour from (to, w) = (from, to, w)
 
+-- | All edges originating in the given nodes.
+
+edgesFrom :: Ord n => Graph n e -> [n] -> [(n, n, e)]
+edgesFrom (Graph g) ns =
+  concat $
+  Maybe.catMaybes $
+  map (\n1 -> fmap (\m -> map (\(n2, w) -> (n1, n2, w)) (Map.assocs m))
+                   (Map.lookup n1 g))
+      ns
+
+-- | Returns all the nodes in the graph.
+
 nodes :: Ord n => Graph n e -> Set n
-nodes = Set.fromList . concatMap f . edges
-  where f (a, b, _) = [a, b]
+nodes g = Map.keysSet (unGraph g)
 
+-- | Constructs a completely disconnected graph containing the given
+-- nodes.
+
+fromNodes :: Ord n => [n] -> Graph n e
+fromNodes = Graph . Map.fromList . map (\n -> (n, Map.empty))
+
+prop_nodes_fromNodes ns = nodes (fromNodes ns) == Set.fromList ns
+
 fromList :: (SemiRing e, Ord n) => [(n, n, e)] -> Graph n e
 fromList es = unions [ singleton a b w | (a, b, w) <- es ]
 
 empty :: Graph n e
 empty = Graph Map.empty
 
-singleton :: n -> n -> e -> Graph n e
-singleton a b w = Graph $ Map.singleton a (Map.singleton b w)
+singleton :: Ord n => n -> n -> e -> Graph n e
+singleton a b w =
+  Graph $ Map.insert a (Map.singleton b w) $ Map.singleton b Map.empty
 
 insert :: (SemiRing e, Ord n) => n -> n -> e -> Graph n e -> Graph n e
-insert from to w g = union (singleton from to w) g
+insert from to w g = union g (singleton from to w)
 
+-- | Removes the given node, and all corresponding edges, from the
+-- graph.
+
+removeNode :: Ord n => n -> Graph n e -> Graph n e
+removeNode n (Graph g) =
+  Graph $ Map.delete n $ Map.map (Map.delete n) g
+
+-- | @removeEdge n1 n2 g@ removes the edge going from @n1@ to @n2@, if
+-- any.
+
+removeEdge :: Ord n => n -> n -> Graph n e -> Graph n e
+removeEdge n1 n2 (Graph g) =
+  Graph $ Map.adjust (Map.delete n2) n1 g
+
+filterEdges :: Ord n => (e -> Bool) -> Graph n e -> Graph n e
+filterEdges f (Graph g) = Graph $ Map.mapMaybe filt g
+  where filt m =
+         let m' = Map.filter f m
+         in  if Map.null m' then Nothing else Just m'
+
 union :: (SemiRing e, Ord n) => Graph n e -> Graph n e -> Graph n e
 union (Graph g1) (Graph g2) =
   Graph $ Map.unionWith (Map.unionWith oplus) g1 g2
 
 unions :: (SemiRing e, Ord n) => [Graph n e] -> Graph n e
-unions = foldr union empty
+unions = List.foldl' union empty
 
 lookup :: Ord n => n -> n -> Graph n e -> Maybe e
 lookup a b g = Map.lookup b =<< Map.lookup a (unGraph g)
@@ -47,27 +134,99 @@
 neighbours :: Ord n => n -> Graph n e -> [(n, e)]
 neighbours a g = maybe [] Map.assocs $ Map.lookup a $ unGraph g
 
-growGraph :: (SemiRing e, Ord n) => Graph n e -> Graph n e
-growGraph g = foldr union g $ map newEdges $ edges g
+-- | The graph's strongly connected components, in reverse topological
+-- order.
+
+sccs' :: Ord n => Graph n e -> [Graph.SCC n]
+sccs' g =
+  Graph.stronglyConnComp .
+  map (\n -> (n, n, map fst $ neighbours n g)) .
+  Set.toList .
+  nodes $
+  g
+
+-- | The graph's strongly connected components, in reverse topological
+-- order.
+
+sccs :: Ord n => Graph n e -> [[n]]
+sccs = map Graph.flattenSCC . sccs'
+
+-- | Returns @True@ iff the graph is acyclic.
+
+acyclic :: Ord n => Graph n e -> Bool
+acyclic = all isAcyclic . sccs'
   where
+  isAcyclic Graph.AcyclicSCC{} = True
+  isAcyclic Graph.CyclicSCC{}  = False
+
+-- | Computes the transitive closure of the graph.
+--
+-- Note that this algorithm is not guaranteed to be correct (or
+-- terminate) for arbitrary semirings.
+--
+-- This function operates on the entire graph at once.
+
+transitiveClosure1 :: (Eq e, SemiRing e, Ord n) =>
+                      Graph n e -> Graph n e
+transitiveClosure1 = loop
+  where
+  loop g | g == g'   = g
+         | otherwise = loop g'
+    where g' = growGraph g
+
+  growGraph g = List.foldl' union g $ map newEdges $ edges g
+    where
     newEdges (a, b, w) = case Map.lookup b (unGraph g) of
-        Just es -> Graph $ Map.singleton a $ Map.map (otimes w) es
-        Nothing -> empty
+      Just es -> Graph $ Map.singleton a $ Map.map (otimes w) es
+      Nothing -> empty
 
+-- | Computes the transitive closure of the graph.
+--
+-- Note that this algorithm is not guaranteed to be correct (or
+-- terminate) for arbitrary semirings.
+--
+-- This function operates on one strongly connected component at a
+-- time.
+
 transitiveClosure :: (Eq e, SemiRing e, Ord n) => Graph n e -> Graph n e
-transitiveClosure g = loop g
-  where -- n = Set.size $ nodes g
-    loop g | g == g'   = g
-           | otherwise = loop g'
-      where
-        g' = growGraph g
+transitiveClosure g = List.foldl' extend g $ sccs' g
+  where
+  edgesFrom' g ns = (g, edgesFrom g ns)
 
+  extend g (Graph.AcyclicSCC scc) = fst $ growGraph [scc] (edgesFrom' g [scc])
+  extend g (Graph.CyclicSCC  scc) = loop (edgesFrom' g scc)
+    where
+    loop g | equal g g' = fst g
+           | otherwise  = loop g'
+      where g' = growGraph scc g
 
+    equal = (==) `on` snd
+
+  growGraph scc (g, es) =
+    edgesFrom' (List.foldl' union g $ map newEdges es) scc
+    where
+    newEdges (a, b, w) = case Map.lookup b (unGraph g) of
+      Just es -> Graph $ Map.singleton a $ Map.map (otimes w) es
+      Nothing -> empty
+
+prop_transitiveClosure g = label sccInfo $
+  transitiveClosure g == transitiveClosure1 g
+  where
+  sccInfo =
+    (if noSCCs <= 3 then "   " ++ show noSCCs
+                    else ">= 4") ++
+    " strongly connected component(s)"
+    where noSCCs = length (sccs g)
+
 findPath :: (SemiRing e, Ord n) => (e -> Bool) -> n -> n -> Graph n e -> Maybe e
 findPath good a b g = case filter good $ allPaths good a b g of
   []    -> Nothing
   w : _ -> Just w
 
+-- | @allPaths classify a b g@ returns a list of pathes (accumulated edge weights)
+--   from node @a@ to node @b@ in @g@.
+--   Alternative intermediate pathes are only considered if they
+--   are distinguished by the @classify@ function.
 allPaths :: (SemiRing e, Ord n, Ord c) => (e -> c) -> n -> n -> Graph n e -> [e]
 allPaths classify a b g = paths Set.empty a
   where
@@ -81,3 +240,78 @@
           where tag = (c, classify w)
                 found | b == c    = [w]
                       | otherwise = []
+
+------------------------------------------------------------------------
+-- Utilities used to test the code above
+
+instance (Ord n, SemiRing e, Arbitrary n, Arbitrary e) =>
+         Arbitrary (Graph n e) where
+  arbitrary = do
+    nodes <- sized $ \n -> resize (isqrt n) arbitrary
+    edges <- mapM (\(n1, n2) -> (\w -> (n1, n2, w)) <$> arbitrary) =<<
+                  listOfElements ((,) <$> nodes <*> nodes)
+    return (fromList edges `union` fromNodes nodes)
+    where
+    isqrt :: Int -> Int
+    isqrt = round . sqrt . fromIntegral
+
+  shrink g =
+    [ removeNode n g     | n <- Set.toList $ nodes g ] ++
+    [ removeEdge n1 n2 g | (n1, n2, _) <- edges g ]
+
+-- | Generates a node from the graph. (Unless the graph is empty.)
+
+nodeIn :: (Ord n, Arbitrary n) => Graph n e -> Gen n
+nodeIn g = elementsUnlessEmpty (Set.toList $ nodes g)
+
+-- | Generates an edge from the graph. (Unless the graph contains no
+-- edges.)
+
+edgeIn :: (Ord n, Arbitrary n, Arbitrary e) =>
+          Graph n e -> Gen (n, n, e)
+edgeIn g = elementsUnlessEmpty (edges g)
+
+-- | Used to test 'transitiveClosure' and 'transitiveClosure1'.
+
+type G = Graph Int E
+
+-- | Used to test 'transitiveClosure' and 'transitiveClosure1'.
+
+newtype E = E { unE :: Bool }
+  deriving (Arbitrary, Eq, Show)
+
+instance SemiRing E where
+  oplus  (E x) (E y) = E (x || y)
+  otimes (E x) (E y) = E (x && y)
+
+-- | All tests.
+
+tests :: IO Bool
+tests = runTests "Agda.Utils.Graph"
+
+    -- Make sure that the invariant is established/preserved.
+  [ quickCheck' invariant'
+  , quickCheck' (all invariant' . shrink)
+  , quickCheck' (invariant' . fromNodes)
+  , quickCheck' (invariant' . fromList)
+  , quickCheck' (invariant' empty)
+  , quickCheck' (\n1 n2 w -> invariant' (singleton n1 n2 w))
+  , quickCheck' (\n1 n2 w g -> invariant' (insert n1 n2 w g))
+  , quickCheck' (\g n -> invariant' (removeNode n g))
+  , quickCheck' (\g -> forAll (nodeIn g) $ \n ->
+                    invariant' (removeNode n g))
+  , quickCheck' (\g n1 n2 -> invariant' (removeEdge n1 n2 g))
+  , quickCheck' (\g -> forAll (edgeIn g) $ \(n1, n2, _) ->
+                    invariant' (removeEdge n1 n2 g))
+  , quickCheck' (\g1 g2 -> invariant' (union g1 g2))
+  , quickCheck' (invariant' . unions)
+  , quickCheck' (invariant' . transitiveClosure1)
+  , quickCheck' (invariant' . transitiveClosure)
+
+    -- Other properties.
+  , quickCheck' (prop_nodes_fromNodes :: [Int] -> Bool)
+  , quickCheck' (prop_transitiveClosure :: G -> Property)
+  ]
+  where
+  invariant' :: G -> Bool
+  invariant' = invariant
diff --git a/src/full/Agda/Utils/HashMap.hs b/src/full/Agda/Utils/HashMap.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/HashMap.hs
@@ -0,0 +1,6 @@
+
+module Agda.Utils.HashMap
+  ( module HashMap ) where
+
+import Data.HashMap.Strict as HashMap
+
diff --git a/src/full/Agda/Utils/IO/Locale.hs b/src/full/Agda/Utils/IO/Locale.hs
deleted file mode 100644
--- a/src/full/Agda/Utils/IO/Locale.hs
+++ /dev/null
@@ -1,66 +0,0 @@
-{-# LANGUAGE CPP #-}
-
--- | IO functions which are used when reading from standard input and
--- writing to standard output. Uses the UTF-8 character encoding under
--- versions of the base library up to 4.1, and whatever the locale
--- specifies under base 4.2 (and later?; only if the locale is
--- supported, see "System.IO").
---
--- Note that 'hSetEncoding' can be used to change the behaviour of the
--- functions below if base 4.2 (or later?) is used.
-
-module Agda.Utils.IO.Locale
-  ( print
-  , putStr
-  , putStrLn
-  , stdoutFlush
-  , hGetContents
-  ) where
-
-import Prelude (Show, IO, String)
-import System.IO (Handle, hFlush, stdout)
-#if MIN_VERSION_base(4,2,0)
-import qualified Prelude
-import qualified System.IO as IO
-#else
-import qualified System.IO.UTF8 as UTF8
-#endif
-
-stdoutFlush :: IO ()
-stdoutFlush = hFlush stdout
-
--- | Prints the value.
-
-print :: Show a => a -> IO ()
-#if MIN_VERSION_base(4,2,0)
-print = Prelude.print
-#else
-print = UTF8.print
-#endif
-
--- | Prints the string.
-
-putStr :: String -> IO ()
-#if MIN_VERSION_base(4,2,0)
-putStr = Prelude.putStr
-#else
-putStr = UTF8.putStr
-#endif
-
--- | Prints the string with an appended newline.
-
-putStrLn :: String -> IO ()
-#if MIN_VERSION_base(4,2,0)
-putStrLn = Prelude.putStrLn
-#else
-putStrLn = UTF8.putStrLn
-#endif
-
--- | Returns the stream represented by the handle lazily.
-
-hGetContents :: Handle -> IO String
-#if MIN_VERSION_base(4,2,0)
-hGetContents = IO.hGetContents
-#else
-hGetContents = UTF8.hGetContents
-#endif
diff --git a/src/full/Agda/Utils/IO/UTF8.hs b/src/full/Agda/Utils/IO/UTF8.hs
--- a/src/full/Agda/Utils/IO/UTF8.hs
+++ b/src/full/Agda/Utils/IO/UTF8.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 -- | Text IO using the UTF8 character encoding.
 
 module Agda.Utils.IO.UTF8
@@ -8,11 +6,7 @@
   , Agda.Utils.IO.UTF8.writeFile
   ) where
 
-#if MIN_VERSION_base(4,2,0)
 import qualified System.IO as IO
-#else
-import qualified System.IO.UTF8 as UTF8
-#endif
 import Control.Applicative
 
 import Agda.Utils.Unicode
@@ -22,35 +16,26 @@
 
 readTextFile :: FilePath -> IO String
 readTextFile file = convertLineEndings <$> do
-#if MIN_VERSION_base(4,2,0)
   h <- IO.openFile file IO.ReadMode
   IO.hSetNewlineMode h IO.noNewlineTranslation
   IO.hSetEncoding h IO.utf8
   IO.hGetContents h
-#else
-  UTF8.readFile file
-#endif
 
 -- | Writes UTF8-encoded text to the handle, which should be opened
 -- for writing and in text mode. The native convention for line
 -- endings is used.
+--
+-- The handle's text encoding is not necessarily preserved, it is
+-- changed to UTF8.
 
 hPutStr :: IO.Handle -> String -> IO ()
-#if MIN_VERSION_base(4,2,0)
 hPutStr h s = do
   IO.hSetEncoding h IO.utf8
   IO.hPutStr h s
-#else
-hPutStr = UTF8.hPutStr
-#endif
 
 -- | Writes a UTF8-encoded text file. The native convention for line
 -- endings is used.
 
 writeFile :: FilePath -> String -> IO ()
-#if MIN_VERSION_base(4,2,0)
 writeFile file s = IO.withFile file IO.WriteMode $ \h -> do
   hPutStr h s
-#else
-writeFile = UTF8.writeFile
-#endif
diff --git a/src/full/Agda/Utils/List.hs b/src/full/Agda/Utils/List.hs
--- a/src/full/Agda/Utils/List.hs
+++ b/src/full/Agda/Utils/List.hs
@@ -22,6 +22,33 @@
 mhead []    = Nothing
 mhead (x:_) = Just x
 
+-- | Opposite of cons @(:)@, safe.
+uncons :: [a] -> Maybe (a, [a])
+uncons []     = Nothing
+uncons (x:xs) = Just (x,xs)
+
+-- | downFrom n = [n-1,..1,0]
+downFrom :: Integral a => a -> [a]
+downFrom n | n <= 0     = []
+           | otherwise = let n' = n-1 in n' : downFrom n'
+
+-- | Update the last element of a list, if it exists
+updateLast :: (a -> a) -> [a] -> [a]
+updateLast f [] = []
+updateLast f [a] = [f a]
+updateLast f (a : as@(_ : _)) = a : updateLast f as
+
+-- | A generalized version of @partition@.
+--   (Cf. @mapMaybe@ vs. @filter@).
+mapEither :: (a -> Either b c) -> [a] -> ([b],[c])
+{-# INLINE mapEither #-}
+mapEither f xs = foldr (deal f) ([],[]) xs
+
+deal :: (a -> Either b c) -> a -> ([b],[c]) -> ([b],[c])
+deal f a ~(bs,cs) = case f a of
+  Left  b -> (b:bs, cs)
+  Right c -> (bs, c:cs)
+
 -- | Sublist relation.
 isSublistOf :: Eq a => [a] -> [a] -> Bool
 isSublistOf []       ys = True
@@ -67,6 +94,14 @@
 holes []     = []
 holes (x:xs) = (x, xs) : map (id -*- (x:)) (holes xs)
 
+-- | Check whether a list is sorted.
+--
+-- Assumes that the 'Ord' instance implements a partial order.
+
+sorted :: Ord a => [a] -> Bool
+sorted [] = True
+sorted xs = and $ zipWith (<=) (init xs) (tail xs)
+
 -- | Check whether all elements in a list are distinct from each
 -- other. Assumes that the 'Eq' instance stands for an equivalence
 -- relation.
@@ -168,6 +203,13 @@
   forAll natural $ \n ->
     forAll (two $ vector n) $ \(xs, ys) ->
       zipWith' f xs ys == zipWith f xs ys
+
+-- | Like zipWith, but returns the leftover elements of the input lists.
+zipWithTails :: (a -> b -> c) -> [a] -> [b] -> ([c], [a] , [b])
+zipWithTails f xs       []       = ([], xs, [])
+zipWithTails f []       ys       = ([], [] , ys)
+zipWithTails f (x : xs) (y : ys) = (f x y : zs , as , bs)
+  where (zs , as , bs) = zipWithTails f xs ys
 
 -- | Efficient version of nub that sorts the list first. The tag function is
 --   assumed to be cheap. If it isn't pair up the elements with their tags and
diff --git a/src/full/Agda/Utils/Map.hs b/src/full/Agda/Utils/Map.hs
--- a/src/full/Agda/Utils/Map.hs
+++ b/src/full/Agda/Utils/Map.hs
@@ -4,9 +4,11 @@
 
 import Prelude hiding (map, lookup, mapM)
 import Control.Applicative
-import Data.Map
+import Data.Map as Map
 import Data.Traversable
+
 import Agda.Utils.Monad
+import Agda.Utils.Tuple
 
 #include "../undefined.h"
 import Agda.Utils.Impossible
@@ -37,3 +39,10 @@
 -- | Filter a map based on the keys.
 filterKeys :: Ord k => (k -> Bool) -> Map k a -> Map k a
 filterKeys p = filterWithKey (const . p)
+
+-- | Unzip a map.
+unzip :: Map k (a, b) -> (Map k a, Map k b)
+unzip m = (Map.map fst m, Map.map snd m)
+
+unzip3 :: Map k (a, b, c) -> (Map k a, Map k b, Map k c)
+unzip3 m = (Map.map fst3 m, Map.map snd3 m, Map.map thd3 m)
diff --git a/src/full/Agda/Utils/Maybe.hs b/src/full/Agda/Utils/Maybe.hs
--- a/src/full/Agda/Utils/Maybe.hs
+++ b/src/full/Agda/Utils/Maybe.hs
@@ -10,3 +10,7 @@
 
 fromMaybeM :: Monad m => m a -> m (Maybe a) -> m a
 fromMaybeM m mm = maybe m return =<< mm
+
+unzipMaybe :: Maybe (a,b) -> (Maybe a, Maybe b)
+unzipMaybe Nothing      = (Nothing, Nothing)
+unzipMaybe (Just (a,b)) = (Just a, Just b)
diff --git a/src/full/Agda/Utils/Monad.hs b/src/full/Agda/Utils/Monad.hs
--- a/src/full/Agda/Utils/Monad.hs
+++ b/src/full/Agda/Utils/Monad.hs
@@ -1,7 +1,13 @@
-{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE CPP, FlexibleContexts #-}
 
 module Agda.Utils.Monad
     ( module Agda.Utils.Monad
+{- Andreas 2012-04-21: I'd like to reexport Control.Monad except
+   patching when and unless, but the hiding syntax is not valid yet
+   (only a proposed language extension)
+
+    , module Control.Monad hiding (when, unless)
+-}
     , (<$>), (<*>)
     )
     where
@@ -14,50 +20,84 @@
 import qualified Control.Monad.State.Strict as SS
 import Control.Monad.Writer
 import Control.Applicative
-import Data.Traversable hiding (sequence)
-import Data.Foldable
+import Data.Traversable as Trav hiding (sequence)
+import Data.Foldable as Fold
 import Data.Monoid
+import Data.Maybe
 
 import Agda.Utils.List
 
--- Monads -----------------------------------------------------------------
+#include "../undefined.h"
+import Agda.Utils.Impossible
 
-infixl 8 <.>
+-- Conditionals and monads ------------------------------------------------
 
-(<.>) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c
-f <.> g = \x -> f =<< g x
+-- | @when_@ is just @Control.Monad.when@ with a more general type.
+when_ :: Monad m => Bool -> m a -> m ()
+when_ b m = when b $ do m >> return ()
 
-whenM :: Monad m => m Bool -> m () -> m ()
-whenM c m = do	b <- c
-		when b m
+-- | @unless_@ is just @Control.Monad.unless@ with a more general type.
+unless_ :: Monad m => Bool -> m a -> m ()
+unless_ b m = unless b $ do m >> return ()
 
-unlessM :: Monad m => m Bool -> m () -> m ()
-unlessM c m = do    b <- c
-		    unless b m
+whenJust :: Monad m => Maybe a -> (a -> m ()) -> m ()
+whenJust m k = flip (maybe $ return ()) m k
 
+whenM :: Monad m => m Bool -> m a -> m ()
+whenM c m = c >>= (`when_` m)
+
+unlessM :: Monad m => m Bool -> m a -> m ()
+unlessM c m = c >>= (`unless_` m)
+
+whenJustM :: Monad m => m (Maybe a) -> (a -> m ()) -> m ()
+whenJustM c m = c >>= (`whenJust` m)
+
 ifM :: Monad m => m Bool -> m a -> m a -> m a
 ifM c m m' =
     do	b <- c
 	if b then m else m'
 
-forgetM :: Applicative m => m a -> m ()
-forgetM m = const () <$> m
+-- | Lazy monadic conjunction.
+and2M :: Monad m => m Bool -> m Bool -> m Bool
+and2M ma mb = ifM ma mb (return False)
 
-concatMapM :: Applicative m => (a -> m [b]) -> [a] -> m [b]
-concatMapM f xs = concat <$> traverse f xs
+andM :: Monad m => [m Bool] -> m Bool
+andM = Fold.foldl and2M (return True)
 
--- | Depending on the monad you have to look at the result for
---   the force to be effective. For the 'IO' monad you do.
-forceM :: Monad m => [a] -> m ()
-forceM xs = do () <- length xs `seq` return ()
-	       return ()
+-- | Lazy monadic disjunction.
+or2M :: Monad m => m Bool -> m Bool -> m Bool
+or2M ma mb = ifM ma (return True) mb
 
-commuteM :: (Traversable f, Applicative m) => f (m a) -> m (f a)
-commuteM = traverse id
+orM :: Monad m => [m Bool] -> m Bool
+orM = Fold.foldl or2M (return False)
 
-fmapM :: (Traversable f, Applicative m) => (a -> m b) -> f a -> m (f b)
-fmapM f = commuteM . fmap f
+-- | Lazy monadic disjunction with @Either@  truth values.
+altM1 :: Monad m => (a -> m (Either err b)) -> [a] -> m (Either err b)
+altM1 f []       = __IMPOSSIBLE__
+altM1 f [a]      = f a
+altM1 f (a : as) = either (const $ altM1 f as) (return . Right) =<< f a
 
+-- Loops gathering results in a Monoid ------------------------------------
+
+-- | Generalized version of @mapM_ :: Monad m => (a -> m ()) -> [a] -> m ()@
+--   Executes effects and collects results in left-to-right order.
+--   Works best with left-associative monoids.
+--
+--   Note that there is an alternative
+--
+--     @mapM' f t = foldr mappend mempty <$> mapM f t@
+--
+--   that collects results in right-to-left order (effects still right-to-left).
+--   It might be preferable for right associative monoids.
+mapM' :: (Foldable t, Monad m, Monoid b) => (a -> m b) -> t a -> m b
+mapM' f = Fold.foldl (\ mb a -> liftM2 mappend mb (f a)) (return mempty)
+
+-- | Generalized version of @forM_ :: Monad m => [a] -> (a -> m ()) -> m ()@
+forM' :: (Foldable t, Monad m, Monoid b) => t a -> (a -> m b) -> m b
+forM' = flip mapM'
+
+-- Continuation monad -----------------------------------------------------
+
 type Cont r a = (a -> r) -> r
 
 -- | 'Control.Monad.mapM' for the continuation monad. Terribly useful.
@@ -66,10 +106,18 @@
 thread f (x:xs) ret =
     f x $ \y -> thread f xs $ \ys -> ret (y:ys)
 
+-- Lists and monads -------------------------------------------------------
+
 -- | Requires both lists to have the same lengths.
 zipWithM' :: Monad m => (a -> b -> m c) -> [a] -> [b] -> m [c]
 zipWithM' f xs ys = sequence (zipWith' f xs ys)
 
+-- | A monadic version of @mapMaybe :: (a -> Maybe b) -> [a] -> [b]@.
+mapMaybeM :: (Monad m, Functor m) => (a -> m (Maybe b)) -> [a] -> m [b]
+mapMaybeM f xs = catMaybes <$> Trav.mapM f xs
+
+-- Error monad ------------------------------------------------------------
+
 -- | Finally for the 'Error' class. Errors in the finally part take
 -- precedence over prior errors.
 
@@ -92,15 +140,23 @@
   resource <- acquire
   compute resource `finally` release resource
 
--- Maybe ------------------------------------------------------------------
-
-mapMaybeM :: Applicative m => (a -> m b) -> Maybe a -> m (Maybe b)
-mapMaybeM f = maybe (pure Nothing) (\x -> Just <$> f x)
+-- State monad ------------------------------------------------------------
 
--- Either -----------------------------------------------------------------
+-- | Bracket without failure.  Typically used to preserve state.
+bracket_ :: (Monad m)
+         => m a         -- ^ Acquires resource. Run first.
+         -> (a -> m c)  -- ^ Releases resource. Run last.
+         -> m b         -- ^ Computes result. Run in-between.
+         -> m b
+bracket_ acquire release compute = do
+  resource <- acquire
+  result <- compute
+  release resource
+  return result
 
-liftEither :: MonadError e m => Either e a -> m a
-liftEither = either throwError return
+-- | Restore state after computation.
+localState :: (MonadState s m) => m a -> m a
+localState = bracket_ get put
 
 -- Read -------------------------------------------------------------------
 
@@ -109,3 +165,53 @@
 	    [(x,"")]	-> return x
 	    _		->
               throwError $ strMsg $ "readM: parse error string " ++ s
+
+
+
+
+-- RETIRED STUFF ----------------------------------------------------------
+
+
+{- Andreas 2012-04-21: <.> is obsolete, it is called <=< in Control.Monad
+infixl 8 <.>
+
+(<.>) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c
+f <.> g = \x -> f =<< g x
+-}
+
+{- RETIRED, Andreas, 2012-04-30.
+   For GHC >= 7, there is now Control.Monad.void.
+forgetM :: Applicative m => m a -> m ()
+forgetM m = const () <$> m
+-}
+
+{- RETIRED, Andreas, 2012-04-30. Not used.
+concatMapM :: Applicative m => (a -> m [b]) -> [a] -> m [b]
+concatMapM f xs = concat <$> traverse f xs
+
+-- | Depending on the monad you have to look at the result for
+--   the force to be effective. For the 'IO' monad you do.
+forceM :: Monad m => [a] -> m ()
+forceM xs = do () <- length xs `seq` return ()
+	       return ()
+
+commuteM :: (Traversable f, Applicative m) => f (m a) -> m (f a)
+commuteM = traverse id
+
+-- these are just instances of traverse:
+
+fmapM :: (Traversable f, Applicative m) => (a -> m b) -> f a -> m (f b)
+fmapM f = commuteM . fmap f
+
+mapMaybeM :: Applicative m => (a -> m b) -> Maybe a -> m (Maybe b)
+mapMaybeM f = maybe (pure Nothing) (\x -> Just <$> f x)
+
+-}
+
+{- UNUSED
+
+-- Either -----------------------------------------------------------------
+
+liftEither :: MonadError e m => Either e a -> m a
+liftEither = either throwError return
+-}
diff --git a/src/full/Agda/Utils/Permutation.hs b/src/full/Agda/Utils/Permutation.hs
--- a/src/full/Agda/Utils/Permutation.hs
+++ b/src/full/Agda/Utils/Permutation.hs
@@ -1,16 +1,20 @@
 {-# LANGUAGE DeriveDataTypeable, CPP #-}
 module Agda.Utils.Permutation where
 
-import Data.Generics (Typeable, Data)
+import Data.Typeable (Typeable)
 import Data.List
 import Agda.Utils.Size
 import Agda.Utils.Impossible
 
 #include "../undefined.h"
 
--- | @permute [2,3,1] [x,y,z] = [y,z,x]@
-data Permutation = Perm Integer [Integer]
-  deriving (Eq, Data, Typeable)
+-- | @permute [1,2,0] [x0,x1,x2] = [x1,x2,x0]@
+--
+--   Agda typing would be:
+--   @Perm : {m : Nat}(n : Nat) -> Vec (Fin n) m -> Permutation@
+--   @m@ is the 'size' of the permutation.
+data Permutation = Perm { permRange :: Int, permPicks :: [Int] }
+  deriving (Eq, Typeable)
 
 instance Show Permutation where
   show (Perm n xs) = showx [0..n - 1] ++ " -> " ++ showx xs
@@ -23,10 +27,13 @@
 instance Sized Permutation where
   size (Perm _ xs) = size xs
 
--- | @permute [2,3,1] [x1,x2,x3] = [x2,x3,x1]@
+-- | @permute [1,2,0] [x0,x1,x2] = [x1,x2,x0]@
 --   More precisely, @permute indices list = sublist@, generates @sublist@
 --   from @list@ by picking the elements of list as indicated by @indices@.
---   @permute [2,4,1] [x1,x2,x3,x4] = [x2,x4,x1]@
+--   @permute [1,3,0] [x0,x1,x2,x3] = [x1,x3,x0]@
+--
+--   Agda typing:
+--   @permute (Perm {m} n is) : Vec A m -> Vec A n@
 permute :: Permutation -> [a] -> [a]
 permute (Perm _ is) xs = map (xs !!!) is
   where
@@ -34,12 +41,19 @@
     (x:xs) !!! 0 = x
     (x:xs) !!! n = xs !!! (n - 1)
 
-idP :: Integer -> Permutation
+idP :: Int -> Permutation
 idP n = Perm n [0..n - 1]
 
-takeP :: Integer -> Permutation -> Permutation
+takeP :: Int -> Permutation -> Permutation
 takeP n (Perm m xs) = Perm n $ filter (< n) xs
 
+-- | @liftP k@ takes a @Perm {m} n@ to a @Perm {m+k} (n+k)@.
+--   Analogous to 'Agda.TypeChecking.Substitution.liftS',
+--   but Permutations operate on de Bruijn LEVELS, not indices.
+liftP :: Int -> Permutation -> Permutation
+liftP n (Perm m xs) = Perm (n + m) $ xs ++ [m..m+n-1]
+-- liftP n (Perm m xs) = Perm (n + m) $ [0..n-1] ++ map (n+) xs -- WRONG, works for indices, but not for levels
+
 -- | @permute (compose p1 p2) == permute p1 . permute p2@
 composeP :: Permutation -> Permutation -> Permutation
 composeP p1 (Perm n xs) = Perm n $ permute p1 xs
@@ -71,11 +85,24 @@
     holesBelow k = genericLength $ filter (< k) missing
     adjust k = k - holesBelow k
 
+-- | @permute (reverseP p) xs ==
+--    reverse $ permute p $ reverse xs@
+--
+--   Example:
+--   @
+--        permute (reverseP (Perm 4 [1,3,0])) [x0,x1,x2,x3]
+--     == permute (Perm 4 $ map (3-) [0,3,1]) [x0,x1,x2,x3]
+--     == permute (Perm 4 [3,0,2]) [x0,x1,x2,x3]
+--     == [x3,x0,x2]
+--     == reverse [x2,x0,x3]
+--     == reverse $ permute (Perm 4 [1,3,0]) [x3,x2,x1,x0]
+--     == reverse $ permute (Perm 4 [1,3,0]) $ reverse [x0,x1,x2,x3]
+--   @
 reverseP :: Permutation -> Permutation
 reverseP (Perm n xs) = Perm n $ map ((n - 1) -) $ reverse xs
 
 -- | @expandP i n π@ in the domain of @π@ replace the /i/th element by /n/ elements.
-expandP :: Integer -> Integer -> Permutation -> Permutation
+expandP :: Int -> Int -> Permutation -> Permutation
 expandP i n (Perm m xs) = Perm (m + n - 1) $ concatMap expand xs
   where
     expand j
diff --git a/src/full/Agda/Utils/Pointed.hs b/src/full/Agda/Utils/Pointed.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/Pointed.hs
@@ -0,0 +1,14 @@
+module Agda.Utils.Pointed where
+
+-- | Pointed class.
+--
+--   We could have used Data.Pointed by Edward Kmett, but it has a
+--   lot of package dependencies.
+class Pointed f where
+  point :: a -> f a
+
+instance Pointed [] where
+  point a = [a]
+
+instance Pointed Maybe where
+  point = Just
diff --git a/src/full/Agda/Utils/Pointer.hs b/src/full/Agda/Utils/Pointer.hs
--- a/src/full/Agda/Utils/Pointer.hs
+++ b/src/full/Agda/Utils/Pointer.hs
@@ -1,24 +1,77 @@
-
--- | Wrappers for 'IORef's.
-module Agda.Utils.Pointer where
+{-# LANGUAGE DeriveDataTypeable #-}
+module Agda.Utils.Pointer
+  ( Ptr, newPtr, derefPtr, setPtr
+  , updatePtr, updatePtrM
+  ) where
 
-import Control.Monad.Trans
+import Control.Applicative
+import Control.DeepSeq
+import Control.Concurrent.MVar
+import Data.Foldable
+import Data.Function
+import Data.Hashable
 import Data.IORef
+import Data.Traversable
+import System.IO.Unsafe
+import Data.HashTable.IO
+import Data.Typeable
 
-type Ptr a = IORef a
+data Ptr a = Ptr { ptrTag :: !Integer
+                 , ptrRef :: !(IORef a) }
+  deriving (Typeable)
 
-deref :: MonadIO io => Ptr a -> io a
-deref p = liftIO $ readIORef p
+{-# NOINLINE freshVar #-}
+freshVar :: MVar Integer
+freshVar = unsafePerformIO $ newMVar 0
 
-store :: MonadIO io => Ptr a -> a -> io ()
-store p x = liftIO $ writeIORef p x
+fresh :: IO Integer
+fresh = do
+    x <- takeMVar freshVar
+    putMVar freshVar $! x + 1
+    return x
 
-alloc :: MonadIO io => a -> io (Ptr a)
-alloc x = liftIO $ newIORef x
+{-# NOINLINE newPtr #-}
+newPtr :: a -> Ptr a
+newPtr x = unsafePerformIO $ do
+  i <- fresh
+  Ptr i <$> newIORef x
 
-updatePtr :: MonadIO io => Ptr a -> (a -> io a) -> io a
-updatePtr p f = do
-    x <- deref p
-    y <- f x
-    store p y
-    return y
+derefPtr :: Ptr a -> a
+derefPtr p = unsafePerformIO $ readIORef $ ptrRef p
+
+{-# NOINLINE updatePtr #-}
+updatePtr :: (a -> a) -> Ptr a -> Ptr a
+updatePtr f p = unsafePerformIO $ p <$ modifyIORef (ptrRef p) f
+
+setPtr :: a -> Ptr a -> Ptr a
+setPtr x = updatePtr (const x)
+
+-- | If @f a@ contains many copies of @a@ they will all be the same pointer in
+--   the result. If the function is well-behaved (i.e. preserves the implicit
+--   equivalence, this shouldn't matter).
+updatePtrM :: Functor f => (a -> f a) -> Ptr a -> f (Ptr a)
+updatePtrM f p = flip setPtr p <$> f (derefPtr p)
+
+instance Show a => Show (Ptr a) where
+  show p = "#" ++ show (ptrTag p) ++ "{" ++ show (derefPtr p) ++ "}"
+
+instance Functor Ptr where
+  fmap f = newPtr . f . derefPtr
+
+instance Foldable Ptr where
+  foldMap f = f . derefPtr
+
+instance Traversable Ptr where
+  traverse f p = newPtr <$> f (derefPtr p)
+
+instance Eq (Ptr a) where
+  (==) = (==) `on` ptrTag
+
+instance Ord (Ptr a) where
+  compare = compare `on` ptrTag
+
+instance Hashable (Ptr a) where
+  hash = hash . ptrTag
+
+instance NFData (Ptr a) where
+
diff --git a/src/full/Agda/Utils/String.hs b/src/full/Agda/Utils/String.hs
--- a/src/full/Agda/Utils/String.hs
+++ b/src/full/Agda/Utils/String.hs
@@ -8,15 +8,15 @@
 import Data.List
 import Numeric
 
--- | 'quote' adds double quotes around the string, and escapes double
--- quotes and backslashes within the string. This is different from
--- the behaviour of 'show':
+-- | 'quote' adds double quotes around the string, replaces newline
+-- characters with @\n@, and escapes double quotes and backslashes
+-- within the string. This is different from the behaviour of 'show':
 --
 -- @
 -- \> 'putStrLn' $ 'show' \"\\x2200\"
 -- \"\\8704\"
 -- \> 'putStrLn' $ 'quote' \"\\x2200\"
--- \"&#x2200;\"
+-- \"∀\"
 -- @
 --
 -- (The code examples above have been tested using version 4.2.0.0 of
@@ -25,7 +25,8 @@
 quote :: String -> String
 quote s = "\"" ++ concatMap escape s ++ "\""
   where
-  escape c | c `elem` escapeChars = ['\\', c]
+  escape c | c == '\n'            = "\\n"
+           | c `elem` escapeChars = ['\\', c]
            | otherwise            = [c]
 
   escapeChars = "\"\\"
diff --git a/src/full/Agda/Utils/Suffix.hs b/src/full/Agda/Utils/Suffix.hs
--- a/src/full/Agda/Utils/Suffix.hs
+++ b/src/full/Agda/Utils/Suffix.hs
@@ -1,23 +1,60 @@
-{-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE CPP, PatternGuards #-}
 module Agda.Utils.Suffix where
 
 import Data.Char
 
-data Suffix = NoSuffix | Prime Int | Index Int
+#include "../undefined.h"
+import Agda.Utils.Impossible
 
-nextSuffix NoSuffix  = Prime 1
-nextSuffix (Prime _) = Index 0	-- we only use single primes in generated names
-nextSuffix (Index i) = Index $ i + 1
+------------------------------------------------------------------------
+-- Subscript digits
 
+-- | Is the character one of the subscripts @'₀'@-@'₉'@?
+
+isSubscriptDigit :: Char -> Bool
+isSubscriptDigit c = '₀' <= c && c <= '₉'
+
+-- | Converts @'0'@-@'9'@ to @'₀'@-@'₉'@.
+--
+-- Precondition: The digit needs to be in range.
+
+toSubscriptDigit :: Char -> Char
+toSubscriptDigit d
+  | isDigit d = toEnum (fromEnum '₀' + (fromEnum d - fromEnum '0'))
+  | otherwise = __IMPOSSIBLE__
+
+-- | Converts @'₀'@-@'₉'@ to @'0'@-@'9'@.
+--
+-- Precondition: The digit needs to be in range.
+
+fromSubscriptDigit :: Char -> Char
+fromSubscriptDigit d
+  | isSubscriptDigit d =
+      toEnum (fromEnum '0' + (fromEnum d - fromEnum '₀'))
+  | otherwise          = __IMPOSSIBLE__
+
+------------------------------------------------------------------------
+-- Suffices
+
+data Suffix = NoSuffix | Prime Int | Index Int | Subscript Int
+
+nextSuffix NoSuffix      = Subscript 1
+nextSuffix (Prime i)     = Prime $ i + 1
+nextSuffix (Index i)     = Index $ i + 1
+nextSuffix (Subscript i) = Subscript $ i + 1
+
 suffixView :: String -> (String, Suffix)
 suffixView s
-    | (ps@(_:_), s') <- span (=='\'') rs = (reverse s', Prime $ length ps)
-    | (ns@(_:_), s') <- span isDigit rs	 = (reverse s', Index $ read $ reverse ns)
-    | otherwise				 = (s, NoSuffix)
-    where
-	rs = reverse s
+    | (ps@(_:_), s') <- span (=='\'') rs         = (reverse s', Prime $ length ps)
+    | (ns@(_:_), s') <- span isDigit rs          = (reverse s', Index $ read $ reverse ns)
+    | (ns@(_:_), s') <- span isSubscriptDigit rs = (reverse s',
+                                                    Subscript $ read $
+                                                      map fromSubscriptDigit $ reverse ns)
+    | otherwise                                  = (s, NoSuffix)
+    where rs = reverse s
 
 addSuffix :: String -> Suffix -> String
-addSuffix s NoSuffix = s
-addSuffix s (Prime n) = s ++ replicate n '\''
-addSuffix s (Index i) = s ++ show i
+addSuffix s NoSuffix      = s
+addSuffix s (Prime n)     = s ++ replicate n '\''
+addSuffix s (Index i)     = s ++ show i
+addSuffix s (Subscript i) = s ++ map toSubscriptDigit (show i)
diff --git a/src/full/Agda/Utils/TestHelpers.hs b/src/full/Agda/Utils/TestHelpers.hs
--- a/src/full/Agda/Utils/TestHelpers.hs
+++ b/src/full/Agda/Utils/TestHelpers.hs
@@ -15,6 +15,7 @@
   , maybeGen
   , maybeCoGen
   , listOfElements
+  , elementsUnlessEmpty
   , two
   , three
     -- * Test driver.
@@ -26,7 +27,6 @@
 import Data.List
 
 import Agda.Utils.QuickCheck
-import qualified Agda.Utils.IO.Locale as LocIO
 
 ------------------------------------------------------------------------
 -- Algebraic properties
@@ -105,6 +105,13 @@
 listOfElements [] = return []
 listOfElements xs = listOf $ elements xs
 
+-- | If the given list is non-empty, then an element from the list is
+-- generated, and otherwise an arbitrary element is generated.
+
+elementsUnlessEmpty :: Arbitrary a => [a] -> Gen a
+elementsUnlessEmpty [] = arbitrary
+elementsUnlessEmpty xs = elements xs
+
 -- | Generates values of 'Maybe' type, using the given generator to
 -- generate the contents of the 'Just' constructor.
 
@@ -139,5 +146,5 @@
          -> [IO Bool]
          -> IO Bool
 runTests name tests = do
-  LocIO.putStrLn name
+  putStrLn name
   fmap and $ sequence tests
diff --git a/src/full/Agda/Utils/Time.hs b/src/full/Agda/Utils/Time.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/Time.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE CPP #-}
+
+-- | Time-related utilities.
+
+module Agda.Utils.Time
+  ( ClockTime
+  , getClockTime
+  ) where
+
+#if MIN_VERSION_directory(1,1,1)
+import qualified Data.Time
+#else
+import qualified System.Time
+#endif
+
+-- | Timestamps.
+
+type ClockTime =
+#if MIN_VERSION_directory(1,1,1)
+  Data.Time.UTCTime
+#else
+  System.Time.ClockTime
+#endif
+
+-- | The current time.
+
+getClockTime :: IO ClockTime
+getClockTime =
+#if MIN_VERSION_directory(1,1,1)
+  Data.Time.getCurrentTime
+#else
+  System.Time.getClockTime
+#endif
diff --git a/src/full/Agda/Utils/Tuple.hs b/src/full/Agda/Utils/Tuple.hs
--- a/src/full/Agda/Utils/Tuple.hs
+++ b/src/full/Agda/Utils/Tuple.hs
@@ -1,14 +1,63 @@
+{-# LANGUAGE TupleSections, GeneralizedNewtypeDeriving, DeriveFunctor, DeriveFoldable, DeriveTraversable #-}
 
 module Agda.Utils.Tuple where
 
+import Control.Applicative
+
+import Data.Foldable
+import Data.Traversable
+
 infix 2 -*-
 infix 3 /\ -- backslashes at EOL interacts badly with CPP...
 
+-- | Bifunctoriality for pairs.
 (-*-) :: (a -> c) -> (b -> d) -> (a,b) -> (c,d)
-(f -*- g) (x,y) = (f x, g y)
+(f -*- g) ~(x,y) = (f x, g y)
 
+-- | @mapFst f = f -*- id@
+mapFst :: (a -> c) -> (a,b) -> (c,b)
+mapFst f ~(x,y) = (f x, y)
+
+-- | @mapSnd g = id -*- g@
+mapSnd :: (b -> d) -> (a,b) -> (a,d)
+mapSnd g ~(x,y) = (x, g y)
+
+-- | Lifted pairing.
 (/\) :: (a -> b) -> (a -> c) -> a -> (b,c)
 (f /\ g) x = (f x, g x)
 
+-- * Triple (stolen from Data.Tuple.HT)
+
+{-# INLINE fst3 #-}
+fst3 :: (a,b,c) -> a
+fst3 ~(x,_,_) = x
+
+{-# INLINE snd3 #-}
+snd3 :: (a,b,c) -> b
+snd3 ~(_,x,_) = x
+
+{-# INLINE thd3 #-}
+thd3 :: (a,b,c) -> c
+thd3 ~(_,_,x) = x
+
+{-# INLINE uncurry3 #-}
 uncurry3 :: (a -> b -> c -> d) -> (a,b,c) -> d
-uncurry3 f (x,y,z) = f x y z
+uncurry3 f ~(x,y,z) = f x y z
+
+uncurry4 :: (a -> b -> c -> d -> e) -> (a,b,c,d) -> e
+uncurry4 f ~(w,x,y,z) = f w x y z
+
+-- | Monadic version of '-*-'.
+mapPairM :: (Applicative m) => (a -> m c) -> (b -> m d) -> (a,b) -> m (c,d)
+mapPairM f g ~(a,b) = (,) <$> f a <*> g b
+
+-- | Monadic 'mapFst'.
+mapFstM :: (Applicative m) => (a -> m c) -> (a,b) -> m (c,b)
+mapFstM f ~(a,b) = (,b) <$> f a
+
+-- | Monadic 'mapSnd'.
+mapSndM :: (Applicative m) => (b -> m d) -> (a,b) -> m (a,d)
+mapSndM f ~(a,b) = (a,) <$> f b
+
+newtype List2 a = List2 { list2 :: (a,a) }
+  deriving (Eq, Functor, Foldable, Traversable)
diff --git a/src/full/Agda/Utils/VarSet.hs b/src/full/Agda/Utils/VarSet.hs
--- a/src/full/Agda/Utils/VarSet.hs
+++ b/src/full/Agda/Utils/VarSet.hs
@@ -7,12 +7,12 @@
   )
   where
 
-import Data.Set as Set
+import Data.IntSet as Set
 
-type VarSet = Set Integer
+type VarSet = Set.IntSet
 
-subtract :: Integer -> VarSet -> VarSet
-subtract n s = Set.mapMonotonic (Prelude.subtract n) s
+subtract :: Int -> VarSet -> VarSet
+subtract n s = Set.map (Prelude.subtract n) s
 
 {-
 import Data.Bits
diff --git a/src/full/Agda/Utils/Warshall.hs b/src/full/Agda/Utils/Warshall.hs
--- a/src/full/Agda/Utils/Warshall.hs
+++ b/src/full/Agda/Utils/Warshall.hs
@@ -280,9 +280,11 @@
 
   v < v  for a rigid variable v
 
+{- Andreas, 2012-09-19 OUTDATED
   v <= v' for rigid variables v,v'
 
   x < v   for a flexible variable x and a rigid variable v
+-}
 
 thus, for each flexible x, only one of the following cases is possible
 
@@ -325,21 +327,27 @@
          -- compute the sets of flexible and rigid node numbers
          ns  = Map.keys (nodeMap gr)
          -- a set of flexible variables
-         flexs  = foldl (\ l k -> case k of (Flex i) -> i : l
-                                            (Rigid _) -> l) [] ns
+         flexs  = foldl' (\ l k -> case k of (Flex i) -> i : l
+                                             (Rigid _) -> l) [] ns
          -- a set of rigid variables
-         rigids = foldl (\ l k -> case k of (Flex _) -> l
-                                            (Rigid i) -> i : l) [] ns
+         rigids = foldl' (\ l k -> case k of (Flex _) -> l
+                                             (Rigid i) -> i : l) [] ns
 
          -- rigid matrix indices
-         rInds = foldl (\ l r -> let Just i = Map.lookup (Rigid r) (nodeMap gr)
-                                 in i : l) [] rigids
+         rInds = foldl' (\ l r -> let Just i = Map.lookup (Rigid r) (nodeMap gr)
+                                  in i : l) [] rigids
 
          -- check whether there is a solution
          -- d   = [ m!(i,i) | i <- [0 .. (n-1)] ]  -- diagonal
 -- a rigid variable might not be less than it self, so no -.. on the
 -- rigid part of the diagonal
-         solvable = all (\ x -> x >= Finite 0) [ m!(i,i) | i <- rInds ] &&
+         solvable = all (\ x -> x >= Finite 0) [ m!(i,i) | i <- rInds ] && True
+
+{-  Andreas, 2012-09-19
+    We now can have constraints between rigid variables, like i < j.
+    Thus we skip the following two test.  However, a solution must be
+    checked for consistency with the constraints on rigid vars.
+
 -- a rigid variable might not be bounded below by infinity or
 -- bounded above by a constant
 -- it might not be related to another rigid variable
@@ -357,7 +365,7 @@
                     edge = m!(row,col)
                 in  edge >= Finite 0)
              [ (x,v) | x <- flexs, (RVar v) <- rigids ]
-
+-}
 
          inScope :: FlexId -> Rigid -> Bool
          inScope x (RConst _) = True
@@ -378,7 +386,7 @@
          loop1 flxs (r:rgds) subst =
             let row = fromJust $ Map.lookup (Rigid r) (nodeMap gr)
                 (flxs',subst') =
-                  foldl (\ (flx,sub) f ->
+                  foldl' (\ (flx,sub) f ->
                           let col = fromJust $ Map.lookup (Flex f) (nodeMap gr)
                           in  case (inScope f r, m!(row,col)) of
 --                                Finite z | z <= 0 ->
@@ -518,9 +526,4 @@
     g =~= g' = sort (edges g) == sort (edges g')
 
 tests :: IO Bool
-tests = runTests "Agda.Utils.Warshall"
-  [ quickCheck' prop_smaller
-  , quickCheck' prop_path
-  , quickCheck' prop_disjoint
-  , quickCheck' prop_stable
-  ]
+tests = runTests "Agda.Utils.Warshall" []
diff --git a/src/main/Main.hs b/src/main/Main.hs
new file mode 100644
--- /dev/null
+++ b/src/main/Main.hs
@@ -0,0 +1,12 @@
+-- | Wrapper for "Agda.Main".
+--
+-- Agda is installed as a library. This module is used to build the
+-- executable.
+
+module Main (main) where
+
+import qualified Agda.Main ( main )
+import Prelude ( IO )
+
+main :: IO ()
+main = Agda.Main.main
