diff --git a/Agda.cabal b/Agda.cabal
--- a/Agda.cabal
+++ b/Agda.cabal
@@ -1,10 +1,10 @@
 name:            Agda
-version:         2.5.3
+version:         2.5.4
 cabal-version:   >= 1.10
 build-type:      Custom
 license:         OtherLicense
 license-file:    LICENSE
-author:          Agda 2 was originally written by Ulf Norell, partially based on code from Agda 1 by Catarina Coquand and Makoto Takeyama, and from Agdalight by Ulf Norell and Andreas Abel. Agda 2 is currently actively developed mainly by Andreas Abel, Guillaume Allais, Jesper Cockx, Nils Anders Danielsson, Philipp Hausmann, Fredrik Nordvall Forsberg, Ulf Norell, Víctor López Juan, Andrés Sicard-Ramírez, and Andrea Vezzosi. Further, Agda 2 has received contributions by, amongst others, Stevan Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, Guillaume Brunerie, James Chapman, Dominique Devriese, Péter Diviánszki, Olle Fredriksson, Adam Gundry, Daniel Gustafsson, Kuen-Bang Hou (favonia), Patrik Jansson, Alan Jeffrey, Wolfram Kahl, Pepijn Kokke, Fredrik Lindblad, Francesco Mazzoli, Stefan Monnier, Darin Morrison, Guilhem Moulin, Nicolas Pouillard, Nobuo Yamashita, Christian Sattler, and Makoto Takeyama and many more.
+author:          Agda 2 was originally written by Ulf Norell, partially based on code from Agda 1 by Catarina Coquand and Makoto Takeyama, and from Agdalight by Ulf Norell and Andreas Abel. Agda 2 is currently actively developed mainly by Andreas Abel, Guillaume Allais, Jesper Cockx, Nils Anders Danielsson, Philipp Hausmann, Fredrik Nordvall Forsberg, Ulf Norell, Víctor López Juan, Andrés Sicard-Ramírez, and Andrea Vezzosi. Further, Agda 2 has received contributions by, amongst others, Stevan Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, Guillaume Brunerie, James Chapman, Dominique Devriese, Péter Diviánszki, Olle Fredriksson, Adam Gundry, Daniel Gustafsson, Kuen-Bang Hou (favonia), Patrik Jansson, Alan Jeffrey, Wolfram Kahl, Wen Kokke, Fredrik Lindblad, Francesco Mazzoli, Stefan Monnier, Darin Morrison, Guilhem Moulin, Nicolas Pouillard, Nobuo Yamashita, Christian Sattler, and Makoto Takeyama and many more.
 maintainer:      Ulf Norell <ulfn@chalmers.se>
 homepage:        http://wiki.portal.chalmers.se/agda/
 bug-reports:     https://github.com/agda/agda/issues
@@ -32,17 +32,19 @@
   Note that the Agda package does not follow the package versioning
   policy, because it is not intended to be used by third-party
   packages.
-tested-with:        GHC == 7.8.4
-                    GHC == 7.10.3
-                    GHC == 8.0.2
-                    GHC == 8.2.1
 
+tested-with:        GHC == 7.10.3
+                    GHC == 8.0.2
+                    GHC == 8.2.2
+                    GHC == 8.4.3
 extra-source-files: CHANGELOG.md
                     README.md
+                    doc/user-manual.pdf
                     src/full/undefined.h
-                    stack-7.8.4.yaml
                     stack-7.10.3.yaml
                     stack-8.0.2.yaml
+                    stack-8.2.2.yaml
+                    stack-8.4.3.yaml
 
 data-dir:           src/data
 data-files:         Agda.css
@@ -63,11 +65,13 @@
                     lib/prim/Agda/Builtin/List.agda
                     lib/prim/Agda/Builtin/Nat.agda
                     lib/prim/Agda/Builtin/Reflection.agda
+                    lib/prim/Agda/Builtin/Sigma.agda
                     lib/prim/Agda/Builtin/Size.agda
                     lib/prim/Agda/Builtin/Strict.agda
                     lib/prim/Agda/Builtin/String.agda
                     lib/prim/Agda/Builtin/TrustMe.agda
                     lib/prim/Agda/Builtin/Unit.agda
+                    lib/prim/Agda/Builtin/Word.agda
                     lib/prim/Agda/Primitive.agda
                     MAlonzo/src/MAlonzo/*.hs
                     postprocess-latex.pl
@@ -79,7 +83,7 @@
 source-repository this
   type:     git
   location: https://github.com/agda/agda.git
-  tag:      v2.5.3
+  tag:      v2.5.4
 
 flag cpphs
   default:     True
@@ -98,6 +102,12 @@
     Enable the --count-clusters flag. (If enable-cluster-counting is
     False, then the --count-clusters flag triggers an error message.)
 
+custom-setup
+  setup-depends:  base >= 4.8.0.0 && < 4.12
+                , Cabal >= 1.22.5.0 && < 2.3
+                , filepath >= 1.4.0.0 && < 1.5
+                , process >= 1.2.3.0 && < 1.7
+
 library
   hs-source-dirs:   src/full
   include-dirs:     src/full
@@ -119,25 +129,26 @@
     build-depends:  text-icu == 0.7.*
 
   if os(windows)
-    build-depends:  Win32 >= 2.2 && < 2.6
+    build-depends:  Win32 >= 2.3.1.0 && < 2.7
 
-  build-depends:  array >= 0.5.0.0 && < 0.6
-                , async >= 2.0.2 && < 2.2
-                , base >= 4.7.0.2 && < 4.11
-                , binary >= 0.7.2.1 && < 0.9
+  build-depends:  array >= 0.5.1.0 && < 0.6
+                , async >= 2.2 && < 2.3
+                , base >= 4.8.0.0 && < 4.12
+                , binary >= 0.7.3.0 && < 0.9
                 , blaze-html >= 0.8 && < 0.10
                 , boxes >= 0.1.3 && < 0.2
-                , bytestring >= 0.10.4.0 && < 0.11
-                , containers >= 0.5.5.1 && < 0.6
+                , bytestring >= 0.10.6.0 && < 0.11
+                , containers >= 0.5.6.2 && < 0.6
                 , data-hash >= 0.2.0.0 && < 0.3
-                , deepseq >= 1.3.0.2 && < 1.5
-                , directory >= 1.2.0.1 && < 1.4
-                , EdisonCore >= 1.3.1.1 && < 1.3.2
+                , deepseq >= 1.4.1.1 && < 1.5
+                , directory >= 1.2.2.0 && < 1.4
+                -- EdisonCore 1.3.2 doesn't compile with GHC 7.10.*.
+                , EdisonCore == 1.3.1.1 || >= 1.3.2.1 && < 1.4
                 , edit-distance >= 0.2.1.2 && < 0.3
                 , equivalence >= 0.3.2 && < 0.4
-                , filepath >= 1.3.0.1 && < 1.5
+                , filepath >= 1.4.0.0 && < 1.5
                 , geniplate-mirror >= 0.6.0.6 && < 0.8
-                , gitrev >= 1.2 && < 2.0
+                , gitrev >= 1.3.1 && < 2.0
                 -- hashable 1.2.0.10 makes library-test 10x
                 -- slower. The issue was fixed in hashable 1.2.1.0.
                 -- https://github.com/tibbe/hashable/issues/57.
@@ -147,40 +158,37 @@
                 -- in hashtables 1.2.0.0/1.2.0.1. This bug seems to
                 -- have made Agda much slower (infinitely slower?) in
                 -- some cases.
-                , hashtables >= 1.0.1.8 && < 1.2 || >= 1.2.0.2 && < 1.3
-                , haskeline >= 0.7.1.3 && < 0.8
+                , hashtables >= 1.2.0.2 && < 1.3
+                , haskeline >= 0.7.2.1 && < 0.8
                 , ieee754 >= 0.7.8 && < 0.9
-                , monadplus >= 1.4 && < 1.5
                 -- mtl-2.1 contains a severe bug.
                 --
                 -- mtl >= 2.2 && < 2.2.1 doesn't export Control.Monad.Except.
                 , mtl >= 2.2.1 && < 2.3
                 , murmur-hash >= 0.1 && < 0.2
-                , uri-encode >= 1.5.0.4 && < 1.6
-                , parallel >= 3.2.0.4 && < 3.3
-                -- pretty 1.1.1.2 and 1.1.1.3 do not follow the
-                -- package versioning policy.
-                , pretty >= 1.1.1.1 && < 1.1.1.2 || >= 1.1.2 && < 1.2
-                , process >= 1.2.0.0 && < 1.7
+                , pretty >= 1.1.2.0 && < 1.2
+                , process >= 1.2.3.0 && < 1.7
                 , regex-tdfa >= 1.2.2 && < 1.3
                 , stm >= 2.4.4 && < 2.5
                 , strict >= 0.3.2 && < 0.4
-                , template-haskell >= 2.9.0.0 && < 2.13
+                , template-haskell >= 2.10.0.0 && < 2.14
                 , text >= 0.11.3.1 && < 1.3
-                , time >= 1.4.2 && < 1.9
-                -- In hTags the mtl library must be compiled with the
-                -- version of transformers shipped GHC. The lower
-                -- bound is the version of transformers shipped with
-                -- GHC 7.10.3 (it is not necessary set the lower bound
-                -- to a version shipped with GHC < 7.10.3 because in
-                -- this case Agda and hTags use a different version of
-                -- mtl).
-                , transformers >= 0.4.2.0 && < 0.6
+                , time >= 1.5.0.1 && < 1.9
                 , unordered-containers >= 0.2.5.0 && < 0.3
+                , uri-encode >= 1.5.0.4 && < 1.6
 
-  if impl(ghc < 7.10)
-    build-depends: void >= 0.5.4 && < 0.9
+  -- In hTags the mtl library must be compiled with the version of
+  -- transformers shipped with GHC, so we use that version in Agda (see,
+  -- for example, Issue 2983).
+  if impl(ghc >= 8.4)
+    build-depends: transformers == 0.5.5.0
 
+  if impl(ghc >= 8.0) && impl(ghc < 8.4)
+    build-depends: transformers == 0.5.2.0
+
+  if impl(ghc >= 7.10) && impl(ghc < 8.0)
+    build-depends: transformers == 0.4.2.0
+
   -- zlib >= 0.6.1 is broken with GHC < 7.10.3. See Issue 1518.
   if impl(ghc < 7.10.3)
     build-depends: zlib >= 0.4.0.1 && < 0.6.1
@@ -195,8 +203,8 @@
 
   -- We don't write upper bounds for Alex nor Happy because the
   -- `build-tools` field can not be modified in Hackage. Agda doesn't
-  -- build with Alex 3.2.0.
-  build-tools:  alex >= 3.1.0 && < 3.2.0 || >= 3.2.1
+  -- build with Alex 3.2.0 and segfaults with 3.2.2.
+  build-tools:  alex >= 3.1.0 && < 3.2.0 || == 3.2.1 || >= 3.2.3
               , happy >= 1.19.4
 
   exposed-modules:  Agda.Auto.Auto
@@ -215,6 +223,7 @@
                     Agda.Compiler.JS.Syntax
                     Agda.Compiler.JS.Substitution
                     Agda.Compiler.JS.Pretty
+                    Agda.Compiler.MAlonzo.Coerce
                     Agda.Compiler.MAlonzo.Compiler
                     Agda.Compiler.MAlonzo.Encode
                     Agda.Compiler.MAlonzo.HaskellTypes
@@ -261,11 +270,15 @@
                     Agda.Interaction.Library.Base
                     Agda.Interaction.Library.Parse
                     Agda.Interaction.Options
+                    Agda.Interaction.Options.Help
+                    Agda.Interaction.Options.IORefs
                     Agda.Interaction.Options.Lenses
+                    Agda.Interaction.Options.Warnings
                     Agda.Main
                     Agda.Syntax.Abstract.Copatterns
                     Agda.Syntax.Abstract.Name
                     Agda.Syntax.Abstract.Pattern
+                    Agda.Syntax.Abstract.PatternSynonyms
                     Agda.Syntax.Abstract.Pretty
                     Agda.Syntax.Abstract.Views
                     Agda.Syntax.Abstract
@@ -276,8 +289,10 @@
                     Agda.Syntax.Concrete.Operators.Parser
                     Agda.Syntax.Concrete.Operators.Parser.Monad
                     Agda.Syntax.Concrete.Operators
+                    Agda.Syntax.Concrete.Pattern
                     Agda.Syntax.Concrete.Pretty
                     Agda.Syntax.Concrete
+                    Agda.Syntax.DoNotation
                     Agda.Syntax.Fixity
                     Agda.Syntax.IdiomBrackets
                     Agda.Syntax.Info
@@ -342,10 +357,12 @@
                     Agda.TypeChecking.Free
                     Agda.TypeChecking.Free.Lazy
                     Agda.TypeChecking.Free.Old
+                    Agda.TypeChecking.Free.Precompute
                     Agda.TypeChecking.Forcing
                     Agda.TypeChecking.Functions
                     Agda.TypeChecking.Implicit
                     Agda.TypeChecking.Injectivity
+                    Agda.TypeChecking.Inlining
                     Agda.TypeChecking.InstanceArguments
                     Agda.TypeChecking.Irrelevance
                     Agda.TypeChecking.Level
@@ -363,12 +380,10 @@
                     Agda.TypeChecking.Monad.Debug
                     Agda.TypeChecking.Monad.Env
                     Agda.TypeChecking.Monad.Imports
-                    Agda.TypeChecking.Monad.Local
                     Agda.TypeChecking.Monad.MetaVars
                     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
@@ -376,6 +391,7 @@
                     Agda.TypeChecking.Monad.Trace
                     Agda.TypeChecking.Monad
                     Agda.TypeChecking.Patterns.Abstract
+                    Agda.TypeChecking.Patterns.Internal
                     Agda.TypeChecking.Patterns.Match
                     Agda.TypeChecking.Polarity
                     Agda.TypeChecking.Positivity
@@ -392,6 +408,7 @@
                     Agda.TypeChecking.Reduce.Monad
                     Agda.TypeChecking.Rewriting
                     Agda.TypeChecking.Rewriting.NonLinMatch
+                    Agda.TypeChecking.Rules.Application
                     Agda.TypeChecking.Rules.Builtin
                     Agda.TypeChecking.Rules.Builtin.Coinduction
                     Agda.TypeChecking.Rules.Data
@@ -399,12 +416,9 @@
                     Agda.TypeChecking.Rules.Def
                     Agda.TypeChecking.Rules.Display
                     Agda.TypeChecking.Rules.LHS
-                    Agda.TypeChecking.Rules.LHS.AsPatterns
                     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
                     Agda.TypeChecking.Rules.Term
@@ -422,6 +436,7 @@
                     Agda.TypeChecking.SizedTypes.Syntax
                     Agda.TypeChecking.SizedTypes.Utils
                     Agda.TypeChecking.SizedTypes.WarshallSolver
+                    Agda.TypeChecking.Sort
                     Agda.TypeChecking.Substitute
                     Agda.TypeChecking.Substitute.Class
                     Agda.TypeChecking.Substitute.DeBruijn
@@ -430,6 +445,7 @@
                     Agda.TypeChecking.Unquote
                     Agda.TypeChecking.Warnings
                     Agda.TypeChecking.With
+                    Agda.Utils.AffineHole
                     Agda.Utils.AssocList
                     Agda.Utils.Bag
                     Agda.Utils.Benchmark
@@ -442,6 +458,7 @@
                     Agda.Utils.Either
                     Agda.Utils.Favorites
                     Agda.Utils.FileName
+                    Agda.Utils.Float
                     Agda.Utils.Functor
                     Agda.Utils.Function
                     Agda.Utils.Geniplate
@@ -451,6 +468,7 @@
                     Agda.Utils.Haskell.Syntax
                     Agda.Utils.Impossible
                     Agda.Utils.IndexedList
+                    Agda.Utils.IntSet.Infinite
                     Agda.Utils.IO
                     Agda.Utils.IO.Binary
                     Agda.Utils.IO.Directory
@@ -466,12 +484,14 @@
                     Agda.Utils.Memo
                     Agda.Utils.Monad
                     Agda.Utils.Monoid
+                    Agda.Utils.NonemptyList
                     Agda.Utils.Null
                     Agda.Utils.Parser.MemoisedCPS
                     Agda.Utils.Parser.ReadP
                     Agda.Utils.PartialOrd
                     Agda.Utils.Permutation
                     Agda.Utils.Pointer
+                    Agda.Utils.POMonoid
                     Agda.Utils.Pretty
                     Agda.Utils.SemiRing
                     Agda.Utils.Singleton
@@ -486,6 +506,7 @@
                     Agda.Utils.Update
                     Agda.Utils.VarSet
                     Agda.Utils.Warshall
+                    Agda.Utils.Zipper
                     Agda.Version
                     Agda.VersionCommit
 
@@ -499,8 +520,9 @@
   if impl(ghc >= 8.0)
     ghc-options: -Wunrecognised-warning-flags
 
-  if impl(ghc >= 7.8)
+  if impl(ghc >= 7.10)
     ghc-options: -fwarn-deprecated-flags
+                 -fwarn-deriving-typeable
                  -fwarn-dodgy-exports
                  -fwarn-dodgy-foreign-imports
                  -fwarn-dodgy-imports
@@ -518,27 +540,16 @@
                  -fwarn-overflowed-literals
                  -fwarn-overlapping-patterns
                  -fwarn-unrecognised-pragmas
+                 -fwarn-unticked-promoted-constructors
                  -fwarn-unused-do-bind
                  -fwarn-warnings-deprecations
                  -fwarn-wrong-do-bind
 
-  if impl(ghc >= 7.10)
-     ghc-options: -fwarn-unticked-promoted-constructors
-                  -- Enable after removing the support for GHC 7.8.
-                  -- -fwarn-deriving-typeable
-
-  -- This option is deprected in GHC 7.10.1.
-  if impl(ghc >= 7.8) && impl(ghc < 7.10)
-    ghc-options: -fwarn-amp
-
   -- These options will be removed in GHC 8.0.1.
-  if impl(ghc >= 7.8) && impl(ghc < 8.0)
-    ghc-options: -fwarn-duplicate-constraints
-                 -fwarn-pointless-pragmas
-
-  -- This option will be deprected in GHC 8.0.1.
   if impl(ghc >= 7.10) && impl(ghc < 8.0)
     ghc-options: -fwarn-context-quantification
+                 -fwarn-duplicate-constraints
+                 -fwarn-pointless-pragmas
 
   if impl(ghc >= 8.0)
     ghc-options: -Wmissing-pattern-synonym-signatures
@@ -589,7 +600,7 @@
 
                   -- Nothing is used from the following package,
                   -- except for the prelude.
-                , base >= 4.7.0.2 && < 6
+                , base >= 4.8.0.0 && < 6
   default-language: Haskell2010
   if impl(ghc >= 7)
     -- If someone installs Agda with the setuid bit set, then the
@@ -603,8 +614,8 @@
   hs-source-dirs:   src/agda-mode
   main-is:          Main.hs
   other-modules:    Paths_Agda
-  build-depends:    base >= 4.7.0.2 && < 4.11
-                  , directory >= 1.2.1.0 && < 1.4
-                  , filepath >= 1.3.0.2 && < 1.5
-                  , process >= 1.2.0.0 && < 1.7
+  build-depends:    base >= 4.8.0.0 && < 4.12
+                  , directory >= 1.2.2.0 && < 1.4
+                  , filepath >= 1.4.0.0 && < 1.5
+                  , process >= 1.2.3.0 && < 1.7
   default-language: Haskell2010
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,861 @@
+Release notes for Agda version 2.5.4
+====================================
+
+Installation and infrastructure
+-------------------------------
+
+* Added support for GHC 8.2.2 and GHC 8.4.3.
+
+  Note that GHC 8.4.* requires `cabal-install` ≥ 2.2.0.0.
+
+* Removed support for GHC 7.8.4.
+
+* Included user manual in PDF format in `doc/user-manual.pdf`.
+
+Language
+--------
+
+* Call-by-need reduction.
+
+  Compile-time weak-head evaluation is now call-by-need, but each weak-head
+  reduction has a local heap, so sharing is not maintained between different
+  reductions.
+
+  The reduction machine has been rewritten from scratch and should be faster
+  than the old one in all cases, even those not exploiting laziness.
+
+* Compile-time inlining.
+
+  Simple definitions (that don't do any pattern matching) marked as INLINE are
+  now also inlined at compile time, whereas before they were only inlined by
+  the compiler backends. Inlining only triggers in function bodies and not in
+  type signatures, to preserve goal types as far as possible.
+
+* Automatic inlining.
+
+  Definitions satisfying the following criteria are now automatically inlined
+  (can be disabled using the new NOINLINE pragma):
+
+    - No pattern matching.
+    - Uses each argument at most once.
+    - Does not use all its arguments.
+
+  Automatic inlining can be turned off using the flag `--no-auto-inline`. This
+  can be useful when debugging tactics that may be affected by whether or not
+  a particular definition is being inlined.
+
+### Syntax
+
+* Do-notation.
+
+  There is now builtin do-notation syntax. This means that `do` is a reserved
+  keyword and cannot be used as an identifier.
+
+  Do-blocks support lets and pattern matching binds. If the pattern in a bind
+  is non-exhaustive the other patterns need to be handled in a `where`-clause
+  (see example below).
+
+  Example:
+
+  ```agda
+  filter : {A : Set} → (A → Bool) → List A → List A
+  filter p xs = do
+    x    ← xs
+    true ← return (p x)
+      where false → []
+    return x
+  ```
+
+  Do-blocks desugar to `_>>=_` and `_>>_` before scope checking, so whatever
+  definitions of these two functions are in scope of the do-block will be used.
+
+  More precisely:
+
+  - Simple bind
+
+    ```agda
+    do x ← m
+       m'
+    ```
+    desugars to `m >>= λ x → m'`.
+
+  - Pattern bind
+
+    ```agda
+    do p ← m where pᵢ → mᵢ
+       m'
+    ```
+    desugars to `m >>= λ { p → m'; pᵢ → mᵢ }`, where `pᵢ → mᵢ` is an arbitrary
+    sequence of clauses and follows the usual layout rules for `where`. If `p`
+    is exhaustive the `where` clause can be omitted.
+
+  - Non-binding operation
+
+    ```agda
+    do m
+       m'
+    ```
+    desugars to `m >> m'`.
+
+  - Let
+
+    ```agda
+    do let ds
+       m
+    ```
+    desugars to `let ds in m`, where `ds` is an arbitrary sequence of valid let-declarations.
+
+  - The last statement in the do block must be a plain expression (no let or bind).
+
+  Bind statements can use either `←` or `<-`. Neither of these are reserved, so
+  code outside do-blocks can use identifiers with these names, but inside a
+  do-block they would need to be used qualified or under different names.
+
+* Infix let declarations. [Issue [#917](https://github.com/agda/agda/issues/917)]
+
+  Let declarations can now be defined in infix (or mixfix) style. For instance:
+
+  ```agda
+    f : Nat → Nat
+    f n = let _!_ : Nat → Nat → Nat
+              x ! y = 2 * x + y
+          in n ! n
+  ```
+
+* Overloaded pattern synonyms. [Issue [#2787](https://github.com/agda/agda/issues/2787)]
+
+  Pattern synonyms can now be overloaded if all candidates have the same
+  *shape*. Two pattern synonym definitions have the same shape if they are
+  equal up to variable and constructor names. Shapes are checked at resolution
+  time.
+
+  For instance, the following is accepted:
+
+  ```agda
+    open import Agda.Builtin.Nat
+
+    data List (A : Set) : Set where
+      lnil  : List A
+      lcons : A → List A → List A
+
+    data Vec (A : Set) : Nat → Set where
+      vnil  : Vec A 0
+      vcons : ∀ {n} → A → Vec A n → Vec A (suc n)
+
+    pattern [] = lnil
+    pattern [] = vnil
+
+    pattern _∷_ x xs = lcons x xs
+    pattern _∷_ y ys = vcons y ys
+
+    lmap : ∀ {A B} → (A → B) → List A → List B
+    lmap f []       = []
+    lmap f (x ∷ xs) = f x ∷ lmap f xs
+
+    vmap : ∀ {A B n} → (A → B) → Vec A n → Vec B n
+    vmap f []       = []
+    vmap f (x ∷ xs) = f x ∷ vmap f xs
+  ```
+
+* If the file has no top-level module header, the first module
+  cannot have the same name as the file.
+  [Issues [#2808](https://github.com/agda/agda/issues/2808)
+   and [#1077](https://github.com/agda/agda/issues/1077)]
+
+  This means that the following file `File.agda` is rejected:
+  ```agda
+    -- no module header
+    postulate A : Set
+    module File where -- inner module with the same name as the file
+  ```
+  Agda reports `Illegal declarations(s) before top-level module`
+  at the `postulate`.
+  This is to avoid confusing scope errors in similar situations.
+
+  If a top-level module header is inserted manually, the file is accepted:
+
+  ```agda
+    module _ where    -- user written module header
+    postulate A : Set
+    module File where -- inner module with the same name as the file, ok
+  ```
+
+### Pattern matching
+
+* Forced constructor patterns.
+
+  Constructor patterns can now be dotted to indicate that Agda should not case
+  split on them but rather their value is forced by the type of the other
+  patterns. The difference between this and a regular dot pattern is that
+  forced constructor patterns can still bind variables in their arguments.
+  For example,
+
+  ```agda
+    open import Agda.Builtin.Nat
+
+    data Vec (A : Set) : Nat → Set where
+      nil  : Vec A zero
+      cons : (n : Nat) → A → Vec A n → Vec A (suc n)
+
+    append : {A : Set} (m n : Nat) → Vec A m → Vec A n → Vec A (m + n)
+    append .zero    n nil            ys = ys
+    append (.suc m) n (cons .m x xs) ys = cons (m + n) x (append m n xs ys)
+  ```
+
+* Inferring the type of a function based on its patterns
+
+  Agda no longer infers the type of a function based on the patterns used in
+  its definition. [Issue [#2834](https://github.com/agda/agda/issues/2834)]
+
+  This means that the following Agda program is no longer accepted:
+  ```agda
+    open import Agda.Builtin.Nat
+
+    f : _ → _
+    f zero    = zero
+    f (suc n) = n
+  ```
+  Agda now requires the type of the argument of `f` to be given explicitly.
+
+* Improved constraint solving for pattern matching functions
+
+  Constraint solving for functions where each right-hand side has a distinct
+  rigid head has been extended to also cover the case where some clauses return
+  an argument of the function. A typical example is append on lists:
+
+  ```agda
+    _++_ : {A : Set} → List A → List A → List A
+    []       ++ ys = ys
+    (x ∷ xs) ++ ys = x ∷ (xs ++ ys)
+  ```
+
+  Agda can now solve constraints like `?X ++ ys == 1 ∷ ys` when `ys` is a
+  neutral term.
+
+* Record expressions translated to copatterns
+
+  Definitions of the form
+
+  ```agda
+    f ps = record { f₁ = e₁; ..; fₙ = eₙ }
+  ```
+
+  are translated internally to use copatterns:
+
+  ```agda
+    f ps .f₁ = e₁
+    ...
+    f ps .fₙ = eₙ
+  ```
+
+  This means that `f ps` does not reduce, but thanks to η-equality the two
+  definitions are equivalent.
+
+  The change should lead to fewer big record expressions showing up in goal
+  types, and potentially significant performance improvement in some cases.
+
+  This may have a minor impact on with-abstraction and code using `--rewriting`
+  since η-equality is not used in these cases.
+
+* When using `with`, it is now allowed to replace any pattern from the parent
+  clause by a variable in the with clause. For example:
+
+  ```agda
+    f : List ℕ → List ℕ
+    f [] = []
+    f (x ∷ xs) with x ≤? 10
+    f xs | p = {!!}
+  ```
+
+  In the with clause, `xs` is treated as a let-bound variable with value
+  `.x ∷ .xs` (where `.x : ℕ` and `.xs : List ℕ` are out of scope) and
+  `p : Dec (.x ≤ 10)`.
+
+  Since with-abstraction may change the type of variables, instantiations
+  of variables in the with clause are type checked again after with-abstraction.
+
+### Builtins
+
+* Added support for built-in 64-bit machine words.
+
+  These are defined in `Agda.Builtin.Word` and come with two primitive
+  operations to convert to and from natural numbers.
+
+  ```agda
+    Word64 : Set
+    primWord64ToNat   : Word64 → Nat
+    primWord64FromNat : Nat → Word64
+  ```
+
+  Converting to a natural number is the trivial embedding, and converting from a natural number
+  gives you the remainder modulo 2^64. The proofs of these theorems are not
+  primitive, but can be defined in a library using `primTrustMe`.
+
+  Basic arithmetic operations can be defined on `Word64` by converting to
+  natural numbers, peforming the corresponding operation, and then converting
+  back. The compiler will optimise these to use 64-bit arithmetic. For
+  instance,
+
+  ```agda
+    addWord : Word64 → Word64 → Word64
+    addWord a b = primWord64FromNat (primWord64ToNat a + primWord64ToNat b)
+
+    subWord : Word64 → Word64 → Word64
+    subWord a b = primWord64FromNat (primWord64ToNat a + 18446744073709551616 - primWord64ToNat b)
+  ```
+
+  These compiles (in the GHC backend) to addition and subtraction on
+  `Data.Word.Word64`.
+
+* New primitive primFloatLess and changed semantics of primFloatNumericalLess.
+
+  `primFloatNumericalLess` now uses standard IEEE `<`, so for instance
+  `NaN < x = x < NaN = false`.
+
+  On the other hand `primFloatLess` provides a total order on `Float`, with
+  `-Inf < NaN < -1.0 < -0.0 < 0.0 < 1.0 < Inf`.
+
+* The `SIZEINF` builtin is now given the name `∞` in
+  `Agda.Builtin.Size` [Issue
+  [#2931](https://github.com/agda/agda/issues/2931)].
+
+  Previously it was given the name `ω`.
+
+### Reflection
+
+* New TC primitive: `declarePostulate`. [Issue
+  [#2782](https://github.com/agda/agda/issues/2782)]
+
+  ```agda
+    declarePostulate : Arg Name → Type → TC ⊤
+  ```
+
+  This can be used to declare new postulates. The Visibility of the
+  Arg must not be hidden. This feature fails when executed with
+  `--safe` flag from command-line.
+
+Pragmas and options
+-------------------
+
+* The `--caching` option is ON by default and is also a valid pragma.
+  Caching can (sometimes) speed up re-typechecking in `--interaction`
+  mode by reusing the result of the previous typechecking for the
+  prefix of the file that has not changed (with a granularity at the
+  level of declarations/mutual blocks).
+
+  It can be turned off by passing ```--no-caching``` to ```agda``` or
+  with the following at the top of your file.
+
+  ```agda
+    {-# OPTIONS --no-caching #-}
+  ```
+
+* The `--sharing` and `--no-sharing` options have been deprecated and do
+  nothing.
+
+  Compile-time evaluation is now always call-by-need.
+
+* BUILTIN pragmas can now appear before the top-level module header
+  and in parametrized modules.
+  [Issue [#2824](https://github.com/agda/agda/issues/2824)]
+  ```agda
+    {-# OPTIONS --rewriting #-}
+    open import Agda.Builtin.Equality
+    {-# BUILTIN REWRITE _≡_ #-}  -- here
+    module TopLevel (A : Set) where
+    {-# BUILTIN REWRITE _≡_ #-}  -- or here
+  ```
+  Note that it is still the case that built-ins cannot be bound if
+  they depend on module parameters from an enclosing module. For
+  instance, the following is illegal:
+  ```agda
+    module _ {a} {A : Set a} where
+      data _≡_ (x : A) : A → Set a where
+        refl : x ≡ x
+      {-# BUILTIN EQUALITY _≡_ #-}
+  ```
+
+* Builtin `NIL` and `CONS` have been merged with `LIST`.
+
+  When binding the `LIST` builtin, `NIL` and `CONS` are bound to
+  the appropriate constructors automatically. This means that instead
+  of writing
+
+  ```agda
+  {-# BUILTIN LIST List #-}
+  {-# BUILTIN NIL  []   #-}
+  {-# BUILTIN CONS _∷_  #-}
+  ```
+
+  you just write
+
+  ```agda
+  {-# BUILTIN LIST List #-}
+  ```
+
+  Attempting to bind `NIL` or `CONS` results in a warning and has otherwise no
+  effect.
+
+* The `--no-unicode` pragma prevents Agda from introducing unicode characters
+  when pretty printing a term. Lambda, Arrows and Forall quantifiers are all
+  replaced by their ascii only version. Instead of resorting to subscript
+  suffixes, Agda uses ascii digit characters.
+
+* New option `--inversion-max-depth=N`.
+
+  The depth is used to avoid looping due to inverting pattern matching for
+  unsatisfiable constraints [Issue [#431](https://github.com/agda/agda/issues/431)].
+  This option is only expected to be necessary in pathological cases.
+
+* New option `--no-print-pattern-synonyms`.
+
+  This disables the use of pattern synonyms in output from Agda.
+  See [Issue [#2902](https://github.com/agda/agda/issues/2902)] for situations
+  where this might be desirable.
+
+* New fine-grained control over the warning machinery: ability to (en/dis)able
+  warnings on a one-by-one basis.
+
+* The command line option `--help` now takes an optional argument which
+  allows the user to request more specific usage information about particular
+  topics. The only one added so far is `warning`.
+
+* New pragma NOINLINE.
+
+  ```agda
+  {-# NOINLINE f #-}
+  ```
+
+  Disables automatic inlining of `f`.
+
+* New pragma WARNING_ON_USAGE
+
+  ```
+  {-# WARNING_ON_USAGE QName Message #}
+  ```
+
+  Prints Message whenever QName is used.
+
+Emacs mode
+----------
+
+* Banana brackets have been added to the Agda input method.
+  ```
+    \((   #x2985  LEFT  WHITE PARENTHESIS
+    \))   #x2986  RIGHT WHITE PARENTHESIS
+  ```
+
+* Result splitting will introduce the trailing hidden arguments,
+  if there is nothing else todo
+  [Issue [#2871](https://github.com/agda/agda/issues/2871)].
+  Example:
+  ```agda
+    data Fun (A : Set) : Set where
+      mkFun : (A → A) → Fun A
+
+    test : {A : Set} → Fun A
+    test = ?
+
+  ```
+  Splitting on the result here (`C-c C-c RET`) will append
+  `{A}` to the left hand side.
+  ```agda
+    test {A} = ?
+  ```
+
+* Light highlighting is performed dynamically, even if the file is not
+  loaded [Issue [#2794](https://github.com/agda/agda/issues/2794)].
+
+  This light highlighting is based on the token stream generated by
+  Agda's lexer: the code is only highlighted if the file is lexically
+  correct. If the Agda backend is not busy with something else, then
+  the code is highlighted automatically in certain situations:
+
+  * When the file is saved.
+
+  * When Emacs has been idle, continuously, for a certain period of
+    time (by default 0.2 s) after the last modification of the file,
+    and the file has not been saved (or marked as being unmodified).
+    This functionality can be turned off, and the time period can be
+    customised.
+
+* Highlighting of comments is no longer handled by Font Lock mode
+  [Issue [#2794](https://github.com/agda/agda/issues/2794)].
+
+* The Emacs mode's syntax table has been changed.
+
+  Previously `_` was treated as punctuation. Now it is treated in the
+  same way as most other characters: if the standard syntax table
+  assigns it the syntax class "whitespace", "open parenthesis" or
+  "close parenthesis", then it gets that syntax class, and otherwise
+  it gets the syntax class "word constituent".
+
+Compiler backends
+-----------------
+
+* The GHC backend now automatically compiles BUILTIN LIST to Haskell lists.
+
+  This means that it's no longer necessary to give a COMPILE GHC pragma for the
+  builtin list type. Indeed, doing so has no effect on the compilation and
+  results in a warning.
+
+* The GHC backend performance improvements.
+
+  Generated Haskell code now contains approximate type signatures, which lets
+  GHC get rid of many of the `unsafeCoerce`s. This leads to performance
+  improvements of up to 50% of compiled code.
+
+* The GHC backend now compiles the `INFINITY`, `SHARP` and `FLAT`
+  builtins in a different way [Issue
+  [#2909](https://github.com/agda/agda/issues/2909)].
+
+  Previously these were compiled to (basically) nothing. Now the
+  `INFINITY` builtin is compiled to `Infinity`, available from
+  `MAlonzo.RTE`:
+
+  ```haskell
+  data Inf a            = Sharp { flat :: a }
+  type Infinity level a = Inf a
+  ```
+
+  The `SHARP` builtin is compiled to `Sharp`, and the `FLAT` builtin
+  is (by default) compiled to a corresponding destructor.
+
+  Note that code that interacts with Haskell libraries may have to be
+  updated. As an example, here is one way to print colists of
+  characters using the Haskell function `putStr`:
+
+  ```agda
+  open import Agda.Builtin.Char
+  open import Agda.Builtin.Coinduction
+  open import Agda.Builtin.IO
+  open import Agda.Builtin.Unit
+
+  data Colist {a} (A : Set a) : Set a where
+    []  : Colist A
+    _∷_ : A → ∞ (Colist A) → Colist A
+
+  {-# FOREIGN GHC
+    data Colist a    = Nil | Cons a (MAlonzo.RTE.Inf (Colist a))
+    type Colist' l a = Colist a
+
+    fromColist :: Colist a -> [a]
+    fromColist Nil         = []
+    fromColist (Cons x xs) = x : fromColist (MAlonzo.RTE.flat xs)
+    #-}
+
+  {-# COMPILE GHC Colist = data Colist' (Nil | Cons) #-}
+
+  postulate
+    putStr : Colist Char → IO ⊤
+
+  {-# COMPILE GHC putStr = putStr . fromColist #-}
+  ```
+
+* `COMPILE GHC` pragmas have been included for the size primitives
+  [Issue [#2879](https://github.com/agda/agda/issues/2879)].
+
+LaTeX backend
+-------------
+
+* The `code` environment can now take arguments [Issues
+  [#2744](https://github.com/agda/agda/issues/2744) and
+  [#2453](https://github.com/agda/agda/issues/2453)].
+
+  Everything from \begin{code} to the end of the line is preserved in
+  the generated LaTeX code, and not treated as Agda code.
+
+  The default implementation of the `code` environment recognises one
+  optional argument, `hide`, which can be used for code that should be
+  type-checked, but not typeset:
+  ```latex
+  \begin{code}[hide]
+    open import Module
+  \end{code}
+  ```
+
+  The `AgdaHide` macro has not been removed, but has been deprecated
+  in favour of `[hide]`.
+
+* The `AgdaSuppressSpace` and `AgdaMultiCode` environments no longer
+  take an argument.
+
+  Instead some documents need to be compiled multiple times.
+
+* The `--count-clusters` flag can now be given in `OPTIONS` pragmas.
+
+* The `nofontsetup` option to the LaTeX package `agda` was broken, and
+  has (hopefully) been fixed
+  [Issue [#2773](https://github.com/agda/agda/issues/2773)].
+
+  Fewer packages than before are loaded when `nofontsetup` is used,
+  see `agda.sty` for details. Furthermore, if LuaLaTeX or XeLaTeX are
+  not used, then the font encoding is no longer changed.
+
+* The new option `noinputencodingsetup` instructs the LaTeX package
+  `agda` to not change the input encoding, and to not load the `ucs`
+  package.
+
+* Underscores are now typeset using `\AgdaUnderscore{}`.
+
+  The default implementation is `\_` (the command that was previously
+  generated for underscores). Note that it is possible to override
+  this implementation.
+
+* OtherAspects (unsolved meta variables, catchall clauses, etc.) are
+  now correctly highlighted in the LaTeX backend (and the HTML one).
+  [Issue [#2474](https://github.com/agda/agda/issues/2474)]
+
+HTML backend
+------------
+
+* An identifier (excluding bound variables),
+  gets the identifier itself as an anchor,
+  _in addition_ to the file position
+  [Issue [#2756](https://github.com/agda/agda/issues/2756)].
+  In Agda 2.5.3, the identifier anchor would _replace_ the file position anchor
+  [Issue [#2604](https://github.com/agda/agda/issues/2604)].
+
+  Symbolic anchors look like
+  ```html
+  <a id="test1">
+  <a id="M.bla">
+  ```
+  while file position anchors just give the character position in the file:
+  ```html
+  <a id="42">
+  ```
+
+  Top-level module names do not get a symbolic anchor, since the position of
+  a top-level module is defined to be the beginning of the file.
+
+  Example:
+
+  ```agda
+  module Issue2604 where   -- Character position anchor
+
+  test1 : Set₁             -- Issue2604.html#test1
+  test1 = bla
+    where
+    bla = Set              -- Only character position anchor
+
+  test2 : Set₁             -- Issue2604.html#test2
+  test2 = bla
+    where
+    bla = Set              -- Only character position anchor
+
+  test3 : Set₁             -- Issue2604.html#test3
+  test3 = bla
+    module M where         -- Issue2604.html#M
+    bla = Set              -- Issue2604.html#M.bla
+
+  module NamedModule where -- Issue2604.html#NamedModule
+    test4 : Set₁           -- Issue2604.html#NamedModule.test4
+    test4 = M.bla
+
+  module _ where           -- Only character position anchor
+    test5 : Set₁           -- Only character position anchor
+    test5 = M.bla
+  ```
+
+List of closed issues
+---------------------
+
+For 2.5.4, the following issues have been closed
+(see [bug tracker](https://github.com/agda/agda/issues)):
+
+  - [#351](https://github.com/agda/agda/issues/351): Constraint solving for irrelevant metas
+  - [#421](https://github.com/agda/agda/issues/421): Higher order positivity
+  - [#431](https://github.com/agda/agda/issues/431): Constructor-headed function makes type-checker diverge
+  - [#437](https://github.com/agda/agda/issues/437): Detect when something cannot be a function type
+  - [#488](https://github.com/agda/agda/issues/488): Refining on user defined syntax mixes up the order of the subgoals
+  - [#681](https://github.com/agda/agda/issues/681): Lack of visual state indicators in new Emacs mode
+  - [#689](https://github.com/agda/agda/issues/689): Contradictory constraints should yield error
+  - [#708](https://github.com/agda/agda/issues/708): Coverage checker not taking literal patterns into account properly
+  - [#875](https://github.com/agda/agda/issues/875): Nonstrict irrelevance violated by implicit inference
+  - [#964](https://github.com/agda/agda/issues/964): Allow unsolved metas in imported files
+  - [#987](https://github.com/agda/agda/issues/987): --html anchors could be more informative
+  - [#1054](https://github.com/agda/agda/issues/1054): Inlined Agda code in LaTeX backend
+  - [#1131](https://github.com/agda/agda/issues/1131): Infix definitions not allowed in let definitions
+  - [#1169](https://github.com/agda/agda/issues/1169): Auto fails with non-terminating function
+  - [#1268](https://github.com/agda/agda/issues/1268): Hard to print type of variable if the type starts with an instance argument
+  - [#1384](https://github.com/agda/agda/issues/1384): Order of constructor arguments matters for coverage checker
+  - [#1425](https://github.com/agda/agda/issues/1425): Instances with relevant recursive instance arguments are not considered in irrelevant positions
+  - [#1548](https://github.com/agda/agda/issues/1548): Confusing error about ambiguous definition with parametrized modules
+  - [#1884](https://github.com/agda/agda/issues/1884): what is the format of the libraries and defaults files
+  - [#1906](https://github.com/agda/agda/issues/1906): Possible performance problem
+  - [#2056](https://github.com/agda/agda/issues/2056): Cannot instantiate meta to solution...: Pattern checking done too early in where block
+  - [#2067](https://github.com/agda/agda/issues/2067): Display forms in parameterised module too general
+  - [#2183](https://github.com/agda/agda/issues/2183): Allow splitting on dotted variables
+  - [#2226](https://github.com/agda/agda/issues/2226): open {{...}} gets hiding wrong
+  - [#2255](https://github.com/agda/agda/issues/2255): Performance issue with deeply-nested lambdas
+  - [#2306](https://github.com/agda/agda/issues/2306): Commands in the emacs-mode get confused if we add question marks to the file
+  - [#2384](https://github.com/agda/agda/issues/2384): More fine-grained blocking in constraint solver
+  - [#2401](https://github.com/agda/agda/issues/2401): LaTeX backend error
+  - [#2404](https://github.com/agda/agda/issues/2404): checkType doesn't accept a type-checking definition checked with the same type
+  - [#2420](https://github.com/agda/agda/issues/2420): Failed to solve level constraints in record type with hole
+  - [#2421](https://github.com/agda/agda/issues/2421): After emacs starts up, Agda does not process file without restart of Agda
+  - [#2436](https://github.com/agda/agda/issues/2436): Agda allows coinductive records with eta-equality
+  - [#2450](https://github.com/agda/agda/issues/2450): Irrelevant variables are pruned too eagerly
+  - [#2474](https://github.com/agda/agda/issues/2474): The LaTeX and HTML backends do not highlight (all) unsolved metas
+  - [#2484](https://github.com/agda/agda/issues/2484): Regression related to sized types
+  - [#2526](https://github.com/agda/agda/issues/2526): Better documentation of record modules
+  - [#2536](https://github.com/agda/agda/issues/2536): UTF8 parsed incorrectly for literate agda files
+  - [#2565](https://github.com/agda/agda/issues/2565): Options for the interaction action give to keep the overloaded literals and sections?
+  - [#2576](https://github.com/agda/agda/issues/2576): Shadowing data decl by data sig produces Missing type signature error
+  - [#2594](https://github.com/agda/agda/issues/2594): Valid partial cover rejected: "Cannot split on argument of non-datatype"
+  - [#2600](https://github.com/agda/agda/issues/2600): Stack complains about Agda.cabal
+  - [#2607](https://github.com/agda/agda/issues/2607): Instance search confused when an instance argument is sourced from a record
+  - [#2617](https://github.com/agda/agda/issues/2617): Installation instructions
+  - [#2623](https://github.com/agda/agda/issues/2623): Incorrect indentation when \AgdaHide is used
+  - [#2634](https://github.com/agda/agda/issues/2634): Fixity declaration ignored in definitions in record
+  - [#2636](https://github.com/agda/agda/issues/2636): The positivity checker complains when a new definition is added in the same where clause
+  - [#2640](https://github.com/agda/agda/issues/2640): Unifier dots the relevant pattern variables when it should dot the irrelevant ones
+  - [#2668](https://github.com/agda/agda/issues/2668): Changing the visibility of a module parameter breaks `with`
+  - [#2728](https://github.com/agda/agda/issues/2728): Bad interaction between caching and the warning machinery
+  - [#2738](https://github.com/agda/agda/issues/2738): Update Stackage LTS from 9.1 to version supporting Alex 3.2.3
+  - [#2744](https://github.com/agda/agda/issues/2744): It should be possible to give arguments to the code environment
+  - [#2745](https://github.com/agda/agda/issues/2745): Broken build with GHC 7.8.4 due to (new) version 1.2.2.0 of hashtables
+  - [#2749](https://github.com/agda/agda/issues/2749): Add --no-unicode cli option to Agda
+  - [#2751](https://github.com/agda/agda/issues/2751): Unsolved constraints, but no highlighting
+  - [#2752](https://github.com/agda/agda/issues/2752): Mutual blocks inside instance blocks
+  - [#2753](https://github.com/agda/agda/issues/2753): Unsolved constraint, related to instance arguments and sized types
+  - [#2756](https://github.com/agda/agda/issues/2756): HTML backend generates broken links
+  - [#2758](https://github.com/agda/agda/issues/2758): Relevant meta is instantiated with irrelevant solution
+  - [#2759](https://github.com/agda/agda/issues/2759): Empty mutual blocks should be warning rather than error
+  - [#2762](https://github.com/agda/agda/issues/2762): Automatically generate DISPLAY pragmas to fold pattern synonyms
+  - [#2763](https://github.com/agda/agda/issues/2763): Internal Error at "src/full/Agda/TypeChecking/Abstract.hs:138"
+  - [#2765](https://github.com/agda/agda/issues/2765): Inferred level expressions are often "reversed"
+  - [#2769](https://github.com/agda/agda/issues/2769): Agda prints ill-formed expression, record argument dropped
+  - [#2771](https://github.com/agda/agda/issues/2771): Erroneous 'with' error message
+  - [#2773](https://github.com/agda/agda/issues/2773): The nofontsetup option does not work as advertised
+  - [#2775](https://github.com/agda/agda/issues/2775): Irrelevance to be taken into account in 'with' abstraction.
+  - [#2776](https://github.com/agda/agda/issues/2776): Dotted variable in inferred type
+  - [#2780](https://github.com/agda/agda/issues/2780): Improve level constraint solving for groups of inequality constraints
+  - [#2782](https://github.com/agda/agda/issues/2782): Extending Agda reflection to introduce postulates
+  - [#2785](https://github.com/agda/agda/issues/2785): internal error @ ConcreteToAbstract.hs:721
+  - [#2787](https://github.com/agda/agda/issues/2787): Overloaded pattern synonyms
+  - [#2792](https://github.com/agda/agda/issues/2792): Safe modules can sometimes not be imported from unsafe modules
+  - [#2794](https://github.com/agda/agda/issues/2794): Using \texttt{-} destroys code coloring in literate file
+  - [#2796](https://github.com/agda/agda/issues/2796): Overloaded (inherited) projection resolution fails with parametrized record
+  - [#2798](https://github.com/agda/agda/issues/2798): The LaTeX backend ignores the "operator" aspect
+  - [#2802](https://github.com/agda/agda/issues/2802): Printing of overloaded functions broken due to eager normalization of projections
+  - [#2803](https://github.com/agda/agda/issues/2803): Case splitting loses names of hidden arguments
+  - [#2808](https://github.com/agda/agda/issues/2808): Confusing error when inserting declaration before top-level module
+  - [#2810](https://github.com/agda/agda/issues/2810): Make `--caching` a pragma option
+  - [#2811](https://github.com/agda/agda/issues/2811): OPTION --caching allowed in file (Issue #2810)
+  - [#2819](https://github.com/agda/agda/issues/2819): Forcing analysis doesn't consider relevance
+  - [#2821](https://github.com/agda/agda/issues/2821): BUILTIN BOOL gremlin
+  - [#2824](https://github.com/agda/agda/issues/2824): Allow {-# BUILTIN #-} in preamble and in parametrized modules
+  - [#2826](https://github.com/agda/agda/issues/2826): Case splitting on earlier variable uses duplicate variable name
+  - [#2827](https://github.com/agda/agda/issues/2827): Variables off in with-clauses.  Parameter refinement?
+  - [#2831](https://github.com/agda/agda/issues/2831): NO_POSITIVITY_CHECK pragma can be written before a mutual block without data or record types
+  - [#2832](https://github.com/agda/agda/issues/2832): BUILTIN NIL and CONS are not needed
+  - [#2834](https://github.com/agda/agda/issues/2834): Disambiguation of type based on pattern leads to non-unique meta solution
+  - [#2836](https://github.com/agda/agda/issues/2836): The Emacs mode does not handle .lagda.tex files
+  - [#2840](https://github.com/agda/agda/issues/2840): Internal error in positivity with modules/datatype definitions
+  - [#2841](https://github.com/agda/agda/issues/2841): Opting out of idiom brackets
+  - [#2844](https://github.com/agda/agda/issues/2844): Root documentation URL redirects to version 2.5.2
+  - [#2849](https://github.com/agda/agda/issues/2849): Internal error at absurd pattern followed by `rewrite`
+  - [#2854](https://github.com/agda/agda/issues/2854): Agda worries about possibly empty type of sizes even when no builtins for size are active
+  - [#2855](https://github.com/agda/agda/issues/2855): Single-clause definition is both unreachable and incomplete
+  - [#2856](https://github.com/agda/agda/issues/2856): Panic: unbound variable
+  - [#2859](https://github.com/agda/agda/issues/2859): Error "pattern variable shadows constructor" caused by parameter refinement
+  - [#2862](https://github.com/agda/agda/issues/2862): inconsistency from a mutual datatype declaration and module definition
+  - [#2867](https://github.com/agda/agda/issues/2867): Give does not insert parenthesis for module parameters
+  - [#2868](https://github.com/agda/agda/issues/2868): With --postfix-projections, record fields are printed preceded by a dot when working within the record
+  - [#2870](https://github.com/agda/agda/issues/2870): Lexical error for \- (hyphen)
+  - [#2871](https://github.com/agda/agda/issues/2871): Introduce just trailing hidden arguments by result splitting
+  - [#2873](https://github.com/agda/agda/issues/2873): Refinement problem in presence of overloaded constructors
+  - [#2874](https://github.com/agda/agda/issues/2874): Internal error in src/full/Agda/TypeChecking/Coverage/Match.hs:312
+  - [#2878](https://github.com/agda/agda/issues/2878): Support for GHC 8.4.1
+  - [#2879](https://github.com/agda/agda/issues/2879): Include COMPILE GHC pragmas for size primitives
+  - [#2881](https://github.com/agda/agda/issues/2881): Internal error in BasicOps
+  - [#2883](https://github.com/agda/agda/issues/2883): "internal error in TypeChecking/Substitute.hs:379"
+  - [#2884](https://github.com/agda/agda/issues/2884): Missing PDF user manual in the tarball
+  - [#2888](https://github.com/agda/agda/issues/2888): Internal error caused by new forcing translation
+  - [#2894](https://github.com/agda/agda/issues/2894): Unifier tries to eta expand non-eta record
+  - [#2896](https://github.com/agda/agda/issues/2896): Unifier throws away pattern
+  - [#2897](https://github.com/agda/agda/issues/2897): Internal error for local modules with refined parameters
+  - [#2904](https://github.com/agda/agda/issues/2904): No tab completion for GHCNoMain
+  - [#2906](https://github.com/agda/agda/issues/2906): Confusing "cannot be translated to a Haskell type" error message
+  - [#2908](https://github.com/agda/agda/issues/2908): primForce is compiled away
+  - [#2909](https://github.com/agda/agda/issues/2909): Agda uses newtypes incorrectly, causing wellformed programs to loop
+  - [#2911](https://github.com/agda/agda/issues/2911): Inferring missing instance clause panics in refined context
+  - [#2912](https://github.com/agda/agda/issues/2912): Add fine-grained control over the displayed warnings
+  - [#2914](https://github.com/agda/agda/issues/2914): Slicing ignores as pragma?
+  - [#2916](https://github.com/agda/agda/issues/2916): The GHC backend generates code with an incorrect number of constructor arguments
+  - [#2917](https://github.com/agda/agda/issues/2917): Very slow due to unsolved size?
+  - [#2919](https://github.com/agda/agda/issues/2919): Internal error in Agda.TypeChecking.Forcing
+  - [#2921](https://github.com/agda/agda/issues/2921): COMPILE data for data types with erased constructor arguments
+  - [#2923](https://github.com/agda/agda/issues/2923): Word.agda not included as builtin
+  - [#2925](https://github.com/agda/agda/issues/2925): Allow adding the same rewrite rules multiple times
+  - [#2927](https://github.com/agda/agda/issues/2927): Panic related to sized types
+  - [#2928](https://github.com/agda/agda/issues/2928): Internal error in Agda.TypeChecking.Rules.LHS
+  - [#2931](https://github.com/agda/agda/issues/2931): Rename Agda.Builtin.Size.ω to ∞?
+  - [#2941](https://github.com/agda/agda/issues/2941): "coinductive" record inconsistent
+  - [#2944](https://github.com/agda/agda/issues/2944): Regression, seemingly related to record expressions
+  - [#2945](https://github.com/agda/agda/issues/2945): Inversion warning in code that used to be accepted
+  - [#2947](https://github.com/agda/agda/issues/2947): Internal error in Agda.TypeChecking.Forcing
+  - [#2952](https://github.com/agda/agda/issues/2952): Wrong compilation of pattern matching to Haskell
+  - [#2953](https://github.com/agda/agda/issues/2953): Generated Haskell code does not typecheck
+  - [#2954](https://github.com/agda/agda/issues/2954): Pattern matching on string gives unexpected unreachable clause
+  - [#2957](https://github.com/agda/agda/issues/2957): Support for async 2.2.1
+  - [#2958](https://github.com/agda/agda/issues/2958): `as` names being duplicated in buffer after `with`
+  - [#2959](https://github.com/agda/agda/issues/2959): Repeating a successful command after revert + reload fails with caching enabled
+  - [#2960](https://github.com/agda/agda/issues/2960): Uncommenting indented lines doesn't work
+  - [#2963](https://github.com/agda/agda/issues/2963): Extended lambdas bypass positivity checking in records
+  - [#2966](https://github.com/agda/agda/issues/2966): Internal error in Auto
+  - [#2968](https://github.com/agda/agda/issues/2968): Bad Interaction with copatterns and eta?, leads to ill-typed terms in error messages.
+  - [#2971](https://github.com/agda/agda/issues/2971): Copattern split with `--no-irrelevant-projections` panics
+  - [#2974](https://github.com/agda/agda/issues/2974): Copatterns break canonicity
+  - [#2975](https://github.com/agda/agda/issues/2975): Termination checker runs too early for definitions inside record (or: positivity checker runs too late)
+  - [#2976](https://github.com/agda/agda/issues/2976): Emacs mode reports errors in connection with highlighting comments
+  - [#2978](https://github.com/agda/agda/issues/2978): Double solving of meta
+  - [#2985](https://github.com/agda/agda/issues/2985): The termination checker accepts non-terminating code
+  - [#2989](https://github.com/agda/agda/issues/2989): Internal error when checking record match in let expr
+  - [#2990](https://github.com/agda/agda/issues/2990): Performance regression related to the abstract machine
+  - [#2994](https://github.com/agda/agda/issues/2994): Solution accepted in hole is subsequently rejected on reload
+  - [#2996](https://github.com/agda/agda/issues/2996): Internal error with -v tc.cover:20
+  - [#2997](https://github.com/agda/agda/issues/2997): Internal error in Agda.TypeChecking.Rules.LHS
+  - [#2998](https://github.com/agda/agda/issues/2998): Regression: With clause pattern x is not an instance of its parent pattern "eta expansion of x"
+  - [#3002](https://github.com/agda/agda/issues/3002): Spurious 1 after simplification
+  - [#3004](https://github.com/agda/agda/issues/3004): Agda hangs on extended lambda
+  - [#3007](https://github.com/agda/agda/issues/3007): Internal error in Parser
+  - [#3012](https://github.com/agda/agda/issues/3012): Internal Error at : "src/full/Agda/TypeChecking/Reduce/Fast.hs:1030"
+  - [#3014](https://github.com/agda/agda/issues/3014): Internal error in Rules.LHS
+  - [#3020](https://github.com/agda/agda/issues/3020): Missing highlighting in record modules
+  - [#3023](https://github.com/agda/agda/issues/3023): Support for GHC 8.4.2
+  - [#3024](https://github.com/agda/agda/issues/3024): Postfix projection patterns not highlighted correctly with agda --latex
+  - [#3030](https://github.com/agda/agda/issues/3030): [ warning ] user defined warnings
+  - [#3031](https://github.com/agda/agda/issues/3031): Eta failure for record meta with irrelevant fields
+  - [#3033](https://github.com/agda/agda/issues/3033): Giving and solving don't insert parenthesis for applications in dot pattern
+  - [#3044](https://github.com/agda/agda/issues/3044): Internal error in src/full/Agda/TypeChecking/Substitute/Class.hs:209
+  - [#3045](https://github.com/agda/agda/issues/3045): GHC backend generates type without enough arguments
+  - [#3046](https://github.com/agda/agda/issues/3046): do-notation causes parse errors in subsequent where clauses
+  - [#3049](https://github.com/agda/agda/issues/3049): Positivity unsoundness
+  - [#3050](https://github.com/agda/agda/issues/3050): We revert back to call-by-name during positivity checking
+  - [#3051](https://github.com/agda/agda/issues/3051): Pattern synonyms should be allowed in mutual blocks
+  - [#3052](https://github.com/agda/agda/issues/3052): Another recent inference change
+  - [#3062](https://github.com/agda/agda/issues/3062): Literal match does not respect first-match semantics
+  - [#3063](https://github.com/agda/agda/issues/3063): Internal error in Agda.TypeChecking.Forcing
+  - [#3064](https://github.com/agda/agda/issues/3064): Coverage checker bogus on literals combined with copatterns
+  - [#3065](https://github.com/agda/agda/issues/3065): Internal error in coverage checker triggered by literal dot pattern
+  - [#3067](https://github.com/agda/agda/issues/3067): checking hangs on invalid program
+  - [#3072](https://github.com/agda/agda/issues/3072): invalid section printing
+  - [#3074](https://github.com/agda/agda/issues/3074): Wrong hiding causes internal error in LHS checker
+  - [#3075](https://github.com/agda/agda/issues/3075): Automatic inlining and tactics
+  - [#3078](https://github.com/agda/agda/issues/3078): Error building with GHC 7.10.2: Missing transformers library
+  - [#3079](https://github.com/agda/agda/issues/3079): Wrong parameter hiding for instance open
+  - [#3080](https://github.com/agda/agda/issues/3080): Case splitting prints out-of-scope pattern synonyms
+  - [#3082](https://github.com/agda/agda/issues/3082): Emacs mode regression: a ? inserted before existing hole hijacks its interaction point
+  - [#3083](https://github.com/agda/agda/issues/3083): Wrong hiding in module application
+  - [#3084](https://github.com/agda/agda/issues/3084): Changes to mode line do not take effect immediately
+  - [#3085](https://github.com/agda/agda/issues/3085): Postpone checking a pattern let binding when type is blocked
+  - [#3090](https://github.com/agda/agda/issues/3090): Internal error in parser when using parentheses in BUILTIN pragma
+  - [#3096](https://github.com/agda/agda/issues/3096): Support GHC 8.4.3
+
+
 Release notes for Agda version 2.5.3
 ====================================
 
@@ -366,13 +1224,13 @@
   --- | ---
   `{-# COMPILED f e #-}` | `{-# COMPILE GHC f = e #-}`
   `{-# COMPILED_TYPE A T #-}` | `{-# COMPILE GHC A = type T #-}`
-  `{-# COMPILED_DATA A D C1 .. CN #-}` | `{-# COMPILE GHC A = data D (C1 | .. | CN) #-}`
+  `{-# COMPILED_DATA A D C1 .. CN #-}` | `{-# COMPILE GHC A = data D (C1 \| .. \| CN) #-}`
   `{-# COMPILED_DECLARE_DATA #-}` | obsolete, removed
   `{-# COMPILED_EXPORT f g #-}` | `{-# COMPILE GHC f as g #-}`
   `{-# IMPORT M #-}` | `{-# FOREIGN GHC import qualified M #-}`
   `{-# HASKELL code #-}` | `{-# FOREIGN GHC code #-}`
   `{-# COMPILED_UHC f e #-}` | `{-# COMPILE UHC f = e #-}`
-  `{-# COMPILED_DATA_UHC A D C1 .. CN #-}` | `{-# COMPILE UHC A = data D (C1 | .. | CN) #-}`
+  `{-# COMPILED_DATA_UHC A D C1 .. CN #-}` | `{-# COMPILE UHC A = data D (C1 \| .. \| CN) #-}`
   `{-# IMPORT_UHC M #-}` | `{-# FOREIGN UHC __IMPORT__ M #-}`
   `{-# COMPILED_JS f e #-}` | `{-# COMPILE JS f = e #-}`
 
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2005-2017 remains with the authors.
+Copyright (c) 2005-2018 remains with the authors.
 Agda 2 was originally written by Ulf Norell,
 partially based on code from Agda 1 by Catarina Coquand and Makoto Takeyama,
 and from Agdalight by Ulf Norell and Andreas Abel.
@@ -12,7 +12,7 @@
 Andjelkovic, Marcin Benke, Jean-Philippe Bernardy, Guillaume Brunerie,
 James Chapman, Dominique Devriese, Péter Diviánszki, Olle Fredriksson,
 Adam Gundry, Daniel Gustafsson, Kuen-Bang Hou (favonia), Patrik
-Jansson, Alan Jeffrey, Wolfram Kahl, Pepijn Kokke, Fredrik Lindblad,
+Jansson, Alan Jeffrey, Wolfram Kahl, Wen Kokke, Fredrik Lindblad,
 Francesco Mazzoli, Stefan Monnier, Darin Morrison, Guilhem Moulin,
 Nicolas Pouillard, Nobuo Yamashita, Christian Sattler, and Makoto
 Takeyama.  The full list of contributors is available at
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,16 +7,9 @@
 [![Appveyor Status](https://ci.appveyor.com/api/projects/status/x6liln2dol0bg4qw/branch/stable-2.5?svg=true)](https://ci.appveyor.com/project/gallais/agda)
 [![Documentation Status](https://readthedocs.org/projects/agda/badge/?version=stable-2.5)](http://agda.readthedocs.io/en/stable-2.5/?badge=stable-2.5)
 
-Table of contents:
-
-* [Documentation](#documentation)
-* [Prerequisites](#prerequisites)
-* [Installing Agda](#installing-agda)
-* [Configuring the Emacs mode](#configuring-the-emacs-mode)
-* [Installing Emacs under Windows](#installing-emacs-under-windows)
-
-Note that this README only discusses installation of Agda, not its standard
-library. See the [Agda Wiki][agdawiki] for information about the library.
+Note that this README is only about Agda, not its standard
+library. See the [Agda Wiki][agdawiki] for information about the
+library.
 
 Documentation
 -------------
@@ -24,173 +17,17 @@
 * [User manual](http://agda.readthedocs.io)
 * [CHANGELOG](https://github.com/agda/agda/blob/master/CHANGELOG.md)
 
-Prerequisites
--------------
-
-You need recent versions of the following programs:
-
-* GHC:           http://www.haskell.org/ghc/
-* cabal-install: http://www.haskell.org/cabal/
-* Alex:          http://www.haskell.org/alex/
-* Happy:         http://www.haskell.org/happy/
-* cpphs:         http://projects.haskell.org/cpphs/
-* GNU Emacs:     http://www.gnu.org/software/emacs/
-
-You should also make sure that programs installed by cabal-install are
-on your shell's search path.
-
-For instructions on installing a suitable version of Emacs under
-Windows, see [below](#installing-emacs-under-windows).
-
-Non-Windows users need to ensure that the development files for the C
-libraries zlib and ncurses are installed (see http://zlib.net and
-http://www.gnu.org/software/ncurses/). Your package manager may be
-able to install these files for you. For instance, on Debian or Ubuntu
-it should suffice to run
-
-    apt-get install zlib1g-dev libncurses5-dev
-
-as root to get the correct files installed.
-
-Optionally one can also install the [ICU](http://site.icu-project.org)
-library, which is used to implement the `--count-clusters` flag. Under
-Debian or Ubuntu it may suffice to install `libicu-dev`. Once the ICU
-library is installed one can hopefully enable the `--count-clusters`
-flag by giving the `-fenable-cluster-counting` flag to `cabal
-install`. Note that `make install` by default enables
-`-fenable-cluster-counting`.
-
-### Note on GHC's CPP language extension
-
-Recent versions of Clang's preprocessor don't work well with Haskell.
-In order to get some dependencies to build, you may need to set up Cabal
-to have GHC use cpphs by default. You can do this by adding
-
-    program-default-options
-      ghc-options: -pgmPcpphs -optP--cpp
-
-to your .cabal/config file. (You must be using cabal >= 1.18. Note
-that some packages may not compile with this option set.)
-
-You don't need to set this option to install *Agda* from the current
-development source; Agda.cabal now uses cpphs.
-
-
-Installing Agda
----------------
-
-There are several ways to install Agda:
-
-
-### Using a binary package prepared for your platform
-
-Recommended if such a package exists. See the [Agda Wiki][agdawiki].
-
-
-### Using a released source package from Hackage
-
-Install the prerequisites mentioned above, then run the following commands:
-
-    cabal update
-    cabal install Agda
-    agda-mode setup
-
-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))
-                    (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 development version of the code
-
-You can obtain tarballs of the development version from the [Agda
-Wiki][agdawiki], or clone the repository.
-
-Install the prerequisites discussed in [Prerequisites](#prerequisites).
-
-Then, either:
-
-*(1a)* Run the following commands in the top-level directory of the Agda source
-tree to install Agda:
-
-    cabal update
-    cabal install
-
-*(1b)* Run `agda-mode setup` to set up Emacs for use with Agda. Alternatively,
-add the following text to your .emacs file:
-
-    (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.
-
-*(2)* Or, you can try to install Agda (including a compiled Emacs mode) by
-running the following command:
-
-    make install
-
-
-Configuring the Emacs mode
---------------------------
-
-If you want to you can customise the Emacs mode. Just start Emacs and
-type the following:
-
-    M-x load-library RET agda2-mode RET
-    M-x customize-group RET agda2 RET
-
-This is useful if you want to change the Agda search path, in which
-case you should change the agda2-include-dirs variable.
-
-If you want some specific settings for the Emacs mode you can add them
-to agda2-mode-hook. For instance, if you do not want to use the Agda
-input method (for writing various symbols like ∀≥ℕ→π⟦⟧) you can add
-the following to your .emacs:
-
-    (add-hook 'agda2-mode-hook
-              '(lambda ()
-                ; If you do not want to use any input method:
-                (deactivate-input-method)
-                ; (In some versions of Emacs you should use
-                ; inactivate-input-method instead of
-                ; deactivate-input-method.)
-
-                ; If you want to use the X input method:
-                (set-input-method "X")))
-
-Note that, on some systems, the Emacs mode changes the default font of
-the current frame in order to enable many Unicode symbols to be
-displayed. This only works if the right fonts are available, though.
-If you want to turn off this feature, then you should customise the
-agda2-fontset-name variable.
-
-------------------------------------------------------------------------
-Installing Emacs under Windows
-------------------------------------------------------------------------
-
-A precompiled version of Emacs 24.3, with the necessary mathematical
-fonts, is available at http://homepage.cs.uiowa.edu/~astump/agda/
+Getting Started
+----------------
 
-[agdawiki]: http://wiki.portal.chalmers.se/agda/pmwiki.php
+* [Prerequisites](http://agda.readthedocs.io/en/latest/getting-started/prerequisites.html)
+* [Installation](http://agda.readthedocs.io/en/latest/getting-started/installation.html)
+* [Quick guide to editing, type checking and compiling Agda
+  code](http://agda.readthedocs.io/en/latest/getting-started/quick-guide.html)
 
 Hacking on Agda
 ---------------
 
 Head to [`HACKING`](https://github.com/agda/agda/blob/master/HACKING)
+
+[agdawiki]: http://wiki.portal.chalmers.se/agda/pmwiki.php
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -18,7 +18,7 @@
   [ "Bool", "Char", "Coinduction", "Equality", "Float"
   , "FromNat", "FromNeg", "FromString", "IO", "Int", "List"
   , "Nat", "Reflection", "Size", "Strict", "String"
-  , "TrustMe", "Unit" ]
+  , "TrustMe", "Unit", "Word" ]
 
 checkAgdaPrimitive :: PackageDescription -> LocalBuildInfo -> RegisterFlags -> IO ()
 checkAgdaPrimitive pkg info flags | regGenPkgConf flags /= NoFlag = return ()   -- Gets run twice, only do this the second time
@@ -41,4 +41,3 @@
 checkAgdaPrimitiveAndRegister pkg info hooks flags = do
   checkAgdaPrimitive pkg info flags
   regHook simpleUserHooks pkg info hooks flags  -- This actually does something useful
-
diff --git a/dist/build/Agda/Syntax/Parser/Lexer.hs b/dist/build/Agda/Syntax/Parser/Lexer.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/Agda/Syntax/Parser/Lexer.hs
@@ -0,0 +1,1686 @@
+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}
+{-# LANGUAGE CPP,MagicHash #-}
+{-# LINE 1 "src/full/Agda/Syntax/Parser/Lexer.x" #-}
+
+{-# OPTIONS_GHC -fno-warn-deprecated-flags   #-}
+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
+{-# OPTIONS_GHC -fno-warn-tabs               #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports     #-}
+
+{-# LANGUAGE BangPatterns #-}
+
+{-| The lexer is generated by Alex (<http://www.haskell.org/alex>) and is an
+    adaptation of GHC's lexer. The main lexing function 'lexer' is called by
+    the "Agda.Syntax.Parser.Parser" to get the next token from the input.
+-}
+module Agda.Syntax.Parser.Lexer
+    ( -- * The main function
+      lexer
+      -- * Lex states
+    , normal, code
+    , layout, empty_layout, bol, imp_dir
+      -- * Alex generated functions
+    , AlexReturn(..), alexScanUser
+    ) where
+
+import Agda.Syntax.Parser.Alex
+import Agda.Syntax.Parser.Comments
+#ifndef __HADDOCK__
+import {-# SOURCE #-} Agda.Syntax.Parser.Layout
+import {-# SOURCE #-} Agda.Syntax.Parser.LexActions
+#endif
+import Agda.Syntax.Parser.Monad
+import Agda.Syntax.Parser.StringLiterals
+import Agda.Syntax.Parser.Tokens
+import Agda.Syntax.Literal
+
+
+#if __GLASGOW_HASKELL__ >= 603
+#include "ghcconfig.h"
+#elif defined(__GLASGOW_HASKELL__)
+#include "config.h"
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+import Data.Array.Base (unsafeAt)
+#else
+import Array
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import GHC.Exts
+#else
+import GlaExts
+#endif
+alex_tab_size :: Int
+alex_tab_size = 8
+alex_base :: AlexAddr
+alex_base = AlexA#
+  "\xf7\xff\xff\xff\x6c\x00\x00\x00\xe1\x00\x00\x00\x55\x01\x00\x00\xcb\x01\x00\x00\xc1\x02\x00\x00\x36\x03\x00\x00\xac\x03\x00\x00\x73\x00\x00\x00\xd8\xff\xff\xff\x8b\x04\x00\x00\xe9\x04\x00\x00\x47\x05\x00\x00\xcc\x01\x00\x00\xa3\x05\x00\x00\xff\x05\x00\x00\x54\x06\x00\x00\x53\x06\x00\x00\xd3\x06\x00\x00\x53\x07\x00\x00\x32\x08\x00\x00\x31\x08\x00\x00\xb1\x08\x00\x00\x31\x09\x00\x00\xb1\x09\x00\x00\x90\x0a\x00\x00\xec\x0a\x00\x00\xeb\x0a\x00\x00\x00\x00\x00\x00\x5c\x0b\x00\x00\x00\x00\x00\x00\xcd\x0b\x00\x00\x00\x00\x00\x00\x3e\x0c\x00\x00\x00\x00\x00\x00\xaf\x0c\x00\x00\x00\x00\x00\x00\xf0\x0c\x00\x00\x00\x00\x00\x00\x31\x0d\x00\x00\x00\x00\x00\x00\x72\x0d\x00\x00\x00\x00\x00\x00\xb3\x0d\x00\x00\x92\x0e\x00\x00\x11\x0f\x00\x00\xd1\x0e\x00\x00\x00\x00\x00\x00\xd1\x0f\x00\x00\x91\x0f\x00\x00\x00\x00\x00\x00\x91\x10\x00\x00\x51\x10\x00\x00\x00\x00\x00\x00\x51\x11\x00\x00\xc7\x11\x00\x00\x29\x11\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x12\x00\x00\xb5\x13\x00\x00\xac\x14\x00\x00\xa3\x15\x00\x00\x9a\x16\x00\x00\x91\x17\x00\x00\x88\x18\x00\x00\x7f\x19\x00\x00\x76\x1a\x00\x00\x6d\x1b\x00\x00\x64\x1c\x00\x00\x5b\x1d\x00\x00\x52\x1e\x00\x00\x49\x1f\x00\x00\x40\x20\x00\x00\x37\x21\x00\x00\x2e\x22\x00\x00\x25\x23\x00\x00\x1c\x24\x00\x00\x13\x25\x00\x00\x0a\x26\x00\x00\x01\x27\x00\x00\xf8\x27\x00\x00\xef\x28\x00\x00\xe6\x29\x00\x00\xdd\x2a\x00\x00\xd4\x2b\x00\x00\xcb\x2c\x00\x00\xc2\x2d\x00\x00\xb9\x2e\x00\x00\xb0\x2f\x00\x00\xa7\x30\x00\x00\x9e\x31\x00\x00\x95\x32\x00\x00\x8c\x33\x00\x00\x83\x34\x00\x00\x7a\x35\x00\x00\x71\x36\x00\x00\x68\x37\x00\x00\x5f\x38\x00\x00\x56\x39\x00\x00\x4d\x3a\x00\x00\x44\x3b\x00\x00\x3b\x3c\x00\x00\x32\x3d\x00\x00\x29\x3e\x00\x00\x20\x3f\x00\x00\x17\x40\x00\x00\x0e\x41\x00\x00\x05\x42\x00\x00\xfc\x42\x00\x00\xf3\x43\x00\x00\xea\x44\x00\x00\xe1\x45\x00\x00\xd8\x46\x00\x00\xcf\x47\x00\x00\xc6\x48\x00\x00\xbd\x49\x00\x00\xb4\x4a\x00\x00\xab\x4b\x00\x00\xa2\x4c\x00\x00\x99\x4d\x00\x00\x90\x4e\x00\x00\x87\x4f\x00\x00\x7e\x50\x00\x00\x75\x51\x00\x00\x6c\x52\x00\x00\x63\x53\x00\x00\x5a\x54\x00\x00\x51\x55\x00\x00\x48\x56\x00\x00\x3f\x57\x00\x00\x36\x58\x00\x00\x2d\x59\x00\x00\x24\x5a\x00\x00\x1b\x5b\x00\x00\x12\x5c\x00\x00\x09\x5d\x00\x00\x00\x5e\x00\x00\xf7\x5e\x00\x00\xee\x5f\x00\x00\xe5\x60\x00\x00\xdc\x61\x00\x00\xd3\x62\x00\x00\xca\x63\x00\x00\xc1\x64\x00\x00\xb8\x65\x00\x00\xaf\x66\x00\x00\xa6\x67\x00\x00\x9d\x68\x00\x00\x94\x69\x00\x00\x8b\x6a\x00\x00\x82\x6b\x00\x00\x79\x6c\x00\x00\x70\x6d\x00\x00\x67\x6e\x00\x00\x5e\x6f\x00\x00\x55\x70\x00\x00\x4c\x71\x00\x00\x43\x72\x00\x00\x3a\x73\x00\x00\x31\x74\x00\x00\x28\x75\x00\x00\x1f\x76\x00\x00\x16\x77\x00\x00\x0d\x78\x00\x00\x04\x79\x00\x00\xfb\x79\x00\x00\xf2\x7a\x00\x00\xe9\x7b\x00\x00\xe0\x7c\x00\x00\xd7\x7d\x00\x00\xce\x7e\x00\x00\xc5\x7f\x00\x00\xbc\x80\x00\x00\xb3\x81\x00\x00\xaa\x82\x00\x00\xa1\x83\x00\x00\x98\x84\x00\x00\x8f\x85\x00\x00\x86\x86\x00\x00\x7d\x87\x00\x00\x74\x88\x00\x00\x6b\x89\x00\x00\x62\x8a\x00\x00\x59\x8b\x00\x00\x50\x8c\x00\x00\x47\x8d\x00\x00\x3e\x8e\x00\x00\x35\x8f\x00\x00\x2c\x90\x00\x00\x23\x91\x00\x00\x1a\x92\x00\x00\x11\x93\x00\x00\x08\x94\x00\x00\xff\x94\x00\x00\xf6\x95\x00\x00\xed\x96\x00\x00\xe4\x97\x00\x00\xdb\x98\x00\x00\xd2\x99\x00\x00\xc9\x9a\x00\x00\xc0\x9b\x00\x00\xb7\x9c\x00\x00\xae\x9d\x00\x00\xa5\x9e\x00\x00\x9c\x9f\x00\x00\x93\xa0\x00\x00\x8a\xa1\x00\x00\x81\xa2\x00\x00\x78\xa3\x00\x00\x6f\xa4\x00\x00\x66\xa5\x00\x00\x5d\xa6\x00\x00\x54\xa7\x00\x00\x4b\xa8\x00\x00\x42\xa9\x00\x00\x39\xaa\x00\x00\x30\xab\x00\x00\x27\xac\x00\x00\x1e\xad\x00\x00\x15\xae\x00\x00\x0c\xaf\x00\x00\x03\xb0\x00\x00\xfa\xb0\x00\x00\xf1\xb1\x00\x00\xe8\xb2\x00\x00\xdf\xb3\x00\x00\xd6\xb4\x00\x00\xcd\xb5\x00\x00\xc4\xb6\x00\x00\xbb\xb7\x00\x00\xb2\xb8\x00\x00\xa9\xb9\x00\x00\xa0\xba\x00\x00\x97\xbb\x00\x00\x8e\xbc\x00\x00\x85\xbd\x00\x00\x7c\xbe\x00\x00\x73\xbf\x00\x00\x6a\xc0\x00\x00\x61\xc1\x00\x00\x58\xc2\x00\x00\x4f\xc3\x00\x00\x46\xc4\x00\x00\x3d\xc5\x00\x00\x34\xc6\x00\x00\x2b\xc7\x00\x00\x22\xc8\x00\x00\x19\xc9\x00\x00\x10\xca\x00\x00\x07\xcb\x00\x00\xfe\xcb\x00\x00\xf5\xcc\x00\x00\xec\xcd\x00\x00\xe3\xce\x00\x00\xda\xcf\x00\x00\xd1\xd0\x00\x00\xc8\xd1\x00\x00\xbf\xd2\x00\x00\xb6\xd3\x00\x00\xad\xd4\x00\x00\xa4\xd5\x00\x00\x9b\xd6\x00\x00\x92\xd7\x00\x00\x89\xd8\x00\x00\x80\xd9\x00\x00\x77\xda\x00\x00\x6e\xdb\x00\x00\x65\xdc\x00\x00\x5c\xdd\x00\x00\x53\xde\x00\x00\x4a\xdf\x00\x00\x41\xe0\x00\x00\x38\xe1\x00\x00\x2f\xe2\x00\x00\x26\xe3\x00\x00\x1d\xe4\x00\x00\x14\xe5\x00\x00\x0b\xe6\x00\x00\x02\xe7\x00\x00\xf9\xe7\x00\x00\xf0\xe8\x00\x00\xe7\xe9\x00\x00\xde\xea\x00\x00\xd5\xeb\x00\x00\xcc\xec\x00\x00\xc3\xed\x00\x00\xba\xee\x00\x00\xb1\xef\x00\x00\xa8\xf0\x00\x00\x9f\xf1\x00\x00\x96\xf2\x00\x00\xe3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\xf3\x00\x00\x8c\xf4\x00\x00\x8c\xf5\x00\x00\x82\xf6\x00\x00\x82\xf7\x00\x00\x78\xf8\x00\x00\x78\xf9\x00\x00\x78\xfa\x00\x00\x78\xfb\x00\x00\x78\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x13\x00\x00\xa3\x14\x00\x00\xbb\xee\x00\x00\xa8\xef\x00\x00\x8d\xf2\x00\x00\x76\xf3\x00\x00\x6c\xf6\x00\x00\x57\xfd\x00\x00\xb3\xfd\x00\x00\x0f\xfe\x00\x00\x6b\xfe\x00\x00\xc7\xfe\x00\x00\x23\xff\x00\x00\x7f\xff\x00\x00\xdb\xff\x00\x00\x37\x00\x01\x00\x93\x00\x01\x00\xef\x00\x01\x00\x4b\x01\x01\x00\xa7\x01\x01\x00\x03\x02\x01\x00\x5f\x02\x01\x00\xbb\x02\x01\x00\x17\x03\x01\x00\x73\x03\x01\x00\xcf\x03\x01\x00\x2b\x04\x01\x00\x87\x04\x01\x00\xe3\x04\x01\x00\x3f\x05\x01\x00\x9b\x05\x01\x00\xf7\x05\x01\x00\x53\x06\x01\x00\xaf\x06\x01\x00\x0b\x07\x01\x00\x67\x07\x01\x00\xc3\x07\x01\x00\x1f\x08\x01\x00\x7b\x08\x01\x00\xd7\x08\x01\x00\x33\x09\x01\x00\x8f\x09\x01\x00\xeb\x09\x01\x00\x47\x0a\x01\x00\xa3\x0a\x01\x00\xff\x0a\x01\x00\x5b\x0b\x01\x00\xb7\x0b\x01\x00\x13\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xff\xff\xff\xda\xff\xff\xff\x00\x00\x00\x00\x6f\x0c\x01\x00\xcb\x0c\x01\x00\x9a\xf0\x00\x00\x27\x0d\x01\x00\x83\x0d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\xff\xff\x00\x00\x00\x00\xdf\x0d\x01\x00\x91\xf1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x0e\x01\x00\x97\x0e\x01\x00\xf3\x0e\x01\x00\x4f\x0f\x01\x00\xab\x0f\x01\x00\x07\x10\x01\x00\x63\x10\x01\x00\xbf\x10\x01\x00\x1b\x11\x01\x00\x77\x11\x01\x00\xd3\x11\x01\x00\x2f\x12\x01\x00\x8b\x12\x01\x00\xe7\x12\x01\x00\x43\x13\x01\x00\x9f\x13\x01\x00\xfb\x13\x01\x00\x57\x14\x01\x00\xb3\x14\x01\x00\x0f\x15\x01\x00\x6d\x15\x01\x00\xcb\x15\x01\x00\x29\x16\x01\x00\x87\x16\x01\x00\xe5\x16\x01\x00\x43\x17\x01\x00\xa1\x17\x01\x00\xfd\x17\x01\x00\x59\x18\x01\x00\xb5\x18\x01\x00\x11\x19\x01\x00\x6d\x19\x01\x00\xc9\x19\x01\x00\x25\x1a\x01\x00\x81\x1a\x01\x00\xdd\x1a\x01\x00\x39\x1b\x01\x00\x95\x1b\x01\x00\xf1\x1b\x01\x00\x4d\x1c\x01\x00\xa9\x1c\x01\x00\x05\x1d\x01\x00\x61\x1d\x01\x00\xbd\x1d\x01\x00\x19\x1e\x01\x00\x75\x1e\x01\x00\xd1\x1e\x01\x00\x2d\x1f\x01\x00\x89\x1f\x01\x00\xe5\x1f\x01\x00\x41\x20\x01\x00\x9d\x20\x01\x00\xf9\x20\x01\x00\x55\x21\x01\x00\xb1\x21\x01\x00\x0d\x22\x01\x00\x69\x22\x01\x00\xc5\x22\x01\x00\x21\x23\x01\x00\x7d\x23\x01\x00\xd9\x23\x01\x00\x35\x24\x01\x00\x91\x24\x01\x00\xed\x24\x01\x00\x49\x25\x01\x00\xa5\x25\x01\x00\x01\x26\x01\x00\x5d\x26\x01\x00\xb9\x26\x01\x00\x15\x27\x01\x00\x71\x27\x01\x00\xcd\x27\x01\x00\x29\x28\x01\x00\x85\x28\x01\x00\xe1\x28\x01\x00\x3d\x29\x01\x00\x99\x29\x01\x00\xf5\x29\x01\x00\x51\x2a\x01\x00\xad\x2a\x01\x00\x09\x2b\x01\x00\x65\x2b\x01\x00\xc1\x2b\x01\x00\x1d\x2c\x01\x00\x79\x2c\x01\x00\xd5\x2c\x01\x00\x31\x2d\x01\x00\x8d\x2d\x01\x00\xe9\x2d\x01\x00\x45\x2e\x01\x00\xa1\x2e\x01\x00\xfd\x2e\x01\x00\x59\x2f\x01\x00\xb5\x2f\x01\x00\x11\x30\x01\x00\x6d\x30\x01\x00\xc9\x30\x01\x00\x25\x31\x01\x00\x81\x31\x01\x00\xdd\x31\x01\x00\x39\x32\x01\x00\x95\x32\x01\x00\xf1\x32\x01\x00\x4d\x33\x01\x00\xa9\x33\x01\x00\x05\x34\x01\x00\x61\x34\x01\x00\xbd\x34\x01\x00\x19\x35\x01\x00\x75\x35\x01\x00\xd1\x35\x01\x00\x2d\x36\x01\x00\x89\x36\x01\x00\xe5\x36\x01\x00\x41\x37\x01\x00\x9d\x37\x01\x00\xf9\x37\x01\x00\x55\x38\x01\x00\xb1\x38\x01\x00\x0d\x39\x01\x00\x69\x39\x01\x00\xc5\x39\x01\x00\x21\x3a\x01\x00\x7d\x3a\x01\x00\xd9\x3a\x01\x00\x35\x3b\x01\x00\x91\x3b\x01\x00\xed\x3b\x01\x00\x49\x3c\x01\x00\xa5\x3c\x01\x00\x01\x3d\x01\x00\x5d\x3d\x01\x00\xb9\x3d\x01\x00\x15\x3e\x01\x00\x71\x3e\x01\x00\xcd\x3e\x01\x00\x29\x3f\x01\x00\x85\x3f\x01\x00\xe1\x3f\x01\x00\x3d\x40\x01\x00\x99\x40\x01\x00\xf5\x40\x01\x00\x51\x41\x01\x00\xad\x41\x01\x00\x09\x42\x01\x00\x65\x42\x01\x00\xc1\x42\x01\x00\x1d\x43\x01\x00\x79\x43\x01\x00\xd5\x43\x01\x00\x31\x44\x01\x00\x8d\x44\x01\x00\xe9\x44\x01\x00\x45\x45\x01\x00\xa1\x45\x01\x00\xfd\x45\x01\x00\x59\x46\x01\x00\xb5\x46\x01\x00\x11\x47\x01\x00\x6d\x47\x01\x00\xc9\x47\x01\x00\x25\x48\x01\x00\x81\x48\x01\x00\xdd\x48\x01\x00\x39\x49\x01\x00\x95\x49\x01\x00\xf1\x49\x01\x00\x4d\x4a\x01\x00\xa9\x4a\x01\x00\x05\x4b\x01\x00\x61\x4b\x01\x00\xbd\x4b\x01\x00\x19\x4c\x01\x00\x75\x4c\x01\x00\xd1\x4c\x01\x00\x2d\x4d\x01\x00\x89\x4d\x01\x00\xe5\x4d\x01\x00\x41\x4e\x01\x00\x9d\x4e\x01\x00\xf9\x4e\x01\x00\x55\x4f\x01\x00\xb1\x4f\x01\x00\x0d\x50\x01\x00\x69\x50\x01\x00\xc5\x50\x01\x00\x21\x51\x01\x00\x7d\x51\x01\x00\xd9\x51\x01\x00\x35\x52\x01\x00\x91\x52\x01\x00\xed\x52\x01\x00\x49\x53\x01\x00\xa5\x53\x01\x00\x01\x54\x01\x00\x5d\x54\x01\x00\xb9\x54\x01\x00\x15\x55\x01\x00\x71\x55\x01\x00\xcd\x55\x01\x00\x29\x56\x01\x00\x85\x56\x01\x00\xe1\x56\x01\x00\x3d\x57\x01\x00\x99\x57\x01\x00\xf5\x57\x01\x00\x51\x58\x01\x00\xad\x58\x01\x00\x09\x59\x01\x00\x65\x59\x01\x00\xc1\x59\x01\x00\x1d\x5a\x01\x00\x79\x5a\x01\x00\xd5\x5a\x01\x00\x31\x5b\x01\x00\x8d\x5b\x01\x00\xe9\x5b\x01\x00\x45\x5c\x01\x00\xa1\x5c\x01\x00\xfd\x5c\x01\x00\x59\x5d\x01\x00\xb5\x5d\x01\x00\x11\x5e\x01\x00\x6d\x5e\x01\x00\xc9\x5e\x01\x00\x25\x5f\x01\x00\x81\x5f\x01\x00\xdd\x5f\x01\x00\x39\x60\x01\x00\x95\x60\x01\x00\xf1\x60\x01\x00\x4d\x61\x01\x00"#
+
+alex_table :: AlexAddr
+alex_table = AlexA#
+  "\x00\x00\x35\x01\x3a\x00\x3a\x00\x3a\x00\x28\x01\x3d\x00\x6a\x01\x6b\x01\x73\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\x3a\x00\x06\x02\x7e\x01\x06\x02\x06\x02\x06\x02\x06\x02\x7d\x01\x75\x01\x76\x01\x06\x02\x06\x02\x06\x02\x93\x01\x6c\x01\x06\x02\x85\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x6e\x01\x6d\x01\x06\x02\x6f\x01\x06\x02\x71\x01\x79\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb9\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x78\x01\x06\x02\x06\x02\x70\x01\x06\x02\x0a\x02\x06\x02\xe7\x01\x9a\x01\x08\x02\xdb\x01\x06\x02\xf3\x01\x65\x02\x06\x02\x06\x02\xb1\x01\xdf\x01\x05\x02\x2d\x02\xf5\x01\xe0\x01\xe8\x01\xf2\x01\xf1\x01\xe3\x01\x06\x02\xc1\x01\x06\x02\x06\x02\x06\x02\x7b\x01\x72\x01\x7c\x01\x06\x02\x36\x01\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x3b\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x0a\x00\x3a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x1a\x00\x14\x00\x14\x00\x19\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x09\x00\x14\x00\x00\x00\x14\x00\x35\x01\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x06\x02\x7e\x01\x06\x02\x06\x02\x06\x02\x06\x02\x7d\x01\x75\x01\x76\x01\x06\x02\x06\x02\x06\x02\x93\x01\x6c\x01\x06\x02\x85\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x6e\x01\x6d\x01\x06\x02\x6f\x01\x06\x02\x71\x01\x79\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb9\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x78\x01\x06\x02\x06\x02\x70\x01\x06\x02\x0a\x02\x06\x02\xe7\x01\x9a\x01\x08\x02\xdb\x01\x06\x02\xf3\x01\x65\x02\x06\x02\x06\x02\xb1\x01\xdf\x01\x05\x02\x2d\x02\xf5\x01\xe0\x01\xe8\x01\xf2\x01\xf1\x01\xe3\x01\x06\x02\xc1\x01\x06\x02\x06\x02\x06\x02\x7b\x01\x72\x01\x7c\x01\x06\x02\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x0a\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x1a\x00\x14\x00\x14\x00\x19\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x09\x00\x14\x00\x00\x00\x14\x00\xff\xff\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x06\x02\x25\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\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\x24\x01\x00\x00\x06\x02\x00\x00\x06\x02\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x27\x00\x18\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\x35\x01\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x92\x01\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x0d\x00\x06\x02\x06\x02\x0c\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xaf\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x09\x00\x06\x02\x00\x00\x06\x02\x37\x01\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x0a\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x1a\x00\x14\x00\x14\x00\x19\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x09\x00\x14\x00\x00\x00\x14\x00\xff\xff\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x7e\x01\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\xb2\x00\xb3\x00\xb5\x00\x13\x01\xb4\x00\x00\x00\xb6\x00\xa7\x00\x00\x00\x00\x00\x91\x00\xb9\x00\xbe\x00\xea\x00\xc1\x00\x00\x00\xbc\x00\xed\x00\xcb\x00\x00\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x2c\x01\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x29\x01\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x0b\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x2a\x01\x14\x00\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x48\x02\x06\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x0f\x00\x48\x02\x48\x02\x0e\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x00\x00\x48\x02\x36\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\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\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x0b\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x00\x00\x14\x00\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x11\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x12\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x13\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x14\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x90\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x0f\x00\x48\x02\x48\x02\x0e\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x00\x00\x48\x02\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x36\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x38\x00\x11\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2b\x00\x16\x00\x22\x00\x22\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\xff\xff\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x27\x00\x18\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\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\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\xff\xff\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xf6\x01\x06\x02\xb4\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x11\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x27\x00\x18\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\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x00\xf9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x01\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xf1\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\x88\x00\x15\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x29\x00\x17\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\x06\x02\x3f\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x27\x00\x18\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\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\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\xff\xff\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x27\x00\x18\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\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\xff\xff\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x22\x01\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x27\x00\x18\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\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\xff\xff\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x23\x01\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x02\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x27\x00\x18\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\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\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\xff\xff\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\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\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x27\x00\x18\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\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\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\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x2c\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\x2e\x01\x00\x00\x00\x00\x00\x00\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\x2e\x01\x00\x00\x2b\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\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\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\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x2c\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\x2e\x01\x00\x00\x00\x00\x00\x00\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\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\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\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\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\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\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\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\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\x2e\x01\x00\x00\x00\x00\x00\x00\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\x30\x01\x00\x00\x00\x00\x31\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\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\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\x00\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\x34\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x00\x00\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x00\x00\x34\x01\x34\x01\x34\x01\x34\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\x34\x01\x34\x01\x34\x01\x34\x01\x00\x00\x34\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\x34\x01\x00\x00\x34\x01\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\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\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\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\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\x2e\x01\x00\x00\x00\x00\x00\x00\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\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\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\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\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x32\x01\x2f\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\x2e\x01\x00\x00\x00\x00\x00\x00\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\x2e\x01\x00\x00\x2b\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\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\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\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x32\x01\x2f\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\x2e\x01\x00\x00\x00\x00\x00\x00\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\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\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\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\x2e\x01\x2e\x01\x2e\x01\x2e\x01\x2e\x01\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x2f\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\x2e\x01\x00\x00\x00\x00\x00\x00\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\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\x2d\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2e\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x1b\x00\x1c\x00\x1c\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x4d\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x4e\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x59\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x58\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\xfb\x01\x06\x02\x06\x02\x06\x02\xd2\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xd5\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\xbb\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x74\x01\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x4d\x02\x06\x02\x98\x01\x2c\x00\x06\x02\x82\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x80\x01\x80\x01\x80\x01\x80\x01\x7f\x01\x80\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x80\x01\x80\x01\x80\x01\x80\x01\x7f\x01\x80\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x2c\x00\x06\x02\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x80\x01\x80\x01\x80\x01\x80\x01\x7f\x01\x80\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x80\x01\x80\x01\x80\x01\x80\x01\x7f\x01\x80\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x2c\x00\x06\x02\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x2c\x00\x06\x02\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x80\x01\x80\x01\x80\x01\x80\x01\x7f\x01\x80\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x80\x01\x80\x01\x80\x01\x80\x01\x7f\x01\x80\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x49\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x2c\x00\x06\x02\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x4c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x4c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x2c\x00\x06\x02\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x2c\x00\x06\x02\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x4c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x4c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x50\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x2c\x00\x06\x02\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x51\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x48\x02\x06\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x4f\x02\x48\x02\x4f\x02\x10\x00\x48\x02\x8b\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x89\x01\x89\x01\x89\x01\x89\x01\x88\x01\x89\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x89\x01\x89\x01\x89\x01\x89\x01\x88\x01\x89\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x89\x01\x89\x01\x89\x01\x89\x01\x88\x01\x89\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x89\x01\x89\x01\x89\x01\x89\x01\x88\x01\x89\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x89\x01\x89\x01\x89\x01\x89\x01\x88\x01\x89\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x89\x01\x89\x01\x89\x01\x89\x01\x88\x01\x89\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x4a\x02\x48\x02\x48\x02\x00\x00\x48\x02\x06\x02\x48\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x49\x02\x06\x02\x06\x02\x00\x00\x06\x02\x48\x02\x06\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x4e\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x4e\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x4e\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x4e\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x4b\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x4a\x02\x48\x02\x48\x02\x00\x00\x48\x02\x06\x02\x48\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x32\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x29\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x32\x01\x10\x00\x06\x02\x86\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x06\x02\x00\x00\x06\x02\x06\x02\x77\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x29\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xfd\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x2a\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xfe\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x2a\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x07\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x2a\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x2a\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x8d\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x2a\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3a\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3f\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3b\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3e\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3f\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x40\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x43\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x44\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x45\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x48\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x49\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x4a\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x4b\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x51\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x52\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x54\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5c\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5d\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5e\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x61\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x64\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x65\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x66\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x67\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x68\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x66\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x62\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5f\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5e\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5d\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa6\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5b\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5a\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x57\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x54\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xab\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x53\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb0\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x47\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x46\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xbf\x01\x45\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x44\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x43\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x42\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x41\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x40\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3e\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3d\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3b\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3a\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x39\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb5\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb6\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x38\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x37\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x36\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xba\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x35\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x34\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x33\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x32\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x31\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x30\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x2f\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x2e\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc0\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x18\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc8\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xf4\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x26\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x2c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x2b\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xd0\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x22\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x1c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xd4\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xd6\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x29\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xf0\x01\x06\x02\x06\x02\x06\x02\x06\x02\xd8\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xda\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x25\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x24\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x21\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xdc\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xdd\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x20\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x1f\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x1e\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x1d\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x1a\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x19\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xe1\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xe2\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x16\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x14\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xe4\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x0f\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xfc\x01\x06\x02\x06\x02\xee\x01\x06\x02\x06\x02\x13\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xea\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xeb\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xec\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xed\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x12\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x10\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x0e\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xf8\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xf9\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x0c\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x94\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x95\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x01\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x96\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x04\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x03\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x02\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x0b\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xfa\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xf7\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x0d\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xe9\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xe5\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x15\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x17\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xde\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x1b\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x27\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xd9\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xd7\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x28\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xd3\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xd1\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x2a\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xe6\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xcf\x01\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xce\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xcd\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xcc\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xcb\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xca\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc9\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc7\x01\x06\x02\x06\x02\x06\x02\x06\x02\x09\x02\x06\x02\x06\x02\x06\x02\x06\x02\xff\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc6\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc5\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc4\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc3\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xc2\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xbe\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xbd\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xbc\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb8\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb7\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb3\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xb2\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xef\x01\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xae\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xad\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xac\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x52\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xaa\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa9\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa8\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x56\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x59\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa7\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa5\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa4\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa3\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa2\x01\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa1\x01\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x60\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\xa0\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x9f\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x9e\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x61\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x9d\x01\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x9c\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x9b\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x63\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x64\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x99\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x48\x02\x06\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x06\x02\x48\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x87\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x48\x02\x06\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x89\x01\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x06\x02\x48\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x4d\x02\x06\x02\x98\x01\x10\x00\x06\x02\x8d\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x8d\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x48\x02\x06\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x4f\x02\x48\x02\x4f\x02\x10\x00\x48\x02\x91\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x10\x00\x48\x02\x91\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x48\x02\x00\x00\x48\x02\x06\x02\x48\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x81\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x63\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x62\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x55\x02\x06\x02\x06\x02\x60\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5f\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5b\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x5a\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x56\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x55\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x53\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x50\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x4f\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x4c\x01\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x47\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x46\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x42\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x41\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3d\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x3c\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x23\x02\x39\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x00\x00\x06\x02\x06\x02\x06\x02\x97\x01\x10\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x38\x01\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x06\x02\x00\x00\x06\x02\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x2d\x00\x23\x00\x2e\x00\x2e\x00\x7c\x00\xff\xff\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\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x20\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\xff\xff\x7e\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7b\x00\x7c\x00\xff\xff\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x2d\x00\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\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\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\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\x7b\x00\x7c\x00\xff\xff\x7e\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\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\x7b\x00\x7c\x00\xff\xff\x7e\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\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x44\x00\x45\x00\x46\x00\xff\xff\x48\x00\x49\x00\xff\xff\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\x52\x00\x53\x00\x54\x00\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x7d\x00\x7e\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\x7d\x00\x7e\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\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\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x7c\x00\xff\xff\x7e\x00\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\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\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\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\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\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\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\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\x22\x00\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\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\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\xff\xff\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\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\x2d\x00\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\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\x2d\x00\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\x2d\x00\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\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x7d\x00\x7e\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\x7d\x00\x7e\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\x7d\x00\x7e\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\x7d\x00\x7e\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\x7d\x00\x7e\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\x7d\x00\x7e\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\x7d\x00\x7e\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\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\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\x26\x01\xff\xff\xff\xff\xd8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x24\x00\x26\x00\x26\x00\x28\x00\x28\x00\x2a\x00\x2a\x00\x2f\x00\x2f\x00\x32\x00\x32\x00\x35\x00\x35\x00\x39\x00\x39\x00\xff\xff\x2e\x01\x2e\x01\x2e\x01\x26\x01\x26\x01\x26\x01\xd8\x00\xd8\x00\xd8\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xd8\x00\x26\x01\x26\x01\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\x26\x01\x26\x01\x26\x01\x26\x01\x26\x01\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x01\x2d\x01\x2d\x01\x2e\x01\x34\x01\x2e\x01\x34\x01\x33\x01\x33\x01\x34\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"#
+
+alex_accept = listArray (0 :: Int, 614)
+  [ AlexAccNone
+  , AlexAccPred 557 ( not' eof )(AlexAccNone)
+  , AlexAccNone
+  , AlexAcc 556
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAcc 555
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAcc 554
+  , AlexAcc 553
+  , AlexAcc 552
+  , AlexAcc 551
+  , AlexAcc 550
+  , AlexAcc 549
+  , AlexAcc 548
+  , AlexAcc 547
+  , AlexAcc 546
+  , AlexAcc 545
+  , AlexAcc 544
+  , AlexAcc 543
+  , AlexAcc 542
+  , AlexAcc 541
+  , AlexAcc 540
+  , AlexAcc 539
+  , AlexAcc 538
+  , AlexAcc 537
+  , AlexAcc 536
+  , AlexAcc 535
+  , AlexAcc 534
+  , AlexAcc 533
+  , AlexAcc 532
+  , AlexAcc 531
+  , AlexAcc 530
+  , AlexAcc 529
+  , AlexAcc 528
+  , AlexAcc 527
+  , AlexAcc 526
+  , AlexAcc 525
+  , AlexAcc 524
+  , AlexAcc 523
+  , AlexAcc 522
+  , AlexAcc 521
+  , AlexAcc 520
+  , AlexAcc 519
+  , AlexAcc 518
+  , AlexAcc 517
+  , AlexAcc 516
+  , AlexAcc 515
+  , AlexAcc 514
+  , AlexAcc 513
+  , AlexAcc 512
+  , AlexAcc 511
+  , AlexAcc 510
+  , AlexAcc 509
+  , AlexAcc 508
+  , AlexAcc 507
+  , AlexAcc 506
+  , AlexAcc 505
+  , AlexAcc 504
+  , AlexAcc 503
+  , AlexAcc 502
+  , AlexAcc 501
+  , AlexAcc 500
+  , AlexAcc 499
+  , AlexAcc 498
+  , AlexAcc 497
+  , AlexAcc 496
+  , AlexAcc 495
+  , AlexAcc 494
+  , AlexAcc 493
+  , AlexAcc 492
+  , AlexAcc 491
+  , AlexAcc 490
+  , AlexAcc 489
+  , AlexAcc 488
+  , AlexAcc 487
+  , AlexAcc 486
+  , AlexAcc 485
+  , AlexAcc 484
+  , AlexAcc 483
+  , AlexAcc 482
+  , AlexAcc 481
+  , AlexAcc 480
+  , AlexAcc 479
+  , AlexAcc 478
+  , AlexAcc 477
+  , AlexAcc 476
+  , AlexAcc 475
+  , AlexAcc 474
+  , AlexAcc 473
+  , AlexAcc 472
+  , AlexAcc 471
+  , AlexAcc 470
+  , AlexAcc 469
+  , AlexAcc 468
+  , AlexAcc 467
+  , AlexAcc 466
+  , AlexAcc 465
+  , AlexAcc 464
+  , AlexAcc 463
+  , AlexAcc 462
+  , AlexAcc 461
+  , AlexAcc 460
+  , AlexAcc 459
+  , AlexAcc 458
+  , AlexAcc 457
+  , AlexAcc 456
+  , AlexAcc 455
+  , AlexAcc 454
+  , AlexAcc 453
+  , AlexAcc 452
+  , AlexAcc 451
+  , AlexAcc 450
+  , AlexAcc 449
+  , AlexAcc 448
+  , AlexAcc 447
+  , AlexAcc 446
+  , AlexAcc 445
+  , AlexAcc 444
+  , AlexAcc 443
+  , AlexAcc 442
+  , AlexAcc 441
+  , AlexAcc 440
+  , AlexAcc 439
+  , AlexAcc 438
+  , AlexAcc 437
+  , AlexAcc 436
+  , AlexAcc 435
+  , AlexAcc 434
+  , AlexAcc 433
+  , AlexAcc 432
+  , AlexAcc 431
+  , AlexAcc 430
+  , AlexAcc 429
+  , AlexAcc 428
+  , AlexAcc 427
+  , AlexAcc 426
+  , AlexAcc 425
+  , AlexAcc 424
+  , AlexAcc 423
+  , AlexAcc 422
+  , AlexAcc 421
+  , AlexAcc 420
+  , AlexAcc 419
+  , AlexAcc 418
+  , AlexAcc 417
+  , AlexAcc 416
+  , AlexAcc 415
+  , AlexAcc 414
+  , AlexAcc 413
+  , AlexAcc 412
+  , AlexAcc 411
+  , AlexAcc 410
+  , AlexAcc 409
+  , AlexAcc 408
+  , AlexAcc 407
+  , AlexAcc 406
+  , AlexAcc 405
+  , AlexAcc 404
+  , AlexAcc 403
+  , AlexAcc 402
+  , AlexAcc 401
+  , AlexAcc 400
+  , AlexAcc 399
+  , AlexAcc 398
+  , AlexAcc 397
+  , AlexAcc 396
+  , AlexAcc 395
+  , AlexAcc 394
+  , AlexAcc 393
+  , AlexAcc 392
+  , AlexAcc 391
+  , AlexAcc 390
+  , AlexAcc 389
+  , AlexAcc 388
+  , AlexAcc 387
+  , AlexAcc 386
+  , AlexAcc 385
+  , AlexAcc 384
+  , AlexAcc 383
+  , AlexAcc 382
+  , AlexAcc 381
+  , AlexAcc 380
+  , AlexAcc 379
+  , AlexAcc 378
+  , AlexAcc 377
+  , AlexAcc 376
+  , AlexAcc 375
+  , AlexAcc 374
+  , AlexAcc 373
+  , AlexAcc 372
+  , AlexAcc 371
+  , AlexAcc 370
+  , AlexAcc 369
+  , AlexAcc 368
+  , AlexAcc 367
+  , AlexAcc 366
+  , AlexAcc 365
+  , AlexAcc 364
+  , AlexAcc 363
+  , AlexAcc 362
+  , AlexAcc 361
+  , AlexAcc 360
+  , AlexAcc 359
+  , AlexAcc 358
+  , AlexAcc 357
+  , AlexAcc 356
+  , AlexAcc 355
+  , AlexAcc 354
+  , AlexAcc 353
+  , AlexAcc 352
+  , AlexAcc 351
+  , AlexAcc 350
+  , AlexAcc 349
+  , AlexAcc 348
+  , AlexAcc 347
+  , AlexAcc 346
+  , AlexAcc 345
+  , AlexAcc 344
+  , AlexAcc 343
+  , AlexAcc 342
+  , AlexAcc 341
+  , AlexAcc 340
+  , AlexAcc 339
+  , AlexAcc 338
+  , AlexAcc 337
+  , AlexAcc 336
+  , AlexAcc 335
+  , AlexAcc 334
+  , AlexAcc 333
+  , AlexAcc 332
+  , AlexAcc 331
+  , AlexAcc 330
+  , AlexAcc 329
+  , AlexAcc 328
+  , AlexAcc 327
+  , AlexAcc 326
+  , AlexAcc 325
+  , AlexAcc 324
+  , AlexAcc 323
+  , AlexAcc 322
+  , AlexAcc 321
+  , AlexAccPred 320 ( not' (followedBy '#') )(AlexAccNone)
+  , AlexAccPred 319 ( not' (followedBy '#') )(AlexAccNone)
+  , AlexAcc 318
+  , AlexAcc 317
+  , AlexAcc 316
+  , AlexAccPred 315 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone))
+  , AlexAccPred 314 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone))
+  , AlexAccPred 313 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone))
+  , AlexAccPred 312 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone))
+  , AlexAccPred 311 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone))
+  , AlexAccPred 310 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAccNone))
+  , AlexAccPred 309 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc 308))
+  , AlexAccPred 307 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc 306))
+  , AlexAccPred 305 ( keepComments .&&. (followedBy '\n' .||. eof) )(AlexAccSkipPred ( followedBy '\n' .||. eof )(AlexAcc 304))
+  , AlexAcc 303
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAcc 302
+  , AlexAcc 301
+  , AlexAcc 300
+  , AlexAcc 299
+  , AlexAcc 298
+  , AlexAcc 297
+  , AlexAcc 296
+  , AlexAcc 295
+  , AlexAcc 294
+  , AlexAcc 293
+  , AlexAcc 292
+  , AlexAcc 291
+  , AlexAcc 290
+  , AlexAcc 289
+  , AlexAcc 288
+  , AlexAcc 287
+  , AlexAcc 286
+  , AlexAcc 285
+  , AlexAcc 284
+  , AlexAcc 283
+  , AlexAcc 282
+  , AlexAcc 281
+  , AlexAcc 280
+  , AlexAcc 279
+  , AlexAcc 278
+  , AlexAcc 277
+  , AlexAcc 276
+  , AlexAcc 275
+  , AlexAcc 274
+  , AlexAcc 273
+  , AlexAcc 272
+  , AlexAcc 271
+  , AlexAcc 270
+  , AlexAcc 269
+  , AlexAcc 268
+  , AlexAcc 267
+  , AlexAcc 266
+  , AlexAcc 265
+  , AlexAcc 264
+  , AlexAcc 263
+  , AlexAcc 262
+  , AlexAcc 261
+  , AlexAcc 260
+  , AlexAcc 259
+  , AlexAcc 258
+  , AlexAcc 257
+  , AlexAcc 256
+  , AlexAcc 255
+  , AlexAcc 254
+  , AlexAcc 253
+  , AlexAcc 252
+  , AlexAcc 251
+  , AlexAcc 250
+  , AlexAcc 249
+  , AlexAcc 248
+  , AlexAcc 247
+  , AlexAcc 246
+  , AlexAcc 245
+  , AlexAcc 244
+  , AlexAccPred 243 (alexRightContext 8)(AlexAccNone)
+  , AlexAcc 242
+  , AlexAcc 241
+  , AlexAcc 240
+  , AlexAcc 239
+  , AlexAcc 238
+  , AlexAcc 237
+  , AlexAccPred 236 (alexRightContext 55)(AlexAccNone)
+  , AlexAcc 235
+  , AlexAcc 234
+  , AlexAcc 233
+  , AlexAcc 232
+  , AlexAcc 231
+  , AlexAcc 230
+  , AlexAcc 229
+  , AlexAcc 228
+  , AlexAcc 227
+  , AlexAcc 226
+  , AlexAcc 225
+  , AlexAcc 224
+  , AlexAcc 223
+  , AlexAcc 222
+  , AlexAcc 221
+  , AlexAcc 220
+  , AlexAcc 219
+  , AlexAcc 218
+  , AlexAcc 217
+  , AlexAcc 216
+  , AlexAcc 215
+  , AlexAcc 214
+  , AlexAcc 213
+  , AlexAcc 212
+  , AlexAcc 211
+  , AlexAcc 210
+  , AlexAcc 209
+  , AlexAcc 208
+  , AlexAcc 207
+  , AlexAcc 206
+  , AlexAcc 205
+  , AlexAcc 204
+  , AlexAcc 203
+  , AlexAcc 202
+  , AlexAcc 201
+  , AlexAcc 200
+  , AlexAcc 199
+  , AlexAcc 198
+  , AlexAcc 197
+  , AlexAcc 196
+  , AlexAcc 195
+  , AlexAcc 194
+  , AlexAcc 193
+  , AlexAcc 192
+  , AlexAcc 191
+  , AlexAcc 190
+  , AlexAcc 189
+  , AlexAcc 188
+  , AlexAcc 187
+  , AlexAcc 186
+  , AlexAcc 185
+  , AlexAcc 184
+  , AlexAcc 183
+  , AlexAcc 182
+  , AlexAcc 181
+  , AlexAcc 180
+  , AlexAcc 179
+  , AlexAcc 178
+  , AlexAcc 177
+  , AlexAcc 176
+  , AlexAcc 175
+  , AlexAcc 174
+  , AlexAcc 173
+  , AlexAcc 172
+  , AlexAcc 171
+  , AlexAcc 170
+  , AlexAcc 169
+  , AlexAcc 168
+  , AlexAcc 167
+  , AlexAcc 166
+  , AlexAcc 165
+  , AlexAcc 164
+  , AlexAcc 163
+  , AlexAcc 162
+  , AlexAcc 161
+  , AlexAcc 160
+  , AlexAcc 159
+  , AlexAcc 158
+  , AlexAcc 157
+  , AlexAcc 156
+  , AlexAcc 155
+  , AlexAcc 154
+  , AlexAcc 153
+  , AlexAcc 152
+  , AlexAcc 151
+  , AlexAcc 150
+  , AlexAcc 149
+  , AlexAcc 148
+  , AlexAcc 147
+  , AlexAcc 146
+  , AlexAcc 145
+  , AlexAcc 144
+  , AlexAcc 143
+  , AlexAcc 142
+  , AlexAcc 141
+  , AlexAcc 140
+  , AlexAcc 139
+  , AlexAcc 138
+  , AlexAcc 137
+  , AlexAcc 136
+  , AlexAcc 135
+  , AlexAcc 134
+  , AlexAcc 133
+  , AlexAcc 132
+  , AlexAcc 131
+  , AlexAcc 130
+  , AlexAcc 129
+  , AlexAcc 128
+  , AlexAcc 127
+  , AlexAcc 126
+  , AlexAcc 125
+  , AlexAcc 124
+  , AlexAcc 123
+  , AlexAcc 122
+  , AlexAcc 121
+  , AlexAcc 120
+  , AlexAcc 119
+  , AlexAcc 118
+  , AlexAcc 117
+  , AlexAcc 116
+  , AlexAcc 115
+  , AlexAcc 114
+  , AlexAcc 113
+  , AlexAcc 112
+  , AlexAcc 111
+  , AlexAcc 110
+  , AlexAcc 109
+  , AlexAcc 108
+  , AlexAcc 107
+  , AlexAcc 106
+  , AlexAcc 105
+  , AlexAcc 104
+  , AlexAcc 103
+  , AlexAcc 102
+  , AlexAcc 101
+  , AlexAcc 100
+  , AlexAcc 99
+  , AlexAcc 98
+  , AlexAcc 97
+  , AlexAcc 96
+  , AlexAcc 95
+  , AlexAcc 94
+  , AlexAcc 93
+  , AlexAcc 92
+  , AlexAcc 91
+  , AlexAcc 90
+  , AlexAcc 89
+  , AlexAcc 88
+  , AlexAcc 87
+  , AlexAcc 86
+  , AlexAcc 85
+  , AlexAcc 84
+  , AlexAcc 83
+  , AlexAcc 82
+  , AlexAcc 81
+  , AlexAcc 80
+  , AlexAcc 79
+  , AlexAcc 78
+  , AlexAcc 77
+  , AlexAcc 76
+  , AlexAcc 75
+  , AlexAcc 74
+  , AlexAcc 73
+  , AlexAcc 72
+  , AlexAcc 71
+  , AlexAcc 70
+  , AlexAcc 69
+  , AlexAcc 68
+  , AlexAcc 67
+  , AlexAcc 66
+  , AlexAcc 65
+  , AlexAcc 64
+  , AlexAcc 63
+  , AlexAcc 62
+  , AlexAcc 61
+  , AlexAcc 60
+  , AlexAcc 59
+  , AlexAcc 58
+  , AlexAcc 57
+  , AlexAcc 56
+  , AlexAcc 55
+  , AlexAcc 54
+  , AlexAcc 53
+  , AlexAcc 52
+  , AlexAcc 51
+  , AlexAcc 50
+  , AlexAcc 49
+  , AlexAcc 48
+  , AlexAcc 47
+  , AlexAcc 46
+  , AlexAcc 45
+  , AlexAcc 44
+  , AlexAcc 43
+  , AlexAcc 42
+  , AlexAcc 41
+  , AlexAcc 40
+  , AlexAcc 39
+  , AlexAcc 38
+  , AlexAcc 37
+  , AlexAcc 36
+  , AlexAcc 35
+  , AlexAcc 34
+  , AlexAcc 33
+  , AlexAcc 32
+  , AlexAcc 31
+  , AlexAcc 30
+  , AlexAcc 29
+  , AlexAcc 28
+  , AlexAcc 27
+  , AlexAcc 26
+  , AlexAcc 25
+  , AlexAcc 24
+  , AlexAcc 23
+  , AlexAcc 22
+  , AlexAcc 21
+  , AlexAcc 20
+  , AlexAcc 19
+  , AlexAcc 18
+  , AlexAcc 17
+  , AlexAcc 16
+  , AlexAcc 15
+  , AlexAcc 14
+  , AlexAcc 13
+  , AlexAcc 12
+  , AlexAcc 11
+  , AlexAcc 10
+  , AlexAcc 9
+  , AlexAcc 8
+  , AlexAcc 7
+  , AlexAcc 6
+  , AlexAcc 5
+  , AlexAcc 4
+  , AlexAcc 3
+  , AlexAcc 2
+  , AlexAcc 1
+  , AlexAcc 0
+  ]
+
+alex_actions = array (0 :: Int, 558)
+  [ (557,alex_action_45)
+  , (556,alex_action_48)
+  , (555,alex_action_47)
+  , (554,alex_action_2)
+  , (553,alex_action_2)
+  , (552,alex_action_3)
+  , (551,alex_action_4)
+  , (550,alex_action_4)
+  , (549,alex_action_5)
+  , (548,alex_action_6)
+  , (547,alex_action_7)
+  , (546,alex_action_8)
+  , (545,alex_action_9)
+  , (544,alex_action_10)
+  , (543,alex_action_11)
+  , (542,alex_action_12)
+  , (541,alex_action_13)
+  , (540,alex_action_14)
+  , (539,alex_action_15)
+  , (538,alex_action_16)
+  , (537,alex_action_17)
+  , (536,alex_action_18)
+  , (535,alex_action_19)
+  , (534,alex_action_20)
+  , (533,alex_action_21)
+  , (532,alex_action_22)
+  , (531,alex_action_23)
+  , (530,alex_action_24)
+  , (529,alex_action_25)
+  , (528,alex_action_26)
+  , (527,alex_action_27)
+  , (526,alex_action_28)
+  , (525,alex_action_29)
+  , (524,alex_action_30)
+  , (523,alex_action_31)
+  , (522,alex_action_32)
+  , (521,alex_action_33)
+  , (520,alex_action_34)
+  , (519,alex_action_35)
+  , (518,alex_action_36)
+  , (517,alex_action_36)
+  , (516,alex_action_36)
+  , (515,alex_action_36)
+  , (514,alex_action_36)
+  , (513,alex_action_36)
+  , (512,alex_action_36)
+  , (511,alex_action_36)
+  , (510,alex_action_36)
+  , (509,alex_action_36)
+  , (508,alex_action_36)
+  , (507,alex_action_36)
+  , (506,alex_action_36)
+  , (505,alex_action_36)
+  , (504,alex_action_36)
+  , (503,alex_action_36)
+  , (502,alex_action_36)
+  , (501,alex_action_36)
+  , (500,alex_action_36)
+  , (499,alex_action_36)
+  , (498,alex_action_36)
+  , (497,alex_action_36)
+  , (496,alex_action_36)
+  , (495,alex_action_36)
+  , (494,alex_action_36)
+  , (493,alex_action_36)
+  , (492,alex_action_36)
+  , (491,alex_action_36)
+  , (490,alex_action_36)
+  , (489,alex_action_36)
+  , (488,alex_action_36)
+  , (487,alex_action_36)
+  , (486,alex_action_36)
+  , (485,alex_action_36)
+  , (484,alex_action_36)
+  , (483,alex_action_36)
+  , (482,alex_action_36)
+  , (481,alex_action_36)
+  , (480,alex_action_36)
+  , (479,alex_action_36)
+  , (478,alex_action_36)
+  , (477,alex_action_36)
+  , (476,alex_action_36)
+  , (475,alex_action_36)
+  , (474,alex_action_36)
+  , (473,alex_action_36)
+  , (472,alex_action_36)
+  , (471,alex_action_36)
+  , (470,alex_action_36)
+  , (469,alex_action_36)
+  , (468,alex_action_36)
+  , (467,alex_action_36)
+  , (466,alex_action_36)
+  , (465,alex_action_36)
+  , (464,alex_action_36)
+  , (463,alex_action_36)
+  , (462,alex_action_36)
+  , (461,alex_action_36)
+  , (460,alex_action_36)
+  , (459,alex_action_36)
+  , (458,alex_action_36)
+  , (457,alex_action_36)
+  , (456,alex_action_36)
+  , (455,alex_action_36)
+  , (454,alex_action_36)
+  , (453,alex_action_36)
+  , (452,alex_action_36)
+  , (451,alex_action_36)
+  , (450,alex_action_36)
+  , (449,alex_action_36)
+  , (448,alex_action_36)
+  , (447,alex_action_36)
+  , (446,alex_action_36)
+  , (445,alex_action_36)
+  , (444,alex_action_36)
+  , (443,alex_action_36)
+  , (442,alex_action_36)
+  , (441,alex_action_36)
+  , (440,alex_action_36)
+  , (439,alex_action_36)
+  , (438,alex_action_36)
+  , (437,alex_action_36)
+  , (436,alex_action_36)
+  , (435,alex_action_36)
+  , (434,alex_action_36)
+  , (433,alex_action_36)
+  , (432,alex_action_36)
+  , (431,alex_action_36)
+  , (430,alex_action_36)
+  , (429,alex_action_36)
+  , (428,alex_action_36)
+  , (427,alex_action_36)
+  , (426,alex_action_36)
+  , (425,alex_action_36)
+  , (424,alex_action_36)
+  , (423,alex_action_36)
+  , (422,alex_action_36)
+  , (421,alex_action_36)
+  , (420,alex_action_36)
+  , (419,alex_action_36)
+  , (418,alex_action_36)
+  , (417,alex_action_36)
+  , (416,alex_action_36)
+  , (415,alex_action_36)
+  , (414,alex_action_36)
+  , (413,alex_action_36)
+  , (412,alex_action_36)
+  , (411,alex_action_36)
+  , (410,alex_action_36)
+  , (409,alex_action_36)
+  , (408,alex_action_36)
+  , (407,alex_action_36)
+  , (406,alex_action_36)
+  , (405,alex_action_36)
+  , (404,alex_action_36)
+  , (403,alex_action_36)
+  , (402,alex_action_36)
+  , (401,alex_action_36)
+  , (400,alex_action_36)
+  , (399,alex_action_36)
+  , (398,alex_action_36)
+  , (397,alex_action_36)
+  , (396,alex_action_36)
+  , (395,alex_action_36)
+  , (394,alex_action_36)
+  , (393,alex_action_36)
+  , (392,alex_action_36)
+  , (391,alex_action_36)
+  , (390,alex_action_36)
+  , (389,alex_action_36)
+  , (388,alex_action_36)
+  , (387,alex_action_36)
+  , (386,alex_action_36)
+  , (385,alex_action_36)
+  , (384,alex_action_36)
+  , (383,alex_action_36)
+  , (382,alex_action_36)
+  , (381,alex_action_36)
+  , (380,alex_action_36)
+  , (379,alex_action_36)
+  , (378,alex_action_36)
+  , (377,alex_action_36)
+  , (376,alex_action_36)
+  , (375,alex_action_36)
+  , (374,alex_action_36)
+  , (373,alex_action_36)
+  , (372,alex_action_36)
+  , (371,alex_action_36)
+  , (370,alex_action_36)
+  , (369,alex_action_36)
+  , (368,alex_action_36)
+  , (367,alex_action_36)
+  , (366,alex_action_36)
+  , (365,alex_action_36)
+  , (364,alex_action_36)
+  , (363,alex_action_36)
+  , (362,alex_action_36)
+  , (361,alex_action_36)
+  , (360,alex_action_36)
+  , (359,alex_action_36)
+  , (358,alex_action_36)
+  , (357,alex_action_36)
+  , (356,alex_action_36)
+  , (355,alex_action_36)
+  , (354,alex_action_36)
+  , (353,alex_action_36)
+  , (352,alex_action_36)
+  , (351,alex_action_36)
+  , (350,alex_action_36)
+  , (349,alex_action_36)
+  , (348,alex_action_36)
+  , (347,alex_action_36)
+  , (346,alex_action_36)
+  , (345,alex_action_36)
+  , (344,alex_action_36)
+  , (343,alex_action_36)
+  , (342,alex_action_36)
+  , (341,alex_action_36)
+  , (340,alex_action_36)
+  , (339,alex_action_36)
+  , (338,alex_action_36)
+  , (337,alex_action_36)
+  , (336,alex_action_36)
+  , (335,alex_action_36)
+  , (334,alex_action_36)
+  , (333,alex_action_36)
+  , (332,alex_action_36)
+  , (331,alex_action_36)
+  , (330,alex_action_36)
+  , (329,alex_action_36)
+  , (328,alex_action_36)
+  , (327,alex_action_36)
+  , (326,alex_action_36)
+  , (325,alex_action_37)
+  , (324,alex_action_37)
+  , (323,alex_action_37)
+  , (322,alex_action_37)
+  , (321,alex_action_37)
+  , (320,alex_action_38)
+  , (319,alex_action_38)
+  , (318,alex_action_39)
+  , (317,alex_action_40)
+  , (316,alex_action_40)
+  , (315,alex_action_41)
+  , (314,alex_action_41)
+  , (313,alex_action_41)
+  , (312,alex_action_41)
+  , (311,alex_action_41)
+  , (310,alex_action_41)
+  , (309,alex_action_41)
+  , (308,alex_action_120)
+  , (307,alex_action_41)
+  , (306,alex_action_120)
+  , (305,alex_action_41)
+  , (304,alex_action_120)
+  , (303,alex_action_43)
+  , (302,alex_action_49)
+  , (301,alex_action_50)
+  , (300,alex_action_51)
+  , (299,alex_action_52)
+  , (298,alex_action_53)
+  , (297,alex_action_54)
+  , (296,alex_action_55)
+  , (295,alex_action_56)
+  , (294,alex_action_57)
+  , (293,alex_action_58)
+  , (292,alex_action_59)
+  , (291,alex_action_60)
+  , (290,alex_action_61)
+  , (289,alex_action_62)
+  , (288,alex_action_63)
+  , (287,alex_action_64)
+  , (286,alex_action_65)
+  , (285,alex_action_66)
+  , (284,alex_action_67)
+  , (283,alex_action_68)
+  , (282,alex_action_69)
+  , (281,alex_action_70)
+  , (280,alex_action_71)
+  , (279,alex_action_72)
+  , (278,alex_action_73)
+  , (277,alex_action_74)
+  , (276,alex_action_75)
+  , (275,alex_action_76)
+  , (274,alex_action_77)
+  , (273,alex_action_78)
+  , (272,alex_action_79)
+  , (271,alex_action_80)
+  , (270,alex_action_80)
+  , (269,alex_action_80)
+  , (268,alex_action_81)
+  , (267,alex_action_82)
+  , (266,alex_action_83)
+  , (265,alex_action_84)
+  , (264,alex_action_85)
+  , (263,alex_action_86)
+  , (262,alex_action_87)
+  , (261,alex_action_88)
+  , (260,alex_action_89)
+  , (259,alex_action_90)
+  , (258,alex_action_91)
+  , (257,alex_action_92)
+  , (256,alex_action_93)
+  , (255,alex_action_94)
+  , (254,alex_action_95)
+  , (253,alex_action_96)
+  , (252,alex_action_97)
+  , (251,alex_action_98)
+  , (250,alex_action_99)
+  , (249,alex_action_100)
+  , (248,alex_action_101)
+  , (247,alex_action_102)
+  , (246,alex_action_103)
+  , (245,alex_action_104)
+  , (244,alex_action_105)
+  , (243,alex_action_106)
+  , (242,alex_action_107)
+  , (241,alex_action_108)
+  , (240,alex_action_109)
+  , (239,alex_action_110)
+  , (238,alex_action_111)
+  , (237,alex_action_112)
+  , (236,alex_action_113)
+  , (235,alex_action_114)
+  , (234,alex_action_115)
+  , (233,alex_action_116)
+  , (232,alex_action_117)
+  , (231,alex_action_118)
+  , (230,alex_action_118)
+  , (229,alex_action_118)
+  , (228,alex_action_118)
+  , (227,alex_action_118)
+  , (226,alex_action_118)
+  , (225,alex_action_118)
+  , (224,alex_action_118)
+  , (223,alex_action_119)
+  , (222,alex_action_119)
+  , (221,alex_action_119)
+  , (220,alex_action_119)
+  , (219,alex_action_119)
+  , (218,alex_action_119)
+  , (217,alex_action_119)
+  , (216,alex_action_119)
+  , (215,alex_action_119)
+  , (214,alex_action_119)
+  , (213,alex_action_119)
+  , (212,alex_action_120)
+  , (211,alex_action_120)
+  , (210,alex_action_120)
+  , (209,alex_action_120)
+  , (208,alex_action_120)
+  , (207,alex_action_120)
+  , (206,alex_action_120)
+  , (205,alex_action_120)
+  , (204,alex_action_120)
+  , (203,alex_action_120)
+  , (202,alex_action_120)
+  , (201,alex_action_120)
+  , (200,alex_action_120)
+  , (199,alex_action_120)
+  , (198,alex_action_120)
+  , (197,alex_action_120)
+  , (196,alex_action_120)
+  , (195,alex_action_120)
+  , (194,alex_action_120)
+  , (193,alex_action_120)
+  , (192,alex_action_120)
+  , (191,alex_action_120)
+  , (190,alex_action_120)
+  , (189,alex_action_120)
+  , (188,alex_action_120)
+  , (187,alex_action_120)
+  , (186,alex_action_120)
+  , (185,alex_action_120)
+  , (184,alex_action_120)
+  , (183,alex_action_120)
+  , (182,alex_action_120)
+  , (181,alex_action_120)
+  , (180,alex_action_120)
+  , (179,alex_action_120)
+  , (178,alex_action_120)
+  , (177,alex_action_120)
+  , (176,alex_action_120)
+  , (175,alex_action_120)
+  , (174,alex_action_120)
+  , (173,alex_action_120)
+  , (172,alex_action_120)
+  , (171,alex_action_120)
+  , (170,alex_action_120)
+  , (169,alex_action_120)
+  , (168,alex_action_120)
+  , (167,alex_action_120)
+  , (166,alex_action_120)
+  , (165,alex_action_120)
+  , (164,alex_action_120)
+  , (163,alex_action_120)
+  , (162,alex_action_120)
+  , (161,alex_action_120)
+  , (160,alex_action_120)
+  , (159,alex_action_120)
+  , (158,alex_action_120)
+  , (157,alex_action_120)
+  , (156,alex_action_120)
+  , (155,alex_action_120)
+  , (154,alex_action_120)
+  , (153,alex_action_120)
+  , (152,alex_action_120)
+  , (151,alex_action_120)
+  , (150,alex_action_120)
+  , (149,alex_action_120)
+  , (148,alex_action_120)
+  , (147,alex_action_120)
+  , (146,alex_action_120)
+  , (145,alex_action_120)
+  , (144,alex_action_120)
+  , (143,alex_action_120)
+  , (142,alex_action_120)
+  , (141,alex_action_120)
+  , (140,alex_action_120)
+  , (139,alex_action_120)
+  , (138,alex_action_120)
+  , (137,alex_action_120)
+  , (136,alex_action_120)
+  , (135,alex_action_120)
+  , (134,alex_action_120)
+  , (133,alex_action_120)
+  , (132,alex_action_120)
+  , (131,alex_action_120)
+  , (130,alex_action_120)
+  , (129,alex_action_120)
+  , (128,alex_action_120)
+  , (127,alex_action_120)
+  , (126,alex_action_120)
+  , (125,alex_action_120)
+  , (124,alex_action_120)
+  , (123,alex_action_120)
+  , (122,alex_action_120)
+  , (121,alex_action_120)
+  , (120,alex_action_120)
+  , (119,alex_action_120)
+  , (118,alex_action_120)
+  , (117,alex_action_120)
+  , (116,alex_action_120)
+  , (115,alex_action_120)
+  , (114,alex_action_120)
+  , (113,alex_action_120)
+  , (112,alex_action_120)
+  , (111,alex_action_120)
+  , (110,alex_action_120)
+  , (109,alex_action_120)
+  , (108,alex_action_120)
+  , (107,alex_action_120)
+  , (106,alex_action_120)
+  , (105,alex_action_120)
+  , (104,alex_action_120)
+  , (103,alex_action_120)
+  , (102,alex_action_120)
+  , (101,alex_action_120)
+  , (100,alex_action_120)
+  , (99,alex_action_120)
+  , (98,alex_action_120)
+  , (97,alex_action_120)
+  , (96,alex_action_120)
+  , (95,alex_action_120)
+  , (94,alex_action_120)
+  , (93,alex_action_120)
+  , (92,alex_action_120)
+  , (91,alex_action_120)
+  , (90,alex_action_120)
+  , (89,alex_action_120)
+  , (88,alex_action_120)
+  , (87,alex_action_120)
+  , (86,alex_action_120)
+  , (85,alex_action_120)
+  , (84,alex_action_120)
+  , (83,alex_action_120)
+  , (82,alex_action_120)
+  , (81,alex_action_120)
+  , (80,alex_action_120)
+  , (79,alex_action_120)
+  , (78,alex_action_120)
+  , (77,alex_action_120)
+  , (76,alex_action_120)
+  , (75,alex_action_120)
+  , (74,alex_action_120)
+  , (73,alex_action_120)
+  , (72,alex_action_120)
+  , (71,alex_action_120)
+  , (70,alex_action_120)
+  , (69,alex_action_120)
+  , (68,alex_action_120)
+  , (67,alex_action_120)
+  , (66,alex_action_120)
+  , (65,alex_action_120)
+  , (64,alex_action_120)
+  , (63,alex_action_120)
+  , (62,alex_action_120)
+  , (61,alex_action_120)
+  , (60,alex_action_120)
+  , (59,alex_action_120)
+  , (58,alex_action_120)
+  , (57,alex_action_120)
+  , (56,alex_action_120)
+  , (55,alex_action_120)
+  , (54,alex_action_120)
+  , (53,alex_action_120)
+  , (52,alex_action_120)
+  , (51,alex_action_120)
+  , (50,alex_action_120)
+  , (49,alex_action_120)
+  , (48,alex_action_120)
+  , (47,alex_action_120)
+  , (46,alex_action_120)
+  , (45,alex_action_120)
+  , (44,alex_action_120)
+  , (43,alex_action_120)
+  , (42,alex_action_120)
+  , (41,alex_action_120)
+  , (40,alex_action_120)
+  , (39,alex_action_120)
+  , (38,alex_action_120)
+  , (37,alex_action_120)
+  , (36,alex_action_120)
+  , (35,alex_action_120)
+  , (34,alex_action_120)
+  , (33,alex_action_120)
+  , (32,alex_action_120)
+  , (31,alex_action_120)
+  , (30,alex_action_120)
+  , (29,alex_action_120)
+  , (28,alex_action_120)
+  , (27,alex_action_120)
+  , (26,alex_action_120)
+  , (25,alex_action_120)
+  , (24,alex_action_120)
+  , (23,alex_action_120)
+  , (22,alex_action_120)
+  , (21,alex_action_120)
+  , (20,alex_action_120)
+  , (19,alex_action_120)
+  , (18,alex_action_120)
+  , (17,alex_action_120)
+  , (16,alex_action_120)
+  , (15,alex_action_120)
+  , (14,alex_action_120)
+  , (13,alex_action_120)
+  , (12,alex_action_120)
+  , (11,alex_action_120)
+  , (10,alex_action_120)
+  , (9,alex_action_120)
+  , (8,alex_action_120)
+  , (7,alex_action_120)
+  , (6,alex_action_120)
+  , (5,alex_action_120)
+  , (4,alex_action_120)
+  , (3,alex_action_120)
+  , (2,alex_action_120)
+  , (1,alex_action_120)
+  , (0,alex_action_120)
+  ]
+
+{-# LINE 246 "src/full/Agda/Syntax/Parser/Lexer.x" #-}
+
+
+-- | This is the initial state for parsing a regular, non-literate file.
+normal :: LexState
+normal = 0
+
+
+{-| The layout state. Entered when we see a layout keyword ('withLayout') and
+    exited either when seeing an open brace ('openBrace') or at the next token
+    ('newLayoutContext').
+
+    Update: we don't use braces for layout anymore.
+-}
+layout :: LexState
+layout = layout_
+
+
+{-| The state inside a pragma.
+-}
+pragma :: LexState
+pragma = pragma_
+
+-- | The state inside a FOREIGN pragma. This needs to be different so that we don't
+--   lex further strings as pragma keywords.
+fpragma :: LexState
+fpragma = fpragma_
+
+{-| We enter this state from 'newLayoutContext' when the token following a
+    layout keyword is to the left of (or at the same column as) the current
+    layout context. Example:
+
+    > data Empty : Set where
+    > foo : Empty -> Nat
+
+    Here the second line is not part of the @where@ clause since it is has the
+    same indentation as the @data@ definition. What we have to do is insert an
+    empty layout block @{}@ after the @where@. The only thing that can happen
+    in this state is that 'emptyLayout' is executed, generating the closing
+    brace. The open brace is generated when entering by 'newLayoutContext'.
+-}
+empty_layout :: LexState
+empty_layout = empty_layout_
+
+
+-- | This state is entered at the beginning of each line. You can't lex
+--   anything in this state, and to exit you have to check the layout rule.
+--   Done with 'offsideRule'.
+bol :: LexState
+bol = bol_
+
+
+-- | This state can only be entered by the parser. In this state you can only
+--   lex the keywords @using@, @hiding@, @renaming@ and @to@. Moreover they are
+--   only keywords in this particular state. The lexer will never enter this
+--   state by itself, that has to be done in the parser.
+imp_dir :: LexState
+imp_dir = imp_dir_
+
+
+-- | Return the next token. This is the function used by Happy in the parser.
+--
+--   @lexer k = 'lexToken' >>= k@
+lexer :: (Token -> Parser a) -> Parser a
+lexer k = lexToken >>= k
+
+-- | Do not use this function; it sets the 'ParseFlags' to
+-- 'undefined'.
+alexScan :: AlexInput -> Int -> AlexReturn (LexAction Token)
+
+-- | This is the main lexing function generated by Alex.
+alexScanUser :: ([LexState], ParseFlags) -> AlexInput -> Int -> AlexReturn (LexAction Token)
+
+
+
+bol_,code,empty_layout_,fpragma_,imp_dir_,layout_,pragma_ :: Int
+bol_ = 1
+code = 2
+empty_layout_ = 3
+fpragma_ = 4
+imp_dir_ = 5
+layout_ = 6
+pragma_ = 7
+alex_action_2 =  beginWith pragma  $ symbol SymOpenPragma 
+alex_action_3 =  beginWith fpragma $ symbol SymOpenPragma 
+alex_action_4 =  endWith $ symbol SymClosePragma 
+alex_action_5 =  keyword KwBUILTIN 
+alex_action_6 =  keyword KwCATCHALL 
+alex_action_7 =  keyword KwCOMPILED 
+alex_action_8 =  keyword KwCOMPILED_DATA 
+alex_action_9 =  keyword KwCOMPILED_DATA_UHC 
+alex_action_10 =  keyword KwCOMPILED_EXPORT 
+alex_action_11 =  keyword KwCOMPILED_JS 
+alex_action_12 =  keyword KwCOMPILED_TYPE 
+alex_action_13 =  keyword KwCOMPILED_UHC 
+alex_action_14 =  endWith $ beginWith fpragma $ keyword KwCOMPILE 
+alex_action_15 =  endWith $ beginWith fpragma $ keyword KwFOREIGN 
+alex_action_16 =  keyword KwDISPLAY 
+alex_action_17 =  keyword KwETA 
+alex_action_18 =  endWith $ beginWith fpragma $ keyword KwHASKELL 
+alex_action_19 =  keyword KwIMPORT 
+alex_action_20 =  keyword KwIMPORT_UHC 
+alex_action_21 =  keyword KwIMPOSSIBLE 
+alex_action_22 =  keyword KwINJECTIVE 
+alex_action_23 =  keyword KwINLINE 
+alex_action_24 =  keyword KwNOINLINE 
+alex_action_25 =  keyword KwLINE 
+alex_action_26 =  keyword KwMEASURE 
+alex_action_27 =  keyword KwNO_POSITIVITY_CHECK 
+alex_action_28 =  keyword KwNO_TERMINATION_CHECK 
+alex_action_29 =  keyword KwNON_TERMINATING 
+alex_action_30 =  keyword KwOPTIONS 
+alex_action_31 =  keyword KwPOLARITY 
+alex_action_32 =  keyword KwREWRITE 
+alex_action_33 =  keyword KwSTATIC 
+alex_action_34 =  keyword KwTERMINATING 
+alex_action_35 =  keyword KwWARNING_ON_USAGE 
+alex_action_36 =  withInterval $ TokString 
+alex_action_37 =  withInterval $ TokString 
+alex_action_38 =  nestedComment 
+alex_action_39 =  symbol SymEndComment 
+alex_action_40 =  symbol SymEndComment 
+alex_action_41 =  withInterval TokComment 
+alex_action_43 =  begin bol_ 
+alex_action_45 =  offsideRule 
+alex_action_47 =  endWith newLayoutContext 
+alex_action_48 =  emptyLayout 
+alex_action_49 =  keyword KwLet 
+alex_action_50 =  keyword KwIn 
+alex_action_51 =  keyword KwWhere 
+alex_action_52 =  keyword KwDo 
+alex_action_53 =  keyword KwField 
+alex_action_54 =  keyword KwWith 
+alex_action_55 =  keyword KwRewrite 
+alex_action_56 =  keyword KwPostulate 
+alex_action_57 =  keyword KwPrimitive 
+alex_action_58 =  keyword KwOpen 
+alex_action_59 =  keyword KwImport 
+alex_action_60 =  keyword KwModule 
+alex_action_61 =  keyword KwData 
+alex_action_62 =  keyword KwCoData 
+alex_action_63 =  keyword KwRecord 
+alex_action_64 =  keyword KwConstructor 
+alex_action_65 =  keyword KwInductive 
+alex_action_66 =  keyword KwCoInductive 
+alex_action_67 =  keyword KwEta 
+alex_action_68 =  keyword KwNoEta 
+alex_action_69 =  keyword KwInfix 
+alex_action_70 =  keyword KwInfixL 
+alex_action_71 =  keyword KwInfixR 
+alex_action_72 =  keyword KwMutual 
+alex_action_73 =  keyword KwAbstract 
+alex_action_74 =  keyword KwPrivate 
+alex_action_75 =  keyword KwInstance 
+alex_action_76 =  keyword KwOverlap 
+alex_action_77 =  keyword KwMacro 
+alex_action_78 =  keyword KwSet 
+alex_action_79 =  keyword KwForall 
+alex_action_80 =  withInterval' (read . drop 3) TokSetN 
+alex_action_81 =  keyword KwQuoteGoal 
+alex_action_82 =  keyword KwQuoteContext 
+alex_action_83 =  keyword KwQuote 
+alex_action_84 =  keyword KwQuoteTerm 
+alex_action_85 =  keyword KwUnquote 
+alex_action_86 =  keyword KwUnquoteDecl 
+alex_action_87 =  keyword KwUnquoteDef  
+alex_action_88 =  keyword KwTactic 
+alex_action_89 =  keyword KwSyntax 
+alex_action_90 =  keyword KwPatternSyn 
+alex_action_91 =  keyword KwUsing 
+alex_action_92 =  keyword KwHiding 
+alex_action_93 =  keyword KwRenaming 
+alex_action_94 =  endWith $ keyword KwTo 
+alex_action_95 =  keyword KwPublic 
+alex_action_96 =  hole 
+alex_action_97 =  symbol SymEllipsis 
+alex_action_98 =  symbol SymDotDot 
+alex_action_99 =  symbol SymDot 
+alex_action_100 =  symbol SymSemi 
+alex_action_101 =  symbol SymColon 
+alex_action_102 =  symbol SymEqual 
+alex_action_103 =  symbol SymUnderscore 
+alex_action_104 =  symbol SymQuestionMark 
+alex_action_105 =  symbol SymBar 
+alex_action_106 =  symbol SymOpenIdiomBracket 
+alex_action_107 =  symbol SymCloseIdiomBracket 
+alex_action_108 =  symbol SymOpenParen 
+alex_action_109 =  symbol SymCloseParen 
+alex_action_110 =  symbol SymArrow 
+alex_action_111 =  symbol SymLambda 
+alex_action_112 =  symbol SymAs 
+alex_action_113 =  symbol SymDoubleOpenBrace 
+alex_action_114 =  symbol SymOpenBrace 
+alex_action_115 =  symbol SymCloseBrace 
+alex_action_116 =  litChar 
+alex_action_117 =  litString 
+alex_action_118 =  literal LitNat 
+alex_action_119 =  literal LitFloat 
+alex_action_120 =  identifier 
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- -----------------------------------------------------------------------------
+-- ALEX TEMPLATE
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
+
+-- -----------------------------------------------------------------------------
+-- INTERNALS and main scanner engine
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define GTE(n,m) (tagToEnum# (n >=# m))
+#define EQ(n,m) (tagToEnum# (n ==# m))
+#else
+#define GTE(n,m) (n >=# m)
+#define EQ(n,m) (n ==# m)
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+data AlexAddr = AlexA# Addr#
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ < 503
+uncheckedShiftL# = shiftL#
+#endif
+
+{-# INLINE alexIndexInt16OffAddr #-}
+alexIndexInt16OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow16Int# i
+  where
+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))
+        off' = off *# 2#
+#else
+  indexInt16OffAddr# arr off
+#endif
+
+
+
+
+
+{-# INLINE alexIndexInt32OffAddr #-}
+alexIndexInt32OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow32Int# i
+  where
+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
+                     (b2 `uncheckedShiftL#` 16#) `or#`
+                     (b1 `uncheckedShiftL#` 8#) `or#` b0)
+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
+   off' = off *# 4#
+#else
+  indexInt32OffAddr# arr off
+#endif
+
+
+
+
+
+
+#if __GLASGOW_HASKELL__ < 503
+quickIndex arr i = arr ! i
+#else
+-- GHC >= 503, unsafeAt is available from Data.Array.Base.
+quickIndex = unsafeAt
+#endif
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Main lexing routines
+
+data AlexReturn a
+  = AlexEOF
+  | AlexError  !AlexInput
+  | AlexSkip   !AlexInput !Int
+  | AlexToken  !AlexInput !Int a
+
+-- alexScan :: AlexInput -> StartCode -> AlexReturn a
+alexScan input__ (I# (sc))
+  = alexScanUser undefined input__ (I# (sc))
+
+alexScanUser user__ input__ (I# (sc))
+  = case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of
+  (AlexNone, input__') ->
+    case alexGetByte input__ of
+      Nothing ->
+
+
+
+                                   AlexEOF
+      Just _ ->
+
+
+
+                                   AlexError input__'
+
+  (AlexLastSkip input__'' len, _) ->
+
+
+
+    AlexSkip input__'' len
+
+  (AlexLastAcc k input__''' len, _) ->
+
+
+
+    AlexToken input__''' len (alex_actions ! k)
+
+
+-- Push the input through the DFA, remembering the most recent accepting
+-- state it encountered.
+
+alex_scan_tkn user__ orig_input len input__ s last_acc =
+  input__ `seq` -- strict in the input
+  let
+  new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))
+  in
+  new_acc `seq`
+  case alexGetByte input__ of
+     Nothing -> (new_acc, input__)
+     Just (c, new_input) ->
+
+
+
+      case fromIntegral c of { (I# (ord_c)) ->
+        let
+                base   = alexIndexInt32OffAddr alex_base s
+                offset = (base +# ord_c)
+                check  = alexIndexInt16OffAddr alex_check offset
+
+                new_s = if GTE(offset,0#) && EQ(check,ord_c)
+                          then alexIndexInt16OffAddr alex_table offset
+                          else alexIndexInt16OffAddr alex_deflt s
+        in
+        case new_s of
+            -1# -> (new_acc, input__)
+                -- on an error, we want to keep the input *before* the
+                -- character that failed, not after.
+            _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)
+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
+                        new_input new_s new_acc
+      }
+  where
+        check_accs (AlexAccNone) = last_acc
+        check_accs (AlexAcc a  ) = AlexLastAcc a input__ (I# (len))
+        check_accs (AlexAccSkip) = AlexLastSkip  input__ (I# (len))
+
+        check_accs (AlexAccPred a predx rest)
+           | predx user__ orig_input (I# (len)) input__
+           = AlexLastAcc a input__ (I# (len))
+           | otherwise
+           = check_accs rest
+        check_accs (AlexAccSkipPred predx rest)
+           | predx user__ orig_input (I# (len)) input__
+           = AlexLastSkip input__ (I# (len))
+           | otherwise
+           = check_accs rest
+
+
+data AlexLastAcc
+  = AlexNone
+  | AlexLastAcc !Int !AlexInput !Int
+  | AlexLastSkip     !AlexInput !Int
+
+data AlexAcc user
+  = AlexAccNone
+  | AlexAcc Int
+  | AlexAccSkip
+
+  | AlexAccPred Int (AlexAccPred user) (AlexAcc user)
+  | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)
+
+type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool
+
+-- -----------------------------------------------------------------------------
+-- Predicates on a rule
+
+alexAndPred p1 p2 user__ in1 len in2
+  = p1 user__ in1 len in2 && p2 user__ in1 len in2
+
+--alexPrevCharIsPred :: Char -> AlexAccPred _
+alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__
+
+alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)
+
+--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _
+alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__
+
+--alexRightContext :: Int -> AlexAccPred _
+alexRightContext (I# (sc)) user__ _ _ input__ =
+     case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of
+          (AlexNone, _) -> False
+          _ -> True
+        -- TODO: there's no need to find the longest
+        -- match when checking the right context, just
+        -- the first match will do.
+
diff --git a/dist/build/Agda/Syntax/Parser/Parser.hs b/dist/build/Agda/Syntax/Parser/Parser.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/Agda/Syntax/Parser/Parser.hs
@@ -0,0 +1,8375 @@
+{-# OPTIONS_GHC -w #-}
+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}
+#if __GLASGOW_HASKELL__ >= 710
+{-# OPTIONS_GHC -XPartialTypeSignatures #-}
+#endif
+{-# LANGUAGE TupleSections #-}
+
+{-| 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
+    , moduleNameParser
+    , exprParser
+    , exprWhereParser
+    , tokensParser
+    , holeContentParser
+    , splitOnDots  -- only used by the internal test-suite
+    ) where
+
+import Control.Monad
+
+import Data.Char
+import Data.Functor
+import Data.List
+import Data.Maybe
+import Data.Monoid
+import qualified Data.Traversable as T
+
+import Debug.Trace
+
+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 as C
+import Agda.Syntax.Concrete.Pattern
+import Agda.Syntax.Concrete.Pretty ()
+import Agda.Syntax.Common
+import Agda.Syntax.Fixity
+import Agda.Syntax.Notation
+import Agda.Syntax.Literal
+
+import Agda.TypeChecking.Positivity.Occurrence hiding (tests)
+
+import Agda.Utils.Either hiding (tests)
+import Agda.Utils.Functor
+import Agda.Utils.Hash
+import Agda.Utils.List ( spanJust, chopWhen )
+import Agda.Utils.Monad
+import Agda.Utils.Pretty
+import Agda.Utils.Singleton
+import Agda.Utils.Tuple
+
+import Agda.Utils.Impossible
+#include "undefined.h"
+import qualified Data.Array as Happy_Data_Array
+import qualified Data.Bits as Bits
+import qualified GHC.Exts as Happy_GHC_Exts
+import Control.Applicative(Applicative(..))
+import Control.Monad (ap)
+
+-- parser produced by Happy Version 1.19.9
+
+newtype HappyAbsSyn  = HappyAbsSyn HappyAny
+#if __GLASGOW_HASKELL__ >= 607
+type HappyAny = Happy_GHC_Exts.Any
+#else
+type HappyAny = forall a . a
+#endif
+happyIn10 :: ([Token]) -> (HappyAbsSyn )
+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn10 #-}
+happyOut10 :: (HappyAbsSyn ) -> ([Token])
+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut10 #-}
+happyIn11 :: ([Token]) -> (HappyAbsSyn )
+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn11 #-}
+happyOut11 :: (HappyAbsSyn ) -> ([Token])
+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut11 #-}
+happyIn12 :: (Token) -> (HappyAbsSyn )
+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn12 #-}
+happyOut12 :: (HappyAbsSyn ) -> (Token)
+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut12 #-}
+happyIn13 :: (([Pragma], [Declaration])) -> (HappyAbsSyn )
+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn13 #-}
+happyOut13 :: (HappyAbsSyn ) -> (([Pragma], [Declaration]))
+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut13 #-}
+happyIn14 :: (()) -> (HappyAbsSyn )
+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn14 #-}
+happyOut14 :: (HappyAbsSyn ) -> (())
+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut14 #-}
+happyIn15 :: (()) -> (HappyAbsSyn )
+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn15 #-}
+happyOut15 :: (HappyAbsSyn ) -> (())
+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut15 #-}
+happyIn16 :: (Interval) -> (HappyAbsSyn )
+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn16 #-}
+happyOut16 :: (HappyAbsSyn ) -> (Interval)
+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut16 #-}
+happyIn17 :: (()) -> (HappyAbsSyn )
+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn17 #-}
+happyOut17 :: (HappyAbsSyn ) -> (())
+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut17 #-}
+happyIn18 :: (Integer) -> (HappyAbsSyn )
+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn18 #-}
+happyOut18 :: (HappyAbsSyn ) -> (Integer)
+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut18 #-}
+happyIn19 :: (Name) -> (HappyAbsSyn )
+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn19 #-}
+happyOut19 :: (HappyAbsSyn ) -> (Name)
+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut19 #-}
+happyIn20 :: ([Name]) -> (HappyAbsSyn )
+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn20 #-}
+happyOut20 :: (HappyAbsSyn ) -> ([Name])
+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut20 #-}
+happyIn21 :: (Range) -> (HappyAbsSyn )
+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn21 #-}
+happyOut21 :: (HappyAbsSyn ) -> (Range)
+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut21 #-}
+happyIn22 :: (Arg Name) -> (HappyAbsSyn )
+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn22 #-}
+happyOut22 :: (HappyAbsSyn ) -> (Arg Name)
+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut22 #-}
+happyIn23 :: ([Arg Name]) -> (HappyAbsSyn )
+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn23 #-}
+happyOut23 :: (HappyAbsSyn ) -> ([Arg Name])
+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut23 #-}
+happyIn24 :: ([Arg Name]) -> (HappyAbsSyn )
+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn24 #-}
+happyOut24 :: (HappyAbsSyn ) -> ([Arg Name])
+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut24 #-}
+happyIn25 :: (QName) -> (HappyAbsSyn )
+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn25 #-}
+happyOut25 :: (HappyAbsSyn ) -> (QName)
+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut25 #-}
+happyIn26 :: (QName) -> (HappyAbsSyn )
+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn26 #-}
+happyOut26 :: (HappyAbsSyn ) -> (QName)
+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut26 #-}
+happyIn27 :: (Name) -> (HappyAbsSyn )
+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn27 #-}
+happyOut27 :: (HappyAbsSyn ) -> (Name)
+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut27 #-}
+happyIn28 :: ([Name]) -> (HappyAbsSyn )
+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn28 #-}
+happyOut28 :: (HappyAbsSyn ) -> ([Name])
+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut28 #-}
+happyIn29 :: ([Name]) -> (HappyAbsSyn )
+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn29 #-}
+happyOut29 :: (HappyAbsSyn ) -> ([Name])
+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut29 #-}
+happyIn30 :: (Either [Name] [Expr]) -> (HappyAbsSyn )
+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn30 #-}
+happyOut30 :: (HappyAbsSyn ) -> (Either [Name] [Expr])
+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut30 #-}
+happyIn31 :: ([WithHiding Name]) -> (HappyAbsSyn )
+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn31 #-}
+happyOut31 :: (HappyAbsSyn ) -> ([WithHiding Name])
+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut31 #-}
+happyIn32 :: ([String]) -> (HappyAbsSyn )
+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn32 #-}
+happyOut32 :: (HappyAbsSyn ) -> ([String])
+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut32 #-}
+happyIn33 :: (String) -> (HappyAbsSyn )
+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn33 #-}
+happyOut33 :: (HappyAbsSyn ) -> (String)
+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut33 #-}
+happyIn34 :: ([(Interval, String)]) -> (HappyAbsSyn )
+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn34 #-}
+happyOut34 :: (HappyAbsSyn ) -> ([(Interval, String)])
+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut34 #-}
+happyIn35 :: ([(Interval, String)]) -> (HappyAbsSyn )
+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn35 #-}
+happyOut35 :: (HappyAbsSyn ) -> ([(Interval, String)])
+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut35 #-}
+happyIn36 :: (Name) -> (HappyAbsSyn )
+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn ) -> (Name)
+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+happyIn37 :: (QName) -> (HappyAbsSyn )
+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn ) -> (QName)
+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+happyIn38 :: ([QName]) -> (HappyAbsSyn )
+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn ) -> ([QName])
+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+happyIn39 :: (Expr) -> (HappyAbsSyn )
+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn ) -> (Expr)
+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+happyIn40 :: (Expr) -> (HappyAbsSyn )
+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn ) -> (Expr)
+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+happyIn41 :: ([Expr]) -> (HappyAbsSyn )
+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn ) -> ([Expr])
+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+happyIn42 :: ([Expr]) -> (HappyAbsSyn )
+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn ) -> ([Expr])
+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+happyIn43 :: (Expr) -> (HappyAbsSyn )
+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn ) -> (Expr)
+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+happyIn44 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+happyIn45 :: (Expr) -> (HappyAbsSyn )
+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn ) -> (Expr)
+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+happyIn46 :: ([Expr]) -> (HappyAbsSyn )
+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn ) -> ([Expr])
+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+happyIn47 :: ([Expr]) -> (HappyAbsSyn )
+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn ) -> ([Expr])
+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+happyIn48 :: (Expr) -> (HappyAbsSyn )
+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn ) -> (Expr)
+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+happyIn49 :: (Expr) -> (HappyAbsSyn )
+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn ) -> (Expr)
+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+happyIn50 :: (Expr) -> (HappyAbsSyn )
+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn ) -> (Expr)
+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+happyIn51 :: (RecordAssignments) -> (HappyAbsSyn )
+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn ) -> (RecordAssignments)
+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+happyIn52 :: (RecordAssignments) -> (HappyAbsSyn )
+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn ) -> (RecordAssignments)
+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+happyIn53 :: (RecordAssignment) -> (HappyAbsSyn )
+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn ) -> (RecordAssignment)
+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+happyIn54 :: (ModuleAssignment) -> (HappyAbsSyn )
+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn ) -> (ModuleAssignment)
+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+happyIn55 :: ([FieldAssignment]) -> (HappyAbsSyn )
+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn ) -> ([FieldAssignment])
+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyIn56 :: ([FieldAssignment]) -> (HappyAbsSyn )
+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn56 #-}
+happyOut56 :: (HappyAbsSyn ) -> ([FieldAssignment])
+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut56 #-}
+happyIn57 :: (FieldAssignment) -> (HappyAbsSyn )
+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn57 #-}
+happyOut57 :: (HappyAbsSyn ) -> (FieldAssignment)
+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut57 #-}
+happyIn58 :: (Telescope) -> (HappyAbsSyn )
+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn58 #-}
+happyOut58 :: (HappyAbsSyn ) -> (Telescope)
+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut58 #-}
+happyIn59 :: (Telescope) -> (HappyAbsSyn )
+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn59 #-}
+happyOut59 :: (HappyAbsSyn ) -> (Telescope)
+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut59 #-}
+happyIn60 :: ([TypedBindings]) -> (HappyAbsSyn )
+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn60 #-}
+happyOut60 :: (HappyAbsSyn ) -> ([TypedBindings])
+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut60 #-}
+happyIn61 :: (TypedBindings) -> (HappyAbsSyn )
+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn61 #-}
+happyOut61 :: (HappyAbsSyn ) -> (TypedBindings)
+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut61 #-}
+happyIn62 :: (TypedBindings) -> (HappyAbsSyn )
+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn62 #-}
+happyOut62 :: (HappyAbsSyn ) -> (TypedBindings)
+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut62 #-}
+happyIn63 :: (TypedBindings) -> (HappyAbsSyn )
+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn63 #-}
+happyOut63 :: (HappyAbsSyn ) -> (TypedBindings)
+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut63 #-}
+happyIn64 :: ([LamBinding]) -> (HappyAbsSyn )
+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn64 #-}
+happyOut64 :: (HappyAbsSyn ) -> ([LamBinding])
+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut64 #-}
+happyIn65 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn )
+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn65 #-}
+happyOut65 :: (HappyAbsSyn ) -> (Either ([LamBinding], Hiding) [Expr])
+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut65 #-}
+happyIn66 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn )
+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn66 #-}
+happyOut66 :: (HappyAbsSyn ) -> ([Either Hiding LamBinding])
+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut66 #-}
+happyIn67 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn )
+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn67 #-}
+happyOut67 :: (HappyAbsSyn ) -> (Either [Either Hiding LamBinding] [Expr])
+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut67 #-}
+happyIn68 :: (LamClause) -> (HappyAbsSyn )
+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn68 #-}
+happyOut68 :: (HappyAbsSyn ) -> (LamClause)
+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut68 #-}
+happyIn69 :: (LamClause) -> (HappyAbsSyn )
+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn69 #-}
+happyOut69 :: (HappyAbsSyn ) -> (LamClause)
+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut69 #-}
+happyIn70 :: (LamClause) -> (HappyAbsSyn )
+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn70 #-}
+happyOut70 :: (HappyAbsSyn ) -> (LamClause)
+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut70 #-}
+happyIn71 :: ([LamClause]) -> (HappyAbsSyn )
+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn71 #-}
+happyOut71 :: (HappyAbsSyn ) -> ([LamClause])
+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut71 #-}
+happyIn72 :: ([LamClause]) -> (HappyAbsSyn )
+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn72 #-}
+happyOut72 :: (HappyAbsSyn ) -> ([LamClause])
+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut72 #-}
+happyIn73 :: ([LamBinding]) -> (HappyAbsSyn )
+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn73 #-}
+happyOut73 :: (HappyAbsSyn ) -> ([LamBinding])
+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut73 #-}
+happyIn74 :: ([LamBinding]) -> (HappyAbsSyn )
+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn74 #-}
+happyOut74 :: (HappyAbsSyn ) -> ([LamBinding])
+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut74 #-}
+happyIn75 :: ([LamBinding]) -> (HappyAbsSyn )
+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn75 #-}
+happyOut75 :: (HappyAbsSyn ) -> ([LamBinding])
+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut75 #-}
+happyIn76 :: ([LamBinding]) -> (HappyAbsSyn )
+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn76 #-}
+happyOut76 :: (HappyAbsSyn ) -> ([LamBinding])
+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut76 #-}
+happyIn77 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn )
+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn77 #-}
+happyOut77 :: (HappyAbsSyn ) -> (Either [LamBinding] [Expr])
+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut77 #-}
+happyIn78 :: ([DoStmt]) -> (HappyAbsSyn )
+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn78 #-}
+happyOut78 :: (HappyAbsSyn ) -> ([DoStmt])
+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut78 #-}
+happyIn79 :: (DoStmt) -> (HappyAbsSyn )
+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn79 #-}
+happyOut79 :: (HappyAbsSyn ) -> (DoStmt)
+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut79 #-}
+happyIn80 :: ([LamClause]) -> (HappyAbsSyn )
+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn80 #-}
+happyOut80 :: (HappyAbsSyn ) -> ([LamClause])
+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut80 #-}
+happyIn81 :: (ImportDirective) -> (HappyAbsSyn )
+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn81 #-}
+happyOut81 :: (HappyAbsSyn ) -> (ImportDirective)
+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut81 #-}
+happyIn82 :: ([ImportDirective]) -> (HappyAbsSyn )
+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn82 #-}
+happyOut82 :: (HappyAbsSyn ) -> ([ImportDirective])
+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut82 #-}
+happyIn83 :: (ImportDirective) -> (HappyAbsSyn )
+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn83 #-}
+happyOut83 :: (HappyAbsSyn ) -> (ImportDirective)
+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut83 #-}
+happyIn84 :: ((Using, Range)) -> (HappyAbsSyn )
+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn84 #-}
+happyOut84 :: (HappyAbsSyn ) -> ((Using, Range))
+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut84 #-}
+happyIn85 :: (([ImportedName], Range)) -> (HappyAbsSyn )
+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn85 #-}
+happyOut85 :: (HappyAbsSyn ) -> (([ImportedName], Range))
+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut85 #-}
+happyIn86 :: (([Renaming] , Range)) -> (HappyAbsSyn )
+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn86 #-}
+happyOut86 :: (HappyAbsSyn ) -> (([Renaming] , Range))
+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut86 #-}
+happyIn87 :: ([Renaming]) -> (HappyAbsSyn )
+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn87 #-}
+happyOut87 :: (HappyAbsSyn ) -> ([Renaming])
+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut87 #-}
+happyIn88 :: (Renaming) -> (HappyAbsSyn )
+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn88 #-}
+happyOut88 :: (HappyAbsSyn ) -> (Renaming)
+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut88 #-}
+happyIn89 :: (ImportedName) -> (HappyAbsSyn )
+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn89 #-}
+happyOut89 :: (HappyAbsSyn ) -> (ImportedName)
+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut89 #-}
+happyIn90 :: (ImportedName) -> (HappyAbsSyn )
+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn90 #-}
+happyOut90 :: (HappyAbsSyn ) -> (ImportedName)
+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut90 #-}
+happyIn91 :: ([ImportedName]) -> (HappyAbsSyn )
+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn91 #-}
+happyOut91 :: (HappyAbsSyn ) -> ([ImportedName])
+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut91 #-}
+happyIn92 :: ([ImportedName]) -> (HappyAbsSyn )
+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn92 #-}
+happyOut92 :: (HappyAbsSyn ) -> ([ImportedName])
+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut92 #-}
+happyIn93 :: (LHS) -> (HappyAbsSyn )
+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn93 #-}
+happyOut93 :: (HappyAbsSyn ) -> (LHS)
+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut93 #-}
+happyIn94 :: ([Expr]) -> (HappyAbsSyn )
+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn94 #-}
+happyOut94 :: (HappyAbsSyn ) -> ([Expr])
+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut94 #-}
+happyIn95 :: ([Expr]) -> (HappyAbsSyn )
+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn95 #-}
+happyOut95 :: (HappyAbsSyn ) -> ([Expr])
+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut95 #-}
+happyIn96 :: (HoleContent) -> (HappyAbsSyn )
+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn96 #-}
+happyOut96 :: (HappyAbsSyn ) -> (HoleContent)
+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut96 #-}
+happyIn97 :: (WhereClause) -> (HappyAbsSyn )
+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn97 #-}
+happyOut97 :: (HappyAbsSyn ) -> (WhereClause)
+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut97 #-}
+happyIn98 :: (ExprWhere) -> (HappyAbsSyn )
+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn98 #-}
+happyOut98 :: (HappyAbsSyn ) -> (ExprWhere)
+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut98 #-}
+happyIn99 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn99 #-}
+happyOut99 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut99 #-}
+happyIn100 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn100 #-}
+happyOut100 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut100 #-}
+happyIn101 :: ([Arg Declaration]) -> (HappyAbsSyn )
+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn101 #-}
+happyOut101 :: (HappyAbsSyn ) -> ([Arg Declaration])
+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut101 #-}
+happyIn102 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn102 #-}
+happyOut102 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut102 #-}
+happyIn103 :: (RHSOrTypeSigs) -> (HappyAbsSyn )
+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn103 #-}
+happyOut103 :: (HappyAbsSyn ) -> (RHSOrTypeSigs)
+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut103 #-}
+happyIn104 :: (Declaration) -> (HappyAbsSyn )
+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn104 #-}
+happyOut104 :: (HappyAbsSyn ) -> (Declaration)
+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut104 #-}
+happyIn105 :: (Declaration) -> (HappyAbsSyn )
+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn105 #-}
+happyOut105 :: (HappyAbsSyn ) -> (Declaration)
+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut105 #-}
+happyIn106 :: (Declaration) -> (HappyAbsSyn )
+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn106 #-}
+happyOut106 :: (HappyAbsSyn ) -> (Declaration)
+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut106 #-}
+happyIn107 :: (Declaration) -> (HappyAbsSyn )
+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn107 #-}
+happyOut107 :: (HappyAbsSyn ) -> (Declaration)
+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut107 #-}
+happyIn108 :: ((Name, IsInstance)) -> (HappyAbsSyn )
+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn108 #-}
+happyOut108 :: (HappyAbsSyn ) -> ((Name, IsInstance))
+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut108 #-}
+happyIn109 :: (Declaration) -> (HappyAbsSyn )
+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn109 #-}
+happyOut109 :: (HappyAbsSyn ) -> (Declaration)
+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut109 #-}
+happyIn110 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn110 #-}
+happyOut110 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut110 #-}
+happyIn111 :: (Declaration) -> (HappyAbsSyn )
+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn111 #-}
+happyOut111 :: (HappyAbsSyn ) -> (Declaration)
+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut111 #-}
+happyIn112 :: (Declaration) -> (HappyAbsSyn )
+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn112 #-}
+happyOut112 :: (HappyAbsSyn ) -> (Declaration)
+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut112 #-}
+happyIn113 :: (Declaration) -> (HappyAbsSyn )
+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn113 #-}
+happyOut113 :: (HappyAbsSyn ) -> (Declaration)
+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut113 #-}
+happyIn114 :: (Declaration) -> (HappyAbsSyn )
+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn114 #-}
+happyOut114 :: (HappyAbsSyn ) -> (Declaration)
+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut114 #-}
+happyIn115 :: (Declaration) -> (HappyAbsSyn )
+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn115 #-}
+happyOut115 :: (HappyAbsSyn ) -> (Declaration)
+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut115 #-}
+happyIn116 :: (Declaration) -> (HappyAbsSyn )
+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn116 #-}
+happyOut116 :: (HappyAbsSyn ) -> (Declaration)
+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut116 #-}
+happyIn117 :: (Declaration) -> (HappyAbsSyn )
+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn117 #-}
+happyOut117 :: (HappyAbsSyn ) -> (Declaration)
+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut117 #-}
+happyIn118 :: (Declaration) -> (HappyAbsSyn )
+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn118 #-}
+happyOut118 :: (HappyAbsSyn ) -> (Declaration)
+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut118 #-}
+happyIn119 :: (Declaration) -> (HappyAbsSyn )
+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn119 #-}
+happyOut119 :: (HappyAbsSyn ) -> (Declaration)
+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut119 #-}
+happyIn120 :: (Declaration) -> (HappyAbsSyn )
+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn120 #-}
+happyOut120 :: (HappyAbsSyn ) -> (Declaration)
+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut120 #-}
+happyIn121 :: ([Arg Name]) -> (HappyAbsSyn )
+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn121 #-}
+happyOut121 :: (HappyAbsSyn ) -> ([Arg Name])
+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut121 #-}
+happyIn122 :: ([RString]) -> (HappyAbsSyn )
+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn122 #-}
+happyOut122 :: (HappyAbsSyn ) -> ([RString])
+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut122 #-}
+happyIn123 :: ([NamedArg HoleName]) -> (HappyAbsSyn )
+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn123 #-}
+happyOut123 :: (HappyAbsSyn ) -> ([NamedArg HoleName])
+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut123 #-}
+happyIn124 :: (NamedArg HoleName) -> (HappyAbsSyn )
+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn124 #-}
+happyOut124 :: (HappyAbsSyn ) -> (NamedArg HoleName)
+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut124 #-}
+happyIn125 :: (HoleName) -> (HappyAbsSyn )
+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn125 #-}
+happyOut125 :: (HappyAbsSyn ) -> (HoleName)
+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut125 #-}
+happyIn126 :: (HoleName) -> (HappyAbsSyn )
+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn126 #-}
+happyOut126 :: (HappyAbsSyn ) -> (HoleName)
+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut126 #-}
+happyIn127 :: (RString) -> (HappyAbsSyn )
+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn127 #-}
+happyOut127 :: (HappyAbsSyn ) -> (RString)
+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut127 #-}
+happyIn128 :: (Maybe Range) -> (HappyAbsSyn )
+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn128 #-}
+happyOut128 :: (HappyAbsSyn ) -> (Maybe Range)
+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut128 #-}
+happyIn129 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn129 #-}
+happyOut129 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut129 #-}
+happyIn130 :: ([Expr]) -> (HappyAbsSyn )
+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn130 #-}
+happyOut130 :: (HappyAbsSyn ) -> ([Expr])
+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut130 #-}
+happyIn131 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn )
+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn131 #-}
+happyOut131 :: (HappyAbsSyn ) -> ([TypedBindings] -> Parser ModuleApplication)
+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut131 #-}
+happyIn132 :: (Declaration) -> (HappyAbsSyn )
+happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn132 #-}
+happyOut132 :: (HappyAbsSyn ) -> (Declaration)
+happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut132 #-}
+happyIn133 :: (Declaration) -> (HappyAbsSyn )
+happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn133 #-}
+happyOut133 :: (HappyAbsSyn ) -> (Declaration)
+happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut133 #-}
+happyIn134 :: (Name) -> (HappyAbsSyn )
+happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn134 #-}
+happyOut134 :: (HappyAbsSyn ) -> (Name)
+happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut134 #-}
+happyIn135 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn135 #-}
+happyOut135 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut135 #-}
+happyIn136 :: (Declaration) -> (HappyAbsSyn )
+happyIn136 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn136 #-}
+happyOut136 :: (HappyAbsSyn ) -> (Declaration)
+happyOut136 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut136 #-}
+happyIn137 :: (Pragma) -> (HappyAbsSyn )
+happyIn137 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn137 #-}
+happyOut137 :: (HappyAbsSyn ) -> (Pragma)
+happyOut137 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut137 #-}
+happyIn138 :: (Pragma) -> (HappyAbsSyn )
+happyIn138 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn138 #-}
+happyOut138 :: (HappyAbsSyn ) -> (Pragma)
+happyOut138 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut138 #-}
+happyIn139 :: (Pragma) -> (HappyAbsSyn )
+happyIn139 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn139 #-}
+happyOut139 :: (HappyAbsSyn ) -> (Pragma)
+happyOut139 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut139 #-}
+happyIn140 :: (Pragma) -> (HappyAbsSyn )
+happyIn140 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn140 #-}
+happyOut140 :: (HappyAbsSyn ) -> (Pragma)
+happyOut140 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut140 #-}
+happyIn141 :: (Pragma) -> (HappyAbsSyn )
+happyIn141 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn141 #-}
+happyOut141 :: (HappyAbsSyn ) -> (Pragma)
+happyOut141 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut141 #-}
+happyIn142 :: (Pragma) -> (HappyAbsSyn )
+happyIn142 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn142 #-}
+happyOut142 :: (HappyAbsSyn ) -> (Pragma)
+happyOut142 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut142 #-}
+happyIn143 :: (Pragma) -> (HappyAbsSyn )
+happyIn143 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn143 #-}
+happyOut143 :: (HappyAbsSyn ) -> (Pragma)
+happyOut143 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut143 #-}
+happyIn144 :: (Pragma) -> (HappyAbsSyn )
+happyIn144 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn144 #-}
+happyOut144 :: (HappyAbsSyn ) -> (Pragma)
+happyOut144 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut144 #-}
+happyIn145 :: (Pragma) -> (HappyAbsSyn )
+happyIn145 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn145 #-}
+happyOut145 :: (HappyAbsSyn ) -> (Pragma)
+happyOut145 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut145 #-}
+happyIn146 :: (Pragma) -> (HappyAbsSyn )
+happyIn146 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn146 #-}
+happyOut146 :: (HappyAbsSyn ) -> (Pragma)
+happyOut146 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut146 #-}
+happyIn147 :: (Pragma) -> (HappyAbsSyn )
+happyIn147 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn147 #-}
+happyOut147 :: (HappyAbsSyn ) -> (Pragma)
+happyOut147 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut147 #-}
+happyIn148 :: (Pragma) -> (HappyAbsSyn )
+happyIn148 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn148 #-}
+happyOut148 :: (HappyAbsSyn ) -> (Pragma)
+happyOut148 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut148 #-}
+happyIn149 :: (Pragma) -> (HappyAbsSyn )
+happyIn149 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn149 #-}
+happyOut149 :: (HappyAbsSyn ) -> (Pragma)
+happyOut149 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut149 #-}
+happyIn150 :: (Pragma) -> (HappyAbsSyn )
+happyIn150 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn150 #-}
+happyOut150 :: (HappyAbsSyn ) -> (Pragma)
+happyOut150 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut150 #-}
+happyIn151 :: (Pragma) -> (HappyAbsSyn )
+happyIn151 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn151 #-}
+happyOut151 :: (HappyAbsSyn ) -> (Pragma)
+happyOut151 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut151 #-}
+happyIn152 :: (Pragma) -> (HappyAbsSyn )
+happyIn152 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn152 #-}
+happyOut152 :: (HappyAbsSyn ) -> (Pragma)
+happyOut152 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut152 #-}
+happyIn153 :: (Pragma) -> (HappyAbsSyn )
+happyIn153 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn153 #-}
+happyOut153 :: (HappyAbsSyn ) -> (Pragma)
+happyOut153 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut153 #-}
+happyIn154 :: (Pragma) -> (HappyAbsSyn )
+happyIn154 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn154 #-}
+happyOut154 :: (HappyAbsSyn ) -> (Pragma)
+happyOut154 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut154 #-}
+happyIn155 :: (Pragma) -> (HappyAbsSyn )
+happyIn155 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn155 #-}
+happyOut155 :: (HappyAbsSyn ) -> (Pragma)
+happyOut155 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut155 #-}
+happyIn156 :: (Pragma) -> (HappyAbsSyn )
+happyIn156 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn156 #-}
+happyOut156 :: (HappyAbsSyn ) -> (Pragma)
+happyOut156 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut156 #-}
+happyIn157 :: (Pragma) -> (HappyAbsSyn )
+happyIn157 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn157 #-}
+happyOut157 :: (HappyAbsSyn ) -> (Pragma)
+happyOut157 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut157 #-}
+happyIn158 :: (Pragma) -> (HappyAbsSyn )
+happyIn158 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn158 #-}
+happyOut158 :: (HappyAbsSyn ) -> (Pragma)
+happyOut158 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut158 #-}
+happyIn159 :: (Pragma) -> (HappyAbsSyn )
+happyIn159 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn159 #-}
+happyOut159 :: (HappyAbsSyn ) -> (Pragma)
+happyOut159 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut159 #-}
+happyIn160 :: (Pragma) -> (HappyAbsSyn )
+happyIn160 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn160 #-}
+happyOut160 :: (HappyAbsSyn ) -> (Pragma)
+happyOut160 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut160 #-}
+happyIn161 :: (Pragma) -> (HappyAbsSyn )
+happyIn161 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn161 #-}
+happyOut161 :: (HappyAbsSyn ) -> (Pragma)
+happyOut161 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut161 #-}
+happyIn162 :: (Pragma) -> (HappyAbsSyn )
+happyIn162 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn162 #-}
+happyOut162 :: (HappyAbsSyn ) -> (Pragma)
+happyOut162 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut162 #-}
+happyIn163 :: (Pragma) -> (HappyAbsSyn )
+happyIn163 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn163 #-}
+happyOut163 :: (HappyAbsSyn ) -> (Pragma)
+happyOut163 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut163 #-}
+happyIn164 :: (Pragma) -> (HappyAbsSyn )
+happyIn164 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn164 #-}
+happyOut164 :: (HappyAbsSyn ) -> (Pragma)
+happyOut164 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut164 #-}
+happyIn165 :: (Pragma) -> (HappyAbsSyn )
+happyIn165 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn165 #-}
+happyOut165 :: (HappyAbsSyn ) -> (Pragma)
+happyOut165 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut165 #-}
+happyIn166 :: (Pragma) -> (HappyAbsSyn )
+happyIn166 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn166 #-}
+happyOut166 :: (HappyAbsSyn ) -> (Pragma)
+happyOut166 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut166 #-}
+happyIn167 :: (Pragma) -> (HappyAbsSyn )
+happyIn167 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn167 #-}
+happyOut167 :: (HappyAbsSyn ) -> (Pragma)
+happyOut167 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut167 #-}
+happyIn168 :: ([(Range, Occurrence)]) -> (HappyAbsSyn )
+happyIn168 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn168 #-}
+happyOut168 :: (HappyAbsSyn ) -> ([(Range, Occurrence)])
+happyOut168 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut168 #-}
+happyIn169 :: ((Range, Occurrence)) -> (HappyAbsSyn )
+happyIn169 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn169 #-}
+happyOut169 :: (HappyAbsSyn ) -> ((Range, Occurrence))
+happyOut169 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut169 #-}
+happyIn170 :: ([TypeSignature]) -> (HappyAbsSyn )
+happyIn170 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn170 #-}
+happyOut170 :: (HappyAbsSyn ) -> ([TypeSignature])
+happyOut170 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut170 #-}
+happyIn171 :: ([TypeSignature]) -> (HappyAbsSyn )
+happyIn171 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn171 #-}
+happyOut171 :: (HappyAbsSyn ) -> ([TypeSignature])
+happyOut171 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut171 #-}
+happyIn172 :: ([Arg TypeSignature]) -> (HappyAbsSyn )
+happyIn172 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn172 #-}
+happyOut172 :: (HappyAbsSyn ) -> ([Arg TypeSignature])
+happyOut172 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut172 #-}
+happyIn173 :: ([Arg TypeSignature]) -> (HappyAbsSyn )
+happyIn173 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn173 #-}
+happyOut173 :: (HappyAbsSyn ) -> ([Arg TypeSignature])
+happyOut173 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut173 #-}
+happyIn174 :: (((Maybe (Ranged Induction), Maybe HasEta, Maybe (Name, IsInstance)), [Declaration])) -> (HappyAbsSyn )
+happyIn174 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn174 #-}
+happyOut174 :: (HappyAbsSyn ) -> (((Maybe (Ranged Induction), Maybe HasEta, Maybe (Name, IsInstance)), [Declaration]))
+happyOut174 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut174 #-}
+happyIn175 :: ([RecordDirective]) -> (HappyAbsSyn )
+happyIn175 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn175 #-}
+happyOut175 :: (HappyAbsSyn ) -> ([RecordDirective])
+happyOut175 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut175 #-}
+happyIn176 :: (RecordDirective) -> (HappyAbsSyn )
+happyIn176 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn176 #-}
+happyOut176 :: (HappyAbsSyn ) -> (RecordDirective)
+happyOut176 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut176 #-}
+happyIn177 :: (Ranged HasEta) -> (HappyAbsSyn )
+happyIn177 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn177 #-}
+happyOut177 :: (HappyAbsSyn ) -> (Ranged HasEta)
+happyOut177 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut177 #-}
+happyIn178 :: (Ranged Induction) -> (HappyAbsSyn )
+happyIn178 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn178 #-}
+happyOut178 :: (HappyAbsSyn ) -> (Ranged Induction)
+happyOut178 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut178 #-}
+happyIn179 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn179 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn179 #-}
+happyOut179 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut179 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut179 #-}
+happyIn180 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn180 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn180 #-}
+happyOut180 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut180 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut180 #-}
+happyIn181 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn181 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn181 #-}
+happyOut181 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut181 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut181 #-}
+happyIn182 :: ([Declaration]) -> (HappyAbsSyn )
+happyIn182 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn182 #-}
+happyOut182 :: (HappyAbsSyn ) -> ([Declaration])
+happyOut182 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut182 #-}
+happyInTok :: (Token) -> (HappyAbsSyn )
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn ) -> (Token)
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyExpList :: HappyAddr
+happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x56\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x44\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\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x44\x00\x00\x00\x00\x48\x31\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\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\xa0\x4d\x04\x00\x00\x00\x80\x14\x43\x15\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\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\xa0\x4d\x04\x00\x00\x00\x80\x14\x43\x15\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\x04\x00\x00\x00\x80\x11\x44\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\x02\x08\xa1\x4f\x85\x00\x00\x00\x80\x1c\xcb\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x3d\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x83\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x44\x00\x00\x00\x00\x48\x31\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\xcb\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\xd4\x83\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x35\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x34\xbc\xf7\xfb\xdc\x09\x00\x00\x00\x48\xb1\x54\xa1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x80\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xa0\x4d\x04\x00\x00\x00\x80\x14\x43\x15\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\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\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\x44\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\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\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\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\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x44\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\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa1\x4f\x85\x00\x00\x00\x80\x14\xcb\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\xd4\x83\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x35\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x5c\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x3d\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x83\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x44\x00\x00\x00\x00\x48\x31\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x34\xbc\xf7\xfb\xdc\x09\x00\x00\x00\x48\xb1\x54\xa1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\x44\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\x20\x80\x10\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\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\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\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\x4d\x04\x00\x00\x00\x80\x14\x43\x15\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\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\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x44\x00\x00\x00\x00\x48\x31\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\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\x04\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\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\x20\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\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\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\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\xa1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x10\xfa\x54\x08\x00\x00\x00\x48\xb1\x5c\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x3d\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x83\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x44\x00\x00\x00\x00\x48\x31\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\x44\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\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xc3\x7b\xbf\xcf\x9d\x00\x00\x00\x80\x14\x4b\x95\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\x44\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\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\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\x60\x00\x00\x00\x00\x00\x00\x00\x80\x01\x40\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\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\x44\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xc3\x7b\xbf\xcf\x9d\x00\x00\x00\x80\x14\x4b\x15\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xda\x44\x00\x00\x00\x00\x48\x31\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x41\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x40\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x80\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\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\x18\x00\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\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\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\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\x18\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\x44\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\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x80\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\x40\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x40\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\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\x08\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x4d\x04\x00\x00\x00\x80\x14\x43\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x04\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x3d\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x80\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\x04\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\xa1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\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\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\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\x40\x00\x00\x04\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x04\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x14\x4b\x15\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\x48\xb1\x54\xa1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x80\x01\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\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x80\x01\x40\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\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\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\x04\x00\x40\x10\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08\xa0\x4f\x85\x00\x00\x00\x80\x1c\x4b\x15\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\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x40\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\x18\x00\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x44\x00\x00\x00\x00\x48\x31\x54\x81\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x40\x10\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xe3\xfb\xbf\xcf\x9d\x00\x00\x00\x80\x14\x4b\x15\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\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x80\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x04\x00\x40\x10\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x80\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\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x40\x10\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x80\x00\xfa\x54\x08\x00\x00\x00\xc8\xb1\xd4\x83\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x40\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\x18\x00\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x40\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\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\xc3\x7b\xbf\xcf\x9d\x00\x00\x00\x80\x14\x4b\x95\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xe3\xfb\xbf\xcf\x9d\x00\x00\x00\x80\x14\x4b\x15\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\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+{-# NOINLINE happyExpListPerState #-}
+happyExpListPerState st =
+    token_strs_expected
+  where token_strs = ["error","%dummy","%start_tokensParser","%start_exprParser","%start_exprWhereParser","%start_moduleParser","%start_moduleNameParser","%start_funclauseParser","%start_holeContentParser","Tokens","TokensR","Token","File","maybe_vclose","close","semi","beginImpDir","Int","Id","SpaceIds","DoubleCloseBrace","MaybeDottedId","MaybeDottedIds","ArgIds","QId","ModuleName","BId","SpaceBIds","CommaBIds","CommaBIdAndAbsurds","BIdsWithHiding","PragmaStrings","PragmaString","Strings","ForeignCode","PragmaName","PragmaQName","PragmaQNames","Expr","Expr1","WithExprs","Application","Expr2","LetBody","ExtendedOrAbsurdLam","Application3","Application3PossiblyEmpty","Expr3Curly","Expr3NoCurly","Expr3","RecordAssignments","RecordAssignments1","RecordAssignment","ModuleAssignment","FieldAssignments","FieldAssignments1","FieldAssignment","TeleArrow","Telescope1","TypedBindingss","TypedBindings","TBind","TBindWithHiding","LamBindings","AbsurdLamBindings","LamBinds","LamBindsAbsurd","NonAbsurdLamClause","AbsurdLamClause","LamClause","LamClauses","LamWhereClauses","ForallBindings","TypedUntypedBindings1","TypedUntypedBindings","DomainFreeBinding","DomainFreeBindingAbsurd","DoStmts","DoStmt","DoWhere","ImportDirective","ImportDirectives","ImportDirective1","Using","Hiding","RenamingDir","Renamings","Renaming","ImportName_","ImportName","CommaImportNames","CommaImportNames1","LHS","WithExpressions","RewriteEquations","HoleContent","WhereClause","ExprWhere","Declaration","TypeSigs","ArgTypeSigs","FunClause","RHS","Data","DataSig","Record","RecordSig","RecordConstructorName","Infix","Fields","Mutual","Abstract","Private","Instance","Macro","Postulate","Primitive","UnquoteDecl","Syntax","PatternSyn","PatternSynArgs","SimpleIds","HoleNames","HoleName","SimpleTopHole","SimpleHole","SimpleId","MaybeOpen","Open","OpenArgs","ModuleApplication","ModuleMacro","Module","Underscore","TopLevel","Pragma","DeclarationPragma","OptionsPragma","BuiltinPragma","RewritePragma","CompiledPragma","CompiledExportPragma","CompiledTypePragma","CompiledDataPragma","CompiledJSPragma","CompiledUHCPragma","CompiledDataUHCPragma","HaskellPragma","ForeignPragma","CompilePragma","StaticPragma","InlinePragma","NoInlinePragma","InjectivePragma","DisplayPragma","EtaPragma","NoTerminationCheckPragma","NonTerminatingPragma","TerminatingPragma","MeasurePragma","CatchallPragma","ImportPragma","ImportUHCPragma","ImpossiblePragma","NoPositivityCheckPragma","PolarityPragma","WarningOnUsagePragma","Polarities","Polarity","TypeSignatures","TypeSignatures1","ArgTypeSignatures","ArgTypeSignatures1","RecordDeclarations","RecordDirectives","RecordDirective","RecordEta","RecordInduction","Declarations","Declarations0","Declarations1","TopDeclarations","'abstract'","'codata'","'coinductive'","'constructor'","'data'","'eta-equality'","'field'","'forall'","'hiding'","'import'","'in'","'inductive'","'infix'","'infixl'","'infixr'","'instance'","'overlap'","'let'","'macro'","'module'","'mutual'","'no-eta-equality'","'open'","'pattern'","'postulate'","'primitive'","'private'","'Prop'","'public'","'quote'","'quoteContext'","'quoteGoal'","'quoteTerm'","'record'","'renaming'","'rewrite'","'Set'","'syntax'","'tactic'","'to'","'unquote'","'unquoteDecl'","'unquoteDef'","'using'","'where'","'do'","'with'","'BUILTIN'","'CATCHALL'","'COMPILED'","'COMPILED_DATA'","'COMPILED_DATA_UHC'","'COMPILED_EXPORT'","'COMPILED_JS'","'COMPILED_TYPE'","'COMPILED_UHC'","'DISPLAY'","'ETA'","'HASKELL'","'IMPORT'","'IMPORT_UHC'","'FOREIGN'","'COMPILE'","'IMPOSSIBLE'","'INJECTIVE'","'INLINE'","'NOINLINE'","'MEASURE'","'NO_TERMINATION_CHECK'","'NO_POSITIVITY_CHECK'","'NON_TERMINATING'","'OPTIONS'","'POLARITY'","'WARNING_ON_USAGE'","'REWRITE'","'STATIC'","'TERMINATING'","setN","tex","comment","'...'","'..'","'.'","';'","':'","'='","'_'","'?'","'->'","'\\\\'","'@'","'|'","'('","')'","'(|'","'|)'","'{{'","'}}'","'{'","'}'","vopen","vclose","vsemi","'{-#'","'#-}'","id","q_id","string","literal","%eof"]
+        bit_start = st * 292
+        bit_end = (st + 1) * 292
+        read_bit = readArrayBit happyExpList
+        bits = map read_bit [bit_start..bit_end - 1]
+        bits_indexed = zip bits [0..291]
+        token_strs_expected = concatMap f bits_indexed
+        f (False, _) = []
+        f (True, nr) = [token_strs !! nr]
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\x00\x00\x8f\x0a\x8f\x0a\xb4\xff\x62\x02\xfd\x0d\xe8\x07\x00\x00\x2e\x05\xed\xff\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf5\xff\x00\x00\x00\x00\x3b\x08\x8f\x0a\x20\x00\x00\x00\xca\x02\x00\x00\x48\x00\xd1\x03\x82\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x18\x0e\xfd\x0d\x00\x00\x68\x0e\x00\x00\xee\x00\x00\x00\x00\x00\x95\x01\x83\x0e\x00\x00\x00\x00\xa7\x01\x06\x07\x8f\x0a\x59\x07\x59\x08\x00\x00\x00\x00\x00\x00\x41\x01\x12\x01\xde\x01\x15\x01\xd3\x0e\xac\x08\x59\x07\xca\x08\x00\x00\x00\x00\x15\x01\x15\x01\xc0\x04\x16\x00\x15\x01\x15\x01\x15\x01\x00\x00\x6f\x00\x60\x01\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\x94\x01\x00\x00\x00\x00\x00\x00\x7a\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\x78\x01\x99\x01\x99\x01\xa1\x01\x9f\x01\x9f\x01\x9f\x01\xaa\x01\xaa\x01\x7b\x00\xaa\x01\x02\x00\xae\x01\xd2\x01\x0d\x02\x15\x02\xee\x0e\x13\x02\x01\x00\x13\x02\x6c\x15\x1d\x02\x00\x00\x00\x00\x46\x00\x00\x00\x24\x02\x30\x02\x00\x00\x00\x00\x16\x00\x8f\x0a\x8f\x0a\xfd\x0d\x68\x02\x5d\x02\x00\x00\x23\x02\x61\x02\x46\x00\x69\x02\x9e\x02\xb6\xff\x63\x02\x9b\x02\x9a\x02\xbb\x02\x00\x00\x00\x00\x7e\x03\x8f\x0a\x00\x00\xa8\x02\x00\x00\x3f\x04\xaf\x04\xa2\x02\xa8\x01\x59\x03\x00\x00\x24\x09\x3f\x09\x92\x09\xb0\x09\x59\x07\x03\x0a\xfd\x0d\xfd\x0d\xfd\x0d\x8f\x0a\xb7\x02\x3e\x0f\x00\x00\xb3\x02\xbb\x02\x1d\x03\x28\x03\xe2\x06\x80\x05\x8f\x0a\xd5\x02\x80\x05\x00\x00\xe9\x0a\xfd\x0d\xfd\x0d\x00\x00\x21\x02\xfd\x0d\xfd\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x07\x0b\x07\x0b\x3e\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x0d\xfd\x0d\xfd\x0d\xfd\x0d\xd9\x02\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x07\x0b\x07\x0b\xe9\x02\x3e\x0f\xe3\x02\x00\x00\xee\x02\x00\x00\x00\x00\xea\x02\xfd\x0d\x2d\x03\x08\x00\xfd\x00\x2a\x03\x46\x00\x33\x03\x43\x03\x46\x00\x55\x03\x88\x00\x60\x03\x5a\x0b\x00\x00\x09\x01\x13\x01\xfd\x0d\x68\x03\x93\x03\x73\x03\x76\x03\x00\x00\xfd\x0d\xfd\x0d\x00\x00\xfd\x0d\xfd\x0d\x75\x0b\x58\x06\x79\x03\x58\x06\x1e\x0a\x71\x0a\xc8\x0b\x00\x00\x00\x00\x84\x03\x59\x0f\x1a\x00\x00\x00\x00\x00\xe6\x0b\x00\x00\x00\x00\x00\x00\xe6\x0b\x00\x00\xe6\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\xff\x6d\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\x6e\x03\x74\x03\x78\x03\xa1\x00\x7f\x03\x82\x03\x8a\x03\x8f\x03\xa4\x03\x9d\x03\x9d\x03\x9d\x03\xa5\x03\xab\x03\xae\x03\xb2\x03\xb6\x03\xbf\x03\xc1\x03\xc9\x03\xcb\x03\xe8\x03\xe4\x03\x03\x04\x06\x04\xe6\x0b\x94\x02\x6d\x06\x00\x00\x00\x00\x53\x04\x00\x00\xfa\x03\x00\x00\xa4\x08\xfa\x03\x00\x00\x1c\x09\x1c\x09\x00\x00\x00\x00\x00\x00\x0c\x01\x00\x00\x0c\x01\x0c\x01\x00\x00\x92\x01\x1c\x09\x1c\x09\x00\x00\x00\x00\x00\x00\xbb\x02\xe2\x06\x00\x00\x75\x06\x00\x00\x3c\x04\x4a\x04\x16\x04\x16\x04\x00\x00\xa9\x0f\x1c\x09\xe4\xff\x1c\x09\xe5\xff\x00\x00\x43\x02\x34\x04\x00\x00\x74\x00\x27\x04\x43\x02\xa0\x00\x23\x03\x72\x00\x72\x00\x0c\x01\x00\x00\x00\x00\x00\x00\x63\x04\xdd\xff\x1c\x09\x00\x00\x45\x04\x40\x04\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\xe6\xff\xfd\x0d\x05\x01\x00\x00\x00\x00\x00\x00\x49\x04\x7e\x00\x7e\x00\x00\x00\x00\x00\xe6\x0b\xe6\x0b\x00\x00\x00\x00\x36\x04\x00\x00\x00\x00\x43\x04\x39\x04\x44\x04\x00\x00\x00\x00\x4c\x04\x47\x04\x00\x00\x00\x00\x00\x00\x51\x04\x5b\x04\x5d\x04\x68\x04\x00\x00\x50\x04\xa1\x00\x6d\x04\x7f\x04\x83\x04\xa1\x00\xa1\x00\x92\x04\x60\x04\x60\x04\x60\x04\x60\x04\x9b\x04\xa3\x04\xaa\x04\xb4\x04\x00\x00\xb6\x04\xb6\x04\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x0f\xaa\x00\x77\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\xdd\x00\x9e\x00\x09\x02\x9e\x00\x00\x00\xc5\x04\x39\x0c\x00\x00\x00\x00\x39\x0c\x00\x00\x57\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x0c\xaa\x0c\x00\x00\x00\x00\xc2\x04\x00\x00\xd3\x04\xc8\x04\x00\x00\x50\x05\xbb\x02\x00\x00\xaa\x00\xc8\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x49\x05\x00\x00\x4f\x05\x66\x05\x00\x00\x72\x05\x00\x00\x1b\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x39\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x0d\x46\x00\x00\x00\x00\x00\x7b\x05\x7f\x05\x82\x05\x81\x05\x81\x05\x8e\x05\x00\x00\x90\x05\x92\x05\x94\x05\x96\x05\x00\x00\x00\x00\x99\x05\x00\x00\x00\x00\x00\x00\x9e\x05\x98\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\xaa\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x05\xcf\x05\x91\x01\xce\x05\xe1\x05\x9d\x01\x00\x00\xd0\x05\x16\x01\xe4\x05\xaa\x0d\x00\x00\xe7\x05\xaa\x0d\xaa\x0d\xf8\x05\xf0\x05\xbb\x02\xf0\x05\x00\x00\x72\x00\xfd\x05\xfe\x05\xfe\x05\x46\x00\x00\x00\xfe\x05\xfe\x05\x00\x00\xfe\x05\xfe\x05\x05\x06\x00\x00\x00\x00\x92\x01\xaa\x0d\x00\x00\x01\x06\xaa\x0d\x00\x00\x01\x06\xaa\x0d\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x3d\x06\x00\x00\x42\x06\x00\x00\x00\x00\x00\x00\xaa\x0d\x0d\x06\x46\x00\x10\x06\x46\x00\x43\x02\x43\x02\x00\x00\x00\x00\xc4\x0f\xaa\x00\x00\x00\xbb\x02\x00\x00\x00\x00\x00\x00\x4c\x06\x00\x00\x9b\x05\x11\x06\x00\x00\x25\x06\x28\x06\x7e\x00\x00\x00\x2d\x06\x32\x06\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x06\x00\x00\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x06\x3e\x06\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x74\x00\x00\x00\xef\xff\xf2\xff\xef\xff\x00\x00\x00\x00\x54\x06\x48\x06\x00\x00\x43\x06\x43\x06\x4e\x06\x5a\x06\x8b\x06\x00\x00\x00\x00\x59\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x06\x00\x00\x53\x06\x53\x06\x5c\x06\x5b\x06\x5b\x06\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x5d\x06\x00\x00\x00\x00\x51\x06\x00\x00\x64\x06\xaa\x00\x00\x00\x00\x00\xca\x07\x00\x00\x00\x00\x43\x02\x43\x02\x43\x02\x43\x02\x00\x00\x6c\x06\x6c\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\xe5\x03\x00\x00\x00\x00\x00\x00\x08\x06\x63\x06\x77\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x06\x69\x06\xa4\x06\x00\x00\x00\x00\x00\x00\x00\x00\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x72\x06\x00\x00\x7b\x06\x00\x00\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\x5d\x03\x3e\x12\x67\x04\xe3\x06\xed\x02\x6c\x02\x15\x10\xe4\x06\xe6\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x15\x5a\x12\x00\x00\x00\x00\x2f\x03\x00\x00\x00\x00\x8b\x03\x4a\x06\x00\x00\x00\x00\x00\x00\xef\x06\x00\x00\x31\x01\x2c\x06\x00\x00\x9c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x01\x00\x00\x00\x00\xf9\x02\x7a\x03\x76\x12\x88\x10\xda\x10\x00\x00\x00\x00\x00\x00\x96\x06\x00\x00\xa2\x06\x00\x00\x6f\x01\x92\x12\x22\x12\xae\x12\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\xae\x06\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\xde\x02\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x02\x01\x07\x0e\x07\x78\x06\x11\x07\x13\x07\x14\x07\xfa\x02\x1f\x03\x2f\x00\x7d\x03\x7c\x03\x15\x07\x90\x03\x7f\x06\xb5\x03\xee\x01\x17\x07\x76\x04\x79\x04\x00\x00\x00\x00\x00\x00\x00\x00\x16\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x06\xca\x12\xe6\x12\x1c\x11\xd5\x06\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x06\x7c\x03\x00\x00\x00\x00\x3a\x01\x02\x13\x00\x00\x00\x00\x00\x00\xa0\x03\x00\x00\x00\x00\x9b\x00\x2e\x01\x00\x00\x9f\x03\x1f\x0e\x9a\x00\x5d\x10\xb4\x10\x00\x11\x09\x04\xf5\x0e\x60\x0f\xf1\x02\x00\x00\x31\x03\x00\x00\x00\x00\xaf\x05\x00\x00\x0c\x07\x50\x02\x27\x02\x1e\x13\x00\x00\xba\x04\x00\x00\x9f\x03\xcb\x0f\x3c\x11\x00\x00\x00\x00\x52\x11\x68\x11\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x13\x56\x13\xc9\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\xf9\x03\xbf\x05\x7e\x11\x94\x11\x00\x00\x26\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x07\x00\x00\x72\x13\x8e\x13\x00\x00\x72\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x6a\x15\xf0\x06\x32\x07\x35\x07\x00\x00\x33\x07\x00\x00\x00\x00\x37\x07\x00\x00\x00\x00\x00\x00\x47\x08\x00\x00\x3a\x07\x3e\x07\xb8\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x11\xc0\x11\x00\x00\xd6\x11\xec\x11\x06\x00\x14\x04\x00\x00\xbe\x05\x9f\x03\x8a\x0e\x02\x12\x00\x00\x00\x00\x00\x00\x04\x02\x1b\x07\x00\x00\x00\x00\xaa\x13\x00\x00\x00\x00\x00\x00\xc6\x13\x00\x00\xe2\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x07\x2b\x07\x2c\x07\x2e\x07\x30\x07\x36\x07\x38\x07\x00\x00\x3b\x07\x2f\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x07\x41\x07\x44\x07\x34\x07\x00\x00\x00\x00\x00\x00\x3f\x07\x48\x07\x4b\x07\x83\x01\x4d\x07\x00\x00\x8a\x04\x00\x00\x00\x00\xfe\x13\x98\x04\x2b\x06\x00\x00\x00\x00\xfc\xff\x00\x00\x04\x00\x00\x00\xe7\x02\x47\x07\x00\x00\x6f\x06\x98\x06\x00\x00\x00\x00\x00\x00\x53\x02\x00\x00\x88\x02\x81\x03\x00\x00\xfb\xff\xab\x06\x49\x07\x00\x00\x00\x00\x00\x00\x96\x03\xe5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x03\xfe\x03\x00\x00\x07\x02\x61\x07\x00\x00\x7f\x07\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\xa9\x04\xcb\x06\x2d\x01\x63\x07\x65\x07\xca\x01\x5f\x02\x38\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x07\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x04\x00\x00\x00\x00\x00\x00\x00\x00\x26\x11\x35\x02\x00\x00\x00\x00\x00\x00\x00\x00\x55\x04\x90\x04\x00\x00\x00\x00\x1a\x14\x36\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x07\x00\x00\xd6\x06\x00\x00\x00\x00\x60\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x07\x68\x07\x00\x00\x00\x00\x00\x00\x6a\x07\x6b\x07\x00\x00\x6f\x07\x70\x07\x78\x07\x79\x07\x76\x07\x00\x00\x00\x00\x7b\x07\x00\x00\x80\x07\x82\x07\x00\x00\x00\x00\x00\x00\x00\x00\x77\x02\xa8\x04\x22\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x05\x00\x00\x87\x07\x00\x00\x8f\x07\x00\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x39\x01\x00\x00\x52\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x04\x00\x00\xf6\x05\x6e\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x01\x94\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x07\x92\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x07\x00\x00\x00\x00\x4a\x07\x00\x00\xeb\x01\x00\x00\x09\x07\xa6\x14\x00\x00\xd6\x00\xc2\x14\xde\x14\x00\x00\x72\x04\x43\x00\x7b\x04\x00\x00\x8f\x02\x00\x00\xab\x07\xac\x07\xae\x07\x00\x00\xc1\x05\xc3\x05\x00\x00\xc7\x05\xcc\x05\x00\x00\x00\x00\x00\x00\x93\x00\xfa\x14\x00\x00\x46\x05\x16\x15\x00\x00\x68\x05\x32\x15\x00\x00\xfc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x15\x00\x00\xb3\x07\x00\x00\xbc\x07\x12\x03\x2b\x03\x00\x00\x00\x00\x7a\x02\xca\x06\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x01\x56\x07\x00\x00\x00\x00\x00\x00\xb7\x05\x00\x00\x00\x00\x00\x00\xc4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x07\x00\x00\x00\x00\x52\x06\x00\x00\x1f\x00\x94\x00\x77\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x07\xc4\x07\x00\x00\x00\x00\x00\x00\xce\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x07\x72\x07\x00\x00\x7d\x07\x81\x07\x00\x00\x00\x00\x57\x06\x00\x00\x00\x00\x00\x00\xd2\x07\x00\x00\xd4\x07\x00\x00\x00\x00\xba\x05\x00\x00\x50\x07\x58\x08\x00\x00\x00\x00\x22\x12\x00\x00\x00\x00\xa9\x03\xaf\x03\xd0\x03\x37\x04\x00\x00\xef\x05\xfb\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x07\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\xbb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x07\xe5\x07\xb7\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\xf0\x07\xee\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#
+happyAdjustOffset off = off
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\xf6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xfe\x00\x00\xf8\xff\x66\xff\x35\xff\xb3\xfe\x4f\xff\x4e\xff\x4c\xff\x4b\xff\x48\xff\x00\x00\x20\xff\x1f\xff\x44\xff\x00\x00\x00\x00\x11\xff\x0f\xff\xb2\xfe\x00\x00\x00\x00\x00\x00\x31\xff\x2f\xff\x2d\xff\x00\x00\x2e\xff\x00\x00\x00\x00\x30\xff\x00\x00\x2c\xff\x00\x00\x2b\xff\x21\xff\x00\x00\x00\x00\x32\xff\x33\xff\x00\x00\x62\xfe\x00\x00\x00\x00\x00\x00\x7f\xff\x67\xff\x34\xff\xb5\xfe\x00\x00\x90\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\xff\x65\xff\x00\x00\x00\x00\x62\xfe\xb1\xfe\x00\x00\x00\x00\x00\x00\xad\xfe\x00\x00\x00\x00\xfb\xfd\xab\xfe\xaa\xfe\xa9\xfe\xa8\xfe\xa7\xfe\xa6\xfe\xac\xfe\xa5\xfe\xa4\xfe\xa3\xfe\xa2\xfe\xa1\xfe\xa0\xfe\x9f\xfe\x98\xfe\x9a\xfe\x99\xfe\x00\x00\x9e\xfe\x9d\xfe\x9c\xfe\x87\xff\x9b\xfe\x54\xfe\x36\xfe\x53\xfe\x52\xfe\x51\xfe\x50\xfe\x4e\xfe\x4f\xfe\x4d\xfe\x4c\xfe\x4b\xfe\x4a\xfe\x48\xfe\x49\xfe\x47\xfe\x45\xfe\x44\xfe\x46\xfe\x3a\xfe\x39\xfe\x3e\xfe\x3f\xfe\x40\xfe\x3c\xfe\x3b\xfe\x43\xfe\x42\xfe\x41\xfe\x38\xfe\x37\xfe\x3d\xfe\xf9\xfd\x55\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\xff\x26\xff\x00\x00\x7c\xff\x00\x00\x00\x00\x27\xff\x24\xff\xb1\xfe\x00\x00\x00\x00\x00\x00\xb7\xfe\x00\x00\x60\xff\x5f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x5e\xff\x00\x00\x00\x00\x00\x00\x63\xfe\x64\xff\xdd\xfe\xf5\xfe\x00\x00\x3c\xff\x00\x00\x00\xff\xfd\xfe\xf6\xfe\x00\x00\x00\x00\x00\x00\x63\xff\x62\xfe\x00\x00\x39\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\xff\x3b\xff\xb4\xfe\x00\x00\x1e\xff\x00\x00\x3f\xff\x62\xfe\xe2\xfe\x00\x00\x00\x00\xe3\xfe\xde\xfe\x62\xfe\x00\x00\x00\x00\x10\xff\x00\x00\x00\x00\x00\x00\x12\xff\x52\xff\x4a\xff\x3a\xff\x00\x00\x00\x00\x00\x00\xf7\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\xd5\xff\xd4\xff\xd3\xff\xd2\xff\xd1\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\xae\xff\xad\xff\xa9\xff\xac\xff\xab\xff\xaa\xff\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\xa0\xff\x9f\xff\x9e\xff\x9d\xff\x9c\xff\x9b\xff\x9a\xff\x99\xff\x98\xff\x97\xff\x96\xff\x95\xff\x94\xff\x93\xff\x92\xff\x91\xff\x90\xff\x8f\xff\x8e\xff\x8d\xff\x8c\xff\x8b\xff\x8a\xff\x89\xff\x25\xff\x50\xff\x51\xff\x5f\xff\x44\xff\x00\x00\x00\x00\x00\x00\x60\xff\x00\x00\x5e\xff\xe5\xfe\xe6\xfe\x47\xff\xe4\xfe\x00\x00\x46\xff\x00\x00\x00\x00\x66\xff\x5e\xfe\x00\x00\x1d\xff\x1c\xff\x19\xff\x1a\xff\x17\xff\x00\x00\xd0\xfe\x00\x00\xd4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\xfe\x00\x00\x44\xff\xe9\xfe\x00\x00\x00\x00\x39\xff\xf3\xfe\x00\x00\xf2\xfe\xf4\xfe\xdc\xfe\x00\x00\x00\x00\xdb\xfe\x00\x00\x00\x00\x39\xff\xfc\xfe\xf8\xfe\xfd\xfe\x62\xfe\x00\x00\x00\x00\x01\xff\x49\xff\xf7\xfe\x5e\xfe\x3f\xff\x05\xff\x08\xff\x00\x00\x28\xff\x07\xff\x06\xff\x00\x00\xb8\xfe\x00\x00\x4d\xff\x92\xfe\x91\xfe\x93\xfe\x29\xff\x7b\xff\x2a\xff\x37\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\xff\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\xff\x00\x00\x00\x00\x5a\xff\x00\x00\x00\x00\x7d\xff\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xfe\xfe\xfd\x7f\xfe\x00\x00\x7b\xfe\x00\x00\x7c\xfe\x75\xfe\x00\x00\x81\xfe\xdf\xfe\xdf\xfe\x56\xfe\x7d\xfe\x7e\xfe\x00\x00\x80\xff\x00\x00\x00\x00\x82\xfe\x00\x00\xdf\xfe\xdf\xfe\x80\xfe\x88\xff\x86\xff\x00\x00\x62\xfe\x83\xff\xfc\xfd\xb0\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xfd\x5e\xfe\xdf\xfe\x00\x00\xdf\xfe\x00\x00\x78\xff\x74\xff\x00\x00\x0e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\xff\x85\xfe\x84\xfe\x83\xfe\x00\x00\x00\x00\xdf\xfe\x74\xfe\x00\x00\x00\x00\x11\xfe\x00\x00\xff\xfd\x84\xff\x85\xff\x00\x00\x17\xff\x00\x00\x71\xfe\x6f\xfe\x6a\xfe\x00\x00\x00\x00\x00\x00\x64\xfe\x7a\xfe\x00\x00\x00\x00\x7e\xff\x1f\xfe\x00\x00\x54\xff\x53\xff\x00\x00\x5a\xff\x00\x00\x16\xfe\x55\xff\x00\x00\x5d\xff\x20\xfe\x19\xfe\x21\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x1a\xfe\x00\x00\x58\xff\x00\x00\x00\x00\x00\x00\x58\xff\x58\xff\x00\x00\x5d\xff\x5d\xff\x5d\xff\x5d\xff\x00\x00\x00\x00\x00\x00\x5d\xff\x1d\xfe\x00\x00\x00\x00\xb6\xfe\x03\xff\x02\xff\x04\xff\x5e\xfe\xcc\xfe\x00\x00\xfa\xfe\xf9\xfe\xfb\xfe\xff\xfe\xfe\xfe\xef\xfe\xed\xfe\xec\xfe\xe7\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\xfe\x00\x00\x39\xff\x3e\xff\x82\xff\x39\xff\x38\xff\x00\x00\x0e\xff\x0c\xff\x0d\xff\x0b\xff\x09\xff\x0a\xff\x00\x00\xd3\xfe\x45\xff\xd1\xfe\x00\x00\x41\xff\x00\x00\x00\x00\x16\xff\x15\xff\x00\x00\x23\xff\xcc\xfe\x00\x00\x43\xff\x40\xff\x00\xfe\xd9\xfe\xda\xfe\x13\xff\x18\xff\xce\xfe\xcc\xfe\xca\xfe\xc9\xfe\xc8\xfe\x00\x00\xcb\xfe\x00\x00\x00\x00\x1b\xff\x00\x00\x22\xff\x39\xff\xd2\xfe\xf1\xfe\xea\xfe\xeb\xfe\x00\x00\xd7\xfe\xd8\xfe\xd5\xfe\xd6\xfe\x3d\xff\x39\xff\x21\xff\x60\xfe\x5d\xfe\x00\x00\x00\x00\x00\x00\x5d\xff\x5d\xff\x00\x00\x5b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x22\xfe\x57\xff\x00\x00\x2a\xfe\x1c\xfe\x1b\xfe\x00\x00\x5d\xff\x24\xfe\x26\xfe\x25\xfe\x1e\xfe\x5c\xff\x35\xfe\x00\x00\x00\x00\x59\xff\x32\xfe\x27\xfe\x78\xfe\x79\xfe\x00\x00\x67\xfe\x00\x00\x00\x00\x67\xfe\x00\x00\x70\xfe\x00\x00\x66\xff\x00\x00\x00\x00\x13\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\xff\x76\xff\x00\x00\x00\x00\x00\x00\x00\x00\x79\xff\x00\x00\x00\x00\x7a\xff\x00\x00\x00\x00\x00\x00\x94\xfe\x10\xfe\x00\x00\x00\x00\x75\xff\x00\x00\x00\x00\xe1\xfe\x00\x00\x00\x00\xe0\xfe\xcc\xfe\xaf\xfe\xae\xfe\x61\xfe\x00\x00\x8c\xfe\x8b\xfe\x8d\xfe\x96\xfe\x0f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\xff\x70\xff\x77\xff\x57\xfe\x5e\xfe\xcc\xfe\x58\xfe\x00\x00\x76\xfe\x97\xfe\x12\xfe\x88\xfe\x89\xfe\x0a\xfe\x77\xfe\x73\xfe\x00\x00\x00\x00\x00\x00\x6d\xfe\x00\x00\x00\x00\x00\x00\x6e\xfe\x17\xfe\x15\xfe\x18\xfe\x14\xfe\x00\x00\x29\xfe\x58\xff\x23\xfe\x2c\xfe\x2f\xfe\x2d\xfe\x30\xfe\x00\x00\x00\x00\x31\xfe\x33\xfe\x34\xfe\xcc\xfe\xe8\xfe\xf0\xfe\x00\x00\x14\xff\xbc\xfe\x81\xff\xbc\xfe\xcd\xfe\xbe\xfe\xba\xfe\x00\x00\xbb\xfe\x00\x00\x00\x00\x00\x00\xc2\xfe\x00\x00\x81\xff\xc4\xfe\x00\x00\xcf\xfe\x5f\xfe\x2e\xfe\x2b\xfe\x56\xff\x28\xfe\x00\x00\x67\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\xfe\x07\xfe\x00\x00\x08\xfe\x05\xfe\x06\xfe\x00\x00\x01\xfe\x00\x00\x04\xfe\x02\xfe\x00\x00\x03\xfe\x00\x00\xcc\xfe\x5a\xfe\x5b\xfe\x00\x00\x71\xff\x73\xff\x6c\xff\x6e\xff\x68\xff\x6a\xff\x95\xfe\x00\x00\x00\x00\x8e\xfe\x8f\xfe\x6b\xff\x69\xff\x6f\xff\x6d\xff\x21\xff\x59\xfe\x8a\xfe\x00\x00\x87\xfe\x0b\xfe\x0d\xfe\x62\xfe\x00\x00\x00\x00\x6b\xfe\x66\xfe\x65\xfe\x6c\xfe\xc7\xfe\x00\x00\x00\x00\x81\xff\xc5\xfe\xc0\xfe\xbd\xfe\xc6\xfe\x00\x00\xb9\xfe\xc3\xfe\xc1\xfe\xbf\xfe\x68\xfe\x69\xfe\x09\xfe\x00\x00\x00\x00\x5c\xfe\x00\x00\x0c\xfe\x86\xfe"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x05\x00\x09\x00\x14\x00\x09\x00\x09\x00\x14\x00\x0c\x00\x00\x00\x0e\x00\x2d\x00\x0f\x00\x56\x00\x09\x00\x0a\x00\x09\x00\x4b\x00\x2d\x00\x2d\x00\x2d\x00\x5e\x00\x0f\x00\x14\x00\x09\x00\x09\x00\x65\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\x0b\x00\x20\x00\x21\x00\x09\x00\x23\x00\x14\x00\x25\x00\x26\x00\x27\x00\x28\x00\x20\x00\x21\x00\x6c\x00\x23\x00\x56\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\x55\x00\x55\x00\x55\x00\x2e\x00\x2f\x00\x0f\x00\x10\x00\x3a\x00\x3b\x00\x3c\x00\x2d\x00\x3e\x00\x2d\x00\x2e\x00\x2f\x00\x5b\x00\x3a\x00\x3b\x00\x3c\x00\x09\x00\x3e\x00\x59\x00\x53\x00\x5e\x00\x5c\x00\x0f\x00\x10\x00\x56\x00\x59\x00\x5b\x00\x56\x00\x5c\x00\x6a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x5a\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6a\x00\x6a\x00\x6b\x00\x66\x00\x50\x00\x51\x00\x52\x00\x76\x00\x77\x00\x00\x00\x7c\x00\x7a\x00\x7b\x00\x5e\x00\x59\x00\x7e\x00\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\x09\x00\x07\x00\x09\x00\x97\x00\xa3\x00\x0c\x00\x0f\x00\x0e\x00\x09\x00\x09\x00\x09\x00\xa1\x00\x97\x00\xab\x00\x62\x00\x0f\x00\x64\x00\x7c\x00\x11\x00\x13\x00\x14\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x09\x00\x23\x00\x24\x00\x6e\x00\x26\x00\x27\x00\x28\x00\x20\x00\x21\x00\x79\x00\x23\x00\x07\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\x52\x00\x53\x00\x57\x00\x1d\x00\x54\x00\x0f\x00\x10\x00\x54\x00\x09\x00\x23\x00\x34\x00\x0c\x00\x69\x00\x0e\x00\x57\x00\x6c\x00\x3a\x00\x3b\x00\x2c\x00\x3d\x00\x5a\x00\x6a\x00\x66\x00\x67\x00\x6a\x00\x55\x00\x67\x00\x09\x00\x0a\x00\x4d\x00\x4e\x00\x4f\x00\x53\x00\x6a\x00\x6b\x00\x65\x00\x6a\x00\x50\x00\x59\x00\x52\x00\x64\x00\x5c\x00\x5b\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x55\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x62\x00\x61\x00\x64\x00\x63\x00\x4d\x00\x4e\x00\x4f\x00\x76\x00\x77\x00\x68\x00\x6a\x00\x7a\x00\x7b\x00\x6c\x00\x7d\x00\x7e\x00\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\x09\x00\x5a\x00\x97\x00\x55\x00\x79\x00\x6a\x00\x0f\x00\x09\x00\x09\x00\x09\x00\x0c\x00\x09\x00\x0e\x00\xab\x00\xac\x00\x0f\x00\x11\x00\x0f\x00\x64\x00\x09\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x0f\x00\x23\x00\x24\x00\x11\x00\x26\x00\x27\x00\x28\x00\x20\x00\x21\x00\x54\x00\x23\x00\x65\x00\x25\x00\x26\x00\x27\x00\x28\x00\x27\x00\x20\x00\x21\x00\x56\x00\x23\x00\x54\x00\x25\x00\x26\x00\x27\x00\x28\x00\x5d\x00\x57\x00\x67\x00\x24\x00\x61\x00\x54\x00\x63\x00\x3a\x00\x3b\x00\x3c\x00\x56\x00\x33\x00\x5c\x00\x6a\x00\x67\x00\x5b\x00\x38\x00\x3a\x00\x3b\x00\x3c\x00\x6a\x00\x64\x00\x09\x00\x53\x00\x67\x00\x09\x00\x42\x00\x43\x00\x0f\x00\x59\x00\x09\x00\x0f\x00\x5c\x00\x6e\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x26\x00\x27\x00\x28\x00\x26\x00\x27\x00\x28\x00\x18\x00\x76\x00\x77\x00\x0a\x00\x1c\x00\x7a\x00\x7b\x00\x10\x00\x11\x00\x7e\x00\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\x09\x00\x65\x00\x97\x00\x50\x00\x51\x00\x52\x00\x0f\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\x09\x00\x97\x00\xab\x00\x09\x00\x09\x00\x2d\x00\x0f\x00\x0c\x00\x0d\x00\x0f\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x65\x00\x23\x00\x24\x00\x66\x00\x26\x00\x27\x00\x28\x00\x52\x00\x53\x00\x20\x00\x21\x00\x57\x00\x23\x00\x78\x00\x25\x00\x26\x00\x27\x00\x28\x00\x26\x00\x27\x00\x28\x00\x5d\x00\x61\x00\x57\x00\x63\x00\x61\x00\x09\x00\x63\x00\x52\x00\x53\x00\x6a\x00\x6a\x00\x0f\x00\x57\x00\x57\x00\x3a\x00\x3b\x00\x3c\x00\x6a\x00\x5d\x00\x5d\x00\x65\x00\x6a\x00\x61\x00\x61\x00\x63\x00\x63\x00\x6d\x00\x09\x00\x53\x00\x65\x00\x09\x00\x6a\x00\x6a\x00\x0f\x00\x59\x00\x27\x00\x0f\x00\x5c\x00\x6a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x26\x00\x27\x00\x28\x00\x26\x00\x27\x00\x28\x00\x09\x00\x76\x00\x77\x00\x55\x00\x56\x00\x7a\x00\x7b\x00\x65\x00\x11\x00\x7e\x00\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\x09\x00\x33\x00\x70\x00\x09\x00\x97\x00\x55\x00\x0f\x00\x75\x00\xa6\x00\xa7\x00\xa8\x00\x11\x00\x12\x00\xab\x00\x40\x00\x09\x00\x42\x00\x43\x00\x0c\x00\x0d\x00\x64\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x65\x00\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\x56\x00\x65\x00\x0f\x00\x78\x00\x6a\x00\x5d\x00\x78\x00\x09\x00\x64\x00\x61\x00\x09\x00\x63\x00\x62\x00\x0f\x00\x64\x00\x64\x00\x0f\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x5e\x00\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\x52\x00\x53\x00\x2f\x00\x09\x00\x11\x00\x12\x00\x0c\x00\x0d\x00\x26\x00\x27\x00\x28\x00\x26\x00\x27\x00\x28\x00\x53\x00\x61\x00\x09\x00\x63\x00\x72\x00\x73\x00\x59\x00\x75\x00\x0f\x00\x5c\x00\x6a\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x55\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x53\x00\x24\x00\x5e\x00\x26\x00\x27\x00\x28\x00\x64\x00\x76\x00\x77\x00\x5c\x00\x60\x00\x7a\x00\x7b\x00\x6a\x00\x6b\x00\x7e\x00\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\x09\x00\x78\x00\x09\x00\x5d\x00\x78\x00\x55\x00\x0f\x00\x61\x00\x09\x00\x63\x00\x11\x00\x5e\x00\x09\x00\xab\x00\x0f\x00\x10\x00\x6a\x00\x65\x00\x0f\x00\x59\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x65\x00\x23\x00\x24\x00\x11\x00\x26\x00\x27\x00\x28\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x5c\x00\x23\x00\x24\x00\x63\x00\x26\x00\x27\x00\x28\x00\x33\x00\x09\x00\x52\x00\x53\x00\x0c\x00\x38\x00\x0e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x6a\x00\x6b\x00\x5d\x00\x0b\x00\x42\x00\x43\x00\x61\x00\x33\x00\x63\x00\x59\x00\x36\x00\x37\x00\x38\x00\x39\x00\x0b\x00\x09\x00\x44\x00\x45\x00\x0c\x00\x53\x00\x0e\x00\x09\x00\x42\x00\x43\x00\x64\x00\x59\x00\x56\x00\x0f\x00\x5c\x00\x54\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x64\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6a\x00\x24\x00\x6f\x00\x26\x00\x27\x00\x28\x00\x2d\x00\x76\x00\x77\x00\x00\x00\x01\x00\x7a\x00\x7b\x00\x32\x00\x33\x00\x7e\x00\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\x09\x00\x61\x00\x09\x00\x63\x00\xa9\x00\xaa\x00\x0f\x00\x09\x00\x0f\x00\x10\x00\x6a\x00\x64\x00\x15\x00\xab\x00\x5e\x00\x11\x00\x12\x00\x09\x00\xa9\x00\xaa\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x11\x00\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xa9\x00\xaa\x00\x0f\x00\x10\x00\x64\x00\x09\x00\x09\x00\x30\x00\x31\x00\x32\x00\x33\x00\x0f\x00\x35\x00\x57\x00\x11\x00\x09\x00\x5e\x00\x15\x00\x0c\x00\x5d\x00\x0e\x00\x09\x00\x59\x00\x61\x00\x0c\x00\x63\x00\x0e\x00\x33\x00\x20\x00\x21\x00\x59\x00\x23\x00\x6a\x00\x31\x00\x26\x00\x27\x00\x28\x00\xa9\x00\xaa\x00\x3f\x00\x40\x00\x59\x00\x42\x00\x43\x00\x59\x00\x52\x00\x53\x00\x59\x00\x33\x00\x35\x00\x57\x00\x69\x00\x59\x00\x38\x00\x09\x00\x6c\x00\x5d\x00\x0c\x00\x59\x00\x0e\x00\x61\x00\x6c\x00\x63\x00\x42\x00\x43\x00\x6c\x00\x00\x00\x01\x00\x02\x00\x6a\x00\x04\x00\x05\x00\x6c\x00\x07\x00\x08\x00\x6c\x00\x0a\x00\x76\x00\x77\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6c\x00\x12\x00\x13\x00\x14\x00\x15\x00\x6c\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\x6c\x00\x25\x00\x26\x00\x27\x00\x69\x00\x29\x00\x2a\x00\x2b\x00\x6c\x00\x09\x00\x2e\x00\x69\x00\x76\x00\x77\x00\x69\x00\x0f\x00\x20\x00\x21\x00\x69\x00\x23\x00\x09\x00\x15\x00\x26\x00\x27\x00\x28\x00\x6c\x00\x52\x00\x53\x00\x11\x00\xa9\x00\xaa\x00\x57\x00\x20\x00\x21\x00\x6c\x00\x23\x00\x6c\x00\x5d\x00\x26\x00\x27\x00\x28\x00\x61\x00\x4e\x00\x63\x00\x6c\x00\x51\x00\x6c\x00\x53\x00\xa9\x00\xaa\x00\x6a\x00\x57\x00\x58\x00\x35\x00\x5a\x00\x09\x00\x09\x00\x5d\x00\x0c\x00\x5f\x00\x0e\x00\x61\x00\x33\x00\x63\x00\x11\x00\x12\x00\x66\x00\x38\x00\x68\x00\x6a\x00\x6a\x00\x6b\x00\x69\x00\x6d\x00\x00\x00\x01\x00\x02\x00\x42\x00\x43\x00\x05\x00\x56\x00\x07\x00\x08\x00\x56\x00\x0a\x00\xa9\x00\xaa\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6a\x00\x12\x00\x13\x00\x14\x00\x15\x00\x2d\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\x2d\x00\x25\x00\x26\x00\x27\x00\x65\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\x0a\x00\x2e\x00\x09\x00\x0a\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x55\x00\x23\x00\x24\x00\x65\x00\x26\x00\x27\x00\x28\x00\x2d\x00\x52\x00\x53\x00\x09\x00\x0a\x00\x55\x00\x57\x00\x30\x00\x31\x00\x32\x00\x33\x00\x56\x00\x5d\x00\xa9\x00\xaa\x00\x69\x00\x61\x00\x4e\x00\x63\x00\x5a\x00\x51\x00\x6c\x00\x53\x00\xa9\x00\xaa\x00\x6a\x00\x57\x00\x58\x00\x69\x00\x5a\x00\x05\x00\x06\x00\x5d\x00\x6d\x00\x5f\x00\x6c\x00\x61\x00\x69\x00\x63\x00\x05\x00\x06\x00\x66\x00\x69\x00\x68\x00\x6c\x00\x6a\x00\x6b\x00\x58\x00\x6d\x00\x01\x00\x02\x00\x09\x00\x69\x00\x05\x00\x69\x00\x07\x00\x08\x00\x74\x00\x75\x00\x11\x00\x6c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x69\x00\x12\x00\x13\x00\x14\x00\x15\x00\x69\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\x10\x00\x25\x00\x26\x00\x27\x00\x69\x00\x29\x00\x2a\x00\x2b\x00\x69\x00\x33\x00\x2e\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x40\x00\x69\x00\x42\x00\x43\x00\x2a\x00\x2b\x00\x2c\x00\x52\x00\x53\x00\x2f\x00\x74\x00\x75\x00\x57\x00\x6c\x00\x59\x00\x71\x00\x72\x00\x73\x00\x5d\x00\x75\x00\x4e\x00\x6c\x00\x61\x00\x51\x00\x63\x00\x53\x00\x05\x00\x06\x00\x6c\x00\x57\x00\x58\x00\x6a\x00\x5a\x00\xa9\x00\xaa\x00\x5d\x00\x59\x00\x5f\x00\x6c\x00\x61\x00\x6c\x00\x63\x00\xa9\x00\xaa\x00\x66\x00\x65\x00\x68\x00\x56\x00\x6a\x00\x6b\x00\x64\x00\x6d\x00\x6e\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x54\x00\x0a\x00\x5d\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x5d\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x09\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0f\x00\x10\x00\x25\x00\x26\x00\x27\x00\x5d\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\x09\x00\x2e\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x0f\x00\x11\x00\x09\x00\x0a\x00\x52\x00\x53\x00\x15\x00\x09\x00\x0a\x00\x57\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x6a\x00\x5d\x00\x2f\x00\x20\x00\x21\x00\x61\x00\x23\x00\x63\x00\x69\x00\x26\x00\x27\x00\x28\x00\x69\x00\x4e\x00\x6a\x00\x69\x00\x51\x00\x6c\x00\x53\x00\xa9\x00\xaa\x00\x33\x00\x57\x00\x58\x00\x35\x00\x5a\x00\x38\x00\x69\x00\x5d\x00\x69\x00\x5f\x00\x69\x00\x61\x00\x69\x00\x63\x00\x69\x00\x42\x00\x43\x00\x69\x00\x68\x00\x6c\x00\x6a\x00\x6b\x00\x69\x00\x6d\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\xa9\x00\xaa\x00\x69\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x64\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x56\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x74\x00\x75\x00\x25\x00\x26\x00\x27\x00\x62\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\x09\x00\x2e\x00\x56\x00\x74\x00\x75\x00\x6a\x00\x0f\x00\x11\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x65\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x56\x00\x23\x00\x24\x00\x6a\x00\x26\x00\x27\x00\x28\x00\x65\x00\x4e\x00\x05\x00\x06\x00\x51\x00\x55\x00\x53\x00\x05\x00\x06\x00\x33\x00\x57\x00\x58\x00\x64\x00\x5a\x00\xa9\x00\xaa\x00\x5d\x00\x65\x00\x5f\x00\x6a\x00\x61\x00\x2d\x00\x63\x00\x41\x00\x42\x00\x43\x00\x2d\x00\x68\x00\x64\x00\x6a\x00\x6b\x00\x64\x00\x6d\x00\x01\x00\x02\x00\x09\x00\x2d\x00\x05\x00\x6a\x00\x07\x00\x08\x00\x59\x00\x0a\x00\x11\x00\x59\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x59\x00\x12\x00\x13\x00\x14\x00\x15\x00\x59\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x69\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xa9\x00\xaa\x00\x25\x00\x26\x00\x27\x00\x69\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\x33\x00\x2e\x00\xa9\x00\xaa\x00\x5e\x00\x69\x00\x54\x00\x11\x00\x52\x00\x53\x00\x5e\x00\x6a\x00\x54\x00\x57\x00\x41\x00\x42\x00\x43\x00\x28\x00\x09\x00\x5d\x00\x65\x00\x5e\x00\x14\x00\x61\x00\x64\x00\x63\x00\x11\x00\x6a\x00\x62\x00\x52\x00\x53\x00\x5e\x00\x6a\x00\x4e\x00\x57\x00\x6a\x00\x51\x00\x6a\x00\x53\x00\x65\x00\x5d\x00\x33\x00\x57\x00\x58\x00\x61\x00\x5a\x00\x63\x00\x65\x00\x5d\x00\x6a\x00\x5f\x00\x5e\x00\x61\x00\x6a\x00\x63\x00\x41\x00\x42\x00\x43\x00\x6a\x00\x68\x00\x33\x00\x6a\x00\x6b\x00\x66\x00\x6d\x00\x01\x00\x02\x00\x01\x00\x03\x00\x05\x00\x02\x00\x07\x00\x08\x00\x55\x00\x41\x00\x42\x00\x43\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xa9\x00\x12\x00\x13\x00\x14\x00\x15\x00\x09\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x5d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x57\x00\x06\x00\x25\x00\x26\x00\x27\x00\x09\x00\x29\x00\x2a\x00\x2b\x00\x08\x00\x04\x00\x2e\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x09\x00\x12\x00\x08\x00\xa2\x00\x08\x00\x08\x00\x17\x00\x09\x00\xa0\x00\x09\x00\x0b\x00\x1c\x00\x57\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x54\x00\x0b\x00\x25\x00\xa9\x00\x27\x00\x22\x00\x29\x00\x4e\x00\x0b\x00\x05\x00\x51\x00\x2e\x00\x53\x00\x46\x00\x05\x00\x1b\x00\x57\x00\x58\x00\x06\x00\x5a\x00\x22\x00\x0b\x00\x5d\x00\x06\x00\x5f\x00\x0b\x00\x61\x00\x06\x00\x63\x00\x1b\x00\x1b\x00\x19\x00\x1b\x00\x68\x00\x1b\x00\x6a\x00\x6b\x00\x1a\x00\x6d\x00\x09\x00\x1b\x00\x09\x00\x1b\x00\x4e\x00\x16\x00\x1b\x00\x51\x00\x52\x00\x53\x00\x11\x00\x1b\x00\x1b\x00\x57\x00\x58\x00\x1b\x00\x5a\x00\x08\x00\x1a\x00\x5d\x00\x5e\x00\x5f\x00\x1b\x00\x61\x00\x1b\x00\x63\x00\x09\x00\x12\x00\x09\x00\xa2\x00\x09\x00\x18\x00\x6a\x00\x6b\x00\x11\x00\x6d\x00\x9e\x00\x1c\x00\x16\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x33\x00\x1b\x00\x25\x00\x08\x00\x27\x00\x19\x00\x29\x00\x19\x00\x19\x00\x16\x00\x16\x00\x2e\x00\x09\x00\x12\x00\x41\x00\x42\x00\x43\x00\x17\x00\x16\x00\x16\x00\x11\x00\x16\x00\x0b\x00\x1c\x00\x33\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x0b\x00\x1b\x00\x25\x00\x1b\x00\x27\x00\x0b\x00\x29\x00\x16\x00\x41\x00\x42\x00\x43\x00\x2e\x00\x09\x00\x4e\x00\x16\x00\x16\x00\x51\x00\x52\x00\x53\x00\xa4\x00\x11\x00\x9f\x00\x57\x00\x58\x00\x33\x00\x5a\x00\x09\x00\x09\x00\x5d\x00\x75\x00\x5f\x00\x0b\x00\x61\x00\x62\x00\x63\x00\x64\x00\x0b\x00\x75\x00\x41\x00\x42\x00\x43\x00\x6a\x00\x6b\x00\x4e\x00\x6d\x00\x0b\x00\x51\x00\x52\x00\x53\x00\x75\x00\x09\x00\x09\x00\x57\x00\x58\x00\x33\x00\x5a\x00\x08\x00\x19\x00\x5d\x00\x07\x00\x5f\x00\x05\x00\x61\x00\x62\x00\x63\x00\x64\x00\x12\x00\x09\x00\x41\x00\x42\x00\x43\x00\x6a\x00\x6b\x00\x75\x00\x6d\x00\x0b\x00\x1c\x00\x75\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x09\x00\x09\x00\x25\x00\x08\x00\x27\x00\x75\x00\x29\x00\xa4\x00\x05\x00\x75\x00\x09\x00\x2e\x00\xff\xff\x12\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\x09\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\x0f\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x20\x00\x21\x00\x2e\x00\x23\x00\x12\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\x64\x00\x12\x00\xff\xff\xff\xff\x09\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\x0f\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x20\x00\x21\x00\x2e\x00\x23\x00\x12\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x52\x00\x53\x00\x2e\x00\xff\xff\x4e\x00\x57\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\x5d\x00\xff\xff\x57\x00\x58\x00\x61\x00\x5a\x00\x63\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x6a\x00\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x08\x00\x63\x00\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x12\x00\x6d\x00\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x12\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x52\x00\x53\x00\xff\xff\xff\xff\x4e\x00\x57\x00\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\x5d\x00\xff\xff\x57\x00\x58\x00\x61\x00\x5a\x00\x63\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x6a\x00\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x6a\x00\x6b\x00\x51\x00\x6d\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\x64\x00\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x12\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x6a\x00\x6b\x00\x51\x00\x6d\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x08\x00\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x12\x00\x6d\x00\xff\xff\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x12\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x6a\x00\x6b\x00\x51\x00\x6d\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\x08\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x4e\x00\x6d\x00\xff\xff\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x5a\x00\x08\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\xff\xff\x1c\x00\xff\xff\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x2e\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x20\x00\x21\x00\x29\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\x34\x00\x57\x00\x58\x00\xff\xff\x5a\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x6a\x00\x6b\x00\x51\x00\x6d\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x1c\x00\x6d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x20\x00\x21\x00\x29\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\x34\x00\x57\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x6a\x00\x6b\x00\x51\x00\x6d\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x1c\x00\x6d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x20\x00\x21\x00\x29\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\x34\x00\x57\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x6a\x00\x6b\x00\x51\x00\x6d\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x1c\x00\x6d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x20\x00\x21\x00\x29\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\x34\x00\x57\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x6a\x00\x6b\x00\x51\x00\x6d\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\x1c\x00\x6d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x1c\x00\xff\xff\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\xff\xff\xff\xff\x25\x00\xff\xff\x20\x00\x21\x00\x29\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\x51\x00\xff\xff\x53\x00\xff\xff\xff\xff\x34\x00\x57\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x6a\x00\x6b\x00\x51\x00\x6d\x00\x53\x00\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\xff\xff\x09\x00\xff\xff\xff\xff\x5d\x00\xff\xff\x5f\x00\x0f\x00\x61\x00\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x6b\x00\xff\xff\x6d\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x09\x00\x35\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x09\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x09\x00\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\x0f\x00\x26\x00\x27\x00\x28\x00\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\xff\xff\xff\xff\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\xff\xff\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x09\x00\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\x09\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\xff\xff\x26\x00\x27\x00\x28\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x08\x02\xe7\x01\x23\x03\xf1\x01\x09\x00\x28\x03\xf2\x01\x0a\x02\xf3\x01\xc3\x02\x0a\x00\x4c\xff\xc3\x01\x05\x02\x09\x00\x3e\x02\xdb\x02\xd8\x02\xbc\x02\x4c\xff\x0a\x00\xd1\x01\x68\x02\x09\x00\x43\x00\x36\x00\x0d\x00\x0e\x00\x0f\x00\x0a\x00\x10\x00\x37\x00\x68\x02\x12\x00\x13\x00\x14\x00\x64\x01\x4b\x02\x0f\x00\x1e\x03\x10\x00\x49\x00\x78\x01\x12\x00\x13\x00\x79\x01\x4b\x02\x0f\x00\x3f\x02\x10\x00\xc4\x02\x78\x01\x12\x00\x13\x00\x79\x01\x3e\x00\xdc\x02\xd9\x02\xbd\x02\x19\x03\x6b\x02\x3f\x00\xd2\x01\x4c\x02\x4d\x02\x4e\x02\x4a\x00\x4f\x02\x69\x02\x6a\x02\x6b\x02\xe4\x00\x4c\x02\x4d\x02\x4e\x02\x3e\x00\x18\x03\xe2\x00\x38\x00\x29\x03\xa5\x00\x3f\x00\xf0\x02\xe3\x00\x4a\x00\xf4\x01\xc7\x01\x4b\x00\x34\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x06\x02\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x34\x00\x34\x00\x35\x00\x0b\x02\x1f\x03\x29\x03\x21\x03\x5c\x00\x5d\x00\x0a\x02\xe8\x01\x5e\x00\x5f\x00\x43\x02\xde\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x80\x00\x09\x00\x23\x03\xf1\x01\x7d\x01\xf5\x01\xf2\x01\x0a\x00\xf3\x01\x1e\x03\x09\x00\xb2\x00\x07\x02\x7d\x01\x61\x01\x9d\x00\x0a\x00\x9e\x00\xd3\x01\x85\x01\xa6\x00\x5a\x01\x36\x00\x0d\x00\x0e\x00\x0f\x00\x7d\x02\x10\x00\x37\x00\xff\xff\x12\x00\x13\x00\x14\x00\x77\x01\x0f\x00\xf1\x02\x10\x00\x23\x03\x78\x01\x12\x00\x13\x00\x79\x01\x3e\x00\xc9\x02\xca\x02\xd5\x01\x7e\x02\xe5\x01\x3f\x00\xf0\x02\xe5\x01\xf1\x01\x7f\x02\xa9\x00\xf2\x01\x07\x03\xd6\x02\xd5\x01\x08\x03\x7a\x01\x7b\x01\x80\x02\x7c\x01\xb5\x02\x34\x00\x0b\x02\x59\x02\x34\x00\x5f\xff\xe6\x01\xc3\x01\x05\x02\x24\x03\x25\x03\x26\x03\x38\x00\x34\x00\x35\x00\xd1\x00\x15\x02\x1f\x03\x4a\x00\x6f\x03\x5f\xff\x4b\x00\xe6\x02\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x9b\x01\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x9d\x00\xd0\x02\x9e\x00\xd1\x02\x70\x03\x25\x03\x26\x03\x5c\x00\x5d\x00\x32\x02\x34\x00\x5e\x00\x5f\x00\x33\x02\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x80\x00\x09\x00\xf6\x02\x7d\x01\x9b\x01\x45\x03\x34\x00\x0a\x00\xf1\x01\xb2\x00\x09\x00\xf2\x01\x09\x00\xd1\x02\x81\x00\x82\x00\x0a\x00\x82\x01\x0a\x00\x8d\x02\x09\x00\xb2\x00\x36\x00\x0d\x00\x0e\x00\x0f\x00\x0a\x00\x10\x00\x37\x00\xb3\x00\x12\x00\x13\x00\x14\x00\x4b\x02\x0f\x00\xe5\x01\x10\x00\xc9\x00\x78\x01\x12\x00\x13\x00\x79\x01\xcc\x00\x4b\x02\x0f\x00\xba\x02\x10\x00\xe5\x01\x78\x01\x12\x00\x13\x00\x79\x01\x12\x02\xbf\x00\x64\x02\x24\x00\x13\x02\xe5\x01\x14\x02\x4c\x02\x4d\x02\x87\x02\x70\x02\x89\x01\xa5\x00\x15\x02\x59\x02\xe4\x00\x91\x01\x4c\x02\x4d\x02\x86\x02\x34\x00\x58\x02\x09\x00\x38\x00\x59\x02\x09\x00\x8b\x01\xd5\x00\x0a\x00\x4a\x00\x1e\x03\x0a\x00\x4b\x00\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x38\x03\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x12\x00\x13\x00\xa0\x00\x12\x00\x13\x00\x43\x02\x1c\x02\x5c\x00\x5d\x00\xe3\x01\x1d\x02\x5e\x00\x5f\x00\xf7\x01\xf8\x01\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x80\x00\x09\x00\xcc\x01\x7d\x01\x1f\x03\x20\x03\x21\x03\x0a\x00\x39\x03\x3a\x03\x3b\x03\x3c\x03\x09\x00\x7d\x01\x3d\x03\x09\x00\xf1\x01\xbc\x00\x0a\x00\xc6\x02\xca\x02\x0a\x00\x36\x00\x0d\x00\x0e\x00\x0f\x00\xcc\x01\x10\x00\x37\x00\xe2\x01\x12\x00\x13\x00\x14\x00\xf9\x01\xfa\x01\x4b\x02\x0f\x00\x02\x03\x10\x00\x6e\x02\x78\x01\x12\x00\x13\x00\x79\x01\x12\x00\x13\x00\x52\x01\xc6\x00\xfb\x01\xfe\x02\xfc\x01\xc7\x00\x09\x00\xc8\x00\xbd\x00\xbe\x00\x15\x02\x34\x00\x0a\x00\xbf\x00\xbf\x00\x4c\x02\x4d\x02\x16\x03\x34\x00\xc0\x00\xc6\x00\xdd\x01\x15\x02\xc1\x00\x87\x01\xc2\x00\x88\x01\xd9\x01\x09\x00\x38\x00\xcc\x01\x09\x00\x34\x00\x34\x00\x0a\x00\x4a\x00\xc8\x01\x0a\x00\x4b\x00\x34\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x38\x03\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x12\x00\x13\x00\x43\x02\x12\x00\x13\x00\x43\x02\xb2\x00\x5c\x00\x5d\x00\xa3\x00\xa4\x00\x5e\x00\x5f\x00\xcc\x01\xb3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x80\x00\x09\x00\xd1\x00\xfa\x02\xb2\x00\x7d\x01\x9b\x01\x0a\x00\xfb\x02\x75\x03\x3b\x03\x3c\x03\xfc\x01\xff\x01\x76\x03\x60\x01\xf1\x01\xd4\x00\xd5\x00\xc6\x02\xc7\x02\x8b\x02\x36\x00\x0d\x00\x0e\x00\x0f\x00\xce\x01\x10\x00\x37\x00\x09\x00\x12\x00\x13\x00\x14\x00\x4c\xff\xcc\x01\x0a\x00\x44\x02\x34\x00\x58\x01\xdd\x02\x09\x00\xa5\x01\x59\x01\x09\x00\x5a\x01\x4c\xff\x0a\x00\x4c\xff\xa3\x01\x0a\x00\x36\x00\x0d\x00\x0e\x00\x0f\x00\xa2\x01\x10\x00\x37\x00\xb2\x00\x12\x00\x13\x00\x14\x00\xf9\x01\xfa\x01\x9d\x01\xf1\x01\xfc\x01\xfe\x01\xc6\x02\xee\x02\x12\x00\x13\x00\x43\x02\x12\x00\x13\x00\x43\x02\x38\x00\xfb\x01\x09\x00\xfc\x01\xb8\x02\x0f\x02\x4a\x00\x10\x02\x0a\x00\x4b\x00\x34\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x9b\x01\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x38\x00\xc9\x00\x96\x01\x12\x00\x13\x00\xca\x00\x9a\x01\x5c\x00\x5d\x00\x39\x00\x98\x01\x5e\x00\x5f\x00\x34\x00\x35\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x80\x00\x09\x00\x91\x02\xb2\x00\x12\x02\x47\x03\x97\x01\x0a\x00\x13\x02\x3e\x00\x14\x02\xb3\x00\x95\x01\x09\x00\x61\x01\x3f\x00\x40\x00\x15\x02\xd1\x00\x0a\x00\x90\x01\xb2\x00\x36\x00\x0d\x00\x0e\x00\x0f\x00\x89\x01\x10\x00\x37\x00\xb3\x00\x12\x00\x13\x00\x14\x00\x6e\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x6e\x01\x10\x00\x11\x00\x6d\x01\x12\x00\x13\x00\x14\x00\x89\x01\xf1\x01\x2b\x00\xdb\x00\xf2\x01\x03\x02\x4a\x03\x15\x00\x16\x00\x17\x00\x18\x00\x34\x00\x35\x00\xd7\x00\x65\x01\x8b\x01\xd5\x00\xdc\x00\xb4\x00\xdd\x00\x5f\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x64\x01\xf1\x01\x6f\x01\x70\x01\xf2\x01\x38\x00\x49\x03\x09\x00\xb9\x00\xba\x00\x75\x02\x4a\x00\x70\x02\x0a\x00\x4b\x00\x6d\x02\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x6e\x02\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x34\x00\xe0\x00\x04\x02\x12\x00\x13\x00\xca\x00\x67\x02\x5c\x00\x5d\x00\x46\x00\x08\x00\x5e\x00\x5f\x00\xd9\x00\x18\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\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\x80\x00\x09\x00\xcd\x02\x3e\x00\xce\x02\xc9\x01\xe6\x01\x0a\x00\xb2\x00\x3f\x00\x92\x01\x34\x00\x62\x02\xac\x00\xeb\x01\x60\x02\xfc\x01\xfd\x01\xb2\x00\xc9\x01\xdf\x01\x9e\x00\x0c\x00\x0d\x00\xad\x00\x0f\x00\xb3\x00\x10\x00\x11\x00\x3e\x00\x12\x00\x13\x00\x14\x00\xc9\x01\xd6\x01\x3f\x00\xec\x01\x5f\x02\x09\x00\xb2\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\xae\x00\xbf\x00\xb3\x00\xf1\x01\x5d\x02\xac\x00\xf2\x01\x58\x01\x57\x03\xf1\x01\x5c\x02\x84\x01\xf2\x01\x85\x01\x56\x03\xd1\x00\x5c\x01\x0f\x00\xfa\xfe\x10\x00\x34\x00\xa7\x01\x12\x00\x13\x00\x56\x01\xc9\x01\xd5\x01\xd2\x00\xd3\x00\xf9\xfe\xd4\x00\xd5\x00\xfb\xfe\xbd\x00\xbe\x00\xff\xfe\x89\x01\xae\x00\xbf\x00\x3d\x02\xfc\xfe\x8a\x01\xf1\x01\x1c\x02\x8d\x01\xf2\x01\xfe\xfe\x55\x03\x8e\x01\x35\x02\x8f\x01\x8b\x01\xd5\x00\x1c\x02\x0a\x02\x84\x00\x85\x00\x34\x00\x78\x03\x86\x00\x30\x02\x87\x00\x1c\x00\x2f\x02\x62\xfe\x5c\x00\xaf\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x2e\x02\x1d\x00\x8c\x00\x8d\x00\x8e\x00\x2d\x02\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x1e\x00\x09\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x94\x00\x0a\x00\x1c\x02\x25\x00\x95\x00\x26\x00\x2c\x02\x27\x00\x96\x00\x97\x00\x22\x02\x09\x00\x28\x00\x27\x02\x5c\x00\xaf\x00\x26\x02\x0a\x00\xdf\x00\x0f\x00\x25\x02\x10\x00\xb2\x00\xac\x00\x12\x00\x13\x00\x56\x01\x24\x02\xbd\x00\xbe\x00\xb3\x00\xc9\x01\xd1\x01\xbf\x00\x5c\x01\x0f\x00\x22\x02\x10\x00\x1c\x02\xd7\x00\x12\x00\x13\x00\x56\x01\xd8\x00\x29\x00\xd9\x00\x1f\x02\x2a\x00\x1c\x02\x3b\x00\xc9\x01\xce\x01\x34\x00\x2d\x00\x2e\x00\x73\x01\x2f\x00\xf1\x01\xb2\x00\x3c\x00\xf2\x01\x31\x00\x54\x03\x3d\x00\x89\x01\x3e\x00\xfc\x01\xc5\x02\x0b\x02\x4a\x02\x98\x00\x34\x00\x34\x00\x35\x00\x1a\x02\x36\x00\x0a\x02\x84\x00\x85\x00\x8b\x01\xd5\x00\x86\x00\x18\x02\x87\x00\x1c\x00\x17\x02\x62\xfe\xc9\x01\xca\x01\x88\x00\x89\x00\x8a\x00\x8b\x00\x34\x00\x1d\x00\x8c\x00\x8d\x00\x8e\x00\xeb\x01\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x1e\x00\x09\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x94\x00\x0a\x00\xea\x01\x25\x00\x95\x00\x26\x00\xcc\x01\x27\x00\x96\x00\x97\x00\xc3\x01\xc5\x01\x28\x00\xc3\x01\xc4\x01\x43\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\xd6\x02\x10\x00\x11\x00\xdd\x01\x12\x00\x13\x00\x14\x00\xc5\x02\xbd\x00\xbe\x00\xc3\x01\x18\x02\xc0\x02\xbf\x00\x15\x00\x16\x00\x17\x00\x18\x00\xc1\x02\x8d\x01\xc9\x01\xdf\x02\xb0\x02\x8e\x01\x29\x00\x8f\x01\xb8\x02\x2a\x00\x1f\x02\x3b\x00\xc9\x01\xde\x02\x34\x00\x2d\x00\x2e\x00\xaf\x02\x2f\x00\xd3\x02\xd4\x02\x3c\x00\xad\x02\x31\x00\x24\x02\x3d\x00\xab\x02\x3e\x00\xbd\x02\xbe\x02\x0b\x02\xa9\x02\x98\x00\x1c\x02\x34\x00\x35\x00\x44\x00\x36\x00\x84\x00\x85\x00\xb2\x00\xa8\x02\x86\x00\xa7\x02\x87\x00\x1c\x00\xb5\x02\xb6\x02\xb3\x00\x24\x02\x88\x00\x89\x00\x8a\x00\x8b\x00\xa6\x02\x1d\x00\x8c\x00\x8d\x00\x8e\x00\xa3\x02\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x1e\x00\x65\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x94\x00\x3f\x00\x66\x01\x25\x00\x95\x00\x26\x00\xa2\x02\x27\x00\x96\x00\x97\x00\xa1\x02\xd1\x00\x28\x00\x90\x02\x77\x02\x78\x02\x79\x02\x7a\x02\x7b\x02\x1d\x03\x78\x02\x79\x02\x7a\x02\x7b\x02\x5d\x01\x9e\x02\xd4\x00\xd5\x00\x80\x02\x69\x01\x6a\x01\xde\xfe\xde\xfe\x6b\x01\xb2\x02\xb3\x02\xde\xfe\x99\x02\xde\xfe\x0d\x02\x0e\x02\x0f\x02\xde\xfe\x10\x02\x29\x00\x97\x02\xde\xfe\x2a\x00\xde\xfe\x3b\x00\x8d\x02\x8e\x02\x96\x02\x2d\x00\x2e\x00\xde\xfe\x2f\x00\xc9\x01\xf2\x02\x3c\x00\x89\x02\x31\x00\x24\x02\x3d\x00\x1c\x02\x3e\x00\xc9\x01\xef\x02\xfa\xfd\x84\x02\x98\x00\x70\x02\x34\x00\x35\x00\x83\x02\x36\x00\xfa\xfd\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\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\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x1d\x01\x1e\x01\x1f\x01\x20\x01\x21\x01\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x29\x01\x2a\x01\x2b\x01\x2c\x01\x2d\x01\x2e\x01\x2f\x01\x30\x01\x31\x01\x32\x01\x33\x01\x34\x01\x35\x01\x36\x01\x37\x01\x38\x01\x39\x01\x3a\x01\x3b\x01\x3c\x01\x3d\x01\x3e\x01\x3f\x01\x40\x01\x41\x01\x42\x01\x43\x01\x44\x01\x45\x01\x46\x01\x47\x01\x48\x01\x49\x01\x4a\x01\x4b\x01\x4c\x01\x4d\x01\x4e\x01\x4f\x01\x50\x01\x51\x01\x52\x01\x84\x00\x85\x00\x3f\x03\x40\x03\x86\x00\x41\x03\x87\x00\x1c\x00\x82\x02\x62\xfe\x1d\x03\x42\x03\x88\x00\x89\x00\x8a\x00\x43\x03\x1c\x03\x1d\x00\x8c\x00\x8d\x00\x8e\x00\x44\x03\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x1e\x00\x65\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x94\x00\x3f\x00\x66\x01\x25\x00\x95\x00\x26\x00\x1b\x03\x27\x00\x96\x00\x97\x00\xb2\x00\x09\x00\x28\x00\xc3\x01\xeb\x02\xc3\x01\xea\x02\x0a\x00\xb3\x00\xc3\x01\xe9\x02\xbd\x00\xbe\x00\xac\x00\xc3\x01\xe8\x02\xbf\x00\x67\x01\x68\x01\x69\x01\x6a\x01\x34\x00\xd7\x00\x6b\x01\x5c\x01\x0f\x00\xd8\x00\x10\x00\xd9\x00\x15\x03\x12\x00\x13\x00\x56\x01\x14\x03\x29\x00\x34\x00\x13\x03\x2a\x00\x24\x02\x3b\x00\xc9\x01\xe4\x02\x89\x01\x2d\x00\x2e\x00\x76\x01\x2f\x00\x49\x02\x10\x03\x3c\x00\x0f\x03\x31\x00\x0e\x03\x3d\x00\x0d\x03\x3e\x00\x0c\x03\x8b\x01\xd5\x00\x0b\x03\x98\x00\x24\x02\x34\x00\x35\x00\x0a\x03\x36\x00\x84\x00\x85\x00\x3f\x03\x40\x03\x86\x00\x41\x03\x87\x00\x1c\x00\xc9\x01\xe2\x02\x05\x03\x42\x03\x88\x00\x89\x00\x8a\x00\x43\x03\x04\x03\x1d\x00\x8c\x00\x8d\x00\x8e\x00\x44\x03\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x1e\x00\x03\x03\x1f\x00\x20\x00\x21\x00\x22\x00\x94\x00\x34\x03\x31\x03\x25\x00\x95\x00\x26\x00\x00\x03\x27\x00\x96\x00\x97\x00\xb2\x00\x09\x00\x28\x00\xff\x02\x30\x03\x31\x03\x15\x02\x0a\x00\xb3\x00\x76\x02\x77\x02\x78\x02\x79\x02\x7a\x02\x7b\x02\xe0\x02\x77\x02\x78\x02\x79\x02\x7a\x02\x7b\x02\xfa\x02\xcb\x00\x0d\x00\x0e\x00\x0f\x00\xf4\x02\x10\x00\x37\x00\x34\x00\x12\x00\x13\x00\x14\x00\xcc\x01\x29\x00\x2a\x03\x8e\x02\x2a\x00\xe8\x02\x3b\x00\x5e\x03\x5f\x03\xed\x01\x2d\x00\x2e\x00\xee\x02\x2f\x00\xc9\x01\xd6\x01\x3c\x00\xcc\x01\x31\x00\x34\x00\x3d\x00\x52\x03\x3e\x00\x0b\x02\xef\x01\xd5\x00\x51\x03\x98\x00\x4f\x03\x34\x00\x35\x00\x4d\x03\x36\x00\x82\xff\x82\xff\xb2\x00\x45\x03\x82\xff\x15\x02\x82\xff\x82\xff\x37\x03\x82\xff\xb3\x00\x36\x03\x82\xff\x82\xff\x82\xff\x82\xff\x34\x03\x82\xff\x82\xff\x82\xff\x82\xff\x33\x03\x82\xff\x82\xff\x82\xff\x82\xff\x82\xff\x82\xff\x30\x03\x82\xff\x82\xff\x82\xff\x82\xff\x82\xff\xc9\x01\x53\x03\x82\xff\x82\xff\x82\xff\x2e\x03\x82\xff\x82\xff\x82\xff\xb2\x00\xed\x01\x82\xff\xc9\x01\x52\x03\x6e\x03\x2d\x03\x6f\x03\xb3\x00\xbd\x00\xbe\x00\x6b\x03\x34\x00\x6a\x03\xbf\x00\x01\x02\xef\x01\xd5\x00\x69\x03\xb2\x00\x8d\x01\x5c\x03\x67\x03\x28\x03\x8e\x01\x66\x03\x8f\x01\xb3\x00\x15\x02\x63\x03\xbd\x00\xbe\x00\x75\x03\x34\x00\x82\xff\xbf\x00\x15\x02\x82\xff\x34\x00\x82\xff\xfa\x02\xd7\x00\xed\x01\x82\xff\x82\xff\xd8\x00\x82\xff\x0d\x02\xcc\x01\x82\xff\x34\x00\x82\xff\x74\x03\x82\xff\x34\x00\x82\xff\x00\x02\xef\x01\xd5\x00\x34\x00\x82\xff\xed\x01\x82\xff\x82\xff\x7c\x03\x82\xff\x84\x00\x85\x00\x08\x00\x41\x00\x86\x00\xe4\x00\x87\x00\x1c\x00\xa5\x00\xf0\x01\xef\x01\xd5\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\xcf\x00\x1d\x00\x8c\x00\x8d\x00\x8e\x00\xce\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x1e\x00\xa1\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x94\x00\x47\x00\xe3\x01\x25\x00\x95\x00\x26\x00\xde\x01\x27\x00\x96\x00\x97\x00\x1c\x00\xe0\x01\x28\x00\x46\x03\x77\x02\x78\x02\x79\x02\x7a\x02\x7b\x02\xdd\x01\xb1\x00\xda\x01\xdb\x01\xd9\x01\xd7\x01\xb2\x00\xcf\x01\xcc\x01\xc7\x01\xa3\x01\x1e\x00\xa0\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x9b\x01\x98\x01\x25\x00\x93\x01\x26\x00\x62\x01\x27\x00\x29\x00\x73\x02\x72\x02\x2a\x00\x28\x00\x3b\x00\x65\x02\x64\x02\x3b\x02\x2d\x00\x2e\x00\x62\x02\x2f\x00\x62\x01\x60\x02\x3c\x00\x59\x02\x31\x00\x5d\x02\x3d\x00\x56\x02\x3e\x00\x3a\x02\x39\x02\x30\x02\x38\x02\x98\x00\x37\x02\x34\x00\x35\x00\x27\x02\x36\x00\x02\x02\x36\x02\xb2\x00\x35\x02\x29\x00\x22\x02\x33\x02\x2a\x00\x2b\x00\x2c\x00\xb3\x00\x2a\x02\x29\x02\x2d\x00\x2e\x00\x28\x02\x2f\x00\x1c\x00\x20\x02\x30\x00\xa0\x00\x31\x00\x1f\x02\x32\x00\x1a\x02\x33\x00\xb2\x00\x1d\x00\xce\x02\xd2\x02\xcb\x02\xad\x02\x34\x00\x35\x00\xb3\x00\x36\x00\xab\x02\x1e\x00\xa9\x02\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xed\x01\xa4\x02\x25\x00\x1c\x00\x26\x00\xa3\x02\x27\x00\x9f\x02\x9e\x02\x9c\x02\x9b\x02\x28\x00\xb2\x00\x1d\x00\xee\x01\xef\x01\xd5\x00\x97\x02\x9a\x02\x99\x02\xb3\x00\x94\x02\x8b\x02\x1e\x00\xed\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x89\x02\x93\x02\x25\x00\x92\x02\x26\x00\x15\x03\x27\x00\x11\x03\xdc\x02\xef\x01\xd5\x00\x28\x00\xb2\x00\x29\x00\x10\x03\x08\x03\x2a\x00\x2b\x00\x2c\x00\xf8\x02\xb3\x00\x05\x03\x2d\x00\x2e\x00\xed\x01\x2f\x00\xce\x02\xcb\x02\x30\x00\x00\x03\x31\x00\xec\x02\x32\x00\x9d\x00\x33\x00\x9e\x00\x4d\x03\xfc\x02\xd9\x02\xef\x01\xd5\x00\x34\x00\x35\x00\x29\x00\x36\x00\x4b\x03\x90\x02\x2b\x00\x2c\x00\x37\x03\x6c\x03\x6b\x03\x2d\x00\x2e\x00\xed\x01\x2f\x00\x1c\x00\x2e\x03\x30\x00\x67\x03\x31\x00\x5d\x03\x32\x00\x9d\x00\x33\x00\x9e\x00\x1d\x00\x5c\x03\xc1\x02\xef\x01\xd5\x00\x34\x00\x35\x00\x64\x03\x36\x00\x78\x03\x1e\x00\x63\x03\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x72\x03\x71\x03\x25\x00\x1c\x00\x26\x00\x61\x03\x27\x00\x5a\x03\x7a\x03\x60\x03\x79\x03\x28\x00\x00\x00\x1d\x00\x2b\x03\x77\x02\x78\x02\x79\x02\x7a\x02\x7b\x02\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x24\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x59\x03\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x9d\x00\x33\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x09\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x0a\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\xdf\x00\x0f\x00\x28\x00\x10\x00\x1d\x00\x5a\x02\x12\x00\x13\x00\x79\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x3b\xff\x2f\x00\x00\x00\x3b\xff\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x59\x03\x77\x02\x78\x02\x79\x02\x7a\x02\x7b\x02\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x9a\x00\x1d\x00\x00\x00\x00\x00\x09\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x0a\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x54\x02\x0f\x00\x28\x00\x10\x00\x1d\x00\x55\x02\x12\x00\x13\x00\x79\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\xbd\x00\xbe\x00\x28\x00\x00\x00\x29\x00\xbf\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x8d\x01\x00\x00\x2d\x00\x2e\x00\x8e\x01\x2f\x00\x8f\x01\x00\x00\x30\x00\xa0\x00\x31\x00\x00\x00\x32\x00\x34\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x1c\x00\x33\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\xb1\x00\x36\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\xbd\x00\xbe\x00\x00\x00\x00\x00\x29\x00\xbf\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\xd7\x00\x00\x00\x2d\x00\x2e\x00\xd8\x00\x2f\x00\xd9\x00\x00\x00\x3c\x00\x82\x01\x31\x00\x00\x00\x3d\x00\x34\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x34\x00\x35\x00\x2a\x00\x36\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x9d\x00\x3e\x00\x9e\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x7f\x01\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x30\x00\xa0\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x28\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x34\x00\x35\x00\x2a\x00\x36\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x3c\x00\x49\x02\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x9d\x00\x3e\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x1c\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\xb1\x00\x36\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x39\xff\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x34\x00\x35\x00\x2a\x00\x36\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x80\x01\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x47\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x82\xff\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x82\xff\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x82\xff\x00\x00\x82\xff\x82\xff\x82\xff\x82\xff\x82\xff\x00\x00\x00\x00\x82\xff\x1c\x00\x82\xff\x00\x00\x82\xff\x00\x00\x00\x00\x00\x00\x00\x00\x82\xff\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x82\xff\x00\x00\x00\x00\x82\xff\x82\xff\x82\xff\x00\x00\x00\x00\x00\x00\x82\xff\x82\xff\x00\x00\x82\xff\x00\x00\x00\x00\x82\xff\x00\x00\x82\xff\x00\x00\x82\xff\x00\x00\x82\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\xff\x82\xff\x29\x00\x82\xff\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x1c\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x34\x00\x35\x00\x29\x00\x36\x00\x00\x00\x2a\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x1c\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x09\x00\x00\x00\x80\x01\x28\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x5b\x01\xa7\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x55\x01\x0f\x00\x27\x00\x10\x00\x00\x00\x00\x00\x12\x00\x13\x00\x56\x01\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\xaa\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x34\x00\x35\x00\x2a\x00\x36\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x1e\x00\x36\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x09\x00\x00\x00\x47\x02\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x5b\x01\xa7\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x55\x01\x0f\x00\x27\x00\x10\x00\x00\x00\x00\x00\x12\x00\x13\x00\x56\x01\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\xaa\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x34\x00\x35\x00\x2a\x00\x36\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x31\x00\x00\x00\xc4\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x1e\x00\x36\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa7\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x55\x01\x0f\x00\x27\x00\x10\x00\x00\x00\x00\x00\x12\x00\x13\x00\x56\x01\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x72\x01\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x34\x00\x35\x00\x2a\x00\x36\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x1e\x00\x36\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa7\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x55\x01\x0f\x00\x27\x00\x10\x00\x00\x00\x00\x00\x12\x00\x13\x00\x56\x01\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x71\x01\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x34\x00\x35\x00\x2a\x00\x36\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x46\x02\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x1e\x00\x36\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x5b\x01\xa7\x00\x1e\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x22\x00\x23\x00\x00\x00\x00\x00\x25\x00\x00\x00\x55\x01\x0f\x00\x27\x00\x10\x00\x00\x00\x00\x00\x12\x00\x13\x00\x56\x01\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x3b\x00\x00\x00\x00\x00\xaa\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x00\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x34\x00\x35\x00\x2a\x00\x36\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x09\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x31\x00\x0a\x00\x49\x03\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x35\x00\x00\x00\x36\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x00\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\x84\x02\x70\x01\x00\x00\x00\x00\x00\x00\x9e\x00\x0c\x00\x0d\x00\xad\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x00\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x09\x00\x76\x01\x9a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x0c\x00\x0d\x00\xa8\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x00\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\xaa\x00\x09\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x0c\x00\x0d\x00\xa8\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x00\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x15\x00\x16\x00\x17\x00\x18\x00\x75\x01\x0a\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x0c\x00\x0d\x00\xa8\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x00\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x15\x00\x16\x00\x17\x00\x18\x00\xa9\x00\x0a\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x0c\x00\x0d\x00\xa8\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\xba\x02\x15\x00\x16\x00\x17\x00\x18\x00\x74\x01\x0a\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x5a\x01\x9d\x01\x0e\x00\x0f\x00\x00\x00\x10\x00\x37\x00\x00\x00\x12\x00\x13\x00\x14\x00\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\xa6\x00\x5a\x01\x00\x00\x00\x00\x69\x02\x6a\x02\x6b\x02\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\xa6\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x01\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\x53\x02\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\x52\x02\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x01\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\x51\x02\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\x50\x02\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x01\x09\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x0a\x00\x12\x00\x13\x00\x56\x01\xa6\x00\x5a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x01\x00\x00\x55\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x00\x00\x12\x00\x13\x00\x56\x01\x09\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x0a\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\x9b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x01\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x03\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x02\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x03\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x00\x00\x10\x00\x11\x00\x09\x00\x12\x00\x13\x00\x14\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x09\x00\x00\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x02\x0e\x00\x0f\x00\x00\x00\x10\x00\x37\x00\x00\x00\x12\x00\x13\x00\x14\x00\xdf\x00\x0f\x00\x00\x00\x10\x00\xe0\x00\x00\x00\x12\x00\x13\x00\x14\x00\xa6\x01\xa7\x01\xa8\x01\xa9\x01\xaa\x01\xab\x01\xac\x01\xad\x01\xae\x01\xaf\x01\xb0\x01\xb1\x01\xb2\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xb8\x01\xb9\x01\xba\x01\xbb\x01\xbc\x01\xbd\x01\xbe\x01\xbf\x01\xc0\x01\xc1\x01\xc2\x01\xc3\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"#
+
+happyReduceArr = Happy_Data_Array.array (7, 518) [
+	(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),
+	(383 , happyReduce_383),
+	(384 , happyReduce_384),
+	(385 , happyReduce_385),
+	(386 , happyReduce_386),
+	(387 , happyReduce_387),
+	(388 , happyReduce_388),
+	(389 , happyReduce_389),
+	(390 , happyReduce_390),
+	(391 , happyReduce_391),
+	(392 , happyReduce_392),
+	(393 , happyReduce_393),
+	(394 , happyReduce_394),
+	(395 , happyReduce_395),
+	(396 , happyReduce_396),
+	(397 , happyReduce_397),
+	(398 , happyReduce_398),
+	(399 , happyReduce_399),
+	(400 , happyReduce_400),
+	(401 , happyReduce_401),
+	(402 , happyReduce_402),
+	(403 , happyReduce_403),
+	(404 , happyReduce_404),
+	(405 , happyReduce_405),
+	(406 , happyReduce_406),
+	(407 , happyReduce_407),
+	(408 , happyReduce_408),
+	(409 , happyReduce_409),
+	(410 , happyReduce_410),
+	(411 , happyReduce_411),
+	(412 , happyReduce_412),
+	(413 , happyReduce_413),
+	(414 , happyReduce_414),
+	(415 , happyReduce_415),
+	(416 , happyReduce_416),
+	(417 , happyReduce_417),
+	(418 , happyReduce_418),
+	(419 , happyReduce_419),
+	(420 , happyReduce_420),
+	(421 , happyReduce_421),
+	(422 , happyReduce_422),
+	(423 , happyReduce_423),
+	(424 , happyReduce_424),
+	(425 , happyReduce_425),
+	(426 , happyReduce_426),
+	(427 , happyReduce_427),
+	(428 , happyReduce_428),
+	(429 , happyReduce_429),
+	(430 , happyReduce_430),
+	(431 , happyReduce_431),
+	(432 , happyReduce_432),
+	(433 , happyReduce_433),
+	(434 , happyReduce_434),
+	(435 , happyReduce_435),
+	(436 , happyReduce_436),
+	(437 , happyReduce_437),
+	(438 , happyReduce_438),
+	(439 , happyReduce_439),
+	(440 , happyReduce_440),
+	(441 , happyReduce_441),
+	(442 , happyReduce_442),
+	(443 , happyReduce_443),
+	(444 , happyReduce_444),
+	(445 , happyReduce_445),
+	(446 , happyReduce_446),
+	(447 , happyReduce_447),
+	(448 , happyReduce_448),
+	(449 , happyReduce_449),
+	(450 , happyReduce_450),
+	(451 , happyReduce_451),
+	(452 , happyReduce_452),
+	(453 , happyReduce_453),
+	(454 , happyReduce_454),
+	(455 , happyReduce_455),
+	(456 , happyReduce_456),
+	(457 , happyReduce_457),
+	(458 , happyReduce_458),
+	(459 , happyReduce_459),
+	(460 , happyReduce_460),
+	(461 , happyReduce_461),
+	(462 , happyReduce_462),
+	(463 , happyReduce_463),
+	(464 , happyReduce_464),
+	(465 , happyReduce_465),
+	(466 , happyReduce_466),
+	(467 , happyReduce_467),
+	(468 , happyReduce_468),
+	(469 , happyReduce_469),
+	(470 , happyReduce_470),
+	(471 , happyReduce_471),
+	(472 , happyReduce_472),
+	(473 , happyReduce_473),
+	(474 , happyReduce_474),
+	(475 , happyReduce_475),
+	(476 , happyReduce_476),
+	(477 , happyReduce_477),
+	(478 , happyReduce_478),
+	(479 , happyReduce_479),
+	(480 , happyReduce_480),
+	(481 , happyReduce_481),
+	(482 , happyReduce_482),
+	(483 , happyReduce_483),
+	(484 , happyReduce_484),
+	(485 , happyReduce_485),
+	(486 , happyReduce_486),
+	(487 , happyReduce_487),
+	(488 , happyReduce_488),
+	(489 , happyReduce_489),
+	(490 , happyReduce_490),
+	(491 , happyReduce_491),
+	(492 , happyReduce_492),
+	(493 , happyReduce_493),
+	(494 , happyReduce_494),
+	(495 , happyReduce_495),
+	(496 , happyReduce_496),
+	(497 , happyReduce_497),
+	(498 , happyReduce_498),
+	(499 , happyReduce_499),
+	(500 , happyReduce_500),
+	(501 , happyReduce_501),
+	(502 , happyReduce_502),
+	(503 , happyReduce_503),
+	(504 , happyReduce_504),
+	(505 , happyReduce_505),
+	(506 , happyReduce_506),
+	(507 , happyReduce_507),
+	(508 , happyReduce_508),
+	(509 , happyReduce_509),
+	(510 , happyReduce_510),
+	(511 , happyReduce_511),
+	(512 , happyReduce_512),
+	(513 , happyReduce_513),
+	(514 , happyReduce_514),
+	(515 , happyReduce_515),
+	(516 , happyReduce_516),
+	(517 , happyReduce_517),
+	(518 , happyReduce_518)
+	]
+
+happy_n_terms = 111 :: Int
+happy_n_nonterms = 173 :: Int
+
+happyReduce_7 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_7 = happySpecReduce_1  0# happyReduction_7
+happyReduction_7 happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	happyIn10
+		 (reverse happy_var_1
+	)}
+
+happyReduce_8 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_8 = happySpecReduce_2  1# happyReduction_8
+happyReduction_8 happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> 
+	case happyOut12 happy_x_2 of { happy_var_2 -> 
+	happyIn11
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_9 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_9 = happySpecReduce_0  1# happyReduction_9
+happyReduction_9  =  happyIn11
+		 ([]
+	)
+
+happyReduce_10 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_10 = happySpecReduce_1  2# happyReduction_10
+happyReduction_10 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwAbstract happy_var_1
+	)}
+
+happyReduce_11 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_11 = happySpecReduce_1  2# happyReduction_11
+happyReduction_11 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCoData happy_var_1
+	)}
+
+happyReduce_12 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_12 = happySpecReduce_1  2# happyReduction_12
+happyReduction_12 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCoInductive happy_var_1
+	)}
+
+happyReduce_13 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_13 = happySpecReduce_1  2# happyReduction_13
+happyReduction_13 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwConstructor happy_var_1
+	)}
+
+happyReduce_14 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_14 = happySpecReduce_1  2# happyReduction_14
+happyReduction_14 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwData happy_var_1
+	)}
+
+happyReduce_15 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_15 = happySpecReduce_1  2# happyReduction_15
+happyReduction_15 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwEta happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwEta happy_var_1
+	)}
+
+happyReduce_16 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_16 = happySpecReduce_1  2# happyReduction_16
+happyReduction_16 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwField happy_var_1
+	)}
+
+happyReduce_17 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_17 = happySpecReduce_1  2# happyReduction_17
+happyReduction_17 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwForall happy_var_1
+	)}
+
+happyReduce_18 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_18 = happySpecReduce_1  2# happyReduction_18
+happyReduction_18 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwHiding happy_var_1
+	)}
+
+happyReduce_19 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_19 = happySpecReduce_1  2# happyReduction_19
+happyReduction_19 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwImport happy_var_1
+	)}
+
+happyReduce_20 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_20 = happySpecReduce_1  2# happyReduction_20
+happyReduction_20 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwIn happy_var_1
+	)}
+
+happyReduce_21 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_21 = happySpecReduce_1  2# happyReduction_21
+happyReduction_21 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwInductive happy_var_1
+	)}
+
+happyReduce_22 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_22 = happySpecReduce_1  2# happyReduction_22
+happyReduction_22 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwInfix happy_var_1
+	)}
+
+happyReduce_23 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_23 = happySpecReduce_1  2# happyReduction_23
+happyReduction_23 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwInfixL happy_var_1
+	)}
+
+happyReduce_24 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_24 = happySpecReduce_1  2# happyReduction_24
+happyReduction_24 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwInfixR happy_var_1
+	)}
+
+happyReduce_25 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_25 = happySpecReduce_1  2# happyReduction_25
+happyReduction_25 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwInstance happy_var_1
+	)}
+
+happyReduce_26 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_26 = happySpecReduce_1  2# happyReduction_26
+happyReduction_26 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOverlap happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwOverlap happy_var_1
+	)}
+
+happyReduce_27 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_27 = happySpecReduce_1  2# happyReduction_27
+happyReduction_27 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwLet happy_var_1
+	)}
+
+happyReduce_28 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_28 = happySpecReduce_1  2# happyReduction_28
+happyReduction_28 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMacro happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwMacro happy_var_1
+	)}
+
+happyReduce_29 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_29 = happySpecReduce_1  2# happyReduction_29
+happyReduction_29 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwModule happy_var_1
+	)}
+
+happyReduce_30 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_30 = happySpecReduce_1  2# happyReduction_30
+happyReduction_30 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwMutual happy_var_1
+	)}
+
+happyReduce_31 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_31 = happySpecReduce_1  2# happyReduction_31
+happyReduction_31 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNoEta happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwNoEta happy_var_1
+	)}
+
+happyReduce_32 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_32 = happySpecReduce_1  2# happyReduction_32
+happyReduction_32 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwOpen happy_var_1
+	)}
+
+happyReduce_33 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_33 = happySpecReduce_1  2# happyReduction_33
+happyReduction_33 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwPatternSyn happy_var_1
+	)}
+
+happyReduce_34 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_34 = happySpecReduce_1  2# happyReduction_34
+happyReduction_34 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwPostulate happy_var_1
+	)}
+
+happyReduce_35 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_35 = happySpecReduce_1  2# happyReduction_35
+happyReduction_35 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwPrimitive happy_var_1
+	)}
+
+happyReduce_36 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_36 = happySpecReduce_1  2# happyReduction_36
+happyReduction_36 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwPrivate happy_var_1
+	)}
+
+happyReduce_37 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_37 = happySpecReduce_1  2# happyReduction_37
+happyReduction_37 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwProp happy_var_1
+	)}
+
+happyReduce_38 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_38 = happySpecReduce_1  2# happyReduction_38
+happyReduction_38 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwPublic happy_var_1
+	)}
+
+happyReduce_39 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_39 = happySpecReduce_1  2# happyReduction_39
+happyReduction_39 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwQuote happy_var_1
+	)}
+
+happyReduce_40 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_40 = happySpecReduce_1  2# happyReduction_40
+happyReduction_40 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwQuoteContext happy_var_1
+	)}
+
+happyReduce_41 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_41 = happySpecReduce_1  2# happyReduction_41
+happyReduction_41 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwQuoteGoal happy_var_1
+	)}
+
+happyReduce_42 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_42 = happySpecReduce_1  2# happyReduction_42
+happyReduction_42 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwQuoteTerm happy_var_1
+	)}
+
+happyReduce_43 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_43 = happySpecReduce_1  2# happyReduction_43
+happyReduction_43 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwRecord happy_var_1
+	)}
+
+happyReduce_44 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_44 = happySpecReduce_1  2# happyReduction_44
+happyReduction_44 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwRenaming happy_var_1
+	)}
+
+happyReduce_45 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_45 = happySpecReduce_1  2# happyReduction_45
+happyReduction_45 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwRewrite happy_var_1
+	)}
+
+happyReduce_46 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_46 = happySpecReduce_1  2# happyReduction_46
+happyReduction_46 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwSet happy_var_1
+	)}
+
+happyReduce_47 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_47 = happySpecReduce_1  2# happyReduction_47
+happyReduction_47 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwSyntax happy_var_1
+	)}
+
+happyReduce_48 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_48 = happySpecReduce_1  2# happyReduction_48
+happyReduction_48 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwTactic happy_var_1
+	)}
+
+happyReduce_49 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_49 = happySpecReduce_1  2# happyReduction_49
+happyReduction_49 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwTo happy_var_1
+	)}
+
+happyReduce_50 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_50 = happySpecReduce_1  2# happyReduction_50
+happyReduction_50 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwUnquote happy_var_1
+	)}
+
+happyReduce_51 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_51 = happySpecReduce_1  2# happyReduction_51
+happyReduction_51 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwUnquoteDecl happy_var_1
+	)}
+
+happyReduce_52 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_52 = happySpecReduce_1  2# happyReduction_52
+happyReduction_52 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDef happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwUnquoteDef happy_var_1
+	)}
+
+happyReduce_53 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_53 = happySpecReduce_1  2# happyReduction_53
+happyReduction_53 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwUsing happy_var_1
+	)}
+
+happyReduce_54 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_54 = happySpecReduce_1  2# happyReduction_54
+happyReduction_54 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwWhere happy_var_1
+	)}
+
+happyReduce_55 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_55 = happySpecReduce_1  2# happyReduction_55
+happyReduction_55 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwDo happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwDo happy_var_1
+	)}
+
+happyReduce_56 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_56 = happySpecReduce_1  2# happyReduction_56
+happyReduction_56 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwWith happy_var_1
+	)}
+
+happyReduce_57 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_57 = happySpecReduce_1  2# happyReduction_57
+happyReduction_57 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwBUILTIN happy_var_1
+	)}
+
+happyReduce_58 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_58 = happySpecReduce_1  2# happyReduction_58
+happyReduction_58 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCATCHALL happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCATCHALL happy_var_1
+	)}
+
+happyReduce_59 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_59 = happySpecReduce_1  2# happyReduction_59
+happyReduction_59 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCOMPILED happy_var_1
+	)}
+
+happyReduce_60 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_60 = happySpecReduce_1  2# happyReduction_60
+happyReduction_60 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCOMPILED_DATA happy_var_1
+	)}
+
+happyReduce_61 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_61 = happySpecReduce_1  2# happyReduction_61
+happyReduction_61 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA_UHC happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCOMPILED_DATA_UHC happy_var_1
+	)}
+
+happyReduce_62 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_62 = happySpecReduce_1  2# happyReduction_62
+happyReduction_62 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EXPORT happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCOMPILED_EXPORT happy_var_1
+	)}
+
+happyReduce_63 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_63 = happySpecReduce_1  2# happyReduction_63
+happyReduction_63 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCOMPILED_JS happy_var_1
+	)}
+
+happyReduce_64 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_64 = happySpecReduce_1  2# happyReduction_64
+happyReduction_64 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCOMPILED_TYPE happy_var_1
+	)}
+
+happyReduce_65 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_65 = happySpecReduce_1  2# happyReduction_65
+happyReduction_65 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_UHC happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCOMPILED_UHC happy_var_1
+	)}
+
+happyReduce_66 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_66 = happySpecReduce_1  2# happyReduction_66
+happyReduction_66 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwDISPLAY happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwDISPLAY happy_var_1
+	)}
+
+happyReduce_67 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_67 = happySpecReduce_1  2# happyReduction_67
+happyReduction_67 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwETA happy_var_1
+	)}
+
+happyReduce_68 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_68 = happySpecReduce_1  2# happyReduction_68
+happyReduction_68 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHASKELL happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwHASKELL happy_var_1
+	)}
+
+happyReduce_69 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_69 = happySpecReduce_1  2# happyReduction_69
+happyReduction_69 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwIMPORT happy_var_1
+	)}
+
+happyReduce_70 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_70 = happySpecReduce_1  2# happyReduction_70
+happyReduction_70 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT_UHC happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwIMPORT_UHC happy_var_1
+	)}
+
+happyReduce_71 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_71 = happySpecReduce_1  2# happyReduction_71
+happyReduction_71 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwFOREIGN happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwFOREIGN happy_var_1
+	)}
+
+happyReduce_72 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_72 = happySpecReduce_1  2# happyReduction_72
+happyReduction_72 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwCOMPILE happy_var_1
+	)}
+
+happyReduce_73 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_73 = happySpecReduce_1  2# happyReduction_73
+happyReduction_73 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwIMPOSSIBLE happy_var_1
+	)}
+
+happyReduce_74 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_74 = happySpecReduce_1  2# happyReduction_74
+happyReduction_74 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwINJECTIVE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwINJECTIVE happy_var_1
+	)}
+
+happyReduce_75 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_75 = happySpecReduce_1  2# happyReduction_75
+happyReduction_75 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwINLINE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwINLINE happy_var_1
+	)}
+
+happyReduce_76 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_76 = happySpecReduce_1  2# happyReduction_76
+happyReduction_76 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNOINLINE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwNOINLINE happy_var_1
+	)}
+
+happyReduce_77 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_77 = happySpecReduce_1  2# happyReduction_77
+happyReduction_77 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMEASURE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwMEASURE happy_var_1
+	)}
+
+happyReduce_78 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_78 = happySpecReduce_1  2# happyReduction_78
+happyReduction_78 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwNO_TERMINATION_CHECK happy_var_1
+	)}
+
+happyReduce_79 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_79 = happySpecReduce_1  2# happyReduction_79
+happyReduction_79 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNO_POSITIVITY_CHECK happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwNO_POSITIVITY_CHECK happy_var_1
+	)}
+
+happyReduce_80 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_80 = happySpecReduce_1  2# happyReduction_80
+happyReduction_80 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNON_TERMINATING happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwNON_TERMINATING happy_var_1
+	)}
+
+happyReduce_81 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_81 = happySpecReduce_1  2# happyReduction_81
+happyReduction_81 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwOPTIONS happy_var_1
+	)}
+
+happyReduce_82 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_82 = happySpecReduce_1  2# happyReduction_82
+happyReduction_82 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPOLARITY happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwPOLARITY happy_var_1
+	)}
+
+happyReduce_83 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_83 = happySpecReduce_1  2# happyReduction_83
+happyReduction_83 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwREWRITE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwREWRITE happy_var_1
+	)}
+
+happyReduce_84 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_84 = happySpecReduce_1  2# happyReduction_84
+happyReduction_84 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwSTATIC happy_var_1
+	)}
+
+happyReduce_85 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_85 = happySpecReduce_1  2# happyReduction_85
+happyReduction_85 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTERMINATING happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwTERMINATING happy_var_1
+	)}
+
+happyReduce_86 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_86 = happySpecReduce_1  2# happyReduction_86
+happyReduction_86 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWARNING_ON_USAGE happy_var_1) -> 
+	happyIn12
+		 (TokKeyword KwWARNING_ON_USAGE happy_var_1
+	)}
+
+happyReduce_87 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_87 = happySpecReduce_1  2# happyReduction_87
+happyReduction_87 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
+	happyIn12
+		 (TokSetN happy_var_1
+	)}
+
+happyReduce_88 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_88 = happySpecReduce_1  2# happyReduction_88
+happyReduction_88 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> 
+	happyIn12
+		 (TokTeX happy_var_1
+	)}
+
+happyReduce_89 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_89 = happySpecReduce_1  2# happyReduction_89
+happyReduction_89 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> 
+	happyIn12
+		 (TokComment happy_var_1
+	)}
+
+happyReduce_90 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_90 = happySpecReduce_1  2# happyReduction_90
+happyReduction_90 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymEllipsis happy_var_1
+	)}
+
+happyReduce_91 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_91 = happySpecReduce_1  2# happyReduction_91
+happyReduction_91 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymDotDot happy_var_1
+	)}
+
+happyReduce_92 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_92 = happySpecReduce_1  2# happyReduction_92
+happyReduction_92 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymDot happy_var_1
+	)}
+
+happyReduce_93 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_93 = happySpecReduce_1  2# happyReduction_93
+happyReduction_93 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymSemi happy_var_1
+	)}
+
+happyReduce_94 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_94 = happySpecReduce_1  2# happyReduction_94
+happyReduction_94 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymColon happy_var_1
+	)}
+
+happyReduce_95 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_95 = happySpecReduce_1  2# happyReduction_95
+happyReduction_95 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymEqual happy_var_1
+	)}
+
+happyReduce_96 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_96 = happySpecReduce_1  2# happyReduction_96
+happyReduction_96 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymUnderscore happy_var_1
+	)}
+
+happyReduce_97 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_97 = happySpecReduce_1  2# happyReduction_97
+happyReduction_97 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymQuestionMark happy_var_1
+	)}
+
+happyReduce_98 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_98 = happySpecReduce_1  2# happyReduction_98
+happyReduction_98 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymArrow happy_var_1
+	)}
+
+happyReduce_99 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_99 = happySpecReduce_1  2# happyReduction_99
+happyReduction_99 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymLambda happy_var_1
+	)}
+
+happyReduce_100 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_100 = happySpecReduce_1  2# happyReduction_100
+happyReduction_100 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymAs happy_var_1
+	)}
+
+happyReduce_101 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_101 = happySpecReduce_1  2# happyReduction_101
+happyReduction_101 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymBar happy_var_1
+	)}
+
+happyReduce_102 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_102 = happySpecReduce_1  2# happyReduction_102
+happyReduction_102 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymOpenParen happy_var_1
+	)}
+
+happyReduce_103 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_103 = happySpecReduce_1  2# happyReduction_103
+happyReduction_103 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymCloseParen happy_var_1
+	)}
+
+happyReduce_104 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_104 = happySpecReduce_1  2# happyReduction_104
+happyReduction_104 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenIdiomBracket happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymOpenIdiomBracket happy_var_1
+	)}
+
+happyReduce_105 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_105 = happySpecReduce_1  2# happyReduction_105
+happyReduction_105 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseIdiomBracket happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymCloseIdiomBracket happy_var_1
+	)}
+
+happyReduce_106 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_106 = happySpecReduce_1  2# happyReduction_106
+happyReduction_106 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymDoubleOpenBrace happy_var_1
+	)}
+
+happyReduce_107 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_107 = happySpecReduce_1  2# happyReduction_107
+happyReduction_107 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymDoubleCloseBrace happy_var_1
+	)}
+
+happyReduce_108 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_108 = happySpecReduce_1  2# happyReduction_108
+happyReduction_108 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymOpenBrace happy_var_1
+	)}
+
+happyReduce_109 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_109 = happySpecReduce_1  2# happyReduction_109
+happyReduction_109 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymCloseBrace happy_var_1
+	)}
+
+happyReduce_110 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_110 = happySpecReduce_1  2# happyReduction_110
+happyReduction_110 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymOpenVirtualBrace happy_var_1
+	)}
+
+happyReduce_111 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_111 = happySpecReduce_1  2# happyReduction_111
+happyReduction_111 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymCloseVirtualBrace happy_var_1
+	)}
+
+happyReduce_112 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_112 = happySpecReduce_1  2# happyReduction_112
+happyReduction_112 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymVirtualSemi happy_var_1
+	)}
+
+happyReduce_113 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_113 = happySpecReduce_1  2# happyReduction_113
+happyReduction_113 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymOpenPragma happy_var_1
+	)}
+
+happyReduce_114 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_114 = happySpecReduce_1  2# happyReduction_114
+happyReduction_114 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> 
+	happyIn12
+		 (TokSymbol SymClosePragma happy_var_1
+	)}
+
+happyReduce_115 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_115 = happySpecReduce_1  2# happyReduction_115
+happyReduction_115 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	happyIn12
+		 (TokId happy_var_1
+	)}
+
+happyReduce_116 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_116 = happySpecReduce_1  2# happyReduction_116
+happyReduction_116 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
+	happyIn12
+		 (TokQId happy_var_1
+	)}
+
+happyReduce_117 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_117 = happySpecReduce_1  2# happyReduction_117
+happyReduction_117 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	happyIn12
+		 (TokString happy_var_1
+	)}
+
+happyReduce_118 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_118 = happySpecReduce_1  2# happyReduction_118
+happyReduction_118 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	happyIn12
+		 (TokLiteral happy_var_1
+	)}
+
+happyReduce_119 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_119 = happySpecReduce_3  3# happyReduction_119
+happyReduction_119 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut135 happy_x_2 of { happy_var_2 -> 
+	happyIn13
+		 (takeOptionsPragmas happy_var_2
+	)}
+
+happyReduce_120 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_120 = happySpecReduce_0  4# happyReduction_120
+happyReduction_120  =  happyIn14
+		 (()
+	)
+
+happyReduce_121 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_121 = happySpecReduce_1  4# happyReduction_121
+happyReduction_121 happy_x_1
+	 =  happyIn14
+		 (()
+	)
+
+happyReduce_122 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_122 = happySpecReduce_1  5# happyReduction_122
+happyReduction_122 happy_x_1
+	 =  happyIn15
+		 (()
+	)
+
+happyReduce_123 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_123 = happyMonadReduce 1# 5# happyReduction_123
+happyReduction_123 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((( popContext))
+	) (\r -> happyReturn (happyIn15 r))
+
+happyReduce_124 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_124 = happySpecReduce_1  6# happyReduction_124
+happyReduction_124 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> 
+	happyIn16
+		 (happy_var_1
+	)}
+
+happyReduce_125 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_125 = happySpecReduce_1  6# happyReduction_125
+happyReduction_125 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> 
+	happyIn16
+		 (happy_var_1
+	)}
+
+happyReduce_126 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_126 = happyMonadReduce 0# 7# happyReduction_126
+happyReduction_126 (happyRest) tk
+	 = happyThen ((( pushLexState imp_dir))
+	) (\r -> happyReturn (happyIn17 r))
+
+happyReduce_127 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_127 = happyMonadReduce 1# 8# happyReduction_127
+happyReduction_127 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	( case happy_var_1 of {
+                     LitNat _ i -> return i;
+                     _          -> fail $ "Expected integer"
+                   })})
+	) (\r -> happyReturn (happyIn18 r))
+
+happyReduce_128 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_128 = happyMonadReduce 1# 9# happyReduction_128
+happyReduction_128 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	( mkName happy_var_1)})
+	) (\r -> happyReturn (happyIn19 r))
+
+happyReduce_129 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_129 = happySpecReduce_2  10# happyReduction_129
+happyReduction_129 happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	case happyOut20 happy_x_2 of { happy_var_2 -> 
+	happyIn20
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_130 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_130 = happySpecReduce_1  10# happyReduction_130
+happyReduction_130 happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	happyIn20
+		 ([happy_var_1]
+	)}
+
+happyReduce_131 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_131 = happySpecReduce_1  11# happyReduction_131
+happyReduction_131 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> 
+	happyIn21
+		 (getRange happy_var_1
+	)}
+
+happyReduce_132 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_132 = happyMonadReduce 2# 11# happyReduction_132
+happyReduction_132 (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 (happyIn21 r))
+
+happyReduce_133 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_133 = happySpecReduce_2  12# happyReduction_133
+happyReduction_133 happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn22
+		 (setRelevance NonStrict $ defaultArg happy_var_2
+	)}
+
+happyReduce_134 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_134 = happySpecReduce_2  12# happyReduction_134
+happyReduction_134 happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn22
+		 (setRelevance Irrelevant $ defaultArg happy_var_2
+	)}
+
+happyReduce_135 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_135 = happySpecReduce_1  12# happyReduction_135
+happyReduction_135 happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	happyIn22
+		 (defaultArg happy_var_1
+	)}
+
+happyReduce_136 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_136 = happySpecReduce_2  13# happyReduction_136
+happyReduction_136 happy_x_2
+	happy_x_1
+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
+	case happyOut23 happy_x_2 of { happy_var_2 -> 
+	happyIn23
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_137 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_137 = happySpecReduce_1  13# happyReduction_137
+happyReduction_137 happy_x_1
+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
+	happyIn23
+		 ([happy_var_1]
+	)}
+
+happyReduce_138 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_138 = happySpecReduce_2  14# happyReduction_138
+happyReduction_138 happy_x_2
+	happy_x_1
+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
+	case happyOut24 happy_x_2 of { happy_var_2 -> 
+	happyIn24
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_139 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_139 = happySpecReduce_1  14# happyReduction_139
+happyReduction_139 happy_x_1
+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
+	happyIn24
+		 ([happy_var_1]
+	)}
+
+happyReduce_140 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_140 = happyReduce 4# 14# happyReduction_140
+happyReduction_140 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut23 happy_x_2 of { happy_var_2 -> 
+	case happyOut24 happy_x_4 of { happy_var_4 -> 
+	happyIn24
+		 (map makeInstance happy_var_2 ++ happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_141 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_141 = happySpecReduce_3  14# happyReduction_141
+happyReduction_141 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> 
+	happyIn24
+		 (map makeInstance happy_var_2
+	)}
+
+happyReduce_142 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_142 = happyReduce 4# 14# happyReduction_142
+happyReduction_142 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut23 happy_x_2 of { happy_var_2 -> 
+	case happyOut24 happy_x_4 of { happy_var_4 -> 
+	happyIn24
+		 (map hide happy_var_2 ++ happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_143 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_143 = happySpecReduce_3  14# happyReduction_143
+happyReduction_143 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> 
+	happyIn24
+		 (map hide happy_var_2
+	)}
+
+happyReduce_144 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_144 = happyReduce 5# 14# happyReduction_144
+happyReduction_144 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut20 happy_x_3 of { happy_var_3 -> 
+	case happyOut24 happy_x_5 of { happy_var_5 -> 
+	happyIn24
+		 (map (hide . setRelevance Irrelevant . defaultArg) happy_var_3 ++ happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_145 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_145 = happyReduce 4# 14# happyReduction_145
+happyReduction_145 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut20 happy_x_3 of { happy_var_3 -> 
+	happyIn24
+		 (map (hide . setRelevance Irrelevant . defaultArg) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_146 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_146 = happyReduce 5# 14# happyReduction_146
+happyReduction_146 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut20 happy_x_3 of { happy_var_3 -> 
+	case happyOut24 happy_x_5 of { happy_var_5 -> 
+	happyIn24
+		 (map (makeInstance . setRelevance Irrelevant . defaultArg) happy_var_3 ++ happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_147 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_147 = happyReduce 4# 14# happyReduction_147
+happyReduction_147 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut20 happy_x_3 of { happy_var_3 -> 
+	happyIn24
+		 (map (makeInstance . setRelevance Irrelevant . defaultArg) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_148 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_148 = happyReduce 5# 14# 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 happyOut20 happy_x_3 of { happy_var_3 -> 
+	case happyOut24 happy_x_5 of { happy_var_5 -> 
+	happyIn24
+		 (map (hide . setRelevance NonStrict . defaultArg) happy_var_3 ++ happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_149 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_149 = happyReduce 4# 14# happyReduction_149
+happyReduction_149 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut20 happy_x_3 of { happy_var_3 -> 
+	happyIn24
+		 (map (hide . setRelevance NonStrict . defaultArg) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_150 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_150 = happyReduce 5# 14# happyReduction_150
+happyReduction_150 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut20 happy_x_3 of { happy_var_3 -> 
+	case happyOut24 happy_x_5 of { happy_var_5 -> 
+	happyIn24
+		 (map (makeInstance . setRelevance NonStrict . defaultArg) happy_var_3 ++ happy_var_5
+	) `HappyStk` happyRest}}
+
+happyReduce_151 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_151 = happyReduce 4# 14# happyReduction_151
+happyReduction_151 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut20 happy_x_3 of { happy_var_3 -> 
+	happyIn24
+		 (map (makeInstance . setRelevance NonStrict . defaultArg) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_152 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_152 = happyMonadReduce 1# 15# happyReduction_152
+happyReduction_152 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> 
+	( mkQName happy_var_1)})
+	) (\r -> happyReturn (happyIn25 r))
+
+happyReduce_153 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_153 = happySpecReduce_1  15# happyReduction_153
+happyReduction_153 happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	happyIn25
+		 (QName happy_var_1
+	)}
+
+happyReduce_154 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_154 = happySpecReduce_1  16# happyReduction_154
+happyReduction_154 happy_x_1
+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
+	happyIn26
+		 (happy_var_1
+	)}
+
+happyReduce_155 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_155 = happySpecReduce_1  17# happyReduction_155
+happyReduction_155 happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	happyIn27
+		 (happy_var_1
+	)}
+
+happyReduce_156 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_156 = happySpecReduce_1  17# happyReduction_156
+happyReduction_156 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn27
+		 (Name (getRange happy_var_1) [Hole]
+	)}
+
+happyReduce_157 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_157 = happySpecReduce_2  18# happyReduction_157
+happyReduction_157 happy_x_2
+	happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	case happyOut28 happy_x_2 of { happy_var_2 -> 
+	happyIn28
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_158 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_158 = happySpecReduce_1  18# happyReduction_158
+happyReduction_158 happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	happyIn28
+		 ([happy_var_1]
+	)}
+
+happyReduce_159 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_159 = happySpecReduce_1  19# happyReduction_159
+happyReduction_159 happy_x_1
+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
+	happyIn29
+		 (case happy_var_1 of
+      Left ns -> ns
+      Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"
+	)}
+
+happyReduce_160 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_160 = happyMonadReduce 1# 20# happyReduction_160
+happyReduction_160 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut42 happy_x_1 of { happy_var_1 -> 
+	(
+    let getName :: Expr -> Maybe Name
+        getName (Ident (QName x)) = Just x
+        getName (Underscore r _)  = Just (Name r [Hole])
+        getName _                 = Nothing
+
+        isAbsurd :: Expr -> Bool
+        isAbsurd (Absurd _)                  = True
+        isAbsurd (HiddenArg _ (Named _ e))   = isAbsurd e
+        isAbsurd (InstanceArg _ (Named _ e)) = isAbsurd e
+        isAbsurd (Paren _ expr)              = isAbsurd expr
+        isAbsurd (RawApp _ exprs)            = any isAbsurd exprs
+        isAbsurd _                           = False
+    in
+    if any isAbsurd happy_var_1 then return $ Right happy_var_1 else
+    case mapM getName happy_var_1 of
+        Just good -> return $ Left good
+        Nothing   -> fail $ "expected sequence of bound identifiers")})
+	) (\r -> happyReturn (happyIn30 r))
+
+happyReduce_161 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_161 = happyMonadReduce 1# 21# happyReduction_161
+happyReduction_161 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut42 happy_x_1 of { happy_var_1 -> 
+	(
+    let -- interpret an expression as name
+        getName :: Expr -> Maybe Name
+        getName (Ident (QName x)) = Just x
+        getName (Underscore r _)  = Just (Name r [Hole])
+        getName _                 = Nothing
+
+        getNames :: Expr -> Maybe [Name]
+        getNames (RawApp _ es) = mapM getName es
+        getNames e             = singleton `fmap` getName e
+
+        -- interpret an expression as name or list of hidden names
+        getName1 :: Expr -> Maybe [WithHiding Name]
+        getName1 (Ident (QName x)) = Just [WithHiding NotHidden x]
+        getName1 (Underscore r _)  = Just [WithHiding NotHidden $ Name r [Hole]]
+        getName1 (HiddenArg _ (Named Nothing e))
+                                   = map (WithHiding Hidden) `fmap` getNames e
+        getName1 _                 = Nothing
+
+    in
+    case mapM getName1 happy_var_1 of
+        Just good -> return $ concat good
+        Nothing   -> fail $ "expected sequence of possibly hidden bound identifiers")})
+	) (\r -> happyReturn (happyIn31 r))
+
+happyReduce_162 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_162 = happySpecReduce_0  22# happyReduction_162
+happyReduction_162  =  happyIn32
+		 ([]
+	)
+
+happyReduce_163 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_163 = happySpecReduce_2  22# happyReduction_163
+happyReduction_163 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	case happyOut32 happy_x_2 of { happy_var_2 -> 
+	happyIn32
+		 (snd happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_164 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_164 = happySpecReduce_1  23# happyReduction_164
+happyReduction_164 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	happyIn33
+		 (snd happy_var_1
+	)}
+
+happyReduce_165 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_165 = happySpecReduce_0  24# happyReduction_165
+happyReduction_165  =  happyIn34
+		 ([]
+	)
+
+happyReduce_166 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_166 = happySpecReduce_2  24# happyReduction_166
+happyReduction_166 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	case happyOut34 happy_x_2 of { happy_var_2 -> 
+	happyIn34
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_167 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_167 = happySpecReduce_0  25# happyReduction_167
+happyReduction_167  =  happyIn35
+		 ([]
+	)
+
+happyReduce_168 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_168 = happySpecReduce_2  25# happyReduction_168
+happyReduction_168 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	case happyOut35 happy_x_2 of { happy_var_2 -> 
+	happyIn35
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_169 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_169 = happyReduce 4# 25# happyReduction_169
+happyReduction_169 (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 happyOut35 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
+	case happyOut35 happy_x_4 of { happy_var_4 -> 
+	happyIn35
+		 ([(happy_var_1, "{-#")] ++ happy_var_2 ++ [(happy_var_3, "#-}")] ++ happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_170 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_170 = happyMonadReduce 1# 26# happyReduction_170
+happyReduction_170 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	( mkName happy_var_1)})
+	) (\r -> happyReturn (happyIn36 r))
+
+happyReduce_171 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_171 = happyMonadReduce 1# 27# happyReduction_171
+happyReduction_171 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	( pragmaQName happy_var_1)})
+	) (\r -> happyReturn (happyIn37 r))
+
+happyReduce_172 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_172 = happyMonadReduce 1# 28# happyReduction_172
+happyReduction_172 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut34 happy_x_1 of { happy_var_1 -> 
+	( mapM pragmaQName happy_var_1)})
+	) (\r -> happyReturn (happyIn38 r))
+
+happyReduce_173 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_173 = happySpecReduce_2  29# happyReduction_173
+happyReduction_173 happy_x_2
+	happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	case happyOut39 happy_x_2 of { happy_var_2 -> 
+	happyIn39
+		 (Pi happy_var_1 happy_var_2
+	)}}
+
+happyReduce_174 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_174 = happySpecReduce_3  29# happyReduction_174
+happyReduction_174 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymArrow happy_var_2) -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn39
+		 (Fun (getRange (happy_var_1,happy_var_2,happy_var_3))
+                                              (RawApp (getRange happy_var_1) happy_var_1)
+                                              happy_var_3
+	)}}}
+
+happyReduce_175 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_175 = happySpecReduce_3  29# happyReduction_175
+happyReduction_175 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymEqual happy_var_2) -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn39
+		 (Equal (getRange (happy_var_1, happy_var_2, happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_176 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_176 = happySpecReduce_1  29# happyReduction_176
+happyReduction_176 happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	happyIn39
+		 (happy_var_1
+	)}
+
+happyReduce_177 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_177 = happyMonadReduce 1# 30# happyReduction_177
+happyReduction_177 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut41 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 (happyIn40 r))
+
+happyReduce_178 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_178 = happySpecReduce_3  31# happyReduction_178
+happyReduction_178 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
+	case happyOut41 happy_x_3 of { happy_var_3 -> 
+	happyIn41
+		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3
+	)}}
+
+happyReduce_179 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_179 = happySpecReduce_1  31# happyReduction_179
+happyReduction_179 happy_x_1
+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
+	happyIn41
+		 ([RawApp (getRange happy_var_1) happy_var_1]
+	)}
+
+happyReduce_180 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_180 = happySpecReduce_1  32# happyReduction_180
+happyReduction_180 happy_x_1
+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
+	happyIn42
+		 ([happy_var_1]
+	)}
+
+happyReduce_181 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_181 = happySpecReduce_2  32# happyReduction_181
+happyReduction_181 happy_x_2
+	happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	case happyOut42 happy_x_2 of { happy_var_2 -> 
+	happyIn42
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_182 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_182 = happySpecReduce_3  33# happyReduction_182
+happyReduction_182 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	case happyOut64 happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn43
+		 (Lam (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2 happy_var_3
+	)}}}
+
+happyReduce_183 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_183 = happySpecReduce_1  33# happyReduction_183
+happyReduction_183 happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	happyIn43
+		 (happy_var_1
+	)}
+
+happyReduce_184 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_184 = happySpecReduce_3  33# happyReduction_184
+happyReduction_184 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut73 happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn43
+		 (forallPi happy_var_2 happy_var_3
+	)}}
+
+happyReduce_185 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_185 = happySpecReduce_3  33# happyReduction_185
+happyReduction_185 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> 
+	case happyOut179 happy_x_2 of { happy_var_2 -> 
+	case happyOut44 happy_x_3 of { happy_var_3 -> 
+	happyIn43
+		 (Let (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2 happy_var_3
+	)}}}
+
+happyReduce_186 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_186 = happyReduce 4# 33# happyReduction_186
+happyReduction_186 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwDo happy_var_1) -> 
+	case happyOut78 happy_x_3 of { happy_var_3 -> 
+	happyIn43
+		 (DoBlock (getRange (happy_var_1, happy_var_3)) happy_var_3
+	) `HappyStk` happyRest}}
+
+happyReduce_187 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_187 = happySpecReduce_1  33# happyReduction_187
+happyReduction_187 happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	happyIn43
+		 (happy_var_1
+	)}
+
+happyReduce_188 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_188 = happyReduce 4# 33# happyReduction_188
+happyReduction_188 (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 happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokKeyword KwIn happy_var_3) -> 
+	case happyOut39 happy_x_4 of { happy_var_4 -> 
+	happyIn43
+		 (QuoteGoal (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_189 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_189 = happySpecReduce_2  33# happyReduction_189
+happyReduction_189 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn43
+		 (Tactic (getRange (happy_var_1, happy_var_2)) (RawApp (getRange happy_var_2) happy_var_2) []
+	)}}
+
+happyReduce_190 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_190 = happyReduce 4# 33# happyReduction_190
+happyReduction_190 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymBar happy_var_3) -> 
+	case happyOut41 happy_x_4 of { happy_var_4 -> 
+	happyIn43
+		 (Tactic (getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4)) (RawApp (getRange happy_var_2) happy_var_2) happy_var_4
+	) `HappyStk` happyRest}}}}
+
+happyReduce_191 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_191 = happySpecReduce_2  34# happyReduction_191
+happyReduction_191 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> 
+	happyIn44
+		 (Just happy_var_2
+	)}
+
+happyReduce_192 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_192 = happySpecReduce_0  34# happyReduction_192
+happyReduction_192  =  happyIn44
+		 (Nothing
+	)
+
+happyReduce_193 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_193 = happyReduce 4# 35# happyReduction_193
+happyReduction_193 (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 happyOut71 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn45
+		 (ExtendedLam (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) (reverse happy_var_3)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_194 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_194 = happyReduce 5# 35# happyReduction_194
+happyReduction_194 (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 SymLambda happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwWhere happy_var_2) -> 
+	case happyOut72 happy_x_4 of { happy_var_4 -> 
+	happyIn45
+		 (ExtendedLam (getRange (happy_var_1, happy_var_2, happy_var_4)) (reverse happy_var_4)
+	) `HappyStk` happyRest}}}
+
+happyReduce_195 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_195 = happyMonadReduce 2# 35# happyReduction_195
+happyReduction_195 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> 
+	case happyOut65 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)
+                                                                     [LamClause (p [] []) AbsurdRHS NoWhere False])}})
+	) (\r -> happyReturn (happyIn45 r))
+
+happyReduce_196 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_196 = happySpecReduce_1  36# happyReduction_196
+happyReduction_196 happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	happyIn46
+		 ([happy_var_1]
+	)}
+
+happyReduce_197 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_197 = happySpecReduce_2  36# happyReduction_197
+happyReduction_197 happy_x_2
+	happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn46
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_198 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_198 = happySpecReduce_0  37# happyReduction_198
+happyReduction_198  =  happyIn47
+		 ([]
+	)
+
+happyReduce_199 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_199 = happySpecReduce_2  37# happyReduction_199
+happyReduction_199 happy_x_2
+	happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	case happyOut47 happy_x_2 of { happy_var_2 -> 
+	happyIn47
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_200 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_200 = happySpecReduce_3  38# happyReduction_200
+happyReduction_200 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOut39 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
+	happyIn48
+		 (HiddenArg (getRange (happy_var_1,happy_var_2,happy_var_3)) (maybeNamed happy_var_2)
+	)}}}
+
+happyReduce_201 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_201 = happySpecReduce_2  38# happyReduction_201
+happyReduction_201 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) -> 
+	happyIn48
+		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r
+	)}}
+
+happyReduce_202 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_202 = happySpecReduce_1  39# happyReduction_202
+happyReduction_202 happy_x_1
+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
+	happyIn49
+		 (Ident happy_var_1
+	)}
+
+happyReduce_203 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_203 = happySpecReduce_1  39# happyReduction_203
+happyReduction_203 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> 
+	happyIn49
+		 (Lit happy_var_1
+	)}
+
+happyReduce_204 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_204 = happySpecReduce_1  39# happyReduction_204
+happyReduction_204 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> 
+	happyIn49
+		 (QuestionMark (getRange happy_var_1) Nothing
+	)}
+
+happyReduce_205 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_205 = happySpecReduce_1  39# happyReduction_205
+happyReduction_205 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn49
+		 (Underscore (getRange happy_var_1) Nothing
+	)}
+
+happyReduce_206 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_206 = happySpecReduce_1  39# happyReduction_206
+happyReduction_206 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> 
+	happyIn49
+		 (Prop (getRange happy_var_1)
+	)}
+
+happyReduce_207 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_207 = happySpecReduce_1  39# happyReduction_207
+happyReduction_207 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> 
+	happyIn49
+		 (Set (getRange happy_var_1)
+	)}
+
+happyReduce_208 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_208 = happySpecReduce_1  39# happyReduction_208
+happyReduction_208 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> 
+	happyIn49
+		 (Quote (getRange happy_var_1)
+	)}
+
+happyReduce_209 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_209 = happySpecReduce_1  39# happyReduction_209
+happyReduction_209 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> 
+	happyIn49
+		 (QuoteTerm (getRange happy_var_1)
+	)}
+
+happyReduce_210 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_210 = happySpecReduce_1  39# happyReduction_210
+happyReduction_210 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> 
+	happyIn49
+		 (QuoteContext (getRange happy_var_1)
+	)}
+
+happyReduce_211 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_211 = happySpecReduce_1  39# happyReduction_211
+happyReduction_211 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> 
+	happyIn49
+		 (Unquote (getRange happy_var_1)
+	)}
+
+happyReduce_212 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_212 = happySpecReduce_1  39# happyReduction_212
+happyReduction_212 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> 
+	happyIn49
+		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)
+	)}
+
+happyReduce_213 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_213 = happySpecReduce_3  39# happyReduction_213
+happyReduction_213 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	case happyOut39 happy_x_2 of { happy_var_2 -> 
+	case happyOut21 happy_x_3 of { happy_var_3 -> 
+	happyIn49
+		 (InstanceArg (getRange (happy_var_1,happy_var_2,happy_var_3))
+                                                          (maybeNamed happy_var_2)
+	)}}}
+
+happyReduce_214 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_214 = happySpecReduce_3  39# happyReduction_214
+happyReduction_214 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOut39 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
+	happyIn49
+		 (Paren (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2
+	)}}}
+
+happyReduce_215 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_215 = happySpecReduce_3  39# happyReduction_215
+happyReduction_215 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenIdiomBracket happy_var_1) -> 
+	case happyOut39 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseIdiomBracket happy_var_3) -> 
+	happyIn49
+		 (IdiomBrackets (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2
+	)}}}
+
+happyReduce_216 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_216 = happySpecReduce_2  39# happyReduction_216
+happyReduction_216 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) -> 
+	happyIn49
+		 (Absurd (fuseRange happy_var_1 happy_var_2)
+	)}}
+
+happyReduce_217 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_217 = happySpecReduce_2  39# happyReduction_217
+happyReduction_217 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	case happyOut21 happy_x_2 of { happy_var_2 -> 
+	happyIn49
+		 (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r
+	)}}
+
+happyReduce_218 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_218 = happySpecReduce_3  39# happyReduction_218
+happyReduction_218 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymAs happy_var_2) -> 
+	case happyOut50 happy_x_3 of { happy_var_3 -> 
+	happyIn49
+		 (As (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_1 happy_var_3
+	)}}}
+
+happyReduce_219 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_219 = happySpecReduce_2  39# happyReduction_219
+happyReduction_219 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> 
+	case happyOut50 happy_x_2 of { happy_var_2 -> 
+	happyIn49
+		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_220 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_220 = happyReduce 4# 39# happyReduction_220
+happyReduction_220 (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 happyOut51 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn49
+		 (Rec (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_221 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_221 = happyReduce 5# 39# happyReduction_221
+happyReduction_221 (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 happyOut49 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymOpenBrace happy_var_3) -> 
+	case happyOut55 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> 
+	happyIn49
+		 (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_222 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_222 = happySpecReduce_1  39# happyReduction_222
+happyReduction_222 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> 
+	happyIn49
+		 (Ellipsis (getRange happy_var_1)
+	)}
+
+happyReduce_223 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_223 = happySpecReduce_1  40# happyReduction_223
+happyReduction_223 happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (happy_var_1
+	)}
+
+happyReduce_224 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_224 = happySpecReduce_1  40# happyReduction_224
+happyReduction_224 happy_x_1
+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> 
+	happyIn50
+		 (happy_var_1
+	)}
+
+happyReduce_225 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_225 = happySpecReduce_0  41# happyReduction_225
+happyReduction_225  =  happyIn51
+		 ([]
+	)
+
+happyReduce_226 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_226 = happySpecReduce_1  41# happyReduction_226
+happyReduction_226 happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	happyIn51
+		 (happy_var_1
+	)}
+
+happyReduce_227 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_227 = happySpecReduce_1  42# happyReduction_227
+happyReduction_227 happy_x_1
+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
+	happyIn52
+		 ([happy_var_1]
+	)}
+
+happyReduce_228 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_228 = happySpecReduce_3  42# happyReduction_228
+happyReduction_228 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 -> 
+	happyIn52
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_229 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_229 = happySpecReduce_1  43# happyReduction_229
+happyReduction_229 happy_x_1
+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
+	happyIn53
+		 (Left  happy_var_1
+	)}
+
+happyReduce_230 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_230 = happySpecReduce_1  43# happyReduction_230
+happyReduction_230 happy_x_1
+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
+	happyIn53
+		 (Right happy_var_1
+	)}
+
+happyReduce_231 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_231 = happySpecReduce_3  44# happyReduction_231
+happyReduction_231 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
+	case happyOut130 happy_x_2 of { happy_var_2 -> 
+	case happyOut81 happy_x_3 of { happy_var_3 -> 
+	happyIn54
+		 (ModuleAssignment happy_var_1 happy_var_2 happy_var_3
+	)}}}
+
+happyReduce_232 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_232 = happySpecReduce_0  45# happyReduction_232
+happyReduction_232  =  happyIn55
+		 ([]
+	)
+
+happyReduce_233 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_233 = happySpecReduce_1  45# happyReduction_233
+happyReduction_233 happy_x_1
+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
+	happyIn55
+		 (happy_var_1
+	)}
+
+happyReduce_234 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_234 = happySpecReduce_1  46# happyReduction_234
+happyReduction_234 happy_x_1
+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
+	happyIn56
+		 ([happy_var_1]
+	)}
+
+happyReduce_235 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_235 = happySpecReduce_3  46# happyReduction_235
+happyReduction_235 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
+	case happyOut56 happy_x_3 of { happy_var_3 -> 
+	happyIn56
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_236 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_236 = happySpecReduce_3  47# happyReduction_236
+happyReduction_236 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn57
+		 (FieldAssignment happy_var_1 happy_var_3
+	)}}
+
+happyReduce_237 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_237 = happySpecReduce_2  48# happyReduction_237
+happyReduction_237 happy_x_2
+	happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	happyIn58
+		 (happy_var_1
+	)}
+
+happyReduce_238 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_238 = happySpecReduce_1  49# happyReduction_238
+happyReduction_238 happy_x_1
+	 =  case happyOut60 happy_x_1 of { happy_var_1 -> 
+	happyIn59
+		 ({-TeleBind-} happy_var_1
+	)}
+
+happyReduce_239 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_239 = happySpecReduce_2  50# happyReduction_239
+happyReduction_239 happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	case happyOut60 happy_x_2 of { happy_var_2 -> 
+	happyIn60
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_240 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_240 = happySpecReduce_1  50# happyReduction_240
+happyReduction_240 happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	happyIn60
+		 ([happy_var_1]
+	)}
+
+happyReduce_241 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_241 = happyReduce 4# 51# happyReduction_241
+happyReduction_241 (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 happyOut63 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn61
+		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $
+                             setRelevance Irrelevant happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_242 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_242 = happyReduce 4# 51# happyReduction_242
+happyReduction_242 (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 happyOut62 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn61
+		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $
+                             setHiding Hidden $
+                             setRelevance Irrelevant happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_243 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_243 = happyReduce 4# 51# happyReduction_243
+happyReduction_243 (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 happyOut62 happy_x_3 of { happy_var_3 -> 
+	case happyOut21 happy_x_4 of { happy_var_4 -> 
+	happyIn61
+		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $
+                             makeInstance $
+                             setRelevance Irrelevant happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_244 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_244 = happyReduce 4# 51# happyReduction_244
+happyReduction_244 (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 happyOut63 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn61
+		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $
+                             setRelevance NonStrict happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_245 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_245 = happyReduce 4# 51# happyReduction_245
+happyReduction_245 (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 happyOut62 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> 
+	happyIn61
+		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $
+                             setHiding Hidden $
+                             setRelevance NonStrict happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_246 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_246 = happyReduce 4# 51# happyReduction_246
+happyReduction_246 (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 happyOut62 happy_x_3 of { happy_var_3 -> 
+	case happyOut21 happy_x_4 of { happy_var_4 -> 
+	happyIn61
+		 (setRange (getRange (happy_var_2,happy_var_3,happy_var_4)) $
+                             makeInstance $
+                             setRelevance NonStrict happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_247 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_247 = happySpecReduce_3  51# happyReduction_247
+happyReduction_247 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOut63 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
+	happyIn61
+		 (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) happy_var_2
+	)}}}
+
+happyReduce_248 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_248 = happySpecReduce_3  51# happyReduction_248
+happyReduction_248 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> 
+	case happyOut62 happy_x_2 of { happy_var_2 -> 
+	case happyOut21 happy_x_3 of { happy_var_3 -> 
+	happyIn61
+		 (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) $
+                             makeInstance happy_var_2
+	)}}}
+
+happyReduce_249 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_249 = happySpecReduce_3  51# happyReduction_249
+happyReduction_249 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> 
+	case happyOut62 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> 
+	happyIn61
+		 (setRange (getRange (happy_var_1,happy_var_2,happy_var_3)) $
+                             setHiding Hidden happy_var_2
+	)}}}
+
+happyReduce_250 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_250 = happySpecReduce_3  51# happyReduction_250
+happyReduction_250 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOut129 happy_x_2 of { happy_var_2 -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
+	happyIn61
+		 (tLet (getRange (happy_var_1,happy_var_3)) happy_var_2
+	)}}}
+
+happyReduce_251 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_251 = happyReduce 4# 51# happyReduction_251
+happyReduction_251 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> 
+	case happyOut179 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn61
+		 (tLet (getRange (happy_var_1,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}
+
+happyReduce_252 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_252 = happySpecReduce_3  52# happyReduction_252
+happyReduction_252 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn62
+		 (let r = getRange (happy_var_1,happy_var_2,happy_var_3) -- the range is approximate only for TypedBindings
+    in TypedBindings r $ defaultArg $ TBind r (map (pure . mkBoundName_) happy_var_1) happy_var_3
+	)}}}
+
+happyReduce_253 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_253 = happySpecReduce_3  53# happyReduction_253
+happyReduction_253 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymColon happy_var_2) -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn63
+		 (let r = getRange (happy_var_1,happy_var_2,happy_var_3) -- the range is approximate only for TypedBindings
+    in TypedBindings r $ defaultArg $ TBind r (map (fmap mkBoundName_) happy_var_1) happy_var_3
+	)}}}
+
+happyReduce_254 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_254 = happyMonadReduce 2# 54# happyReduction_254
+happyReduction_254 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut66 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 (happyIn64 r))
+
+happyReduce_255 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_255 = happyMonadReduce 1# 55# happyReduction_255
+happyReduction_255 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut67 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)
+                   _           -> parseError "Unsupported variant of lambda"
+      Right es -> return $ Right es)})
+	) (\r -> happyReturn (happyIn65 r))
+
+happyReduce_256 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_256 = happySpecReduce_2  56# happyReduction_256
+happyReduction_256 happy_x_2
+	happy_x_1
+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
+	case happyOut66 happy_x_2 of { happy_var_2 -> 
+	happyIn66
+		 (map Right happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_257 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_257 = happySpecReduce_2  56# happyReduction_257
+happyReduction_257 happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	case happyOut66 happy_x_2 of { happy_var_2 -> 
+	happyIn66
+		 (Right (DomainFull happy_var_1) : happy_var_2
+	)}}
+
+happyReduce_258 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_258 = happySpecReduce_1  56# happyReduction_258
+happyReduction_258 happy_x_1
+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
+	happyIn66
+		 (map Right happy_var_1
+	)}
+
+happyReduce_259 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_259 = happySpecReduce_1  56# happyReduction_259
+happyReduction_259 happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	happyIn66
+		 ([Right $ DomainFull happy_var_1]
+	)}
+
+happyReduce_260 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_260 = happySpecReduce_2  56# happyReduction_260
+happyReduction_260 happy_x_2
+	happy_x_1
+	 =  happyIn66
+		 ([Left NotHidden]
+	)
+
+happyReduce_261 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_261 = happySpecReduce_2  56# happyReduction_261
+happyReduction_261 happy_x_2
+	happy_x_1
+	 =  happyIn66
+		 ([Left Hidden]
+	)
+
+happyReduce_262 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_262 = happySpecReduce_2  56# happyReduction_262
+happyReduction_262 happy_x_2
+	happy_x_1
+	 =  happyIn66
+		 ([Left (Instance NoOverlap)]
+	)
+
+happyReduce_263 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_263 = happySpecReduce_2  57# happyReduction_263
+happyReduction_263 happy_x_2
+	happy_x_1
+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
+	case happyOut66 happy_x_2 of { happy_var_2 -> 
+	happyIn67
+		 (Left $ map Right happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_264 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_264 = happySpecReduce_2  57# happyReduction_264
+happyReduction_264 happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	case happyOut66 happy_x_2 of { happy_var_2 -> 
+	happyIn67
+		 (Left $ Right (DomainFull happy_var_1) : happy_var_2
+	)}}
+
+happyReduce_265 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_265 = happySpecReduce_1  57# happyReduction_265
+happyReduction_265 happy_x_1
+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> 
+	happyIn67
+		 (case happy_var_1 of
+                                    Left lb -> Left $ map Right lb
+                                    Right es -> Right es
+	)}
+
+happyReduce_266 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_266 = happySpecReduce_1  57# happyReduction_266
+happyReduction_266 happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	happyIn67
+		 (Left [Right $ DomainFull happy_var_1]
+	)}
+
+happyReduce_267 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_267 = happySpecReduce_2  57# happyReduction_267
+happyReduction_267 happy_x_2
+	happy_x_1
+	 =  happyIn67
+		 (Left [Left NotHidden]
+	)
+
+happyReduce_268 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_268 = happySpecReduce_2  57# happyReduction_268
+happyReduction_268 happy_x_2
+	happy_x_1
+	 =  happyIn67
+		 (Left [Left Hidden]
+	)
+
+happyReduce_269 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_269 = happySpecReduce_2  57# happyReduction_269
+happyReduction_269 happy_x_2
+	happy_x_1
+	 =  happyIn67
+		 (Left [Left (Instance NoOverlap)]
+	)
+
+happyReduce_270 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_270 = happyMonadReduce 3# 58# happyReduction_270
+happyReduction_270 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut47 happy_x_1 of { happy_var_1 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	( do
+      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;
+      return LamClause{ lamLHS      = p [] []
+                      , lamRHS      = RHS happy_var_3
+                      , lamWhere    = NoWhere
+                      , lamCatchAll = False })}})
+	) (\r -> happyReturn (happyIn68 r))
+
+happyReduce_271 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_271 = happyMonadReduce 4# 58# happyReduction_271
+happyReduction_271 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut47 happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_4 of { happy_var_4 -> 
+	( do
+      p <- exprToLHS (RawApp (getRange happy_var_2) happy_var_2) ;
+      return LamClause{ lamLHS      = p [] []
+                      , lamRHS      = RHS happy_var_4
+                      , lamWhere    = NoWhere
+                      , lamCatchAll = True })}})
+	) (\r -> happyReturn (happyIn68 r))
+
+happyReduce_272 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_272 = happyMonadReduce 1# 59# happyReduction_272
+happyReduction_272 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut42 happy_x_1 of { happy_var_1 -> 
+	( do
+      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);
+      return LamClause{ lamLHS      = p [] []
+                      , lamRHS      = AbsurdRHS
+                      , lamWhere    = NoWhere
+                      , lamCatchAll = False })})
+	) (\r -> happyReturn (happyIn69 r))
+
+happyReduce_273 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_273 = happyMonadReduce 2# 59# happyReduction_273
+happyReduction_273 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut42 happy_x_2 of { happy_var_2 -> 
+	( do
+      p <- exprToLHS (RawApp (getRange happy_var_2) happy_var_2);
+      return LamClause{ lamLHS      = p [] []
+                      , lamRHS      = AbsurdRHS
+                      , lamWhere    = NoWhere
+                      , lamCatchAll = True })})
+	) (\r -> happyReturn (happyIn69 r))
+
+happyReduce_274 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_274 = happySpecReduce_1  60# happyReduction_274
+happyReduction_274 happy_x_1
+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
+	happyIn70
+		 (happy_var_1
+	)}
+
+happyReduce_275 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_275 = happySpecReduce_1  60# happyReduction_275
+happyReduction_275 happy_x_1
+	 =  case happyOut69 happy_x_1 of { happy_var_1 -> 
+	happyIn70
+		 (happy_var_1
+	)}
+
+happyReduce_276 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_276 = happySpecReduce_3  61# happyReduction_276
+happyReduction_276 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> 
+	case happyOut70 happy_x_3 of { happy_var_3 -> 
+	happyIn71
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_277 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_277 = happySpecReduce_3  61# happyReduction_277
+happyReduction_277 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut69 happy_x_1 of { happy_var_1 -> 
+	case happyOut70 happy_x_3 of { happy_var_3 -> 
+	happyIn71
+		 ([happy_var_3, happy_var_1]
+	)}}
+
+happyReduce_278 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_278 = happySpecReduce_1  61# happyReduction_278
+happyReduction_278 happy_x_1
+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
+	happyIn71
+		 ([happy_var_1]
+	)}
+
+happyReduce_279 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_279 = happySpecReduce_3  62# happyReduction_279
+happyReduction_279 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
+	case happyOut70 happy_x_3 of { happy_var_3 -> 
+	happyIn72
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_280 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_280 = happySpecReduce_1  62# happyReduction_280
+happyReduction_280 happy_x_1
+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> 
+	happyIn72
+		 ([happy_var_1]
+	)}
+
+happyReduce_281 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_281 = happySpecReduce_2  63# happyReduction_281
+happyReduction_281 happy_x_2
+	happy_x_1
+	 =  case happyOut74 happy_x_1 of { happy_var_1 -> 
+	happyIn73
+		 (happy_var_1
+	)}
+
+happyReduce_282 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_282 = happySpecReduce_2  64# happyReduction_282
+happyReduction_282 happy_x_2
+	happy_x_1
+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
+	case happyOut74 happy_x_2 of { happy_var_2 -> 
+	happyIn74
+		 (happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_283 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_283 = happySpecReduce_2  64# happyReduction_283
+happyReduction_283 happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	case happyOut74 happy_x_2 of { happy_var_2 -> 
+	happyIn74
+		 (DomainFull happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_284 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_284 = happySpecReduce_1  64# happyReduction_284
+happyReduction_284 happy_x_1
+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
+	happyIn74
+		 (happy_var_1
+	)}
+
+happyReduce_285 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_285 = happySpecReduce_1  64# happyReduction_285
+happyReduction_285 happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	happyIn74
+		 ([DomainFull happy_var_1]
+	)}
+
+happyReduce_286 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_286 = happySpecReduce_2  65# happyReduction_286
+happyReduction_286 happy_x_2
+	happy_x_1
+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> 
+	case happyOut75 happy_x_2 of { happy_var_2 -> 
+	happyIn75
+		 (happy_var_1 ++ happy_var_2
+	)}}
+
+happyReduce_287 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_287 = happySpecReduce_2  65# happyReduction_287
+happyReduction_287 happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	case happyOut75 happy_x_2 of { happy_var_2 -> 
+	happyIn75
+		 (DomainFull happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_288 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_288 = happySpecReduce_0  65# happyReduction_288
+happyReduction_288  =  happyIn75
+		 ([]
+	)
+
+happyReduce_289 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_289 = happySpecReduce_1  66# happyReduction_289
+happyReduction_289 happy_x_1
+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 (case happy_var_1 of
+                             Left lbs -> lbs
+                             Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"
+	)}
+
+happyReduce_290 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_290 = happySpecReduce_1  67# happyReduction_290
+happyReduction_290 happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	happyIn77
+		 (Left [DomainFree defaultArgInfo $ mkBoundName_ happy_var_1]
+	)}
+
+happyReduce_291 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_291 = happySpecReduce_2  67# happyReduction_291
+happyReduction_291 happy_x_2
+	happy_x_1
+	 =  case happyOut27 happy_x_2 of { happy_var_2 -> 
+	happyIn77
+		 (Left [DomainFree (setRelevance Irrelevant $ defaultArgInfo) $ mkBoundName_ happy_var_2]
+	)}
+
+happyReduce_292 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_292 = happySpecReduce_2  67# happyReduction_292
+happyReduction_292 happy_x_2
+	happy_x_1
+	 =  case happyOut27 happy_x_2 of { happy_var_2 -> 
+	happyIn77
+		 (Left [DomainFree (setRelevance NonStrict $ defaultArgInfo) $ mkBoundName_ happy_var_2]
+	)}
+
+happyReduce_293 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_293 = happySpecReduce_3  67# happyReduction_293
+happyReduction_293 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn77
+		 (mapLeft (map (DomainFree (setHiding Hidden $ defaultArgInfo) . mkBoundName_)) happy_var_2
+	)}
+
+happyReduce_294 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_294 = happySpecReduce_3  67# happyReduction_294
+happyReduction_294 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn77
+		 (Left $ map (DomainFree (makeInstance $ defaultArgInfo) . mkBoundName_) happy_var_2
+	)}
+
+happyReduce_295 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_295 = happyReduce 4# 67# happyReduction_295
+happyReduction_295 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn77
+		 (Left $ map (DomainFree (setHiding Hidden $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_296 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_296 = happyReduce 4# 67# happyReduction_296
+happyReduction_296 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn77
+		 (Left $ map (DomainFree (makeInstance $ setRelevance Irrelevant $ defaultArgInfo) . mkBoundName_) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_297 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_297 = happyReduce 4# 67# happyReduction_297
+happyReduction_297 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn77
+		 (Left $ map (DomainFree (setHiding Hidden $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_298 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_298 = happyReduce 4# 67# happyReduction_298
+happyReduction_298 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut29 happy_x_3 of { happy_var_3 -> 
+	happyIn77
+		 (Left $ map (DomainFree  (makeInstance $ setRelevance NonStrict $ defaultArgInfo) . mkBoundName_) happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_299 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_299 = happySpecReduce_1  68# happyReduction_299
+happyReduction_299 happy_x_1
+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
+	happyIn78
+		 ([happy_var_1]
+	)}
+
+happyReduce_300 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_300 = happySpecReduce_2  68# happyReduction_300
+happyReduction_300 happy_x_2
+	happy_x_1
+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
+	happyIn78
+		 ([happy_var_1]
+	)}
+
+happyReduce_301 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_301 = happySpecReduce_3  68# happyReduction_301
+happyReduction_301 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
+	case happyOut78 happy_x_3 of { happy_var_3 -> 
+	happyIn78
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_302 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_302 = happyMonadReduce 2# 69# happyReduction_302
+happyReduction_302 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut80 happy_x_2 of { happy_var_2 -> 
+	( buildDoStmt happy_var_1 happy_var_2)}})
+	) (\r -> happyReturn (happyIn79 r))
+
+happyReduce_303 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_303 = happySpecReduce_0  70# happyReduction_303
+happyReduction_303  =  happyIn80
+		 ([]
+	)
+
+happyReduce_304 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_304 = happyReduce 4# 70# happyReduction_304
+happyReduction_304 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut72 happy_x_3 of { happy_var_3 -> 
+	happyIn80
+		 (reverse happy_var_3
+	) `HappyStk` happyRest}
+
+happyReduce_305 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_305 = happyMonadReduce 1# 71# happyReduction_305
+happyReduction_305 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut82 happy_x_1 of { happy_var_1 -> 
+	( mergeImportDirectives happy_var_1)})
+	) (\r -> happyReturn (happyIn81 r))
+
+happyReduce_306 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_306 = happySpecReduce_2  72# happyReduction_306
+happyReduction_306 happy_x_2
+	happy_x_1
+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> 
+	case happyOut82 happy_x_2 of { happy_var_2 -> 
+	happyIn82
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_307 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_307 = happySpecReduce_0  72# happyReduction_307
+happyReduction_307  =  happyIn82
+		 ([]
+	)
+
+happyReduce_308 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_308 = happySpecReduce_1  73# happyReduction_308
+happyReduction_308 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> 
+	happyIn83
+		 (defaultImportDir { importDirRange = getRange happy_var_1, publicOpen = True }
+	)}
+
+happyReduce_309 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_309 = happySpecReduce_1  73# happyReduction_309
+happyReduction_309 happy_x_1
+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> 
+	happyIn83
+		 (defaultImportDir { importDirRange = snd happy_var_1, using    = fst happy_var_1 }
+	)}
+
+happyReduce_310 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_310 = happySpecReduce_1  73# happyReduction_310
+happyReduction_310 happy_x_1
+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> 
+	happyIn83
+		 (defaultImportDir { importDirRange = snd happy_var_1, hiding   = fst happy_var_1 }
+	)}
+
+happyReduce_311 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_311 = happySpecReduce_1  73# happyReduction_311
+happyReduction_311 happy_x_1
+	 =  case happyOut86 happy_x_1 of { happy_var_1 -> 
+	happyIn83
+		 (defaultImportDir { importDirRange = snd happy_var_1, impRenaming = fst happy_var_1 }
+	)}
+
+happyReduce_312 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_312 = happyReduce 4# 74# happyReduction_312
+happyReduction_312 (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 happyOut91 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn84
+		 ((Using happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))
+	) `HappyStk` happyRest}}}}
+
+happyReduce_313 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_313 = happyReduce 4# 75# 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 KwHiding happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
+	case happyOut91 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn85
+		 ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))
+	) `HappyStk` happyRest}}}}
+
+happyReduce_314 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_314 = happyReduce 4# 76# happyReduction_314
+happyReduction_314 (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 happyOut87 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> 
+	happyIn86
+		 ((happy_var_3 , getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4))
+	) `HappyStk` happyRest}}}}
+
+happyReduce_315 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_315 = happySpecReduce_3  76# happyReduction_315
+happyReduction_315 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> 
+	happyIn86
+		 (([] , getRange (happy_var_1,happy_var_2,happy_var_3))
+	)}}}
+
+happyReduce_316 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_316 = happySpecReduce_3  77# happyReduction_316
+happyReduction_316 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> 
+	case happyOut87 happy_x_3 of { happy_var_3 -> 
+	happyIn87
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_317 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_317 = happySpecReduce_1  77# happyReduction_317
+happyReduction_317 happy_x_1
+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> 
+	happyIn87
+		 ([happy_var_1]
+	)}
+
+happyReduce_318 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_318 = happySpecReduce_3  78# happyReduction_318
+happyReduction_318 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> 
+	case happyOut19 happy_x_3 of { happy_var_3 -> 
+	happyIn88
+		 (Renaming happy_var_1 (setImportedName happy_var_1 happy_var_3) (getRange happy_var_2)
+	)}}}
+
+happyReduce_319 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_319 = happySpecReduce_2  79# happyReduction_319
+happyReduction_319 happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn89
+		 (ImportedName happy_var_2
+	)}
+
+happyReduce_320 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_320 = happySpecReduce_3  79# happyReduction_320
+happyReduction_320 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_3 of { happy_var_3 -> 
+	happyIn89
+		 (ImportedModule happy_var_3
+	)}
+
+happyReduce_321 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_321 = happySpecReduce_1  80# happyReduction_321
+happyReduction_321 happy_x_1
+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> 
+	happyIn90
+		 (ImportedName happy_var_1
+	)}
+
+happyReduce_322 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_322 = happySpecReduce_2  80# happyReduction_322
+happyReduction_322 happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn90
+		 (ImportedModule happy_var_2
+	)}
+
+happyReduce_323 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_323 = happySpecReduce_0  81# happyReduction_323
+happyReduction_323  =  happyIn91
+		 ([]
+	)
+
+happyReduce_324 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_324 = happySpecReduce_1  81# happyReduction_324
+happyReduction_324 happy_x_1
+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> 
+	happyIn91
+		 (happy_var_1
+	)}
+
+happyReduce_325 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_325 = happySpecReduce_1  82# happyReduction_325
+happyReduction_325 happy_x_1
+	 =  case happyOut90 happy_x_1 of { happy_var_1 -> 
+	happyIn92
+		 ([happy_var_1]
+	)}
+
+happyReduce_326 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_326 = happySpecReduce_3  82# happyReduction_326
+happyReduction_326 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut90 happy_x_1 of { happy_var_1 -> 
+	case happyOut92 happy_x_3 of { happy_var_3 -> 
+	happyIn92
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_327 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_327 = happyMonadReduce 3# 83# happyReduction_327
+happyReduction_327 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut40 happy_x_1 of { happy_var_1 -> 
+	case happyOut95 happy_x_2 of { happy_var_2 -> 
+	case happyOut94 happy_x_3 of { happy_var_3 -> 
+	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}})
+	) (\r -> happyReturn (happyIn93 r))
+
+happyReduce_328 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_328 = happySpecReduce_0  84# happyReduction_328
+happyReduction_328  =  happyIn94
+		 ([]
+	)
+
+happyReduce_329 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_329 = happySpecReduce_2  84# happyReduction_329
+happyReduction_329 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> 
+	happyIn94
+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
+	)}
+
+happyReduce_330 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_330 = happySpecReduce_0  85# happyReduction_330
+happyReduction_330  =  happyIn95
+		 ([]
+	)
+
+happyReduce_331 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_331 = happySpecReduce_2  85# happyReduction_331
+happyReduction_331 happy_x_2
+	happy_x_1
+	 =  case happyOut40 happy_x_2 of { happy_var_2 -> 
+	happyIn95
+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }
+	)}
+
+happyReduce_332 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_332 = happySpecReduce_1  86# happyReduction_332
+happyReduction_332 happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (HoleContentExpr    happy_var_1
+	)}
+
+happyReduce_333 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_333 = happySpecReduce_1  86# happyReduction_333
+happyReduction_333 happy_x_1
+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (HoleContentRewrite happy_var_1
+	)}
+
+happyReduce_334 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_334 = happySpecReduce_0  87# happyReduction_334
+happyReduction_334  =  happyIn97
+		 (NoWhere
+	)
+
+happyReduce_335 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_335 = happySpecReduce_2  87# happyReduction_335
+happyReduction_335 happy_x_2
+	happy_x_1
+	 =  case happyOut180 happy_x_2 of { happy_var_2 -> 
+	happyIn97
+		 (AnyWhere happy_var_2
+	)}
+
+happyReduce_336 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_336 = happyReduce 4# 87# happyReduction_336
+happyReduction_336 (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 happyOut180 happy_x_4 of { happy_var_4 -> 
+	happyIn97
+		 (SomeWhere happy_var_2 PublicAccess happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_337 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_337 = happyReduce 4# 87# happyReduction_337
+happyReduction_337 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut134 happy_x_2 of { happy_var_2 -> 
+	case happyOut180 happy_x_4 of { happy_var_4 -> 
+	happyIn97
+		 (SomeWhere happy_var_2 PublicAccess happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_338 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_338 = happySpecReduce_2  88# happyReduction_338
+happyReduction_338 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut97 happy_x_2 of { happy_var_2 -> 
+	happyIn98
+		 (ExprWhere happy_var_1 happy_var_2
+	)}}
+
+happyReduce_339 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_339 = happySpecReduce_1  89# happyReduction_339
+happyReduction_339 happy_x_1
+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 (happy_var_1
+	)}
+
+happyReduce_340 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_340 = happySpecReduce_1  89# happyReduction_340
+happyReduction_340 happy_x_1
+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 (happy_var_1
+	)}
+
+happyReduce_341 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_341 = happySpecReduce_1  89# happyReduction_341
+happyReduction_341 happy_x_1
+	 =  case happyOut104 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_342 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_342 = happySpecReduce_1  89# happyReduction_342
+happyReduction_342 happy_x_1
+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_343 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_343 = happySpecReduce_1  89# happyReduction_343
+happyReduction_343 happy_x_1
+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_344 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_344 = happySpecReduce_1  89# happyReduction_344
+happyReduction_344 happy_x_1
+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_345 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_345 = happySpecReduce_1  89# happyReduction_345
+happyReduction_345 happy_x_1
+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_346 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_346 = happySpecReduce_1  89# happyReduction_346
+happyReduction_346 happy_x_1
+	 =  case happyOut111 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_347 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_347 = happySpecReduce_1  89# happyReduction_347
+happyReduction_347 happy_x_1
+	 =  case happyOut112 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_348 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_348 = happySpecReduce_1  89# happyReduction_348
+happyReduction_348 happy_x_1
+	 =  case happyOut113 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_349 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_349 = happySpecReduce_1  89# happyReduction_349
+happyReduction_349 happy_x_1
+	 =  case happyOut114 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_350 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_350 = happySpecReduce_1  89# happyReduction_350
+happyReduction_350 happy_x_1
+	 =  case happyOut115 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_351 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_351 = happySpecReduce_1  89# happyReduction_351
+happyReduction_351 happy_x_1
+	 =  case happyOut116 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_352 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_352 = happySpecReduce_1  89# happyReduction_352
+happyReduction_352 happy_x_1
+	 =  case happyOut117 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_353 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_353 = happySpecReduce_1  89# happyReduction_353
+happyReduction_353 happy_x_1
+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 (happy_var_1
+	)}
+
+happyReduce_354 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_354 = happySpecReduce_1  89# happyReduction_354
+happyReduction_354 happy_x_1
+	 =  case happyOut132 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_355 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_355 = happySpecReduce_1  89# happyReduction_355
+happyReduction_355 happy_x_1
+	 =  case happyOut133 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_356 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_356 = happySpecReduce_1  89# happyReduction_356
+happyReduction_356 happy_x_1
+	 =  case happyOut136 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_357 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_357 = happySpecReduce_1  89# happyReduction_357
+happyReduction_357 happy_x_1
+	 =  case happyOut119 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_358 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_358 = happySpecReduce_1  89# happyReduction_358
+happyReduction_358 happy_x_1
+	 =  case happyOut120 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_359 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_359 = happySpecReduce_1  89# happyReduction_359
+happyReduction_359 happy_x_1
+	 =  case happyOut118 happy_x_1 of { happy_var_1 -> 
+	happyIn99
+		 ([happy_var_1]
+	)}
+
+happyReduce_360 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_360 = happySpecReduce_3  90# happyReduction_360
+happyReduction_360 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut20 happy_x_1 of { happy_var_1 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn100
+		 (map (\ x -> TypeSig defaultArgInfo x happy_var_3) happy_var_1
+	)}}
+
+happyReduce_361 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_361 = happySpecReduce_3  91# happyReduction_361
+happyReduction_361 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn101
+		 (map (fmap (\ x -> TypeSig defaultArgInfo x happy_var_3)) happy_var_1
+	)}}
+
+happyReduce_362 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_362 = happyMonadReduce 4# 91# happyReduction_362
+happyReduction_362 (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 KwOverlap happy_var_1) -> 
+	case happyOut24 happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_4 of { happy_var_4 -> 
+	(
+      let setOverlap x =
+            case getHiding x of
+              Instance _ -> return $ makeInstance' YesOverlap x
+              _          ->
+                parseErrorAt (fromJust $ rStart' $ getRange happy_var_1)
+                             "The 'overlap' keyword only applies to instance fields (fields marked with {{ }})"
+      in T.traverse (setOverlap . fmap (\ x -> TypeSig defaultArgInfo x happy_var_4)) happy_var_2)}}})
+	) (\r -> happyReturn (happyIn101 r))
+
+happyReduce_363 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_363 = happySpecReduce_2  91# happyReduction_363
+happyReduction_363 happy_x_2
+	happy_x_1
+	 =  case happyOut172 happy_x_2 of { happy_var_2 -> 
+	happyIn101
+		 (let
+      setInstance (TypeSig info x t) = TypeSig (makeInstance info) x t
+      setInstance _ = __IMPOSSIBLE__ in
+    map (fmap setInstance) happy_var_2
+	)}
+
+happyReduce_364 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_364 = happyMonadReduce 3# 92# happyReduction_364
+happyReduction_364 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut93 happy_x_1 of { happy_var_1 -> 
+	case happyOut103 happy_x_2 of { happy_var_2 -> 
+	case happyOut97 happy_x_3 of { happy_var_3 -> 
+	( funClauseOrTypeSigs happy_var_1 happy_var_2 happy_var_3)}}})
+	) (\r -> happyReturn (happyIn102 r))
+
+happyReduce_365 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_365 = happySpecReduce_2  93# happyReduction_365
+happyReduction_365 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> 
+	happyIn103
+		 (JustRHS (RHS happy_var_2)
+	)}
+
+happyReduce_366 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_366 = happySpecReduce_2  93# happyReduction_366
+happyReduction_366 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> 
+	happyIn103
+		 (TypeSigsRHS happy_var_2
+	)}
+
+happyReduce_367 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_367 = happySpecReduce_0  93# happyReduction_367
+happyReduction_367  =  happyIn103
+		 (JustRHS AbsurdRHS
+	)
+
+happyReduce_368 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_368 = happyReduce 7# 94# happyReduction_368
+happyReduction_368 (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 happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut39 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut180 happy_x_7 of { happy_var_7 -> 
+	happyIn104
+		 (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_369 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_369 = happyReduce 7# 94# happyReduction_369
+happyReduction_369 (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 happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut39 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut180 happy_x_7 of { happy_var_7 -> 
+	happyIn104
+		 (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_370 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_370 = happyReduce 5# 94# 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 happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> 
+	case happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut180 happy_x_5 of { happy_var_5 -> 
+	happyIn104
+		 (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_371 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_371 = happyReduce 5# 94# happyReduction_371
+happyReduction_371 (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 happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut180 happy_x_5 of { happy_var_5 -> 
+	happyIn104
+		 (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_372 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_372 = happyReduce 5# 95# happyReduction_372
+happyReduction_372 (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 happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut39 happy_x_5 of { happy_var_5 -> 
+	happyIn105
+		 (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_373 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_373 = happyMonadReduce 7# 96# happyReduction_373
+happyReduction_373 (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 happyOut49 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut39 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> 
+	case happyOut174 happy_x_7 of { happy_var_7 -> 
+	( exprToName happy_var_2 >>= \ n -> let ((x,y,z),ds) = happy_var_7 in 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 x y z happy_var_3 (Just happy_var_5) ds)}}}}}}})
+	) (\r -> happyReturn (happyIn106 r))
+
+happyReduce_374 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_374 = happyMonadReduce 5# 96# happyReduction_374
+happyReduction_374 (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 happyOut49 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut174 happy_x_5 of { happy_var_5 -> 
+	( exprToName happy_var_2 >>= \ n -> let ((x,y,z),ds) = happy_var_5 in return $ Record (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) n x y z happy_var_3 Nothing ds)}}}}})
+	) (\r -> happyReturn (happyIn106 r))
+
+happyReduce_375 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_375 = happyMonadReduce 5# 97# 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) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> 
+	case happyOut49 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymColon happy_var_4) -> 
+	case happyOut39 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 (happyIn107 r))
+
+happyReduce_376 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_376 = happySpecReduce_2  98# happyReduction_376
+happyReduction_376 happy_x_2
+	happy_x_1
+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> 
+	happyIn108
+		 ((happy_var_2, NotInstanceDef)
+	)}
+
+happyReduce_377 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_377 = happyReduce 5# 98# happyReduction_377
+happyReduction_377 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut19 happy_x_4 of { happy_var_4 -> 
+	happyIn108
+		 ((happy_var_4, InstanceDef)
+	) `HappyStk` happyRest}
+
+happyReduce_378 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_378 = happySpecReduce_3  99# happyReduction_378
+happyReduction_378 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> 
+	case happyOut18 happy_x_2 of { happy_var_2 -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	happyIn109
+		 (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) NonAssoc)   happy_var_3
+	)}}}
+
+happyReduce_379 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_379 = happySpecReduce_3  99# happyReduction_379
+happyReduction_379 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> 
+	case happyOut18 happy_x_2 of { happy_var_2 -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	happyIn109
+		 (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) LeftAssoc)  happy_var_3
+	)}}}
+
+happyReduce_380 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_380 = happySpecReduce_3  99# happyReduction_380
+happyReduction_380 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> 
+	case happyOut18 happy_x_2 of { happy_var_2 -> 
+	case happyOut28 happy_x_3 of { happy_var_3 -> 
+	happyIn109
+		 (Infix (Fixity (getRange (happy_var_1,happy_var_3)) (Related happy_var_2) RightAssoc) happy_var_3
+	)}}}
+
+happyReduce_381 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_381 = happySpecReduce_2  100# happyReduction_381
+happyReduction_381 happy_x_2
+	happy_x_1
+	 =  case happyOut172 happy_x_2 of { happy_var_2 -> 
+	happyIn110
+		 (let
+                inst i = case getHiding i of
+                           Instance _ -> InstanceDef
+                           _          -> NotInstanceDef
+                toField (Arg info (TypeSig info' x t)) = Field (inst info') x (Arg info t)
+              in map toField happy_var_2
+	)}
+
+happyReduce_382 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_382 = happySpecReduce_2  101# happyReduction_382
+happyReduction_382 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> 
+	case happyOut180 happy_x_2 of { happy_var_2 -> 
+	happyIn111
+		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_383 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_383 = happySpecReduce_2  102# happyReduction_383
+happyReduction_383 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> 
+	case happyOut180 happy_x_2 of { happy_var_2 -> 
+	happyIn112
+		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_384 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_384 = happySpecReduce_2  103# happyReduction_384
+happyReduction_384 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> 
+	case happyOut180 happy_x_2 of { happy_var_2 -> 
+	happyIn113
+		 (Private (fuseRange happy_var_1 happy_var_2) UserWritten happy_var_2
+	)}}
+
+happyReduce_385 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_385 = happySpecReduce_2  104# happyReduction_385
+happyReduction_385 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> 
+	case happyOut180 happy_x_2 of { happy_var_2 -> 
+	happyIn114
+		 (InstanceB (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_386 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_386 = happySpecReduce_2  105# happyReduction_386
+happyReduction_386 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMacro happy_var_1) -> 
+	case happyOut180 happy_x_2 of { happy_var_2 -> 
+	happyIn115
+		 (Macro (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_387 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_387 = happySpecReduce_2  106# happyReduction_387
+happyReduction_387 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> 
+	case happyOut180 happy_x_2 of { happy_var_2 -> 
+	happyIn116
+		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_388 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_388 = happySpecReduce_2  107# happyReduction_388
+happyReduction_388 happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> 
+	case happyOut170 happy_x_2 of { happy_var_2 -> 
+	happyIn117
+		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2
+	)}}
+
+happyReduce_389 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_389 = happySpecReduce_3  108# happyReduction_389
+happyReduction_389 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn118
+		 (UnquoteDecl (fuseRange happy_var_1 happy_var_3) [] happy_var_3
+	)}}
+
+happyReduce_390 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_390 = happyReduce 4# 108# happyReduction_390
+happyReduction_390 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> 
+	case happyOut20 happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_4 of { happy_var_4 -> 
+	happyIn118
+		 (UnquoteDecl (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_391 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_391 = happyReduce 4# 108# happyReduction_391
+happyReduction_391 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDef happy_var_1) -> 
+	case happyOut20 happy_x_2 of { happy_var_2 -> 
+	case happyOut39 happy_x_4 of { happy_var_4 -> 
+	happyIn118
+		 (UnquoteDef (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_392 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_392 = happyMonadReduce 5# 109# happyReduction_392
+happyReduction_392 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut123 happy_x_3 of { happy_var_3 -> 
+	case happyOut122 happy_x_5 of { happy_var_5 -> 
+	(
+  case happy_var_2 of
+    Name _ [_] -> case mkNotation happy_var_3 (map rangedThing 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 (happyIn119 r))
+
+happyReduce_393 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_393 = happyMonadReduce 5# 110# happyReduction_393
+happyReduction_393 (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 KwPatternSyn happy_var_1) -> 
+	case happyOut19 happy_x_2 of { happy_var_2 -> 
+	case happyOut121 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymEqual happy_var_4) -> 
+	case happyOut39 happy_x_5 of { happy_var_5 -> 
+	( do
+  p <- exprToPattern happy_var_5
+  return (PatternSyn (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) happy_var_2 happy_var_3 p))}}}}})
+	) (\r -> happyReturn (happyIn120 r))
+
+happyReduce_394 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_394 = happySpecReduce_0  111# happyReduction_394
+happyReduction_394  =  happyIn121
+		 ([]
+	)
+
+happyReduce_395 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_395 = happyMonadReduce 1# 111# happyReduction_395
+happyReduction_395 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut66 happy_x_1 of { happy_var_1 -> 
+	( patternSynArgs happy_var_1)})
+	) (\r -> happyReturn (happyIn121 r))
+
+happyReduce_396 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_396 = happySpecReduce_1  112# happyReduction_396
+happyReduction_396 happy_x_1
+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> 
+	happyIn122
+		 ([happy_var_1]
+	)}
+
+happyReduce_397 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_397 = happySpecReduce_2  112# happyReduction_397
+happyReduction_397 happy_x_2
+	happy_x_1
+	 =  case happyOut122 happy_x_1 of { happy_var_1 -> 
+	case happyOut127 happy_x_2 of { happy_var_2 -> 
+	happyIn122
+		 (happy_var_1 ++ [happy_var_2]
+	)}}
+
+happyReduce_398 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_398 = happySpecReduce_1  113# happyReduction_398
+happyReduction_398 happy_x_1
+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> 
+	happyIn123
+		 ([happy_var_1]
+	)}
+
+happyReduce_399 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_399 = happySpecReduce_2  113# happyReduction_399
+happyReduction_399 happy_x_2
+	happy_x_1
+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> 
+	case happyOut124 happy_x_2 of { happy_var_2 -> 
+	happyIn123
+		 (happy_var_1 ++ [happy_var_2]
+	)}}
+
+happyReduce_400 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_400 = happySpecReduce_1  114# happyReduction_400
+happyReduction_400 happy_x_1
+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> 
+	happyIn124
+		 (defaultNamedArg happy_var_1
+	)}
+
+happyReduce_401 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_401 = happySpecReduce_3  114# happyReduction_401
+happyReduction_401 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut126 happy_x_2 of { happy_var_2 -> 
+	happyIn124
+		 (hide         $ defaultNamedArg happy_var_2
+	)}
+
+happyReduce_402 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_402 = happySpecReduce_3  114# happyReduction_402
+happyReduction_402 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut126 happy_x_2 of { happy_var_2 -> 
+	happyIn124
+		 (makeInstance $ defaultNamedArg happy_var_2
+	)}
+
+happyReduce_403 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_403 = happyReduce 5# 114# happyReduction_403
+happyReduction_403 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut127 happy_x_2 of { happy_var_2 -> 
+	case happyOut126 happy_x_4 of { happy_var_4 -> 
+	happyIn124
+		 (hide         $ defaultArg $ named happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_404 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_404 = happyReduce 5# 114# happyReduction_404
+happyReduction_404 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut127 happy_x_2 of { happy_var_2 -> 
+	case happyOut126 happy_x_4 of { happy_var_4 -> 
+	happyIn124
+		 (makeInstance $ defaultArg $ named happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_405 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_405 = happySpecReduce_1  115# happyReduction_405
+happyReduction_405 happy_x_1
+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> 
+	happyIn125
+		 (ExprHole (rangedThing happy_var_1)
+	)}
+
+happyReduce_406 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_406 = happyReduce 6# 115# happyReduction_406
+happyReduction_406 (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 happyOut127 happy_x_3 of { happy_var_3 -> 
+	case happyOut127 happy_x_5 of { happy_var_5 -> 
+	happyIn125
+		 (LambdaHole (rangedThing happy_var_3) (rangedThing happy_var_5)
+	) `HappyStk` happyRest}}
+
+happyReduce_407 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_407 = happyReduce 6# 115# happyReduction_407
+happyReduction_407 (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 happyOut127 happy_x_5 of { happy_var_5 -> 
+	happyIn125
+		 (LambdaHole "_" (rangedThing happy_var_5)
+	) `HappyStk` happyRest}
+
+happyReduce_408 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_408 = happySpecReduce_1  116# happyReduction_408
+happyReduction_408 happy_x_1
+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> 
+	happyIn126
+		 (ExprHole (rangedThing happy_var_1)
+	)}
+
+happyReduce_409 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_409 = happyReduce 4# 116# happyReduction_409
+happyReduction_409 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut127 happy_x_2 of { happy_var_2 -> 
+	case happyOut127 happy_x_4 of { happy_var_4 -> 
+	happyIn126
+		 (LambdaHole (rangedThing happy_var_2) (rangedThing happy_var_4)
+	) `HappyStk` happyRest}}
+
+happyReduce_410 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_410 = happyReduce 4# 116# happyReduction_410
+happyReduction_410 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut127 happy_x_4 of { happy_var_4 -> 
+	happyIn126
+		 (LambdaHole "_" (rangedThing happy_var_4)
+	) `HappyStk` happyRest}
+
+happyReduce_411 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_411 = happySpecReduce_1  117# happyReduction_411
+happyReduction_411 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> 
+	happyIn127
+		 (Ranged (getRange $ fst happy_var_1) (stringToRawName $ snd happy_var_1)
+	)}
+
+happyReduce_412 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_412 = happySpecReduce_1  118# happyReduction_412
+happyReduction_412 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> 
+	happyIn128
+		 (Just (getRange happy_var_1)
+	)}
+
+happyReduce_413 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_413 = happySpecReduce_0  118# happyReduction_413
+happyReduction_413  =  happyIn128
+		 (Nothing
+	)
+
+happyReduce_414 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_414 = happyMonadReduce 5# 119# happyReduction_414
+happyReduction_414 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut128 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwImport happy_var_2) -> 
+	case happyOut26 happy_x_3 of { happy_var_3 -> 
+	case happyOut130 happy_x_4 of { happy_var_4 -> 
+	case happyOut81 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 = hashString $ show $ (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 $ stringToRawName $ ".#" ++ 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 Inserted
+          [ 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')
+        ] | rawNameToString 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 ]
+          -- Andreas, 2017-05-13, issue #2579
+          -- Nisse reports that importing with instantation but without open
+          -- could be usefule for bringing instances into scope.
+          -- -- | 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 (happyIn129 r))
+
+happyReduce_415 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_415 = happyReduce 4# 119# happyReduction_415
+happyReduction_415 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut26 happy_x_2 of { happy_var_2 -> 
+	case happyOut130 happy_x_3 of { happy_var_3 -> 
+	case happyOut81 happy_x_4 of { happy_var_4 -> 
+	happyIn129
+		 (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 Inserted
+                 [ ModuleMacro r (noName $ beginningOf $ getRange m)
+                             (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))
+                             DoOpen dir
+                 ]
+      }
+    ]
+	) `HappyStk` happyRest}}}
+
+happyReduce_416 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_416 = happyReduce 6# 119# happyReduction_416
+happyReduction_416 (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 happyOut26 happy_x_2 of { happy_var_2 -> 
+	case happyOut81 happy_x_6 of { happy_var_6 -> 
+	happyIn129
+		 (let r = getRange happy_var_2 in
+    [ Private r Inserted
+      [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2) (RecordModuleIFS r happy_var_2) DoOpen happy_var_6
+      ]
+    ]
+	) `HappyStk` happyRest}}
+
+happyReduce_417 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_417 = happySpecReduce_0  120# happyReduction_417
+happyReduction_417  =  happyIn130
+		 ([]
+	)
+
+happyReduce_418 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_418 = happySpecReduce_2  120# happyReduction_418
+happyReduction_418 happy_x_2
+	happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	case happyOut130 happy_x_2 of { happy_var_2 -> 
+	happyIn130
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_419 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_419 = happyReduce 4# 121# happyReduction_419
+happyReduction_419 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut26 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 happyOut21 happy_x_4 of { happy_var_4 -> 
+	happyIn131
+		 ((\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_420 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_420 = happySpecReduce_2  121# happyReduction_420
+happyReduction_420 happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
+	case happyOut130 happy_x_2 of { happy_var_2 -> 
+	happyIn131
+		 ((\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_421 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_421 = happyMonadReduce 6# 122# happyReduction_421
+happyReduction_421 (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 happyOut26 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOut131 happy_x_5 of { happy_var_5 -> 
+	case happyOut81 happy_x_6 of { happy_var_6 -> 
+	( do { ma <- happy_var_5 (map addType happy_var_3)
+                          ; name <- ensureUnqual happy_var_2
+                          ; return $ ModuleMacro (getRange (happy_var_1, happy_var_2, ma, happy_var_6)) name ma DontOpen happy_var_6 })}}}}})
+	) (\r -> happyReturn (happyIn132 r))
+
+happyReduce_422 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_422 = happyMonadReduce 7# 122# happyReduction_422
+happyReduction_422 (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 happyOut19 happy_x_3 of { happy_var_3 -> 
+	case happyOut75 happy_x_4 of { happy_var_4 -> 
+	case happyOut131 happy_x_6 of { happy_var_6 -> 
+	case happyOut81 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 (happyIn132 r))
+
+happyReduce_423 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_423 = happyReduce 5# 123# happyReduction_423
+happyReduction_423 (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 happyOut26 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut180 happy_x_5 of { happy_var_5 -> 
+	happyIn133
+		 (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_424 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_424 = happyReduce 5# 123# happyReduction_424
+happyReduction_424 (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 happyOut134 happy_x_2 of { happy_var_2 -> 
+	case happyOut75 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> 
+	case happyOut180 happy_x_5 of { happy_var_5 -> 
+	happyIn133
+		 (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_425 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_425 = happySpecReduce_1  124# happyReduction_425
+happyReduction_425 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> 
+	happyIn134
+		 (noName (getRange happy_var_1)
+	)}
+
+happyReduce_426 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_426 = happySpecReduce_1  125# happyReduction_426
+happyReduction_426 happy_x_1
+	 =  case happyOut182 happy_x_1 of { happy_var_1 -> 
+	happyIn135
+		 (figureOutTopLevelModule happy_var_1
+	)}
+
+happyReduce_427 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_427 = happySpecReduce_1  126# happyReduction_427
+happyReduction_427 happy_x_1
+	 =  case happyOut137 happy_x_1 of { happy_var_1 -> 
+	happyIn136
+		 (Pragma happy_var_1
+	)}
+
+happyReduce_428 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_428 = happySpecReduce_1  127# happyReduction_428
+happyReduction_428 happy_x_1
+	 =  case happyOut139 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_429 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_429 = happySpecReduce_1  127# happyReduction_429
+happyReduction_429 happy_x_1
+	 =  case happyOut140 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_430 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_430 = happySpecReduce_1  127# happyReduction_430
+happyReduction_430 happy_x_1
+	 =  case happyOut141 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_431 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_431 = happySpecReduce_1  127# happyReduction_431
+happyReduction_431 happy_x_1
+	 =  case happyOut142 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_432 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_432 = happySpecReduce_1  127# happyReduction_432
+happyReduction_432 happy_x_1
+	 =  case happyOut144 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_433 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_433 = happySpecReduce_1  127# happyReduction_433
+happyReduction_433 happy_x_1
+	 =  case happyOut143 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_434 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_434 = happySpecReduce_1  127# happyReduction_434
+happyReduction_434 happy_x_1
+	 =  case happyOut145 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_435 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_435 = happySpecReduce_1  127# happyReduction_435
+happyReduction_435 happy_x_1
+	 =  case happyOut146 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_436 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_436 = happySpecReduce_1  127# happyReduction_436
+happyReduction_436 happy_x_1
+	 =  case happyOut147 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_437 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_437 = happySpecReduce_1  127# happyReduction_437
+happyReduction_437 happy_x_1
+	 =  case happyOut148 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_438 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_438 = happySpecReduce_1  127# happyReduction_438
+happyReduction_438 happy_x_1
+	 =  case happyOut150 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_439 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_439 = happySpecReduce_1  127# happyReduction_439
+happyReduction_439 happy_x_1
+	 =  case happyOut149 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_440 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_440 = happySpecReduce_1  127# happyReduction_440
+happyReduction_440 happy_x_1
+	 =  case happyOut151 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_441 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_441 = happySpecReduce_1  127# happyReduction_441
+happyReduction_441 happy_x_1
+	 =  case happyOut154 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_442 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_442 = happySpecReduce_1  127# happyReduction_442
+happyReduction_442 happy_x_1
+	 =  case happyOut152 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_443 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_443 = happySpecReduce_1  127# happyReduction_443
+happyReduction_443 happy_x_1
+	 =  case happyOut153 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_444 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_444 = happySpecReduce_1  127# happyReduction_444
+happyReduction_444 happy_x_1
+	 =  case happyOut162 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_445 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_445 = happySpecReduce_1  127# happyReduction_445
+happyReduction_445 happy_x_1
+	 =  case happyOut163 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_446 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_446 = happySpecReduce_1  127# happyReduction_446
+happyReduction_446 happy_x_1
+	 =  case happyOut164 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_447 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_447 = happySpecReduce_1  127# happyReduction_447
+happyReduction_447 happy_x_1
+	 =  case happyOut159 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_448 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_448 = happySpecReduce_1  127# happyReduction_448
+happyReduction_448 happy_x_1
+	 =  case happyOut158 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_449 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_449 = happySpecReduce_1  127# happyReduction_449
+happyReduction_449 happy_x_1
+	 =  case happyOut157 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_450 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_450 = happySpecReduce_1  127# happyReduction_450
+happyReduction_450 happy_x_1
+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_451 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_451 = happySpecReduce_1  127# happyReduction_451
+happyReduction_451 happy_x_1
+	 =  case happyOut160 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_452 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_452 = happySpecReduce_1  127# happyReduction_452
+happyReduction_452 happy_x_1
+	 =  case happyOut161 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_453 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_453 = happySpecReduce_1  127# happyReduction_453
+happyReduction_453 happy_x_1
+	 =  case happyOut155 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_454 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_454 = happySpecReduce_1  127# happyReduction_454
+happyReduction_454 happy_x_1
+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_455 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_455 = happySpecReduce_1  127# happyReduction_455
+happyReduction_455 happy_x_1
+	 =  case happyOut165 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_456 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_456 = happySpecReduce_1  127# happyReduction_456
+happyReduction_456 happy_x_1
+	 =  case happyOut166 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_457 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_457 = happySpecReduce_1  127# happyReduction_457
+happyReduction_457 happy_x_1
+	 =  case happyOut138 happy_x_1 of { happy_var_1 -> 
+	happyIn137
+		 (happy_var_1
+	)}
+
+happyReduce_458 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_458 = happyReduce 4# 128# happyReduction_458
+happyReduction_458 (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 happyOut32 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn138
+		 (OptionsPragma (getRange (happy_var_1,happy_var_2,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_459 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_459 = happyReduce 5# 129# happyReduction_459
+happyReduction_459 (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 happyOut37 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn139
+		 (BuiltinPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4,happy_var_5)) (snd happy_var_3) happy_var_4
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_460 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_460 = happyReduce 5# 129# happyReduction_460
+happyReduction_460 (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 { (TokKeyword KwREWRITE happy_var_3) -> 
+	case happyOut37 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn139
+		 (BuiltinPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4,happy_var_5)) "REWRITE" happy_var_4
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_461 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_461 = happyReduce 4# 130# happyReduction_461
+happyReduction_461 (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 KwREWRITE happy_var_2) -> 
+	case happyOut38 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn140
+		 (RewritePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_462 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_462 = happyReduce 5# 131# happyReduction_462
+happyReduction_462 (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 happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOut32 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn141
+		 (CompiledPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_463 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_463 = happyReduce 5# 132# happyReduction_463
+happyReduction_463 (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_EXPORT happy_var_2) -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOut33 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn142
+		 (CompiledExportPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_464 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_464 = happyReduce 5# 133# happyReduction_464
+happyReduction_464 (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 happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOut32 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn143
+		 (CompiledTypePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_465 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_465 = happyReduce 6# 134# happyReduction_465
+happyReduction_465 (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 happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> 
+	case happyOut32 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> 
+	happyIn144
+		 (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_466 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_466 = happyReduce 5# 135# happyReduction_466
+happyReduction_466 (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 happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOut32 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn145
+		 (CompiledJSPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_467 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_467 = happyReduce 5# 136# happyReduction_467
+happyReduction_467 (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_UHC happy_var_2) -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOut32 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn146
+		 (CompiledUHCPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_5)) happy_var_3 (unwords happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_468 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_468 = happyReduce 6# 137# happyReduction_468
+happyReduction_468 (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_UHC happy_var_2) -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> 
+	case happyOut32 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> 
+	happyIn147
+		 (CompiledDataUHCPragma (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_469 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_469 = happyReduce 4# 138# happyReduction_469
+happyReduction_469 (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 KwHASKELL happy_var_2) -> 
+	case happyOut35 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn148
+		 (HaskellCodePragma (getRange (happy_var_1, happy_var_2, happy_var_4)) (recoverLayout happy_var_3)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_470 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_470 = happyReduce 5# 139# happyReduction_470
+happyReduction_470 (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 KwFOREIGN happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
+	case happyOut35 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn149
+		 (ForeignPragma (getRange (happy_var_1, happy_var_2, fst happy_var_3, happy_var_5)) (snd happy_var_3) (recoverLayout happy_var_4)
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_471 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_471 = happyReduce 6# 140# happyReduction_471
+happyReduction_471 (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 KwCOMPILE happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
+	case happyOut37 happy_x_4 of { happy_var_4 -> 
+	case happyOut32 happy_x_5 of { happy_var_5 -> 
+	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> 
+	happyIn150
+		 (CompilePragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4,happy_var_6)) (snd happy_var_3) happy_var_4 (unwords happy_var_5)
+	) `HappyStk` happyRest}}}}}}
+
+happyReduce_472 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_472 = happyReduce 4# 141# happyReduction_472
+happyReduction_472 (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 happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn151
+		 (StaticPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_473 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_473 = happyReduce 4# 142# happyReduction_473
+happyReduction_473 (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 KwINLINE happy_var_2) -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn152
+		 (InlinePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) True happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_474 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_474 = happyReduce 4# 143# happyReduction_474
+happyReduction_474 (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 KwNOINLINE happy_var_2) -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn153
+		 (InlinePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) False happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_475 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_475 = happyReduce 4# 144# happyReduction_475
+happyReduction_475 (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 KwINJECTIVE happy_var_2) -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn154
+		 (InjectivePragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_476 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_476 = happyMonadReduce 5# 145# happyReduction_476
+happyReduction_476 (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 { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> 
+	case happyOut32 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	(
+      let (r, s) = happy_var_3 in
+      parseDisplayPragma (fuseRange happy_var_1 happy_var_5) (iStart r) (unwords (s : happy_var_4)))}}}})
+	) (\r -> happyReturn (happyIn155 r))
+
+happyReduce_477 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_477 = happyReduce 4# 146# happyReduction_477
+happyReduction_477 (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 happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn156
+		 (EtaPragma (getRange (happy_var_1,happy_var_2,happy_var_3,happy_var_4)) happy_var_3
+	) `HappyStk` happyRest}}}}
+
+happyReduce_478 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_478 = happySpecReduce_3  147# happyReduction_478
+happyReduction_478 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) -> 
+	happyIn157
+		 (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) NoTerminationCheck
+	)}}}
+
+happyReduce_479 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_479 = happySpecReduce_3  148# happyReduction_479
+happyReduction_479 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 KwNON_TERMINATING happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
+	happyIn158
+		 (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) NonTerminating
+	)}}}
+
+happyReduce_480 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_480 = happySpecReduce_3  149# happyReduction_480
+happyReduction_480 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 KwTERMINATING happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
+	happyIn159
+		 (TerminationCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3)) Terminating
+	)}}}
+
+happyReduce_481 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_481 = happyReduce 4# 150# happyReduction_481
+happyReduction_481 (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 KwMEASURE happy_var_2) -> 
+	case happyOut36 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> 
+	happyIn160
+		 (let r = getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4) in
+      TerminationCheckPragma r (TerminationMeasure r happy_var_3)
+	) `HappyStk` happyRest}}}}
+
+happyReduce_482 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_482 = happySpecReduce_3  151# happyReduction_482
+happyReduction_482 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 KwCATCHALL happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
+	happyIn161
+		 (CatchallPragma (getRange (happy_var_1,happy_var_2,happy_var_3))
+	)}}}
+
+happyReduce_483 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_483 = happyMonadReduce 4# 152# happyReduction_483
+happyReduction_483 (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 (happyIn162 r))
+
+happyReduce_484 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_484 = happyMonadReduce 4# 153# happyReduction_484
+happyReduction_484 (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_UHC 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 $ ImportUHCPragma (getRange (happy_var_1,happy_var_2,fst happy_var_3,happy_var_4)) s
+       else parseError $ "Malformed module name: " ++ s ++ ".")}}}})
+	) (\r -> happyReturn (happyIn163 r))
+
+happyReduce_485 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_485 = happySpecReduce_3  154# happyReduction_485
+happyReduction_485 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) -> 
+	happyIn164
+		 (ImpossiblePragma (getRange (happy_var_1,happy_var_2,happy_var_3))
+	)}}}
+
+happyReduce_486 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_486 = happySpecReduce_3  155# happyReduction_486
+happyReduction_486 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_POSITIVITY_CHECK happy_var_2) -> 
+	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> 
+	happyIn165
+		 (NoPositivityCheckPragma (getRange (happy_var_1,happy_var_2,happy_var_3))
+	)}}}
+
+happyReduce_487 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_487 = happyReduce 5# 156# happyReduction_487
+happyReduction_487 (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 KwPOLARITY happy_var_2) -> 
+	case happyOut36 happy_x_3 of { happy_var_3 -> 
+	case happyOut168 happy_x_4 of { happy_var_4 -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	happyIn166
+		 (let (rs, occs) = unzip (reverse happy_var_4) in
+      PolarityPragma (getRange (happy_var_1,happy_var_2,happy_var_3,rs,happy_var_5)) happy_var_3 occs
+	) `HappyStk` happyRest}}}}}
+
+happyReduce_488 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_488 = happyMonadReduce 5# 157# happyReduction_488
+happyReduction_488 (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 { (TokSymbol SymOpenPragma happy_var_1) -> 
+	case happyOutTok happy_x_2 of { (TokKeyword KwWARNING_ON_USAGE happy_var_2) -> 
+	case happyOut37 happy_x_3 of { happy_var_3 -> 
+	case happyOutTok happy_x_4 of { (TokLiteral happy_var_4) -> 
+	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> 
+	(  case happy_var_4 of
+        { LitString r str -> return $ WarningOnUsage (getRange (happy_var_1,happy_var_2,happy_var_3,r,happy_var_5)) happy_var_3 str
+        ; _ -> parseError "Expected string literal"
+        })}}}}})
+	) (\r -> happyReturn (happyIn167 r))
+
+happyReduce_489 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_489 = happySpecReduce_0  158# happyReduction_489
+happyReduction_489  =  happyIn168
+		 ([]
+	)
+
+happyReduce_490 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_490 = happySpecReduce_2  158# happyReduction_490
+happyReduction_490 happy_x_2
+	happy_x_1
+	 =  case happyOut168 happy_x_1 of { happy_var_1 -> 
+	case happyOut169 happy_x_2 of { happy_var_2 -> 
+	happyIn168
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_491 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_491 = happyMonadReduce 1# 159# happyReduction_491
+happyReduction_491 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (TokString happy_var_1) -> 
+	( polarity happy_var_1)})
+	) (\r -> happyReturn (happyIn169 r))
+
+happyReduce_492 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_492 = happySpecReduce_3  160# happyReduction_492
+happyReduction_492 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut171 happy_x_2 of { happy_var_2 -> 
+	happyIn170
+		 (reverse happy_var_2
+	)}
+
+happyReduce_493 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_493 = happySpecReduce_3  161# happyReduction_493
+happyReduction_493 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut171 happy_x_1 of { happy_var_1 -> 
+	case happyOut100 happy_x_3 of { happy_var_3 -> 
+	happyIn171
+		 (reverse happy_var_3 ++ happy_var_1
+	)}}
+
+happyReduce_494 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_494 = happySpecReduce_1  161# happyReduction_494
+happyReduction_494 happy_x_1
+	 =  case happyOut100 happy_x_1 of { happy_var_1 -> 
+	happyIn171
+		 (reverse happy_var_1
+	)}
+
+happyReduce_495 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_495 = happySpecReduce_3  162# happyReduction_495
+happyReduction_495 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut173 happy_x_2 of { happy_var_2 -> 
+	happyIn172
+		 (reverse happy_var_2
+	)}
+
+happyReduce_496 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_496 = happySpecReduce_3  163# happyReduction_496
+happyReduction_496 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut173 happy_x_1 of { happy_var_1 -> 
+	case happyOut101 happy_x_3 of { happy_var_3 -> 
+	happyIn173
+		 (reverse happy_var_3 ++ happy_var_1
+	)}}
+
+happyReduce_497 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_497 = happySpecReduce_1  163# happyReduction_497
+happyReduction_497 happy_x_1
+	 =  case happyOut101 happy_x_1 of { happy_var_1 -> 
+	happyIn173
+		 (reverse happy_var_1
+	)}
+
+happyReduce_498 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_498 = happyMonadReduce 3# 164# happyReduction_498
+happyReduction_498 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut175 happy_x_2 of { happy_var_2 -> 
+	( ((,) `fmap` verifyRecordDirectives happy_var_2 <*> pure []))})
+	) (\r -> happyReturn (happyIn174 r))
+
+happyReduce_499 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_499 = happyMonadReduce 5# 164# happyReduction_499
+happyReduction_499 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut175 happy_x_2 of { happy_var_2 -> 
+	case happyOut181 happy_x_4 of { happy_var_4 -> 
+	( ((,) `fmap` verifyRecordDirectives happy_var_2 <*> pure happy_var_4))}})
+	) (\r -> happyReturn (happyIn174 r))
+
+happyReduce_500 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_500 = happyMonadReduce 3# 164# happyReduction_500
+happyReduction_500 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut181 happy_x_2 of { happy_var_2 -> 
+	( ((,) `fmap` verifyRecordDirectives [] <*> pure happy_var_2))})
+	) (\r -> happyReturn (happyIn174 r))
+
+happyReduce_501 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_501 = happySpecReduce_0  165# happyReduction_501
+happyReduction_501  =  happyIn175
+		 ([]
+	)
+
+happyReduce_502 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_502 = happySpecReduce_3  165# happyReduction_502
+happyReduction_502 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut175 happy_x_1 of { happy_var_1 -> 
+	case happyOut176 happy_x_3 of { happy_var_3 -> 
+	happyIn175
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_503 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_503 = happySpecReduce_1  165# happyReduction_503
+happyReduction_503 happy_x_1
+	 =  case happyOut176 happy_x_1 of { happy_var_1 -> 
+	happyIn175
+		 ([happy_var_1]
+	)}
+
+happyReduce_504 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_504 = happySpecReduce_1  166# happyReduction_504
+happyReduction_504 happy_x_1
+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> 
+	happyIn176
+		 (Constructor happy_var_1
+	)}
+
+happyReduce_505 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_505 = happySpecReduce_1  166# happyReduction_505
+happyReduction_505 happy_x_1
+	 =  case happyOut178 happy_x_1 of { happy_var_1 -> 
+	happyIn176
+		 (Induction happy_var_1
+	)}
+
+happyReduce_506 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_506 = happySpecReduce_1  166# happyReduction_506
+happyReduction_506 happy_x_1
+	 =  case happyOut177 happy_x_1 of { happy_var_1 -> 
+	happyIn176
+		 (Eta happy_var_1
+	)}
+
+happyReduce_507 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_507 = happySpecReduce_1  167# happyReduction_507
+happyReduction_507 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwEta happy_var_1) -> 
+	happyIn177
+		 (Ranged (getRange happy_var_1) YesEta
+	)}
+
+happyReduce_508 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_508 = happySpecReduce_1  167# happyReduction_508
+happyReduction_508 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwNoEta happy_var_1) -> 
+	happyIn177
+		 (Ranged (getRange happy_var_1) NoEta
+	)}
+
+happyReduce_509 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_509 = happySpecReduce_1  168# happyReduction_509
+happyReduction_509 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> 
+	happyIn178
+		 (Ranged (getRange happy_var_1) Inductive
+	)}
+
+happyReduce_510 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_510 = happySpecReduce_1  168# happyReduction_510
+happyReduction_510 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> 
+	happyIn178
+		 (Ranged (getRange happy_var_1) CoInductive
+	)}
+
+happyReduce_511 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_511 = happySpecReduce_3  169# happyReduction_511
+happyReduction_511 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut181 happy_x_2 of { happy_var_2 -> 
+	happyIn179
+		 (happy_var_2
+	)}
+
+happyReduce_512 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_512 = happySpecReduce_2  170# happyReduction_512
+happyReduction_512 happy_x_2
+	happy_x_1
+	 =  happyIn180
+		 ([]
+	)
+
+happyReduce_513 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_513 = happySpecReduce_1  170# happyReduction_513
+happyReduction_513 happy_x_1
+	 =  case happyOut179 happy_x_1 of { happy_var_1 -> 
+	happyIn180
+		 (happy_var_1
+	)}
+
+happyReduce_514 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_514 = happySpecReduce_3  171# happyReduction_514
+happyReduction_514 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> 
+	case happyOut181 happy_x_3 of { happy_var_3 -> 
+	happyIn181
+		 (happy_var_1 ++ happy_var_3
+	)}}
+
+happyReduce_515 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_515 = happySpecReduce_2  171# happyReduction_515
+happyReduction_515 happy_x_2
+	happy_x_1
+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> 
+	happyIn181
+		 (happy_var_1
+	)}
+
+happyReduce_516 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_516 = happySpecReduce_1  171# happyReduction_516
+happyReduction_516 happy_x_1
+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> 
+	happyIn181
+		 (happy_var_1
+	)}
+
+happyReduce_517 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_517 = happySpecReduce_0  172# happyReduction_517
+happyReduction_517  =  happyIn182
+		 ([]
+	)
+
+happyReduce_518 :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+happyReduce_518 = happySpecReduce_1  172# happyReduction_518
+happyReduction_518 happy_x_1
+	 =  case happyOut181 happy_x_1 of { happy_var_1 -> 
+	happyIn182
+		 (happy_var_1
+	)}
+
+happyNewToken action sts stk
+	= lexer(\tk -> 
+	let cont i = happyDoAction i tk action sts stk in
+	case tk of {
+	TokEOF -> happyDoAction 110# tk action sts stk;
+	TokKeyword KwAbstract happy_dollar_dollar -> cont 1#;
+	TokKeyword KwCoData happy_dollar_dollar -> cont 2#;
+	TokKeyword KwCoInductive happy_dollar_dollar -> cont 3#;
+	TokKeyword KwConstructor happy_dollar_dollar -> cont 4#;
+	TokKeyword KwData happy_dollar_dollar -> cont 5#;
+	TokKeyword KwEta happy_dollar_dollar -> cont 6#;
+	TokKeyword KwField happy_dollar_dollar -> cont 7#;
+	TokKeyword KwForall happy_dollar_dollar -> cont 8#;
+	TokKeyword KwHiding happy_dollar_dollar -> cont 9#;
+	TokKeyword KwImport happy_dollar_dollar -> cont 10#;
+	TokKeyword KwIn happy_dollar_dollar -> cont 11#;
+	TokKeyword KwInductive happy_dollar_dollar -> cont 12#;
+	TokKeyword KwInfix happy_dollar_dollar -> cont 13#;
+	TokKeyword KwInfixL happy_dollar_dollar -> cont 14#;
+	TokKeyword KwInfixR happy_dollar_dollar -> cont 15#;
+	TokKeyword KwInstance happy_dollar_dollar -> cont 16#;
+	TokKeyword KwOverlap happy_dollar_dollar -> cont 17#;
+	TokKeyword KwLet happy_dollar_dollar -> cont 18#;
+	TokKeyword KwMacro happy_dollar_dollar -> cont 19#;
+	TokKeyword KwModule happy_dollar_dollar -> cont 20#;
+	TokKeyword KwMutual happy_dollar_dollar -> cont 21#;
+	TokKeyword KwNoEta happy_dollar_dollar -> cont 22#;
+	TokKeyword KwOpen happy_dollar_dollar -> cont 23#;
+	TokKeyword KwPatternSyn happy_dollar_dollar -> cont 24#;
+	TokKeyword KwPostulate happy_dollar_dollar -> cont 25#;
+	TokKeyword KwPrimitive happy_dollar_dollar -> cont 26#;
+	TokKeyword KwPrivate happy_dollar_dollar -> cont 27#;
+	TokKeyword KwProp happy_dollar_dollar -> cont 28#;
+	TokKeyword KwPublic happy_dollar_dollar -> cont 29#;
+	TokKeyword KwQuote happy_dollar_dollar -> cont 30#;
+	TokKeyword KwQuoteContext happy_dollar_dollar -> cont 31#;
+	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 32#;
+	TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 33#;
+	TokKeyword KwRecord happy_dollar_dollar -> cont 34#;
+	TokKeyword KwRenaming happy_dollar_dollar -> cont 35#;
+	TokKeyword KwRewrite happy_dollar_dollar -> cont 36#;
+	TokKeyword KwSet happy_dollar_dollar -> cont 37#;
+	TokKeyword KwSyntax happy_dollar_dollar -> cont 38#;
+	TokKeyword KwTactic happy_dollar_dollar -> cont 39#;
+	TokKeyword KwTo happy_dollar_dollar -> cont 40#;
+	TokKeyword KwUnquote happy_dollar_dollar -> cont 41#;
+	TokKeyword KwUnquoteDecl happy_dollar_dollar -> cont 42#;
+	TokKeyword KwUnquoteDef happy_dollar_dollar -> cont 43#;
+	TokKeyword KwUsing happy_dollar_dollar -> cont 44#;
+	TokKeyword KwWhere happy_dollar_dollar -> cont 45#;
+	TokKeyword KwDo happy_dollar_dollar -> cont 46#;
+	TokKeyword KwWith happy_dollar_dollar -> cont 47#;
+	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 48#;
+	TokKeyword KwCATCHALL happy_dollar_dollar -> cont 49#;
+	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 50#;
+	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 51#;
+	TokKeyword KwCOMPILED_DATA_UHC happy_dollar_dollar -> cont 52#;
+	TokKeyword KwCOMPILED_EXPORT happy_dollar_dollar -> cont 53#;
+	TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 54#;
+	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 55#;
+	TokKeyword KwCOMPILED_UHC happy_dollar_dollar -> cont 56#;
+	TokKeyword KwDISPLAY happy_dollar_dollar -> cont 57#;
+	TokKeyword KwETA happy_dollar_dollar -> cont 58#;
+	TokKeyword KwHASKELL happy_dollar_dollar -> cont 59#;
+	TokKeyword KwIMPORT happy_dollar_dollar -> cont 60#;
+	TokKeyword KwIMPORT_UHC happy_dollar_dollar -> cont 61#;
+	TokKeyword KwFOREIGN happy_dollar_dollar -> cont 62#;
+	TokKeyword KwCOMPILE happy_dollar_dollar -> cont 63#;
+	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 64#;
+	TokKeyword KwINJECTIVE happy_dollar_dollar -> cont 65#;
+	TokKeyword KwINLINE happy_dollar_dollar -> cont 66#;
+	TokKeyword KwNOINLINE happy_dollar_dollar -> cont 67#;
+	TokKeyword KwMEASURE happy_dollar_dollar -> cont 68#;
+	TokKeyword KwNO_TERMINATION_CHECK happy_dollar_dollar -> cont 69#;
+	TokKeyword KwNO_POSITIVITY_CHECK happy_dollar_dollar -> cont 70#;
+	TokKeyword KwNON_TERMINATING happy_dollar_dollar -> cont 71#;
+	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 72#;
+	TokKeyword KwPOLARITY happy_dollar_dollar -> cont 73#;
+	TokKeyword KwWARNING_ON_USAGE happy_dollar_dollar -> cont 74#;
+	TokKeyword KwREWRITE happy_dollar_dollar -> cont 75#;
+	TokKeyword KwSTATIC happy_dollar_dollar -> cont 76#;
+	TokKeyword KwTERMINATING happy_dollar_dollar -> cont 77#;
+	TokSetN happy_dollar_dollar -> cont 78#;
+	TokTeX happy_dollar_dollar -> cont 79#;
+	TokComment happy_dollar_dollar -> cont 80#;
+	TokSymbol SymEllipsis happy_dollar_dollar -> cont 81#;
+	TokSymbol SymDotDot happy_dollar_dollar -> cont 82#;
+	TokSymbol SymDot happy_dollar_dollar -> cont 83#;
+	TokSymbol SymSemi happy_dollar_dollar -> cont 84#;
+	TokSymbol SymColon happy_dollar_dollar -> cont 85#;
+	TokSymbol SymEqual happy_dollar_dollar -> cont 86#;
+	TokSymbol SymUnderscore happy_dollar_dollar -> cont 87#;
+	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 88#;
+	TokSymbol SymArrow happy_dollar_dollar -> cont 89#;
+	TokSymbol SymLambda happy_dollar_dollar -> cont 90#;
+	TokSymbol SymAs happy_dollar_dollar -> cont 91#;
+	TokSymbol SymBar happy_dollar_dollar -> cont 92#;
+	TokSymbol SymOpenParen happy_dollar_dollar -> cont 93#;
+	TokSymbol SymCloseParen happy_dollar_dollar -> cont 94#;
+	TokSymbol SymOpenIdiomBracket happy_dollar_dollar -> cont 95#;
+	TokSymbol SymCloseIdiomBracket happy_dollar_dollar -> cont 96#;
+	TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 97#;
+	TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 98#;
+	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 99#;
+	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 100#;
+	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 101#;
+	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 102#;
+	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 103#;
+	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 104#;
+	TokSymbol SymClosePragma happy_dollar_dollar -> cont 105#;
+	TokId happy_dollar_dollar -> cont 106#;
+	TokQId happy_dollar_dollar -> cont 107#;
+	TokString happy_dollar_dollar -> cont 108#;
+	TokLiteral happy_dollar_dollar -> cont 109#;
+	_ -> happyError' (tk, [])
+	})
+
+happyError_ explist 110# tk = happyError' (tk, explist)
+happyError_ explist _ tk = happyError' (tk, explist)
+
+happyThen :: () => Parser a -> (a -> Parser b) -> Parser b
+happyThen = (>>=)
+happyReturn :: () => a -> Parser a
+happyReturn = (return)
+happyParse :: () => Happy_GHC_Exts.Int# -> Parser (HappyAbsSyn )
+
+happyNewToken :: () => Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+
+happyDoAction :: () => Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn )
+
+happyReduceArr :: () => Happy_Data_Array.Array Int (Happy_GHC_Exts.Int# -> Token -> Happy_GHC_Exts.Int# -> Happy_IntList -> HappyStk (HappyAbsSyn ) -> Parser (HappyAbsSyn ))
+
+happyThen1 :: () => Parser a -> (a -> Parser b) -> Parser b
+happyThen1 = happyThen
+happyReturn1 :: () => a -> Parser a
+happyReturn1 = happyReturn
+happyError' :: () => ((Token), [String]) -> Parser a
+happyError' tk = (\(tokens, explist) -> happyError) tk
+tokensParser = happySomeParser where
+ happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut10 x))
+
+exprParser = happySomeParser where
+ happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut39 x))
+
+exprWhereParser = happySomeParser where
+ happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut98 x))
+
+moduleParser = happySomeParser where
+ happySomeParser = happyThen (happyParse 3#) (\x -> happyReturn (happyOut13 x))
+
+moduleNameParser = happySomeParser where
+ happySomeParser = happyThen (happyParse 4#) (\x -> happyReturn (happyOut26 x))
+
+funclauseParser = happySomeParser where
+ happySomeParser = happyThen (happyParse 5#) (\x -> happyReturn (happyOut102 x))
+
+holeContentParser = happySomeParser where
+ happySomeParser = happyThen (happyParse 6#) (\x -> happyReturn (happyOut96 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 an expression followed by a where clause. Could be used in interactions.
+exprWhereParser :: Parser ExprWhere
+
+-- | Parse a module.
+moduleParser :: Parser Module
+
+
+{--------------------------------------------------------------------------
+    Happy stuff
+ --------------------------------------------------------------------------}
+
+-- | Required by Happy.
+happyError :: Parser a
+happyError = parseError "Parse error"
+
+
+{--------------------------------------------------------------------------
+    Utility functions
+ --------------------------------------------------------------------------}
+
+-- | Grab leading OPTIONS pragmas.
+takeOptionsPragmas :: [Declaration] -> ([Pragma], [Declaration])
+takeOptionsPragmas = spanJust $ \ d -> case d of
+  Pragma p@OptionsPragma{} -> Just p
+  _                        -> Nothing
+
+-- | Insert a top-level module if there is none.
+--   Also fix-up for the case the declarations in the top-level module
+--   are not indented (this is allowed as a special case).
+figureOutTopLevelModule :: [Declaration] -> [Declaration]
+figureOutTopLevelModule ds =
+  case spanAllowedBeforeModule ds of
+    -- Andreas 2016-02-01, issue #1388.
+    -- We need to distinguish two additional cases.
+
+    -- Case 1: Regular file layout: imports followed by one module. Nothing to do.
+    (ds0, [ Module{} ]) -> ds
+
+    -- Case 2: The declarations in the module are not indented.
+    -- This is allowed for the top level module, and thus rectified here.
+    (ds0, Module r m tel [] : ds2) -> ds0 ++ [Module r m tel ds2]
+
+    -- Case 3: There is a module with indented declarations,
+    -- followed by non-indented declarations.  This should be a
+    -- parse error and be reported later (see @toAbstract TopLevel{}@),
+    -- thus, we do not do anything here.
+    (ds0, Module r m tel ds1 : ds2) -> ds  -- Gives parse error in scope checker.
+    -- OLD code causing issue 1388:
+    -- (ds0, Module r m tel ds1 : ds2) -> ds0 ++ [Module r m tel $ ds1 ++ ds2]
+
+    -- Case 4: a top-level module declaration is missing.
+    -- Andreas, 2017-01-01, issue #2229:
+    -- Put everything (except OPTIONS pragmas) into an anonymous module.
+    _ -> ds0 ++ [Module r (QName $ noName r) [] ds1]
+      where
+      (ds0, ds1) = (`span` ds) $ \case
+        Pragma OptionsPragma{} -> True
+        _ -> False
+      -- Andreas, 2017-05-17, issue #2574.
+      -- Since the module noName will act as jump target, it needs a range.
+      -- We use the beginning of the file as beginning of the top level module.
+      r = beginningOfFile $ getRange ds1
+
+-- | Create a name from a string.
+
+mkName :: (Interval, String) -> Parser Name
+mkName (i, s) = do
+    let xs = C.stringNameParts s
+    mapM_ isValidId xs
+    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"
+    return $ Name (getRange i) xs
+    where
+        isValidId Hole   = return ()
+        isValidId (Id y) = do
+          let x = rawNameToString y
+              err = "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"
+          case parse defaultParseFlags [0] (lexer return) x of
+            ParseOk _ TokId{}  -> return ()
+            ParseFailed{}      -> fail err
+            ParseOk _ TokEOF{} -> fail err
+            ParseOk _ t   -> fail . ((err ++ " because it is ") ++) $ case t of
+              TokId{}       -> __IMPOSSIBLE__
+              TokQId{}      -> __IMPOSSIBLE__ -- "qualified"
+              TokKeyword{}  -> "a keyword"
+              TokLiteral{}  -> "a literal"
+              TokSymbol s _ -> case s of
+                SymDot               -> __IMPOSSIBLE__ -- "reserved"
+                SymSemi              -> "used to separate declarations"
+                SymVirtualSemi       -> __IMPOSSIBLE__
+                SymBar               -> "used for with-arguments"
+                SymColon             -> "part of declaration syntax"
+                SymArrow             -> "the function arrow"
+                SymEqual             -> "part of declaration syntax"
+                SymLambda            -> "used for lambda-abstraction"
+                SymUnderscore        -> "used for anonymous identifiers"
+                SymQuestionMark      -> "a meta variable"
+                SymAs                -> "used for as-patterns"
+                SymOpenParen         -> "used to parenthesize expressions"
+                SymCloseParen        -> "used to parenthesize expressions"
+                SymOpenIdiomBracket  -> "an idiom bracket"
+                SymCloseIdiomBracket -> "an idiom bracket"
+                SymDoubleOpenBrace   -> "used for instance arguments"
+                SymDoubleCloseBrace  -> "used for instance arguments"
+                SymOpenBrace         -> "used for hidden arguments"
+                SymCloseBrace        -> "used for hidden arguments"
+                SymOpenVirtualBrace  -> __IMPOSSIBLE__
+                SymCloseVirtualBrace -> __IMPOSSIBLE__
+                SymOpenPragma        -> __IMPOSSIBLE__ -- "used for pragmas"
+                SymClosePragma       -> __IMPOSSIBLE__ -- "used for pragmas"
+                SymEllipsis          -> __IMPOSSIBLE__ -- "used for function clauses"
+                SymDotDot            -> __IMPOSSIBLE__ -- "a modality"
+                SymEndComment        -> "the end-of-comment brace"
+              TokString{}   -> __IMPOSSIBLE__
+              TokSetN{}     -> "a type universe"
+              TokTeX{}      -> __IMPOSSIBLE__  -- used by the LaTeX backend only
+              TokComment{}  -> __IMPOSSIBLE__
+              TokDummy{}    -> __IMPOSSIBLE__
+              TokEOF{}      -> __IMPOSSIBLE__
+
+        -- 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)
+
+-- | Create a qualified name from a string (used in pragmas).
+--   Range of each name component is range of whole string.
+--   TODO: precise ranges!
+
+pragmaQName :: (Interval, String) -> Parser QName
+pragmaQName (r, s) = do
+  let ss = chopWhen (== '.') s
+  mkQName $ map (r,) ss
+
+-- | Polarity parser.
+
+polarity :: (Interval, String) -> Parser (Range, Occurrence)
+polarity (i, s) =
+  case s of
+    "_"  -> ret Unused
+    "++" -> ret StrictPos
+    "+"  -> ret JustPos
+    "-"  -> ret JustNeg
+    "*"  -> ret Mixed
+    _    -> fail $ "Not a valid polarity: " ++ s
+  where
+  ret x = return (getRange i, x)
+
+recoverLayout :: [(Interval, String)] -> String
+recoverLayout [] = ""
+recoverLayout xs@((i, _) : _) = go (iStart i) xs
+  where
+    c0 = posCol (iStart i)
+
+    go cur [] = ""
+    go cur ((i, s) : xs) = padding cur (iStart i) ++ s ++ go (iEnd i) xs
+
+    padding Pn{ posLine = l1, posCol = c1 } Pn{ posLine = l2, posCol = c2 }
+      | l1 < l2  = genericReplicate (l2 - l1) '\n' ++ genericReplicate (max 0 (c2 - c0)) ' '
+      | l1 == l2 = genericReplicate (c2 - c1) ' '
+
+ensureUnqual :: QName -> Parser Name
+ensureUnqual (QName x) = return x
+ensureUnqual q@Qual{}  = parseError' (rStart' $ getRange q) "Qualified name not allowed here"
+
+-- | 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
+
+-- | Build a telescoping let (let Ds)
+tLet :: Range -> [Declaration] -> TypedBindings
+tLet r = TypedBindings r . Arg defaultArgInfo . TLet r
+
+-- | Converts lambda bindings to typed bindings.
+addType :: LamBinding -> TypedBindings
+addType (DomainFull b)   = b
+addType (DomainFree info x) = TypedBindings r $ Arg info $ TBind r [pure x] $ Underscore r Nothing
+  where r = getRange x
+
+-- | Build a do-statement
+buildDoStmt :: Expr -> [LamClause] -> Parser DoStmt
+buildDoStmt (RawApp r [e]) cs = buildDoStmt e cs
+buildDoStmt (Let r ds Nothing) [] = return $ DoLet r ds
+buildDoStmt (RawApp r es) cs
+  | (es1, arr : es2) <- break isLeftArrow es =
+    case filter isLeftArrow es2 of
+      arr : _ -> parseError' (rStart' $ getRange arr) $ "Unexpected " ++ prettyShow arr
+      [] -> DoBind (getRange arr)
+              <$> exprToPattern (RawApp (getRange es1) es1)
+              <*> pure (RawApp (getRange es2) es2)
+              <*> pure cs
+  where
+    isLeftArrow (Ident (QName (Name _ [Id arr]))) = elem arr ["<-", "←"]
+    isLeftArrow _ = False
+buildDoStmt e (_ : _) = parseError' (rStart' $ getRange e) "Only pattern matching do-statements can have where clauses."
+buildDoStmt e [] = return $ DoThen e
+
+mergeImportDirectives :: [ImportDirective] -> Parser ImportDirective
+mergeImportDirectives is = do
+  i <- foldl merge (return defaultImportDir) is
+  verifyImportDirective i
+  where
+    merge mi i2 = do
+      i1 <- mi
+      let err = parseError' (rStart' $ getRange i2) "Cannot mix using and hiding module directives"
+      return $ ImportDirective
+        { importDirRange = fuseRange i1 i2
+        , using          = mappend (using i1) (using i2)
+        , hiding         = hiding i1 ++ hiding i2
+        , impRenaming    = impRenaming i1 ++ impRenaming i2
+        , publicOpen     = publicOpen i1 || publicOpen i2 }
+
+-- | 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 (using i) ++ hiding i ++ map renFrom (impRenaming i)
+        names (Using xs)    = xs
+        names UseEverything = []
+
+data RecordDirective
+   = Induction (Ranged Induction)
+   | Constructor (Name, IsInstance)
+   | Eta         (Ranged HasEta)
+   deriving (Eq,Show)
+
+verifyRecordDirectives :: [RecordDirective] -> Parser (Maybe (Ranged Induction), Maybe HasEta, Maybe (Name, IsInstance))
+verifyRecordDirectives xs | null rs = return (ltm is, ltm es, ltm cs)
+                          | otherwise = let Just pos = rStart' $ (head rs) in
+                                          parseErrorAt pos $ "Repeated record directives at: \n" ++ intercalate "\n" (map show rs)
+
+ where
+  ltm :: [a] -> Maybe a
+  ltm [] = Nothing
+  ltm (x:xs) = Just x
+  errorFromList [] = []
+  errorFromList [x] = []
+  errorFromList xs = map getRange xs
+  rs = sort (concat ([errorFromList is, errorFromList es', errorFromList cs]))
+  is = [ i | Induction i <- xs ]
+  es' = [ i | Eta i <- xs ]
+  es = map rangedThing es'
+  cs = [ i | Constructor i <- 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
+
+
+-- | 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 = LHS <$> exprToPattern e
+
+-- | Turn an expression into a pattern. Fails if the expression is not a
+--   valid pattern.
+exprToPattern :: Expr -> Parser Pattern
+exprToPattern e = do
+    let Just pos = rStart' $ getRange e
+        failure = parseErrorAt pos $ "Not a valid pattern: " ++ show 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
+        Quote r                 -> return $ QuoteP r
+        Rec r es | Just fs <- mapM maybeLeft es -> do
+          RecP r <$> T.mapM (T.mapM exprToPattern) fs
+        Ellipsis r              -> return $ EllipsisP r
+        -- WithApp has already lost the range information of the bars '|'
+        WithApp r e es          -> do
+          p  <- exprToPattern e
+          ps <- forM es $ \ e -> defaultNamedArg . WithP (getRange e) <$> exprToPattern e  -- TODO #2822: Range!
+          return $ foldl AppP p ps
+        _ -> failure
+
+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
+
+stripSingletonRawApp :: Expr -> Expr
+stripSingletonRawApp (RawApp _ [e]) = stripSingletonRawApp e
+stripSingletonRawApp e = e
+
+isEqual :: Expr -> Maybe (Expr, Expr)
+isEqual e =
+  case stripSingletonRawApp e of
+    Equal _ a b -> Just (stripSingletonRawApp a, stripSingletonRawApp b)
+    _           -> Nothing
+
+maybeNamed :: Expr -> Named_ Expr
+maybeNamed e =
+  case isEqual e of
+    Just (Ident (QName x), b) -> named (Ranged (getRange x) (nameToRawName x)) b
+    _                         -> unnamed e
+
+patternSynArgs :: [Either Hiding LamBinding] -> Parser [Arg Name]
+patternSynArgs = mapM pSynArg
+  where
+    pSynArg Left{}                   = parseError "Absurd patterns are not allowed in pattern synonyms"
+    pSynArg (Right DomainFull{})     = parseError "Unexpected type signature in pattern synonym argument"
+    pSynArg (Right (DomainFree a x))
+      | getHiding a `notElem` [Hidden, NotHidden] = parseError $ show (getHiding a) ++ " arguments not allowed to pattern synonyms"
+      | getRelevance a /= Relevant                = parseError "Arguments to pattern synonyms must be relevant"
+      | otherwise                                 = return $ Arg a (boundName x)
+
+parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."
+
+{- RHS or type signature -}
+
+data RHSOrTypeSigs
+ = JustRHS RHS
+ | TypeSigsRHS Expr
+ deriving Show
+
+patternToNames :: Pattern -> Parser [(ArgInfo, Name)]
+patternToNames p =
+  case p of
+    IdentP (QName i)         -> return [(defaultArgInfo, i)]
+    WildP r                  -> return [(defaultArgInfo, C.noName r)]
+    DotP _ (Ident (QName i)) -> return [(setRelevance Irrelevant defaultArgInfo, i)]
+    RawAppP _ ps             -> concat <$> mapM patternToNames ps
+    _                        -> parseError $
+      "Illegal name in type signature: " ++ prettyShow p
+
+funClauseOrTypeSigs :: LHS -> RHSOrTypeSigs -> WhereClause -> Parser [Declaration]
+funClauseOrTypeSigs lhs mrhs wh = do
+  -- traceShowM lhs
+  case mrhs of
+    JustRHS rhs   -> return [FunClause lhs rhs wh False]
+    TypeSigsRHS e -> case wh of
+      NoWhere -> case lhs of
+        LHS p _ _ | hasEllipsis p -> parseError "The ellipsis ... cannot have a type signature"
+        LHS _ _ (_:_) -> parseError "Illegal: with in type signature"
+        LHS _ (_:_) _ -> parseError "Illegal: rewrite in type signature"
+        LHS p _ _ | hasWithPatterns p -> parseError "Illegal: with patterns in type signature"
+        LHS p [] []  -> map (\ (x, y) -> TypeSig x y e) <$> patternToNames p
+      _ -> parseError "A type signature cannot have a where clause"
+
+parseDisplayPragma :: Range -> Position -> String -> Parser Pragma
+parseDisplayPragma r pos s =
+  case parsePosString pos defaultParseFlags [normal] funclauseParser s of
+    ParseOk s [FunClause (LHS lhs [] []) (RHS rhs) NoWhere ca] | null (parseInp s) ->
+      return $ DisplayPragma r lhs rhs
+    _ -> parseError "Invalid DISPLAY pragma. Should have form {-# DISPLAY LHS = RHS #-}."
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command-line>" #-}
+{-# LINE 10 "<command-line>" #-}
+# 1 "/usr/include/stdc-predef.h" 1 3 4
+
+# 17 "/usr/include/stdc-predef.h" 3 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 10 "<command-line>" #-}
+{-# LINE 1 "/usr/local/stow/ghc-8.4.3/lib/ghc-8.4.3/include/ghcversion.h" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 10 "<command-line>" #-}
+{-# LINE 1 "/tmp/ghc16748_0/ghc_2.h" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{-# LINE 10 "<command-line>" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)
+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)
+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)
+#else
+#define LT(n,m) (n Happy_GHC_Exts.<# m)
+#define GTE(n,m) (n Happy_GHC_Exts.>=# m)
+#define EQ(n,m) (n Happy_GHC_Exts.==# m)
+#endif
+{-# LINE 43 "templates/GenericTemplate.hs" #-}
+
+data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList
+
+
+
+
+
+
+
+{-# LINE 65 "templates/GenericTemplate.hs" #-}
+
+{-# LINE 75 "templates/GenericTemplate.hs" #-}
+
+{-# LINE 84 "templates/GenericTemplate.hs" #-}
+
+infixr 9 `HappyStk`
+data HappyStk a = HappyStk a (HappyStk a)
+
+-----------------------------------------------------------------------------
+-- starting the parse
+
+happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
+
+-----------------------------------------------------------------------------
+-- Accepting the parse
+
+-- If the current token is 0#, it means we've just accepted a partial
+-- parse (a %partial parser).  We must ignore the saved token on the top of
+-- the stack in this case.
+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =
+        happyReturn1 ans
+happyAccept j tk st sts (HappyStk ans _) = 
+        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)
+
+-----------------------------------------------------------------------------
+-- Arrays only: do the next action
+
+
+
+happyDoAction i tk st
+        = {- nothing -}
+
+
+          case action of
+                0#           -> {- nothing -}
+                                     happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Int)) i tk st
+                -1#          -> {- nothing -}
+                                     happyAccept i tk st
+                n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}
+
+                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st
+                                                   where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))
+                n                 -> {- nothing -}
+
+
+                                     happyShift new_state i tk st
+                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))
+   where off    = happyAdjustOffset (indexShortOffAddr happyActOffsets st)
+         off_i  = (off Happy_GHC_Exts.+#  i)
+         check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))
+                  then EQ(indexShortOffAddr happyCheck off_i, i)
+                  else False
+         action
+          | check     = indexShortOffAddr happyTable off_i
+          | otherwise = indexShortOffAddr happyDefActions st
+
+
+
+
+indexShortOffAddr (HappyA# arr) off =
+        Happy_GHC_Exts.narrow16Int# i
+  where
+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)
+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))
+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))
+        off' = off Happy_GHC_Exts.*# 2#
+
+
+
+
+{-# INLINE happyLt #-}
+happyLt x y = LT(x,y)
+
+
+readArrayBit arr bit =
+    Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `mod` 16)
+  where unbox_int (Happy_GHC_Exts.I# x) = x
+
+
+
+
+
+
+data HappyAddr = HappyA# Happy_GHC_Exts.Addr#
+
+
+-----------------------------------------------------------------------------
+-- HappyState data type (not arrays)
+
+{-# LINE 180 "templates/GenericTemplate.hs" #-}
+
+-----------------------------------------------------------------------------
+-- Shifting a token
+
+happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
+--     trace "shifting the error token" $
+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)
+
+happyShift new_state i tk st sts stk =
+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)
+
+-- happyReduce is specialised for the common cases.
+
+happySpecReduce_0 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_0 nt fn j tk st@((action)) sts stk
+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)
+
+happySpecReduce_1 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')
+     = let r = fn v1 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_2 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')
+     = let r = fn v1 v2 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_3 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
+     = let r = fn v1 v2 v3 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happyReduce k i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyReduce k nt fn j tk st sts stk
+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of
+         sts1@((HappyCons (st1@(action)) (_))) ->
+                let r = fn stk in  -- it doesn't hurt to always seq here...
+                happyDoSeq r (happyGoto nt j tk st1 sts1 r)
+
+happyMonadReduce k nt fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyMonadReduce k nt fn j tk st sts stk =
+      case happyDrop k (HappyCons (st) (sts)) of
+        sts1@((HappyCons (st1@(action)) (_))) ->
+          let drop_stk = happyDropStk k stk in
+          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))
+
+happyMonad2Reduce k nt fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyMonad2Reduce k nt fn j tk st sts stk =
+      case happyDrop k (HappyCons (st) (sts)) of
+        sts1@((HappyCons (st1@(action)) (_))) ->
+         let drop_stk = happyDropStk k stk
+
+             off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)
+             off_i = (off Happy_GHC_Exts.+#  nt)
+             new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+          in
+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
+
+happyDrop 0# l = l
+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t
+
+happyDropStk 0# l = l
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs
+
+-----------------------------------------------------------------------------
+-- Moving to a new state after a reduction
+
+
+happyGoto nt j tk st = 
+   {- nothing -}
+   happyDoAction j tk new_state
+   where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)
+         off_i = (off Happy_GHC_Exts.+#  nt)
+         new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+-----------------------------------------------------------------------------
+-- Error recovery (0# is the error token)
+
+-- parse error if we are in recovery and we fail again
+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
+--      trace "failing" $ 
+        happyError_ explist i tk
+
+{-  We don't need state discarding for our restricted implementation of
+    "error".  In fact, it can cause some bogus parses, so I've disabled it
+    for now --SDM
+
+-- discard a state
+happyFail  0# tk old_st (HappyCons ((action)) (sts)) 
+                                                (saved_tok `HappyStk` _ `HappyStk` stk) =
+--      trace ("discarding state, depth " ++ show (length stk))  $
+        happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))
+-}
+
+-- Enter error recovery: generate an error token,
+--                       save the old token and carry on.
+happyFail explist i tk (action) sts stk =
+--      trace "entering error recovery" $
+        happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)
+
+-- Internal happy errors:
+
+notHappyAtAll :: a
+notHappyAtAll = error "Internal Happy error\n"
+
+-----------------------------------------------------------------------------
+-- Hack to get the typechecker to accept our action functions
+
+
+happyTcHack :: Happy_GHC_Exts.Int# -> a -> a
+happyTcHack x y = y
+{-# INLINE happyTcHack #-}
+
+
+-----------------------------------------------------------------------------
+-- Seq-ing.  If the --strict flag is given, then Happy emits 
+--      happySeq = happyDoSeq
+-- otherwise it emits
+--      happySeq = happyDontSeq
+
+happyDoSeq, happyDontSeq :: a -> b -> b
+happyDoSeq   a b = a `seq` b
+happyDontSeq a b = b
+
+-----------------------------------------------------------------------------
+-- Don't inline any functions from the template.  GHC has a nasty habit
+-- of deciding to inline happyGoto everywhere, which increases the size of
+-- the generated parser quite a bit.
+
+
+{-# NOINLINE happyDoAction #-}
+{-# NOINLINE happyTable #-}
+{-# NOINLINE happyCheck #-}
+{-# NOINLINE happyActOffsets #-}
+{-# NOINLINE happyGotoOffsets #-}
+{-# NOINLINE happyDefActions #-}
+
+{-# NOINLINE happyShift #-}
+{-# NOINLINE happySpecReduce_0 #-}
+{-# NOINLINE happySpecReduce_1 #-}
+{-# NOINLINE happySpecReduce_2 #-}
+{-# NOINLINE happySpecReduce_3 #-}
+{-# NOINLINE happyReduce #-}
+{-# NOINLINE happyMonadReduce #-}
+{-# NOINLINE happyGoto #-}
+{-# NOINLINE happyFail #-}
+
+-- end of Happy Template.
diff --git a/doc/user-manual.pdf b/doc/user-manual.pdf
new file mode 100644
Binary files /dev/null and b/doc/user-manual.pdf differ
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
@@ -4,7 +4,6 @@
 
 module Main (main) where
 
-import Control.Applicative
 import Control.Exception
 import Control.Monad
 import Data.Char
diff --git a/src/data/JS/agda-rts.js b/src/data/JS/agda-rts.js
--- a/src/data/JS/agda-rts.js
+++ b/src/data/JS/agda-rts.js
@@ -76,11 +76,17 @@
   };
 };
 
+exports.primFloatNumericalLess = function(x) {
+  return function(y) {
+    return x < y;
+  };
+};
+
 exports.uprimFloatEquality = function(x, y) {
   return Object.is(x,y);
 };
 
-exports.primFloatNumericalLess = function(x) {
+exports.primFloatLess = function(x) {
   return function(y) {
     if(x == Number.NEGATIVE_INFINITY) {
       return y != Number.NEGATIVE_INFINITY;
@@ -91,7 +97,7 @@
     } else if(isNaN(y)) {
       return false;
     } else {
-      return x<y;
+      return x < y || Object.is(x, -0.0) && Object.is(y, 0.0);
     }
   };
 };
@@ -188,4 +194,20 @@
 };
 exports.primQNameFixity = function(x) {
   return x["fixity"];
+};
+
+// Words
+var twoTo64 = exports.primIntegerFromString("18446744073709551616");
+
+exports.primWord64ToNat = function(x) { return x; };
+exports.primWord64FromNat = function(x) { return x.remainder(twoTo64); };
+
+exports.uprimWord64Plus = function(x,y) {
+  return x.add(y).remainder(twoTo64);
+};
+exports.uprimWord64Minus = function(x,y) {
+  return x.add(twoTo64).subtract(y).remainder(twoTo64);
+};
+exports.uprimWord64Multiply = function(x,y) {
+  return x.multiply(y).remainder(twoTo64);
 };
diff --git a/src/data/MAlonzo/src/MAlonzo/RTE.hs b/src/data/MAlonzo/src/MAlonzo/RTE.hs
--- a/src/data/MAlonzo/src/MAlonzo/RTE.hs
+++ b/src/data/MAlonzo/src/MAlonzo/RTE.hs
@@ -1,11 +1,20 @@
+{-# LANGUAGE CPP #-}
 module MAlonzo.RTE where
 
 import Unsafe.Coerce
-import GHC.Prim
+#if __GLASGOW_HASKELL__ >= 802
+import qualified GHC.Exts as GHC (Any)
+#else
+import qualified GHC.Prim as GHC (Any)
+#endif
+import qualified Data.Word
 import Numeric.IEEE ( IEEE(identicalIEEE) )
 
+type AgdaAny = GHC.Any
+
 -- Special version of coerce that plays well with rules.
 {-# INLINE [1] coe #-}
+coe :: a -> b
 coe = unsafeCoerce
 {-# RULES "coerce-id" forall (x :: a) . coe x = x #-}
 
@@ -61,6 +70,9 @@
 eqNumFloat :: Double -> Double -> Bool
 eqNumFloat = (==)
 
+ltNumFloat :: Double -> Double -> Bool
+ltNumFloat = (<)
+
 negativeZero :: Double
 negativeZero = -0.0
 
@@ -85,11 +97,55 @@
   | isNaN x && isNaN y         = EQ
   | isNaN x                    = LT
   | isNaN y                    = GT
-  | otherwise                  = compare x y
+  | otherwise                  = compare (x, isNegZero y) (y, isNegZero x)
   where
-    isNegInf z = z < 0 && isInfinite z
+    isNegInf  z = z < 0 && isInfinite z
+    isNegZero z = identicalIEEE z negativeZero
 
-ltNumFloat :: Double -> Double -> Bool
-ltNumFloat x y = case compareFloat x y of
+ltFloat :: Double -> Double -> Bool
+ltFloat x y = case compareFloat x y of
                 LT -> True
                 _  -> False
+
+-- Words --
+
+type Word64 = Data.Word.Word64
+
+word64ToNat :: Word64 -> Integer
+word64ToNat = fromIntegral
+
+word64FromNat :: Integer -> Word64
+word64FromNat = fromIntegral
+
+{-# INLINE add64 #-}
+add64 :: Word64 -> Word64 -> Word64
+add64 = (+)
+
+{-# INLINE sub64 #-}
+sub64 :: Word64 -> Word64 -> Word64
+sub64 = (-)
+
+{-# INLINE mul64 #-}
+mul64 :: Word64 -> Word64 -> Word64
+mul64 = (*)
+
+{-# INLINE quot64 #-}
+quot64 :: Word64 -> Word64 -> Word64
+quot64 = quot
+
+{-# INLINE rem64 #-}
+rem64 :: Word64 -> Word64 -> Word64
+rem64 = rem
+
+{-# INLINE eq64 #-}
+eq64 :: Word64 -> Word64 -> Bool
+eq64 = (==)
+
+{-# INLINE lt64 #-}
+lt64 :: Word64 -> Word64 -> Bool
+lt64 = (<)
+
+-- Support for musical coinduction.
+
+data Inf a            = Sharp { flat :: a }
+type Infinity level a = Inf a
diff --git a/src/data/agda.sty b/src/data/agda.sty
--- a/src/data/agda.sty
+++ b/src/data/agda.sty
@@ -5,7 +5,7 @@
 \ProvidesPackage{agda}
 
 \RequirePackage{ifxetex, ifluatex, xifthen, xcolor, polytable, etoolbox,
-                calc}
+                calc, environ}
 
 % https://tex.stackexchange.com/questions/47576/combining-ifxetex-and-ifluatex-with-the-logical-or-operation
 \newif\ifxetexorluatex
@@ -35,21 +35,49 @@
   \@AgdaEnableLinkstrue
 }
 
-% If the "nofontsetup" option is used, then some font packages are
-% loaded, but specific fonts are not selected.
+% If the "nofontsetup" option is used, then the package does not
+% select any fonts, and it does not change the font encoding.
 \newif\if@AgdaSetupFonts\@AgdaSetupFontstrue
 \DeclareOption{nofontsetup}{
   \@AgdaSetupFontsfalse
 }
 
+% If the "noinputencodingsetup" option is used, then the package does
+% not change the input encoding, and it does not load the `ucs`
+% package.
+\newif\if@AgdaSetupInputEncoding\@AgdaSetupInputEncodingtrue
+\DeclareOption{noinputencodingsetup}{
+  \@AgdaSetupInputEncodingfalse
+}
+
 \ProcessOptions\relax
 
 % ----------------------------------------------------------------------
+% Input encoding setup
+
+\if@AgdaSetupInputEncoding
+  \ifxetexorluatex
+
+    \providecommand{\DeclareUnicodeCharacter}[2]{\relax}
+
+  \else
+
+    \RequirePackage{ucs}
+    \RequirePackage[utf8x]{inputenc}
+
+  \fi
+\fi
+
+% ----------------------------------------------------------------------
 % Font setup
 
-% XeLaTeX or LuaLaTeX
-\ifxetexorluatex
+\tracinglostchars=2 % If the font is missing some symbol, then say
+                    % so in the compilation output.
 
+\if@AgdaSetupFonts
+  % XeLaTeX or LuaLaTeX
+  \ifxetexorluatex
+
     % Hack to get the amsthm package working.
     % https://tex.stackexchange.com/questions/130491/xelatex-error-paragraph-ended-before-tempa-was-complete
     \let\AgdaOpenBracket\[\let\AgdaCloseBracket\]
@@ -57,38 +85,33 @@
     \let\[\AgdaOpenBracket\let\]\AgdaCloseBracket
     \RequirePackage{unicode-math}
 
-    \tracinglostchars=2 % If the font is missing some symbol, then say
-                        % so in the compilation output.
+    \setmainfont
+      [ Ligatures      = TeX
+      , BoldItalicFont = xits-bolditalic.otf
+      , BoldFont       = xits-bold.otf
+      , ItalicFont     = xits-italic.otf
+      ]
+      {xits-regular.otf}
 
-    \if@AgdaSetupFonts
-      \setmainfont
-        [ Ligatures      = TeX
-        , BoldItalicFont = xits-bolditalic.otf
-        , BoldFont       = xits-bold.otf
-        , ItalicFont     = xits-italic.otf
-        ]
-        {xits-regular.otf}
+    \setmathfont{xits-math.otf}
+    \setmonofont[Mapping=tex-text]{FreeMono.otf}
 
-      \setmathfont{xits-math.otf}
-      \setmonofont[Mapping=tex-text]{FreeMono.otf}
+    % Make mathcal and mathscr appear as different.
+    % https://tex.stackexchange.com/questions/120065/xetex-what-happened-to-mathcal-and-mathscr
+    \setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{xits-math.otf}
+    \setmathfont[range=\mathscr]{xits-math.otf}
 
-      % Make mathcal and mathscr appear as different.
-      % https://tex.stackexchange.com/questions/120065/xetex-what-happened-to-mathcal-and-mathscr
-      \setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{xits-math.otf}
-      \setmathfont[range=\mathscr]{xits-math.otf}
-    \fi
+  % pdfLaTeX
+  \else
 
-    \providecommand{\DeclareUnicodeCharacter}[2]{\relax}
+    % https://tex.stackexchange.com/questions/1774/how-to-insert-pipe-symbol-in-latex
+    \RequirePackage[T1]{fontenc}
 
-% pdfLaTeX
-\else
-    \RequirePackage{ucs, amsfonts, amssymb}
+    \RequirePackage{amsfonts, amssymb}
     \RequirePackage[safe]{tipa} % See page 12 of the tipa manual for what
                                 % safe does.
 
-    % https://tex.stackexchange.com/questions/1774/how-to-insert-pipe-symbol-in-latex
-    \RequirePackage[T1]{fontenc}
-    \RequirePackage[utf8x]{inputenc}
+  \fi
 \fi
 
 % ----------------------------------------------------------------------
@@ -201,7 +224,6 @@
     \definecolor{AgdaNumber}       {HTML}{000000}
     \definecolor{AgdaSymbol}       {HTML}{000000}
     \definecolor{AgdaPrimitiveType}{HTML}{000000}
-    \definecolor{AgdaOperator}     {HTML}{000000}
 
     % NameKind colours.
     \definecolor{AgdaBound}                 {HTML}{000000}
@@ -239,7 +261,6 @@
     \definecolor{AgdaNumber}       {HTML}{000000}
     \definecolor{AgdaSymbol}       {HTML}{000000}
     \definecolor{AgdaPrimitiveType}{HTML}{0000CD}
-    \definecolor{AgdaOperator}     {HTML}{000000}
 
     % NameKind colours.
     \definecolor{AgdaBound}                 {HTML}{A020F0}
@@ -276,7 +297,6 @@
     \definecolor{AgdaNumber}       {HTML}{A020F0}
     \definecolor{AgdaSymbol}       {HTML}{404040}
     \definecolor{AgdaPrimitiveType}{HTML}{0000CD}
-    \definecolor{AgdaOperator}     {HTML}{000000}
 
     % NameKind colours.
     \definecolor{AgdaBound}                 {HTML}{000000}
@@ -324,8 +344,9 @@
     {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaSymbol}{#1}}}}
 \newcommand{\AgdaPrimitiveType}[1]
     {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaPrimitiveType}{#1}}}}
-\newcommand{\AgdaOperator}    [1]
-    {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaOperator}{#1}}}}
+% Note that, in code generated by the LaTeX backend, \AgdaOperator is
+% always applied to a NameKind command.
+\newcommand{\AgdaOperator}    [1]{#1}
 
 % NameKind commands.
 
@@ -383,10 +404,16 @@
 \newcommand{\AgdaIncompletePattern} [1]{\colorbox{AgdaIncompletePattern}{#1}}
 \newcommand{\AgdaError}             [1]
     {\AgdaFontStyle{\textcolor{AgdaError}{\underline{#1}}}}
+\newcommand{\AgdaCatchallClause}    [1]{#1} % feel free to change this
 
+% Used to hide code from LaTeX.
+%
+% Note that this macro has been deprecated in favour of giving the
+% hide argument to the code environment.
+\long\def\AgdaHide#1{\ignorespaces}
+
 % Misc.
 \newcommand{\AgdaHole}[1]{\colorbox{AgdaHole}{#1}}
-\long\def\AgdaHide#1{\ignorespaces} % Used to hide code from LaTeX.
 
 % ----------------------------------------------------------------------
 % The code environment.
@@ -404,19 +431,19 @@
 %
 % The implementation comes from lhs2TeX's polycode.fmt, written by
 % Andres Löh.
-\newcommand{\AgdaNewlineWithVerticalSpace}[1]{%
+\newcommand{\Agda@NewlineWithVerticalSpace}[1]{%
   {\parskip=0pt\parindent=0pt\par\vskip #1\noindent}}
 
-% 0: No space around code. 1: Space around code.
-\newcounter{Agda@SpaceAroundCode}
+% Should there be space around code?
+\newboolean{Agda@SpaceAroundCode}
 
 % Use this command to avoid extra space around code blocks.
 \newcommand{\AgdaNoSpaceAroundCode}{%
-  \setcounter{Agda@SpaceAroundCode}{0}}
+  \setboolean{Agda@SpaceAroundCode}{false}}
 
 % Use this command to include extra space around code blocks.
 \newcommand{\AgdaSpaceAroundCode}{%
-  \setcounter{Agda@SpaceAroundCode}{1}}
+  \setboolean{Agda@SpaceAroundCode}{true}}
 
 % By default space is inserted around code blocks.
 \AgdaSpaceAroundCode{}
@@ -447,10 +474,9 @@
 %   \begin{code}
 %     visible
 %   \end{code}
-%   \AgdaHide{
-%   \begin{code}
+%   \begin{code}[hide]
 %     hidden
-%   \end{code}}
+%   \end{code}
 %   \begin{code}
 %     visible
 %   \end{code}
@@ -461,10 +487,7 @@
 %
 % The AgdaSuppressSpace environment ensures that extra space is only
 % inserted before the first code block, and after the last one (but
-% not if \AgdaNoSpaceAroundCode{} is used).
-%
-% The environment takes one argument, the number of wrapped code
-% blocks (excluding hidden ones). Example usage:
+% not if \AgdaNoSpaceAroundCode{} is used). Example usage:
 %
 %   \begin{AgdaAlign}
 %   \begin{code}
@@ -472,15 +495,14 @@
 %       more code
 %   \end{code}
 %   Explanation...
-%   \begin{AgdaSuppressSpace}{2}
+%   \begin{AgdaSuppressSpace}
 %   \begin{code}
 %     aligned with "code"
 %       aligned with "more code"
 %   \end{code}
-%   \AgdaHide{
-%   \begin{code}
+%   \begin{code}[hide]
 %     hidden code
-%   \end{code}}
+%   \end{code}
 %   \begin{code}
 %       also aligned with "more code"
 %   \end{code}
@@ -492,49 +514,82 @@
 % There is also a combined environment, AgdaMultiCode, that combines
 % the effects of AgdaAlign and AgdaSuppressSpace.
 
-% 0: AgdaAlign is not active. 1: AgdaAlign is active.
-\newcounter{Agda@Align}
-\setcounter{Agda@Align}{0}
+% The number of the current/next code block (excluding hidden ones).
+\newcounter{Agda@Current}
+\setcounter{Agda@Current}{0}
 
-% The current code block.
-\newcounter{Agda@AlignCurrent}
+% The number of the previous code block (excluding hidden ones), used
+% locally in \Agda@SuppressEnd.
+\newcounter{Agda@Previous}
 
+% Is AgdaAlign active?
+\newboolean{Agda@Align}
+\setboolean{Agda@Align}{false}
+
+% The number of the first code block (if any) in a given AgdaAlign
+% environment.
+\newcounter{Agda@AlignStart}
+
 \newcommand{\Agda@AlignStart}{%
-  \setcounter{Agda@Align}{1}%
-  \setcounter{Agda@AlignCurrent}{1}}
+  \ifthenelse{\boolean{Agda@Align}}{%
+    \PackageError{agda}{Nested AgdaAlign environments}{%
+      AgdaAlign and AgdaMultiCode environments must not be
+      nested.}}{%
+    \setboolean{Agda@Align}{true}%
+    \setcounter{Agda@AlignStart}{\value{Agda@Current}}}}
 
-\newcommand{\Agda@AlignEnd}{\setcounter{Agda@Align}{0}}
+\newcommand{\Agda@AlignEnd}{\setboolean{Agda@Align}{false}}
 
 \newenvironment{AgdaAlign}{%
   \Agda@AlignStart{}}{%
   \Agda@AlignEnd{}%
   \ignorespacesafterend}
 
-% 0: AgdaSuppressSpace is not active. 1: AgdaSuppressSpace is active.
-\newcounter{Agda@Suppress}
-\setcounter{Agda@Suppress}{0}
+% Is AgdaSuppressSpace active?
+\newboolean{Agda@Suppress}
+\setboolean{Agda@Suppress}{false}
 
-% The current code block.
-\newcounter{Agda@SuppressCurrent}
+% The number of the first code block (if any) in a given
+% AgdaSuppressSpace environment.
+\newcounter{Agda@SuppressStart}
 
-% The expected number of code blocks.
-\newcounter{Agda@SuppressLast}
+% Does a "do not suppress space after" label exist for the current
+% code block? (This boolean is used locally in the code environment's
+% implementation.)
+\newboolean{Agda@DoNotSuppressSpaceAfter}
 
-\newcommand{\Agda@SuppressStart}[1]{%
-  \setcounter{Agda@Suppress}{1}%
-  \setcounter{Agda@SuppressLast}{#1}%
-  \setcounter{Agda@SuppressCurrent}{1}}
+\newcommand{\Agda@SuppressStart}{%
+  \ifthenelse{\boolean{Agda@Suppress}}{%
+    \PackageError{agda}{Nested AgdaSuppressSpace environments}{%
+      AgdaSuppressSpace and AgdaMultiCode environments must not be
+      nested.}}{%
+    \setboolean{Agda@Suppress}{true}%
+    \setcounter{Agda@SuppressStart}{\value{Agda@Current}}}}
 
-\newcommand{\Agda@SuppressEnd}{\setcounter{Agda@Suppress}{0}}
+% Marks the given code block as one that space should not be
+% suppressed after (if AgdaSpaceAroundCode and AgdaSuppressSpace are
+% both active).
+\newcommand{\Agda@DoNotSuppressSpaceAfter}[1]{%
+  % The use of labels is intended to ensure that LaTeX will provide a
+  % warning if the document needs to be recompiled.
+  \label{Agda@DoNotSuppressSpaceAfter@#1}}
 
-\newenvironment{AgdaSuppressSpace}[1]{%
-  \Agda@SuppressStart{#1}}{%
+\newcommand{\Agda@SuppressEnd}{%
+  \ifthenelse{\value{Agda@SuppressStart} = \value{Agda@Current}}{}{%
+    % Mark the previous code block in the .aux file.
+    \setcounter{Agda@Previous}{\theAgda@Current-1}%
+    \immediate\write\@auxout{%
+      \noexpand\Agda@DoNotSuppressSpaceAfter{\theAgda@Previous}}}%
+  \setboolean{Agda@Suppress}{false}}
+
+\newenvironment{AgdaSuppressSpace}{%
+  \Agda@SuppressStart{}}{%
   \Agda@SuppressEnd{}%
   \ignorespacesafterend}
 
-\newenvironment{AgdaMultiCode}[1]{%
+\newenvironment{AgdaMultiCode}{%
   \Agda@AlignStart{}%
-  \Agda@SuppressStart{#1}}{%
+  \Agda@SuppressStart{}}{%
   \Agda@SuppressEnd{}%
   \Agda@AlignEnd{}%
   \ignorespacesafterend}
@@ -549,32 +604,61 @@
 
 % The code environment.
 %
+% Code can be hidden by writing \begin{code}[hide].
+%
 % The implementation is based on plainhscode in lhs2TeX's
 % polycode.fmt, written by Andres Löh.
-\newenvironment{code}{%
-  \ifthenelse{\value{Agda@SpaceAroundCode} = 0 \or%
-              \not \(\value{Agda@Suppress} = 0 \or%
-                     \value{Agda@SuppressCurrent} = 1\)}{%
-    \AgdaNewlineWithVerticalSpace{0pt}}{%
-    \AgdaNewlineWithVerticalSpace{\abovedisplayskip}}%
-  \advance\leftskip\mathindent%
-  \AgdaCodeStyle%
-  \setlength{\AgdaEmptyExtraSkip}{\AgdaEmptySkip - \baselineskip}%
-  \pboxed%
-  \ifthenelse{\value{Agda@Align} = 0}{}{%
-    \ifthenelse{\value{Agda@AlignCurrent} = 1}{%
-      \savecolumns}{%
-      \restorecolumns}}}{%
-  \endpboxed%
-  \ifthenelse{\value{Agda@SpaceAroundCode} = 0 \or%
-              \not \(\value{Agda@Suppress} = 0 \or%
-                     \value{Agda@SuppressCurrent} =%
-                     \value{Agda@SuppressLast}\)}{%
-    \AgdaNewlineWithVerticalSpace{0pt}}{%
-    \AgdaNewlineWithVerticalSpace{\belowdisplayskip}}%
-  \stepcounter{Agda@AlignCurrent}%
-  \stepcounter{Agda@SuppressCurrent}%
-  \ignorespacesafterend}
+\NewEnviron{code}[1][]{%
+  % Conditionally hide the code.
+  \ifthenelse{\equal{#1}{hide}}{}{%
+    %
+    % Conditionally emit space before the code block. Unconditionally
+    % switch to a new line.
+    \ifthenelse{\boolean{Agda@SpaceAroundCode} \and%
+                \(\not \boolean{Agda@Suppress} \or%
+                  \value{Agda@SuppressStart} = \value{Agda@Current}\)}{%
+      \Agda@NewlineWithVerticalSpace{\abovedisplayskip}}{%
+      \Agda@NewlineWithVerticalSpace{0pt}}%
+    %
+    % Indent the entire code block.
+    \advance\leftskip\mathindent%
+    %
+    % The code's style can be customised.
+    \AgdaCodeStyle%
+    %
+    % Used to control the height of empty lines.
+    \setlength{\AgdaEmptyExtraSkip}{\AgdaEmptySkip - \baselineskip}%
+    %
+    % The environment used to handle indentation (of individual lines)
+    % and alignment.
+    \begin{pboxed}%
+      %
+      % Conditionally preserve alignment between code blocks.
+      \ifthenelse{\boolean{Agda@Align}}{%
+        \ifthenelse{\value{Agda@AlignStart} = \value{Agda@Current}}{%
+          \savecolumns}{%
+          \restorecolumns}}{}%
+      %
+      % The code.
+      \BODY%
+    \end{pboxed}%
+    %
+    % Does the label Agda@DoNotSuppressAfter@<current code block
+    % number> exist?
+    \ifcsdef{r@Agda@DoNotSuppressSpaceAfter@\theAgda@Current}{%
+      \setboolean{Agda@DoNotSuppressSpaceAfter}{true}}{%
+      \setboolean{Agda@DoNotSuppressSpaceAfter}{false}}%
+    %
+    % Conditionally emit space after the code block. Unconditionally
+    % switch to a new line.
+    \ifthenelse{\boolean{Agda@SpaceAroundCode} \and%
+                \(\not \boolean{Agda@Suppress} \or%
+                  \boolean{Agda@DoNotSuppressSpaceAfter}\)}{%
+      \Agda@NewlineWithVerticalSpace{\belowdisplayskip}}{%
+      \Agda@NewlineWithVerticalSpace{0pt}}%
+    %
+    % Step the code block counter, but only for non-hidden code.
+    \stepcounter{Agda@Current}}}
 
 % Space inserted after tokens.
 \newcommand{\AgdaSpace}{ }
@@ -594,10 +678,14 @@
 % in the same AgdaAlign or AgdaMultiCode environment.
 \newcommand{\AgdaIndent}[1]{%
   \ifthenelse{#1 = 0
-                \OR
-              \( \value{Agda@Align} = 1
-                   \AND
-                 #1 < \value{Agda@AlignCurrent}
+                \or
+              \( \boolean{Agda@Align}
+                   \and
+                 \cnttest{\value{Agda@Current} - #1}{>=}{
+                          \value{Agda@AlignStart}}
               \)}{\AgdaIndentSpace{}}{}}
+
+% Underscores are typeset using \AgdaUnderscore{}.
+\newcommand{\AgdaUnderscore}{\_}
 
 \endinput
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
@@ -574,9 +574,12 @@
   ("lbag" . ("⟅"))
   ("rbag" . ("⟆"))
 
-  ("(|" . ("⦇"))
+  ("(|" . ("⦇"))  ;; Idiom brackets
   ("|)" . ("⦈"))
 
+  ("((" . ("⦅"))  ;; Banana brackets
+  ("))" . ("⦆"))
+
   ;; Primes.
 
   ("'" . ,(agda-input-to-string-list "′″‴⁗"))
@@ -774,15 +777,23 @@
   ("MIy" . ("𝒚"))
   ("MIz" . ("𝒛"))
   ("McA" . ("𝒜"))
+  ("McB" . ("ℬ"))
   ("McC" . ("𝒞"))
   ("McD" . ("𝒟"))
+  ("McE" . ("ℰ"))
+  ("McF" . ("ℱ"))
   ("McG" . ("𝒢"))
+  ("McH" . ("ℋ"))
+  ("McI" . ("ℐ"))
   ("McJ" . ("𝒥"))
   ("McK" . ("𝒦"))
+  ("McL" . ("ℒ"))
+  ("McM" . ("ℳ"))
   ("McN" . ("𝒩"))
   ("McO" . ("𝒪"))
   ("McP" . ("𝒫"))
   ("McQ" . ("𝒬"))
+  ("McR" . ("ℛ"))
   ("McS" . ("𝒮"))
   ("McT" . ("𝒯"))
   ("McU" . ("𝒰"))
@@ -795,7 +806,9 @@
   ("Mcb" . ("𝒷"))
   ("Mcc" . ("𝒸"))
   ("Mcd" . ("𝒹"))
+  ("Mce" . ("ℯ"))
   ("Mcf" . ("𝒻"))
+  ("Mcg" . ("ℊ"))
   ("Mch" . ("𝒽"))
   ("Mci" . ("𝒾"))
   ("Mcj" . ("𝒿"))
@@ -803,6 +816,7 @@
   ("Mcl" . ("𝓁"))
   ("Mcm" . ("𝓂"))
   ("Mcn" . ("𝓃"))
+  ("Mco" . ("ℴ"))
   ("Mcp" . ("𝓅"))
   ("Mcq" . ("𝓆"))
   ("Mcr" . ("𝓇"))
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
@@ -445,21 +445,23 @@
   "Set up the `annotation' library for use with `agda2-mode'."
   (setq annotation-bindings agda2-highlight-faces))
 
-(defun agda2-highlight-apply (&rest cmds)
+(defun agda2-highlight-apply (remove &rest cmds)
   "Adds the syntax highlighting information in the annotation list CMDS.
 
-Old syntax highlighting information is not removed."
+If REMOVE is nil, then old syntax highlighting information is not
+removed. Otherwise all token-based syntax highlighting is 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"
+           remove
            cmds)))
 
-(defun agda2-highlight-add-annotations (&rest cmds)
+(defun agda2-highlight-add-annotations (remove &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)))
+      (apply 'agda2-highlight-apply remove cmds)))
 
 (defun agda2-highlight-load (file)
   "Load syntax highlighting information from FILE.
@@ -481,12 +483,15 @@
           (agda2-highlight-load file))
     (delete-file file)))
 
-(defun agda2-highlight-clear nil
-  "Remove all syntax highlighting added by `agda2-highlight-reload'."
+(defun agda2-highlight-clear (&optional token-based)
+  "Remove all syntax highlighting.
+
+If TOKEN-BASED is non-nil, then only token-based highlighting is
+removed."
   (interactive)
   (let ((inhibit-read-only t))
        ; Ignore read-only status, otherwise this function may fail.
-    (annotation-remove-annotations)))
+    (annotation-remove-annotations token-based)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Administrative details
diff --git a/src/data/emacs-mode/agda2-mode-pkg.el b/src/data/emacs-mode/agda2-mode-pkg.el
--- a/src/data/emacs-mode/agda2-mode-pkg.el
+++ b/src/data/emacs-mode/agda2-mode-pkg.el
@@ -1,2 +1,2 @@
-(define-package "agda2-mode" "2.5.3"
+(define-package "agda2-mode" "2.5.4"
   "interactive development for Agda, a dependently typed functional programming language")
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,7 +10,7 @@
 
 ;;; Code:
 
-(defvar agda2-version "2.5.3"
+(defvar agda2-version "2.5.4"
   "The version of the Agda mode.
 Note that the same version of the Agda executable must be used.")
 
@@ -93,7 +93,7 @@
   :type '(repeat string)
   :group 'agda2)
 
-(defvar agda2-backends '("GHC" "JS" "LaTeX" "QuickLaTeX")
+(defvar agda2-backends '("GHC" "GHCNoMain" "JS" "LaTeX" "QuickLaTeX")
   "Compilation backends.")
 
 (defcustom agda2-backend
@@ -185,6 +185,19 @@
 (if (and (equal agda2-fontset-name "fontset-agda2") window-system)
     (create-fontset-from-fontset-spec agda2-fontset-spec-of-fontset-agda2 t t))
 
+(defcustom agda2-highlight-after-inactivity-interval 0.2
+  "Highlight the buffer when Emacs has been idle for the given time.
+After the last modification of the buffer. Only token-based
+highlighting is performed. Highlighting is only performed if the
+buffer is (marked as being) modified, the Agda process is not
+busy, and `agda2-highlight-level' is not `none'."
+  :group 'agda2-highlight
+  :type '(choice (const :tag "Turn off this feature" nil)
+                 (restricted-sexp
+                  :tag "Seconds"
+                  :match-alternatives ((lambda (n)
+                                         (and (numberp n) (>= n 0)))))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; Global and buffer-local vars, initialization
 
@@ -205,15 +218,15 @@
                     (standard-syntax-table))
     ;; Then override the remaining special cases.
     (dolist (cs '((?{ . "(}1n") (?} . "){4n") (?- . "w 123b") (?\n . "> b")
-                  (?. . ".") (?\; . ".") (?_ . ".") (?! . ".")))
+                  (?. . ".") (?\; . ".") (?! . ".")))
       (modify-syntax-entry (car cs) (cdr cs) tbl))
     tbl)
   "Syntax table used by the Agda mode:
 
-{}   | Comment characters, matching parentheses.
--    | Comment character, word constituent.
-\n   | Comment ender.
-.;_! | Punctuation.
+{}  | Comment characters, matching parentheses.
+-   | Comment character, word constituent.
+\n  | Comment ender.
+.;! | Punctuation.
 
 Remaining characters inherit their syntax classes from the
 standard syntax table if that table treats them as matching
@@ -382,6 +395,10 @@
   "Was `agda2-file-buffer' active when `agda2-output-filter' started?
 Note that this variable is not buffer-local.")
 
+(defvar agda2-highlight-after-inactivity-timer nil
+  "Timer used to update token-based highlighting after inactivity.")
+(make-variable-buffer-local 'agda2-highlight-after-inactivity-timer)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;; agda2-mode
 
@@ -430,10 +447,12 @@
        (error (error "Unable to change the font; change agda2-fontset-name or tweak agda2-fontset-spec-of-fontset-agda2"))))
  ;; Deactivate highlighting if the buffer is edited before
  ;; typechecking is complete.
- (add-hook 'first-change-hook 'agda2-abort-highlighting nil 'local)
+ (add-hook 'after-change-functions 'agda2-abort-highlighting nil 'local)
  ;; If Agda is not running syntax highlighting does not work properly.
  (unless (eq 'run (agda2-process-status))
    (agda2-restart))
+ ;; Make sure that Font Lock mode is not used.
+ (font-lock-mode 0)
  (agda2-highlight-setup)
  (condition-case err
      (agda2-highlight-reload)
@@ -740,9 +759,9 @@
   (unless agda2-in-progress
       (setq agda2-highlight-in-progress nil)))
 
-(defun agda2-abort-highlighting nil
+(defun agda2-abort-highlighting (beg end len)
   "Abort any interactive highlighting.
-This function should be used in `first-change-hook'."
+This function should be used in `after-change-functions'."
   (when agda2-highlight-in-progress
     (setq agda2-highlight-in-progress nil)
     (message "\"%s\" has been modified. Interrupting highlighting."
@@ -967,7 +986,8 @@
   "Display the string STATUS in the current buffer's mode line.
 \(precondition: the current buffer has to use the Agda mode as the
 major mode)."
-  (setq agda2-buffer-external-status status))
+  (setq agda2-buffer-external-status status)
+  (force-mode-line-update))
 
 (defmacro agda2-warning-or-info-buffer (buffer kind title)
   "Used to define the functions agda2-warning-buffer and agda2-info-buffer."
@@ -1009,14 +1029,6 @@
 (agda2-warning-or-info-buffer
  agda2-info-buffer "info" "*Agda information*")
 
-(defun agda2-font-syntactic-face (state)
-  (cond ((nth 4 state)
-         ( save-excursion
-           (goto-char (nth 8 state))
-           (cond ((looking-at "--[[:space:]\n]") 'font-lock-comment-face)
-                 ((looking-at "{-[^#]") 'font-lock-comment-face)
-          )))))
-
 (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.
@@ -1216,19 +1228,23 @@
 (defun agda2-quit ()
   "Quit and clean up after agda2."
   (interactive)
-  (remove-hook 'first-change-hook 'agda2-abort-highlighting 'local)
+  (when (timerp agda2-highlight-after-inactivity-timer)
+    (cancel-timer agda2-highlight-after-inactivity-timer))
+  (remove-hook 'after-change-functions
+               'agda2-highlight-after-inactivity 'local)
+  (remove-hook 'after-change-functions 'agda2-abort-highlighting 'local)
+  (remove-hook 'after-save-hook 'agda2-highlight-tokens 'local)
   (agda2-remove-annotations)
   (agda2-term))
 
 (defun agda2-term ()
-  "Send a SIGTERM signal to the Agda2 process, then kill its buffer."
+  "Interrupt the Agda process and kill its buffer."
   (interactive)
+  (when (and agda2-process
+             (process-status agda2-process))
+    (interrupt-process agda2-process))
   (when (buffer-live-p agda2-process-buffer)
-    (with-current-buffer agda2-process-buffer
-      (condition-case nil
-          (signal-process agda2-process 'SIGTERM)
-        (error nil))
-      (kill-buffer))))
+    (kill-buffer agda2-process-buffer)))
 
 (defmacro agda2-maybe-normalised (name comment cmd want)
   "This macro constructs a function NAME which runs CMD.
@@ -1536,7 +1552,7 @@
 
 (defun agda2-literate-p ()
   "Is the current buffer a literate Agda buffer?"
-  (equal (file-name-extension (buffer-name)) "lagda"))
+  (not (equal (file-name-extension (buffer-file-name)) "agda")))
 
 (defmacro agda2--case (exp &rest branches) ;FIXME: Use `pcase' instead!
   (declare (debug t) (indent 1))
@@ -1829,18 +1845,7 @@
 ;; Comments and paragraphs
 
 (defun agda2-comments-and-paragraphs-setup nil
-  "Set up comment and paragraph handling for Agda mode."
-
-  ;; Syntax table setup for comments is done elsewhere.
-
-  ;; Enable highlighting of comments via Font Lock mode (which uses
-  ;; the syntax table).
-  (set (make-local-variable 'font-lock-defaults)
-       '(nil nil nil nil nil (font-lock-syntactic-face-function . agda2-font-syntactic-face)))
-  ;; If the following s-expression is removed, then highlighting of
-  ;; comments stops working.
-  (when font-lock-mode
-    (font-lock-mode t))
+  "Set up comment and paragraph handling for the Agda mode."
 
   ;; Empty lines (all white space according to Emacs) delimit
   ;; paragraphs.
@@ -1850,6 +1855,17 @@
   ;; Support for adding/removing comments.
   (set (make-local-variable 'comment-start) "-- ")
 
+  ;; Use the syntax table to locate comments (and possibly other
+  ;; things). Syntax table setup for comments is done elsewhere.
+  (set (make-local-variable 'comment-use-syntax) t)
+
+  ;; Update token-based highlighting after the buffer has been saved
+  ;; and after Emacs has been idle for a certain amount of time (and
+  ;; the buffer has been modified).
+  (add-hook 'after-save-hook 'agda2-highlight-tokens nil 'local)
+  (add-hook 'after-change-functions 'agda2-highlight-after-inactivity
+            nil 'local)
+
   ;; Support for proper filling of text in comments (requires that
   ;; Filladapt is activated).
   (when (featurep 'filladapt)
@@ -1874,6 +1890,60 @@
           (comment-dwim nil))
       (pop-mark))))
 
+(defun agda2-all-extensions (filename)
+  "Return all of FILENAME's extensions.
+
+FILENAME must not contain any extensions treated specially by
+`file-name-extension', such as ~3~."
+  (let ((ext     (concat "." (file-name-extension filename)))
+        (newname (file-name-sans-extension filename)))
+    (if (equal newname filename)
+        ""
+      (concat (agda2-all-extensions newname) ext))))
+
+(defun agda2-highlight-tokens nil
+  "Compute token-based highlighting information.
+
+Unless `agda2-highlight-level' is `none' or the Agda process is
+busy with something. This command does not save the buffer."
+  (unless (or agda2-in-progress
+              (equal agda2-highlight-level 'none))
+    (let ((tmp (make-temp-file "agda2-" nil
+                               (agda2-all-extensions
+                                (file-name-nondirectory
+                                 (buffer-file-name))))))
+      (write-region nil nil tmp nil 'do-not-display-message)
+      (agda2-go 'do-not-save nil t t
+                "Cmd_tokenHighlighting"
+                (agda2-string-quote tmp)
+                "Remove"))))
+
+(defun agda2-highlight-after-inactivity (beg end len)
+  "Compute token-based highlighting after Emacs has been idle.
+Only if `agda2-highlight-after-inactivity-interval' is a
+non-negative number. The number is interpreted as the number of
+seconds of continuous inactivity that is required before
+highlighting is updated. Furthermore nothing happens unless,
+after the given amount of time, the buffer is marked as being
+modified, the Agda process is not busy, and
+`agda2-highlight-level' is not `none'.
+
+When this procedure is invoked previous, pending invocations are
+cancelled.
+
+This procedure is intended to be used in `after-change-functions'."
+  (when (and (numberp agda2-highlight-after-inactivity-interval)
+             (>= agda2-highlight-after-inactivity-interval 0))
+    (when (timerp agda2-highlight-after-inactivity-timer)
+      (cancel-timer agda2-highlight-after-inactivity-timer))
+    (setq agda2-highlight-after-inactivity-timer
+          (run-with-idle-timer agda2-highlight-after-inactivity-interval
+                               nil
+                               `(lambda nil
+                                 (with-current-buffer ,(current-buffer)
+                                   (when (buffer-modified-p)
+                                     (agda2-highlight-tokens))))))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Go to definition site
 
@@ -1925,9 +1995,9 @@
               (if windows
                   (dolist (window windows)
                     (with-selected-window window
-                      (annotation-goto-position (cdr filepos))))
+                      (goto-char (cdr filepos))))
                 (with-current-buffer buffer
-                  (annotation-goto-position (cdr filepos)))))))))))
+                  (goto-char (cdr filepos)))))))))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Implicit arguments
@@ -2024,12 +2094,10 @@
     (unless (file-readable-p agda-mode-path)
       (error "%s" (concat "Could not read " agda-mode-path)))
 
-    ;; Kill some processes/buffers related to Agda.
-    (when (and agda2-process
-               (process-status agda2-process))
-      (kill-process agda2-process))
-    (when (buffer-live-p agda2-process-buffer)
-      (kill-buffer agda2-process-buffer))
+    ;; Turn off the Agda mode.
+    (agda2-quit)
+
+    ;; Kill some buffers related to Agda.
     (when (buffer-live-p agda2-info-buffer)
       (kill-buffer agda2-info-buffer))
     (when (and agda2-debug-buffer-name
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
@@ -1,16 +1,10 @@
 ;;; annotation.el --- Functions for annotating text with faces and help bubbles
 
-;;; Commentary:
-;;
+;; Note that this library enumerates buffer positions starting from 1,
+;; just like Emacs.
 
-;;; Code:
 (require 'cl)
 
-(defconst annotations-offset (- (save-restriction (widen) (point-min)) 1)
-  "Offset between buffer positions and annotations's positions.
-Annotations's positions are based on 1, so this adjusts it to the base
-position used by your Emacs.")
-
 (defvar annotation-bindings nil
   "An association list mapping symbols to faces.")
 (make-variable-buffer-local 'annotation-bindings)
@@ -90,26 +84,33 @@
             (if other-window
                 (find-file-other-window file)
               (find-file file))
-            (annotation-goto-position (cdr filepos))
+            (goto-char (cdr filepos))
             t)
         (error "File does not exist or is unreadable: %s." file)))))
 
-(defun annotation-goto-position (position)
-  "Move point to POSITION."
-  (goto-char (+ position annotations-offset)))
+(defun annotation-merge-faces (start end faces)
+  "Helper procedure used by `annotation-annotate'.
+For each position in the range the FACES are merged
+with the current value of the annotation-faces text property, and
+both the face and the annotation-faces text properties are set to
+the resulting list of faces.
 
-(defun annotation-append-text-property (start end prop values)
-  "Merges VALUES to text property PROP between START and END."
+Precondition: START and END must be numbers, and START must be
+less than END."
+  (assert (condition-case nil (< start end) (error nil)))
   (let ((pos start)
         mid)
     (while (< pos end)
-      (setq mid (next-single-property-change pos prop nil end))
-      (let* ((old-values (get-text-property pos prop))
-             (all-values (union old-values values)))
-        (put-text-property pos mid prop all-values)
+      (setq mid (next-single-property-change pos 'annotation-faces
+                                             nil end))
+      (let* ((old-faces (get-text-property pos 'annotation-faces))
+             (all-faces (union old-faces faces)))
+        (mapc (lambda (prop) (put-text-property pos mid prop all-faces))
+              '(annotation-faces face))
         (setq pos mid)))))
 
-(defun annotation-annotate (start end anns &optional info goto)
+(defun annotation-annotate
+    (start end anns &optional token-based info goto)
   "Annotate text between START and END in the current buffer.
 
 Nothing happens if either START or END are out of bounds for the
@@ -120,9 +121,18 @@
 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.
+and the resulting list of faces is used to set the face text
+property. For each position in the range the faces are merged
+with the current value of the annotation-faces text property, and
+both the face and the annotation-faces text properties are set to
+the resulting list of faces.
 
+If TOKEN-BASED is non-nil, then the annotation-token-based
+property is set to t. This means that all text properties set by
+`annotation-annotate' in this range are interpreted as being
+token-based, including those set by previous calls to this
+procedure.
+
 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
@@ -139,21 +149,24 @@
 that have been set; this ensures that the text properties can
 later be removed (if the annotation-* properties are not tampered
 with)."
-  (incf start annotations-offset)
-  (incf end annotations-offset)
   (when (and (<= (point-min) start)
              (< start end)
              (<= end (point-max)))
     (if (null anns)
-        (annotation-remove-annotations start end)
+        (annotation-remove-annotations nil start end)
       (let ((faces (delq nil
                          (mapcar (lambda (ann)
                                    (cdr (assoc ann annotation-bindings)))
                                  anns)))
             (props nil))
         (when faces
-          (annotation-append-text-property start end 'font-lock-face faces)
-          (add-to-list 'props 'font-lock-face))
+          (annotation-merge-faces start end faces)
+          (add-to-list 'props 'face)
+          (add-to-list 'props 'annotation-faces))
+        (when token-based
+          (add-text-properties start end
+                               `(annotation-token-based t))
+          (add-to-list 'props 'annotation-token-based))
         (when (consp goto)
           (add-text-properties start end
                                `(annotation-goto ,goto
@@ -166,6 +179,7 @@
           (add-to-list 'props 'mouse-face)
           (add-to-list 'props 'help-echo))
         (when props
+          (add-to-list 'props 'annotation-annotated)
           (let ((pos start)
                 mid)
             (while (< pos end)
@@ -180,6 +194,7 @@
 (defmacro annotation-preserve-mod-p-and-undo (&rest code)
   "Run CODE preserving both the undo data and the modification bit.
 Modification hooks are also disabled."
+  (declare (debug (&rest form)))
   (let ((modp (make-symbol "modp")))
   `(let ((,modp (buffer-modified-p))
          ;; Don't check if the file is being modified by some other process.
@@ -192,11 +207,13 @@
          (progn ,@code)
        (restore-buffer-modified-p ,modp)))))
 
-(defun annotation-remove-annotations (&optional start end)
-  "Remove all text properties set by `annotation-annotate'.
+(defun annotation-remove-annotations (&optional token-based start end)
+  "Remove text properties set by `annotation-annotate'.
 
 In the current buffer. If START and END are given, then
-properties are only removed between these positions.
+properties are only removed between these positions. If
+TOKEN-BASED is non-nil, then only token-based properties are
+removed.
 
 This function preserves the file modification stamp of the
 current buffer, does not modify the undo list, and temporarily
@@ -208,20 +225,24 @@
   ;; remove-text-properties fails for read-only text.
 
   (annotation-preserve-mod-p-and-undo
-   (let ((pos (or start (point-min)))
+   (let ((tag (if token-based
+                  'annotation-token-based
+                'annotation-annotated))
+         (pos (or start (point-min)))
+         (end (or end (point-max)))
          pos2)
      (while pos
-       (setq pos2 (next-single-property-change pos 'annotation-annotated
-                                               nil end))
        (let ((props (get-text-property pos 'annotation-annotations)))
-         (when props
+         (setq pos2 (next-single-property-change pos tag nil end))
+         (when (and props
+                    (or (not token-based)
+                        (member 'annotation-token-based props)))
            (remove-text-properties pos (or pos2 (point-max))
               (mapcan (lambda (prop) (list prop nil))
-                      (append '(annotation-annotated annotation-annotations)
-                              props)))))
-       (setq pos (unless (equal pos2 end) pos2))))))
+                      (cons 'annotation-annotations props)))))
+       (setq pos (unless (or (not pos2) (>= pos2 end)) pos2))))))
 
-(defun annotation-load (goto-help &rest cmds)
+(defun annotation-load (goto-help remove &rest cmds)
   "Apply highlighting annotations in CMDS in the current buffer.
 
 The argument CMDS should be a list of lists (start end anns
@@ -235,6 +256,14 @@
 GOTO-HELP. The intention is that the default help text should
 inform the user about the \"goto\" facility.
 
+If REMOVE is nil, then old syntax highlighting information is not
+removed. Otherwise all token-based syntax highlighting is
+removed. In order to reduce the risk of flicker this highlighting
+is removed step by step, in conjunction with the addition of new
+highlighting. (This process assumes that CMDS is ordered by the
+positions of the annotations. If it isn't, then the highlighting
+is still applied correctly, but perhaps with more flicker.)
+
 This function preserves the file modification stamp of the
 current buffer, does not modify the undo list, and temporarily
 disables all modification hooks.
@@ -243,12 +272,22 @@
 buffer."
   (annotation-preserve-mod-p-and-undo
     (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)))))))
+      (let ((pos (point-min)))
+        (dolist (cmd cmds)
+          (destructuring-bind
+              (start end anns &optional token-based info goto) cmd
+            (let ((info (if (and (not info) (consp goto))
+                            goto-help
+                          info)))
+              (when remove
+                (annotation-remove-annotations
+                 'token-based pos end)
+                (setq pos end))
+              (annotation-annotate
+               start end anns token-based info goto))))
+        (when remove
+          (annotation-remove-annotations
+           'token-based pos (point-max)))))))
 
 (provide 'annotation)
 ;;; annotation.el ends here
diff --git a/src/data/lib/prim/Agda/Builtin/Float.agda b/src/data/lib/prim/Agda/Builtin/Float.agda
--- a/src/data/lib/prim/Agda/Builtin/Float.agda
+++ b/src/data/lib/prim/Agda/Builtin/Float.agda
@@ -12,6 +12,7 @@
 
 primitive
   primFloatEquality : Float → Float → Bool
+  primFloatLess     : Float → Float → Bool
   primFloatNumericalEquality : Float → Float → Bool
   primFloatNumericalLess     : Float → Float → Bool
   primNatToFloat    : Nat → Float
diff --git a/src/data/lib/prim/Agda/Builtin/List.agda b/src/data/lib/prim/Agda/Builtin/List.agda
--- a/src/data/lib/prim/Agda/Builtin/List.agda
+++ b/src/data/lib/prim/Agda/Builtin/List.agda
@@ -8,12 +8,7 @@
   _∷_ : (x : A) (xs : List A) → List A
 
 {-# BUILTIN LIST List #-}
-{-# BUILTIN NIL  []   #-}
-{-# BUILTIN CONS _∷_  #-}
 
-{-# FOREIGN GHC type AgdaList a b = [b] #-}
-
-{-# COMPILE GHC List = data AgdaList ([] | (:)) #-}
 {-# COMPILE UHC List = data __LIST__ (__NIL__ | __CONS__) #-}
 {-# COMPILE JS  List = function(x,v) {
   if (x.length < 1) { return v["[]"](); } else { return v["_∷_"](x[0], x.slice(1)); }
diff --git a/src/data/lib/prim/Agda/Builtin/Reflection.agda b/src/data/lib/prim/Agda/Builtin/Reflection.agda
--- a/src/data/lib/prim/Agda/Builtin/Reflection.agda
+++ b/src/data/lib/prim/Agda/Builtin/Reflection.agda
@@ -5,6 +5,7 @@
 open import Agda.Builtin.Unit
 open import Agda.Builtin.Bool
 open import Agda.Builtin.Nat
+open import Agda.Builtin.Word
 open import Agda.Builtin.List
 open import Agda.Builtin.String
 open import Agda.Builtin.Char
@@ -120,6 +121,7 @@
 
 data Literal : Set where
   nat    : (n : Nat)    → Literal
+  word64 : (n : Word64) → Literal
   float  : (x : Float)  → Literal
   char   : (c : Char)   → Literal
   string : (s : String) → Literal
@@ -128,6 +130,7 @@
 
 {-# BUILTIN AGDALITERAL   Literal #-}
 {-# BUILTIN AGDALITNAT    nat     #-}
+{-# BUILTIN AGDALITWORD64 word64  #-}
 {-# BUILTIN AGDALITFLOAT  float   #-}
 {-# BUILTIN AGDALITCHAR   char    #-}
 {-# BUILTIN AGDALITSTRING string  #-}
@@ -252,6 +255,7 @@
   inContext     : ∀ {a} {A : Set a} → List (Arg Type) → TC A → TC A
   freshName     : String → TC Name
   declareDef    : Arg Name → Type → TC ⊤
+  declarePostulate  : Arg Name → Type → TC ⊤
   defineFun     : Name → List Clause → TC ⊤
   getType       : Name → TC Type
   getDefinition : Name → TC Definition
@@ -284,6 +288,7 @@
 {-# BUILTIN AGDATCMINCONTEXT     inContext     #-}
 {-# BUILTIN AGDATCMFRESHNAME     freshName     #-}
 {-# BUILTIN AGDATCMDECLAREDEF    declareDef    #-}
+{-# BUILTIN AGDATCMDECLAREPOSTULATE declarePostulate #-}
 {-# BUILTIN AGDATCMDEFINEFUN     defineFun     #-}
 {-# BUILTIN AGDATCMGETTYPE       getType       #-}
 {-# BUILTIN AGDATCMGETDEFINITION getDefinition #-}
diff --git a/src/data/lib/prim/Agda/Builtin/Sigma.agda b/src/data/lib/prim/Agda/Builtin/Sigma.agda
new file mode 100644
--- /dev/null
+++ b/src/data/lib/prim/Agda/Builtin/Sigma.agda
@@ -0,0 +1,13 @@
+module Agda.Builtin.Sigma where
+
+open import Agda.Primitive
+
+record Σ {a b} (A : Set a) (B : A → Set b) : Set (a ⊔ b) where
+  constructor _,_
+  field
+    fst : A
+    snd : B fst
+
+open Σ public
+
+infixr 4 _,_
diff --git a/src/data/lib/prim/Agda/Builtin/Size.agda b/src/data/lib/prim/Agda/Builtin/Size.agda
--- a/src/data/lib/prim/Agda/Builtin/Size.agda
+++ b/src/data/lib/prim/Agda/Builtin/Size.agda
@@ -6,5 +6,15 @@
 {-# BUILTIN SIZE     Size   #-}
 {-# BUILTIN SIZELT   Size<_ #-}
 {-# BUILTIN SIZESUC  ↑_     #-}
-{-# BUILTIN SIZEINF  ω      #-}
+{-# BUILTIN SIZEINF  ∞      #-}
 {-# BUILTIN SIZEMAX  _⊔ˢ_  #-}
+
+{-# FOREIGN GHC
+  type SizeLT i = ()
+  #-}
+
+{-# COMPILE GHC Size   = type ()     #-}
+{-# COMPILE GHC Size<_ = type SizeLT #-}
+{-# COMPILE GHC ↑_     = \_ -> ()    #-}
+{-# COMPILE GHC ∞      = ()          #-}
+{-# COMPILE GHC _⊔ˢ_   = \_ _ -> ()  #-}
diff --git a/src/data/lib/prim/Agda/Builtin/Word.agda b/src/data/lib/prim/Agda/Builtin/Word.agda
new file mode 100644
--- /dev/null
+++ b/src/data/lib/prim/Agda/Builtin/Word.agda
@@ -0,0 +1,12 @@
+{-# OPTIONS --without-K #-}
+
+module Agda.Builtin.Word where
+
+open import Agda.Builtin.Nat
+
+postulate Word64 : Set
+{-# BUILTIN WORD64 Word64 #-}
+
+primitive
+  primWord64ToNat   : Word64 → Nat
+  primWord64FromNat : Nat → Word64
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
@@ -8,10 +8,6 @@
 
 import Prelude hiding (null)
 
-#if __GLASGOW_HASKELL__ <= 708
-import Control.Applicative ( (<$), pure )
-#endif
-
 import Data.Functor
 import Control.Monad.State
 import qualified Data.List as List
@@ -33,7 +29,7 @@
 import Agda.Syntax.Position
 import qualified Agda.Syntax.Internal as I
 import Agda.Syntax.Translation.InternalToAbstract
-import Agda.Syntax.Translation.AbstractToConcrete (abstractToConcreteEnv, abstractToConcrete_, makeEnv, runAbsToCon, toConcrete)
+import Agda.Syntax.Translation.AbstractToConcrete (abstractToConcreteScope, abstractToConcrete_, runAbsToCon, toConcrete)
 import Agda.Interaction.BasicOps hiding (refine)
 import Agda.TypeChecking.Reduce (normalise)
 import Agda.Syntax.Common
@@ -71,8 +67,8 @@
 getHeadAsHint :: A.Expr -> Maybe Hint
 getHeadAsHint (A.ScopedExpr _ e) = getHeadAsHint e
 getHeadAsHint (A.Def qname)      = Just $ Hint False qname
-getHeadAsHint (A.Proj _ qname)   = Just $ Hint False $ head $ I.unAmbQ qname
-getHeadAsHint (A.Con qname)      = Just $ Hint True  $ head $ I.unAmbQ qname
+getHeadAsHint (A.Proj _ qname)   = Just $ Hint False $ AN.headAmbQ qname
+getHeadAsHint (A.Con qname)      = Just $ Hint True  $ AN.headAmbQ qname
 getHeadAsHint _ = Nothing
 
 -- | Result type: Progress & potential Message for the user
@@ -338,7 +334,7 @@
                          Just ii' -> do ae <- give WithoutForce ii' Nothing expr
                                         mv <- lookupMeta mi
                                         let scope = getMetaScope mv
-                                        ce <- abstractToConcreteEnv (makeEnv scope) ae
+                                        ce <- abstractToConcreteScope scope ae
                                         let cmnt = if ii' == ii then agsyinfo ticks else ""
                                         return (Just (ii', show ce ++ cmnt), Nothing)
                            -- Andreas, 2015-05-17, Issue 1504
diff --git a/src/full/Agda/Auto/CaseSplit.hs b/src/full/Agda/Auto/CaseSplit.hs
--- a/src/full/Agda/Auto/CaseSplit.hs
+++ b/src/full/Agda/Auto/CaseSplit.hs
@@ -3,10 +3,6 @@
 
 module Agda.Auto.CaseSplit where
 
-#if __GLASGOW_HASKELL__ <= 708
-import Control.Applicative ( (<$>), (<*>), pure )
-#endif
-
 import Data.IORef
 import Data.Tuple (swap)
 import Data.List (findIndex, union)
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
@@ -22,7 +22,7 @@
 import Agda.TypeChecking.Monad.Signature (getConstInfo, getDefFreeVars, ignoreAbstractMode)
 import Agda.Utils.Permutation (Permutation(Perm), permute, takeP, compactP)
 import Agda.TypeChecking.Level (reallyUnLevelView)
-import Agda.TypeChecking.Monad.Base (mvJudgement, mvPermutation, getMetaInfo, ctxEntry, envContext, clEnv)
+import Agda.TypeChecking.Monad.Base (mvJudgement, mvPermutation, getMetaInfo, envContext, clEnv)
 import Agda.TypeChecking.Monad.MetaVars (lookupMeta, withMetaInfo, lookupInteractionPoint)
 import Agda.TypeChecking.Monad.Context (getContextArgs)
 import Agda.TypeChecking.Monad.Constraints (getAllConstraints)
@@ -125,7 +125,6 @@
       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)) = Cm.Arg (Cm.domInfo 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 $ map I.Apply $ pars (npar - 1) typ
@@ -173,7 +172,7 @@
          modify $ \s -> s {sEqs = (Map.insert (Map.size (fst $ sEqs s)) (Just (False, Meta m, sol')) (fst $ sEqs s), snd $ sEqs s)}
        let tt = MB.jMetaType $ mvJudgement mv
            minfo = getMetaInfo mv
-           localVars = map (snd . Cm.unDom . ctxEntry) . envContext . clEnv $ minfo
+           localVars = map (snd . Cm.unDom) . envContext . clEnv $ minfo
        (targettype, localVars) <- lift $ withMetaInfo minfo $ do
         vs <- getContextArgs
         targettype <- tt `piApplyM` permute (takeP (length vs) $ mvPermutation mv) vs
@@ -323,10 +322,9 @@
 
 instance Conversion TOM (Cm.Arg I.Pattern) (Pat O) where
   convert p = case Cm.unArg p of
-    I.VarP n    -> return $ PatVar (show n)
-    I.DotP _    -> return $ PatVar "_"
+    I.VarP _ n  -> return $ PatVar (show n)
+    I.DotP _ _  -> return $ PatVar "_"
       -- because Agda includes these when referring to variables in the body
-    I.AbsurdP{} -> return $ PatVar I.absurdPatternName
     I.ConP con _ pats -> do
       let n = I.conName con
       c     <- getConst True n TMAll
@@ -364,7 +362,8 @@
         c   <- getConst False name TMAll
         as' <- convert as
         return $ NotM $ App Nothing (NotM OKVal) (Const c) as'
-      I.Con con ci as -> do
+      I.Con con ci es -> do
+        let Just as = I.allApplyElims es
         let name = I.conName con
         c   <- getConst True name TMAll
         as' <- convert as
@@ -395,7 +394,6 @@
             return $ Meta m
           _ -> convert t
       I.DontCare _ -> return $ NotM dontCare
-      I.Shared p -> convert $ I.derefPtr p
 
 instance Conversion TOM a b => Conversion TOM (Cm.Arg a) (Hiding, b) where
   convert (Cm.Arg info a) = (getHiding info,) <$> convert a
@@ -419,12 +417,11 @@
 fmExp m (I.Lit _) = False
 fmExp m (I.Level (I.Max as)) = any (fmLevel m) as
 fmExp m (I.Def _ as) = fmExps m $ I.argsFromElims as
-fmExp m (I.Con _ ci as) = fmExps m as
+fmExp m (I.Con _ ci as) = fmExps m $ I.argsFromElims as
 fmExp m (I.Pi x y)  = fmType m (Cm.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 :: I.MetaId -> I.Args -> Bool
 fmExps m [] = False
@@ -488,7 +485,7 @@
 -}
           (ndrop, h) = case iscon of
                          Just n -> (n, \ q -> I.Con (I.ConHead q Cm.Inductive []) Cm.ConOSystem) -- TODO: restore fields
-                         Nothing -> (0, \ f vs -> I.Def f $ map I.Apply vs)
+                         Nothing -> (0, \ f vs -> I.Def f vs)
       frommyExps ndrop as (h name [])
     Lam hid t -> I.Lam (icnvh hid) <$> convert t
     Pi _ hid _ x y -> I.Pi . Cm.Dom (icnvh hid) <$> convert x <*> convert y
@@ -529,9 +526,8 @@
   ALConPar _ -> __IMPOSSIBLE__
  where
   addend x (I.Var h xs) = I.Var h (xs ++ [I.Apply x])
-  addend x (I.Con h ci xs) = I.Con h ci (xs ++ [x])
+  addend x (I.Con h ci xs) = I.Con h ci (xs ++ [I.Apply x])
   addend x (I.Def h xs) = I.Def h (xs ++ [I.Apply x])
-  addend x (I.Shared p) = addend x (I.derefPtr p)
   addend _ _ = __IMPOSSIBLE__
 
 -- --------------------------------
@@ -544,7 +540,7 @@
  where
   f (A.App i e1 (Cm.Arg info (Cm.Named n e2))) =
         A.App i (f e1) (Cm.Arg info (Cm.Named n (f e2)))
-  f (A.Lam i (A.DomainFree info n) _)
+  f (A.Lam i (A.DomainFree info (A.BindName n)) _)
      | prettyShow (A.nameConcrete n) == abslamvarname =
         A.AbsurdLam i $ Cm.argInfoHiding info
   f (A.Lam i b e) = A.Lam i b (f e)
@@ -554,8 +550,8 @@
   f e = e
 
 modifyAbstractClause :: A.Clause -> A.Clause
-modifyAbstractClause (A.Clause lhs dots sdots (A.RHS e mc) decls catchall) =
-  A.Clause lhs dots sdots (A.RHS (modifyAbstractExpr e) mc) decls catchall
+modifyAbstractClause (A.Clause lhs spats (A.RHS e mc) decls catchall) =
+  A.Clause lhs spats (A.RHS (modifyAbstractExpr e) mc) decls catchall
 modifyAbstractClause cl = cl
 
 -- ---------------------------------
@@ -571,7 +567,7 @@
      cnvp ns p =
       let hid = getHiding $ Cm.argInfo p
       in case Cm.namedArg p of
-       I.VarP n -> return ((hid, Id n) : ns, HI hid (CSPatVar $ length ns))
+       I.VarP _ n -> return ((hid, Id n) : ns, HI hid (CSPatVar $ length ns))
        I.ConP con _ ps -> do
         let c = I.conName con
         (c2, _) <- runStateT (getConst True c TMAll) (S {sConsts = (cmap, []), sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing, sMainMeta = mainm})
@@ -579,10 +575,9 @@
         cc <- liftIO $ readIORef c2
         let Just npar = fst $ cdorigin cc
         return (ns', HI hid (CSPatConApp c2 (replicate npar (HI Hidden CSOmittedArg) ++ ps')))
-       I.DotP t -> do
+       I.DotP _ t -> do
         (t2, _) <- runStateT (convert t) (S {sConsts = (cmap, []), sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing, sMainMeta = mainm})
         return (ns, HI hid (CSPatExp t2))
-       I.AbsurdP{} -> return ((hid, Id I.absurdPatternName) : ns, HI hid (CSPatVar $ length ns))
        I.ProjP{} -> copatternsNotImplemented
        I.LitP{} -> literalsNotImplemented
  (names, pats) <- cnvps [] (IP.unnumberPatVars $ I.namedClausePats clause)
@@ -641,7 +636,7 @@
         return (I.ConP con I.noConPatternInfo ps')
        CSPatExp e -> do
         e' <- convert e {- renm e -} -- renaming before adding to clause below
-        return (I.DotP e')
+        return (I.dotP e')
        CSAbsurd -> __IMPOSSIBLE__ -- CSAbsurd not used
        _ -> __IMPOSSIBLE__
       return $ Cm.Arg (icnvh hid) $ Cm.unnamed p'   -- TODO: recover names
@@ -715,7 +710,7 @@
       return $ Just (f, c, maybe __IMPOSSIBLE__ toplevel $ I.clauseBody c)
   where
     toplevel e =
-     case I.ignoreSharing e of
+     case e of
       I.MetaV{} -> True
       _ -> False
 
@@ -725,19 +720,19 @@
 matchType cdfv tctx ctyp ttyp = trmodps cdfv ctyp
  where
   trmodps 0 ctyp = tr 0 0 ctyp
-  trmodps n ctyp = case I.ignoreSharing $ I.unEl ctyp of
+  trmodps n ctyp = case 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 I.ignoreSharing $ I.unEl ctyp of
+    Nothing -> case 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 I.ignoreSharing e1 of
+    f nl n c e1 e2 = case e1 of
      I.Var v1 as1 | v1 < nl -> case e2 of
       I.Var v2 as2 | v1 == v2 -> fes nl (n + 1) c as1 as2
       _ -> Nothing
@@ -745,7 +740,7 @@
      I.Var v1 as1 -> case e2 of
       I.Var v2 as2 | cdfv + na + nl - v1 == tctx + nl - v2 -> fes nl (n + 1) c as1 as2
       _ -> Nothing
-     _ -> case (I.ignoreSharing e1, I.ignoreSharing e2) of
+     _ -> case (e1, 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)
@@ -757,7 +752,7 @@
       _ -> Nothing
     fs nl n c es1 es2 = case (es1, es2) of
      ([], []) -> c n
-     (Cm.Arg info1 e1 : es1, Cm.Arg info2 e2 : es2) | Cm.argInfoHiding info1 == Cm.argInfoHiding info2 -> f nl n (\n -> fs nl n c es1 es2) e1 e2
+     (I.Apply (Cm.Arg info1 e1) : es1, I.Apply (Cm.Arg info2 e2) : es2) | Cm.argInfoHiding info1 == Cm.argInfoHiding info2 -> f nl n (\n -> fs nl n c es1 es2) e1 e2
      _ -> Nothing
     fes nl n c es1 es2 = case (es1, es2) of
      ([], []) -> c n
diff --git a/src/full/Agda/Auto/Syntax.hs b/src/full/Agda/Auto/Syntax.hs
--- a/src/full/Agda/Auto/Syntax.hs
+++ b/src/full/Agda/Auto/Syntax.hs
@@ -5,10 +5,6 @@
 import Data.IORef
 import qualified Data.Set as Set
 
-#if __GLASGOW_HASKELL__ <= 708
-import Control.Applicative ( (<$>), (<*>) )
-#endif
-
 import Agda.Syntax.Common (Hiding)
 import Agda.Auto.NarrowingSearch
 
diff --git a/src/full/Agda/Auto/Typecheck.hs b/src/full/Agda/Auto/Typecheck.hs
--- a/src/full/Agda/Auto/Typecheck.hs
+++ b/src/full/Agda/Auto/Typecheck.hs
@@ -641,7 +641,7 @@
           b2 <- f cl as
           return $ b1 && b2
 
-         ALProj{} -> __IMPOSSIBLE__
+         ALProj{} -> return False  -- Not impossible: #2966
 
 
          ALConPar as -> f cl as
diff --git a/src/full/Agda/Benchmarking.hs b/src/full/Agda/Benchmarking.hs
--- a/src/full/Agda/Benchmarking.hs
+++ b/src/full/Agda/Benchmarking.hs
@@ -2,10 +2,6 @@
 {-# LANGUAGE IncoherentInstances       #-}
 {-# LANGUAGE NoMonomorphismRestriction #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE OverlappingInstances #-}
-#endif
-
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 -- | Agda-specific benchmarking structure.
diff --git a/src/full/Agda/Compiler/Backend.hs b/src/full/Agda/Compiler/Backend.hs
--- a/src/full/Agda/Compiler/Backend.hs
+++ b/src/full/Agda/Compiler/Backend.hs
@@ -21,6 +21,7 @@
 
 import qualified Data.List as List
 import Data.Functor
+
 import Data.Map (Map)
 import qualified Data.Map as Map
 
@@ -94,9 +95,19 @@
   backends <- use stBackends
   case [ b | b@(Backend b') <- backends, backendName b' == name ] of
     Backend b : _ -> compilerMain b iMain i
-    []            -> genericError $ "No backend called '" ++ name ++ "' " ++
-                                    "(installed backends: " ++
-                                    List.intercalate ", " [ backendName b | Backend b <- backends ] ++ ")"
+    []            -> genericError $
+      "No backend called '" ++ name ++ "' " ++
+      "(installed backends: " ++
+      List.intercalate ", "
+        (List.sort $ otherBackends ++
+                     [ backendName b | Backend b <- backends ]) ++
+      ")"
+
+-- | Backends that are not included in the state, but still available
+--   to the user.
+
+otherBackends :: [String]
+otherBackends = ["GHCNoMain", "LaTeX", "QuickLaTeX"]
 
 -- Internals --------------------------------------------------------------
 
diff --git a/src/full/Agda/Compiler/Common.hs b/src/full/Agda/Compiler/Common.hs
--- a/src/full/Agda/Compiler/Common.hs
+++ b/src/full/Agda/Compiler/Common.hs
@@ -3,11 +3,6 @@
 
 module Agda.Compiler.Common where
 
-
-#if __GLASGOW_HASKELL__ <= 708
-import Prelude hiding (foldl, mapM_, mapM, sequence, concat)
-#endif
-
 import Data.List as List
 import Data.Map (Map)
 import qualified Data.Map as Map
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
@@ -3,7 +3,6 @@
 module Agda.Compiler.JS.Compiler where
 
 import Prelude hiding ( null, writeFile )
-import Control.Applicative
 import Control.Monad.Reader ( liftIO )
 import Control.Monad.Trans
 import Data.Char ( isSpace )
@@ -31,12 +30,12 @@
     conName,
     toTopLevelModuleName, arity, unEl, unAbs, nameFixity )
 import Agda.Syntax.Position
-import Agda.Syntax.Literal ( Literal(LitNat,LitFloat,LitString,LitChar,LitQName,LitMeta) )
+import Agda.Syntax.Literal ( Literal(..) )
 import Agda.Syntax.Fixity
 import qualified Agda.Syntax.Treeless as T
 import Agda.TypeChecking.Substitute ( absBody )
 import Agda.TypeChecking.Level ( reallyUnLevelView )
-import Agda.TypeChecking.Monad hiding (Global, Local)
+import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Monad.Debug ( reportSLn )
 import Agda.TypeChecking.Monad.Options ( setCommandLineOptions )
@@ -384,7 +383,7 @@
       T.TCon q -> do
         d <- getConstInfo q
         qname q
-      T.TCase sc (T.CTData dt) def alts -> do
+      T.TCase sc ct def alts | T.CTData dt <- T.caseType ct -> do
         dt <- getConstInfo dt
         alts' <- traverse compileAlt alts
         let obj = Object $ Map.fromList alts'
@@ -404,6 +403,7 @@
       T.TSort -> unit
       T.TErased -> unit
       T.TError T.TUnreachable -> return Undefined
+      T.TCoerce t -> go t
 
     unit = return $ Integer 0
 
@@ -414,7 +414,8 @@
     T.PEqI -> binOp "agdaRTS.uprimIntegerEqual"
     T.PEqF -> binOp "agdaRTS.uprimFloatEquality"
     T.PEqQ -> binOp "agdaRTS.uprimQNameEquality"
-    p | T.isPrimEq p -> curriedLambda 2 $ BinOp (local 1) "===" (local 0)
+    T.PEqS -> primEq
+    T.PEqC -> primEq
     T.PGeq -> binOp "agdaRTS.uprimIntegerGreaterOrEqualThan"
     T.PLt -> binOp "agdaRTS.uprimIntegerLessThan"
     T.PAdd -> binOp "agdaRTS.uprimIntegerPlus"
@@ -422,9 +423,19 @@
     T.PMul -> binOp "agdaRTS.uprimIntegerMultiply"
     T.PRem -> binOp "agdaRTS.uprimIntegerRem"
     T.PQuot -> binOp "agdaRTS.uprimIntegerQuot"
+    T.PAdd64 -> binOp "agdaRTS.uprimWord64Plus"
+    T.PSub64 -> binOp "agdaRTS.uprimWord64Minus"
+    T.PMul64 -> binOp "agdaRTS.uprimWord64Multiply"
+    T.PRem64 -> binOp "agdaRTS.uprimIntegerRem"     -- -|
+    T.PQuot64 -> binOp "agdaRTS.uprimIntegerQuot"   --  > These can use the integer functions
+    T.PEq64 -> binOp "agdaRTS.uprimIntegerEqual"    --  |
+    T.PLt64 -> binOp "agdaRTS.uprimIntegerLessThan" -- -|
+    T.PITo64 -> unOp "agdaRTS.primWord64FromNat"
+    T.P64ToI -> unOp "agdaRTS.primWord64ToNat"
     T.PSeq -> binOp "agdaRTS.primSeq"
-    _ -> __IMPOSSIBLE__
   where binOp js = curriedLambda 2 $ apply (PlainJS js) [local 1, local 0]
+        unOp js  = curriedLambda 1 $ apply (PlainJS js) [local 0]
+        primEq   = curriedLambda 2 $ BinOp (local 1) "===" (local 0)
 
 
 compileAlt :: T.TAlt -> TCM (MemberId, Exp)
@@ -452,6 +463,7 @@
 literal :: Literal -> Exp
 literal l = case l of
   (LitNat    _ x) -> Integer x
+  (LitWord64 _ x) -> Integer (fromIntegral x)
   (LitFloat  _ x) -> Double  x
   (LitString _ x) -> String  x
   (LitChar   _ x) -> Char    x
@@ -519,6 +531,7 @@
   [ "primExp"
   , "primFloatDiv"
   , "primFloatEquality"
+  , "primFloatLess"
   , "primFloatNumericalEquality"
   , "primFloatNumericalLess"
   , "primFloatNegate"
@@ -540,4 +553,6 @@
   , "primQNameEquality"
   , "primQNameLess"
   , "primQNameFixity"
+  , "primWord64ToNat"
+  , "primWord64FromNat"
   ]
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
@@ -5,7 +5,6 @@
 import Data.Map ( Map )
 import qualified Data.Map as Map
 
-import Data.Typeable ( Typeable )
 import Data.Set ( Set, empty, singleton, union )
 
 import Agda.Syntax.Common ( Nat )
@@ -31,29 +30,29 @@
   PreOp String Exp |
   Const String |
   PlainJS String -- ^ Arbitrary JS code.
-  deriving (Typeable, Show)
+  deriving 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, Eq, Ord, Show)
+  deriving (Eq, Ord, Show)
 
 newtype GlobalId = GlobalId [String]
-  deriving (Typeable, Eq, Ord, Show)
+  deriving (Eq, Ord, Show)
 
 newtype MemberId = MemberId String
-  deriving (Typeable, Eq, Ord, Show)
+  deriving (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, Show)
+  deriving Show
 
 data Module = Module { modName :: GlobalId, exports :: [Export], postscript :: Maybe Exp }
-  deriving (Typeable, Show)
+  deriving 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/Coerce.hs b/src/full/Agda/Compiler/MAlonzo/Coerce.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Compiler/MAlonzo/Coerce.hs
@@ -0,0 +1,74 @@
+
+module Agda.Compiler.MAlonzo.Coerce (addCoercions) where
+
+import Agda.Syntax.Treeless
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Telescope
+import Agda.TypeChecking.Substitute
+import Agda.Utils.Functor
+
+-- | Insert unsafeCoerce (in the form of 'TCoerce') everywhere it's needed in
+--   the right-hand side of a definition.
+addCoercions :: TTerm -> TCM TTerm
+addCoercions = coerceTop
+  where
+    -- Don't coerce top-level lambdas.
+    coerceTop (TLam b) = TLam <$> coerceTop b
+    coerceTop t        = coerce t
+
+    -- Coerce a term `t`. The result (when translated to Haskell) has type
+    -- `forall a. a`.
+    coerce t =
+      case t of
+        TVar{}    -> return $ TCoerce t
+        TPrim{}   -> return $ TCoerce t
+        TDef{}    -> return $ TCoerce t
+        TCon{}    -> return $ TCoerce t
+        TLit{}    -> return $ TCoerce t
+        TUnit{}   -> return $ TCoerce t
+        TSort{}   -> return $ TCoerce t
+        TErased{} -> return t
+        TCoerce{} -> return t
+        TError{}  -> return t
+        TApp f vs -> do
+          ar <- funArity f
+          if length vs > ar
+            then TApp (TCoerce f) <$> mapM softCoerce vs
+            else TCoerce . TApp f <$> mapM coerce vs
+        TLam b         -> TCoerce . TLam <$> softCoerce b
+        TLet e b       -> TLet <$> softCoerce e <*> coerce b
+        TCase x t d bs -> TCase x t <$> coerce d <*> mapM coerceAlt bs
+
+    coerceAlt (TACon c a b) = TACon c a <$> coerce b
+    coerceAlt (TAGuard g b) = TAGuard   <$> coerce g <*> coerce b
+    coerceAlt (TALit l b)   = TALit l   <$> coerce b
+
+    -- Insert TCoerce in subterms. When translated to Haskell, the resulting
+    -- term is well-typed with some type arbitrary type.
+    softCoerce t =
+      case t of
+        TVar{}    -> return t
+        TPrim{}   -> return t
+        TDef{}    -> return t
+        TCon{}    -> return t
+        TLit{}    -> return t
+        TUnit{}   -> return t
+        TSort{}   -> return t
+        TErased{} -> return t
+        TCoerce{} -> return t
+        TError{}  -> return t
+        TApp f vs -> do
+          ar <- funArity f
+          if length vs > ar
+            then TApp (TCoerce f) <$> mapM softCoerce vs
+            else TApp f <$> mapM coerce vs
+        TLam b         -> TLam <$> softCoerce b
+        TLet e b       -> TLet <$> softCoerce e <*> softCoerce b
+        TCase x t d bs -> TCase x t <$> coerce d <*> mapM coerceAlt bs
+
+funArity :: TTerm -> TCM Int
+funArity (TDef q)  = maybe 0 (fst . tLamView) <$> getTreeless q
+funArity (TCon q)  = length . filter not <$> getErasedConArgs q
+funArity (TPrim _) = return 3 -- max arity of any primitive
+funArity _         = return 0
+
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
@@ -2,11 +2,10 @@
 
 module Agda.Compiler.MAlonzo.Compiler where
 
-#if __GLASGOW_HASKELL__ <= 708
-import Prelude hiding (foldl, mapM_, mapM, sequence, concat)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
 #endif
 
-import Control.Applicative
 import Control.Monad.Reader hiding (mapM_, forM_, mapM, forM, sequence)
 import Control.Monad.State  hiding (mapM_, forM_, mapM, forM, sequence)
 
@@ -31,6 +30,7 @@
 
 import Agda.Compiler.CallCompiler
 import Agda.Compiler.Common
+import Agda.Compiler.MAlonzo.Coerce
 import Agda.Compiler.MAlonzo.Misc
 import Agda.Compiler.MAlonzo.Pretty
 import Agda.Compiler.MAlonzo.Primitives
@@ -57,12 +57,12 @@
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Datatypes
+import Agda.TypeChecking.Primitive (getBuiltinName)
 import Agda.TypeChecking.Records
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Telescope
-import Agda.TypeChecking.Level (reallyUnLevelView)
 import Agda.TypeChecking.Warnings
 
 import Agda.TypeChecking.CompiledClause
@@ -79,6 +79,7 @@
 import qualified Agda.Utils.HashMap as HMap
 import Agda.Utils.Singleton
 import Agda.Utils.Size
+import Agda.Utils.String
 import Agda.Utils.Tuple
 
 import Paths_Agda
@@ -148,8 +149,10 @@
 
 --- Module compilation ---
 
-type GHCModuleEnv = Maybe CoinductionKit
+-- | This environment is no longer used for anything.
 
+type GHCModuleEnv = ()
+
 ghcPreModule :: GHCOptions -> ModuleName -> FilePath -> TCM (Recompile GHCModuleEnv IsMain)
 ghcPreModule _ m ifile = ifM uptodate noComp yesComp
   where
@@ -164,7 +167,7 @@
       out <- outFile_
       reportSLn "compile.ghc" 1 $ repl [m, ifile, out] "Compiling <<0>> in <<1>> to <<2>>"
       stImportedModules .= Set.empty  -- we use stImportedModules to accumulate the required Haskell imports
-      Recompile <$> coinductionKit
+      return (Recompile ())
 
 ghcPostModule :: GHCOptions -> GHCModuleEnv -> IsMain -> ModuleName -> [[HS.Decl]] -> TCM IsMain
 ghcPostModule _ _ _ _ defs = do
@@ -197,9 +200,13 @@
   unqualRTE :: HS.ImportDecl
   unqualRTE = HS.ImportDecl mazRTE False $ Just $
               (False, [ HS.IVar $ HS.Ident x
-                      | x <- [mazCoerceName, mazErasedName] ++
-                             map treelessPrimName [T.PAdd, T.PSub, T.PMul, T.PQuot, T.PRem, T.PGeq, T.PLt, T.PEqI, T.PEqF] ])
+                      | x <- [mazCoerceName, mazErasedName, mazAnyTypeName] ++
+                             map treelessPrimName rtePrims ])
 
+  rtePrims = [T.PAdd, T.PSub, T.PMul, T.PQuot, T.PRem, T.PGeq, T.PLt, T.PEqI, T.PEqF,
+              T.PAdd64, T.PSub64, T.PMul64, T.PQuot64, T.PRem64, T.PLt64, T.PEq64,
+              T.PITo64, T.P64ToI]
+
   imps :: TCM [HS.ImportDecl]
   imps = List.map decl . uniq <$>
            ((++) <$> importsForPrim <*> (List.map mazMod <$> mnames))
@@ -217,39 +224,32 @@
 -- Main compiling clauses
 --------------------------------------------------
 
--- | Note that the INFINITY, SHARP and FLAT builtins are translated as
--- follows (if a 'CoinductionKit' is given):
---
--- @
---   type Infinity a b = b
---
---   sharp :: a -> a
---   sharp x = x
---
---   flat :: a -> a
---   flat x = x
--- @
-
-definition :: Maybe CoinductionKit -> Definition -> TCM [HS.Decl]
+definition :: GHCModuleEnv -> Definition -> TCM [HS.Decl]
 -- ignore irrelevant definitions
 {- 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{defArgInfo = info, defName = q} | isIrrelevant info = do
+definition env Defn{defArgInfo = info, defName = q} | isIrrelevant info = do
   reportSDoc "compile.ghc.definition" 10 $
     text "Not compiling" <+> prettyTCM q <> text "."
   return []
-definition kit Defn{defName = q, defType = ty, theDef = d} = do
+definition env Defn{defName = q, defType = ty, theDef = d} = do
   reportSDoc "compile.ghc.definition" 10 $ vcat
     [ text "Compiling" <+> prettyTCM q <> text ":"
     , nest 2 $ text (show d)
     ]
   pragma <- getHaskellPragma q
+  mbool  <- getBuiltinName builtinBool
+  mlist  <- getBuiltinName builtinList
+  minf   <- getBuiltinName builtinInf
+  mflat  <- getBuiltinName builtinFlat
   checkTypeOfMain q ty $ do
     infodecl q <$> case d of
 
+      _ | Just HsDefn{} <- pragma, Just q == mflat ->
+        genericError
+          "\"COMPILE GHC\" pragmas are not allowed for the FLAT builtin."
+
       _ | Just (HsDefn r hs) <- pragma -> setCurrentRange r $ do
         -- Make sure we have imports for all names mentioned in the type.
         hsty <- haskellType q
@@ -263,44 +263,46 @@
 
         return $ fbWithType hsty (fakeExp hs)
 
-      -- Special treatment of coinductive builtins.
-      Datatype{} | Just q == (nameOfInf <$> kit) -> do
-        let infT = unqhname "T" q
-            infV = unqhname "d" q
-            a    = ihname "a" 0
-            b    = ihname "a" 1
-            vars = [a, b]
-        return [ HS.TypeDecl infT
-                             (List.map HS.UnkindedVar vars)
-                             (HS.TyVar b)
-               , HS.FunBind [HS.Match infV
-                                      (List.map HS.PVar vars)
-                                      (HS.UnGuardedRhs HS.unit_con)
-                                      emptyBinds]
-               ]
-      Constructor{} | Just q == (nameOfSharp <$> kit) -> do
-        let sharp = unqhname "d" q
-            x     = ihname "x" 0
-        return $
-          [ HS.TypeSig [sharp] $ fakeType $
-              "forall a. a -> a"
-          , HS.FunBind [HS.Match sharp
-                                 [HS.PVar x]
-                                 (HS.UnGuardedRhs (HS.Var (HS.UnQual x)))
-                                 emptyBinds]
-          ]
-      Function{} | Just q == (nameOfFlat <$> kit) -> do
-        let flat = unqhname "d" q
-            x    = ihname "x" 0
-        return $
-          [ HS.TypeSig [flat] $ fakeType $
-              "forall a. a -> a"
-          , HS.FunBind [HS.Match flat
-                                 [HS.PVar x]
-                                 (HS.UnGuardedRhs (HS.Var (HS.UnQual x)))
-                                 emptyBinds]
-          ]
+      -- Compiling Bool
+      Datatype{} | Just q == mbool -> do
+        _ <- sequence_ [primTrue, primFalse] -- Just to get the proper error for missing TRUE/FALSE
+        let d = unqhname "d" q
+        Just true  <- getBuiltinName builtinTrue
+        Just false <- getBuiltinName builtinFalse
+        cs <- mapM compiledcondecl [false, true]
+        return $ [ compiledTypeSynonym q "Bool" 0
+                 , HS.FunBind [HS.Match d [] (HS.UnGuardedRhs HS.unit_con) emptyBinds] ] ++
+                 cs
 
+      -- Compiling List
+      Datatype{ dataPars = np } | Just q == mlist -> do
+        _ <- sequence_ [primNil, primCons] -- Just to get the proper error for missing NIL/CONS
+        caseMaybe pragma (return ()) $ \ p -> setCurrentRange p $ warning . GenericWarning =<< do
+          fsep $ pwords "Ignoring GHC pragma for builtin lists; they always compile to Haskell lists."
+        let d = unqhname "d" q
+            t = unqhname "T" q
+        Just nil  <- getBuiltinName builtinNil
+        Just cons <- getBuiltinName builtinCons
+        let vars f n = map (f . ihname "a") [0 .. n - 1]
+        cs <- mapM compiledcondecl [nil, cons]
+        return $ [ HS.TypeDecl t (vars HS.UnkindedVar (np - 1)) (HS.FakeType "[]")
+                 , HS.FunBind [HS.Match d (vars HS.PVar np) (HS.UnGuardedRhs HS.unit_con) emptyBinds] ] ++
+                 cs
+
+      -- Compiling Inf
+      _ | Just q == minf -> do
+        _ <- primSharp -- To get a proper error for missing SHARP.
+        Just sharp <- getBuiltinName builtinSharp
+        sharpC     <- compiledcondecl sharp
+        let d   = unqhname "d" q
+            err = "No term-level implementation of the INFINITY builtin."
+        return $ [ compiledTypeSynonym q "MAlonzo.RTE.Infinity" 2
+                 , HS.FunBind [HS.Match d [HS.PVar (ihname "a" 0)]
+                     (HS.UnGuardedRhs (HS.FakeExp ("error " ++ show err)))
+                     emptyBinds]
+                 , sharpC
+                 ]
+
       Axiom{} -> do
         ar <- typeArity ty
         return $ [ compiledTypeSynonym q ty ar | Just (HsType r ty) <- [pragma] ] ++
@@ -314,41 +316,49 @@
         computeErasedConstructorArgs q
         ccscov <- constructorCoverageCode q (np + ni) cs ty hsCons
         cds <- mapM compiledcondecl cs
-        return $ tvaldecl q (dataInduction d) 0 (np + ni) [] (Just __IMPOSSIBLE__) ++
+        return $ tvaldecl q (dataInduction d) (np + ni) [] (Just __IMPOSSIBLE__) ++
                  [compiledTypeSynonym q ty np] ++ cds ++ ccscov
-      Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs } -> do
+      Datatype{ dataPars = np, dataIxs = ni, dataClause = cl,
+                dataCons = cs, dataInduction = ind } -> do
         computeErasedConstructorArgs q
-        (ars, cds) <- unzip <$> mapM condecl cs
-        return $ tvaldecl q (dataInduction d) (List.maximum (np:ars) - np) (np + ni) cds cl
+        cds <- mapM (flip condecl ind) cs
+        return $ tvaldecl q ind (np + ni) cds cl
       Constructor{} -> return []
-      Record{ recPars = np, recClause = cl, recConHead = con }
-        | Just (HsData r ty hsCons) <- pragma -> setCurrentRange r $ do
-        let cs = [conName con]
-        computeErasedConstructorArgs q
-        ccscov <- constructorCoverageCode q np cs ty hsCons
-        cds <- mapM compiledcondecl cs
-        return $ tvaldecl q Inductive 0 np [] (Just __IMPOSSIBLE__) ++
-                 [compiledTypeSynonym q ty np] ++ cds ++ ccscov
-      Record{ recClause = cl, recConHead = con, recFields = flds } -> do
-        computeErasedConstructorArgs q
-        let c = conName con
-        let noFields = length flds
-        let ar = I.arity ty
-        cd <- snd <$> condecl c
-        return $ tvaldecl q Inductive noFields ar [cd] cl
+      Record{ recPars = np, recClause = cl, recConHead = con,
+              recInduction = ind } ->
+        let -- Non-recursive record types are treated as being
+            -- inductive.
+            inductionKind = fromMaybe Inductive ind
+        in case pragma of
+          Just (HsData r ty hsCons) -> setCurrentRange r $ do
+            let cs = [conName con]
+            computeErasedConstructorArgs q
+            ccscov <- constructorCoverageCode q np cs ty hsCons
+            cds <- mapM compiledcondecl cs
+            return $
+              tvaldecl q inductionKind np [] (Just __IMPOSSIBLE__) ++
+              [compiledTypeSynonym q ty np] ++ cds ++ ccscov
+          _ -> do
+            computeErasedConstructorArgs q
+            cd <- condecl (conName con) inductionKind
+            return $ tvaldecl q inductionKind (I.arity ty) [cd] cl
       AbstractDefn{} -> __IMPOSSIBLE__
   where
   function :: Maybe HaskellPragma -> TCM [HS.Decl] -> TCM [HS.Decl]
   function mhe fun = do
-    ccls <- mkwhere <$> fun
+    ccls  <- mkwhere <$> fun
+    mflat <- getBuiltinName builtinFlat
     case mhe of
+      Just HsExport{} | Just q == mflat ->
+        genericError
+          "\"COMPILE GHC as\" pragmas are not allowed for the FLAT builtin."
       Just (HsExport r name) -> do
         t <- setCurrentRange r $ haskellType q
         let tsig :: HS.Decl
-            tsig = HS.TypeSig [HS.Ident name] (fakeType t)
+            tsig = HS.TypeSig [HS.Ident name] t
 
             def :: HS.Decl
-            def = HS.FunBind [HS.Match (HS.Ident name) [] (HS.UnGuardedRhs (hsVarUQ $ dname q)) emptyBinds]
+            def = HS.FunBind [HS.Match (HS.Ident name) [] (HS.UnGuardedRhs (hsCoerce $ hsVarUQ $ dname q)) emptyBinds]
         return ([tsig,def] ++ ccls)
       _ -> return ccls
 
@@ -358,29 +368,37 @@
     used <- getCompiledArgUse q
     let dostrip = any not used
 
+    -- Compute the type approximation
+    def <- getConstInfo q
+    (argTypes0, resType) <- hsTelApproximation $ defType def
+    let pars = case theDef def of
+                 Function{ funProjection = Just Projection{ projIndex = i } } | i > 0 -> i - 1
+                 _ -> 0
+        argTypes  = drop pars argTypes0
+        argTypesS = [ t | (t, True) <- zip argTypes (used ++ repeat True) ]
+
     e <- if dostrip then closedTerm (stripUnusedArguments used treeless)
                     else closedTerm treeless
     let (ps, b) = lamView e
         lamView e =
-          case stripTopCoerce e of
+          case e of
             HS.Lambda ps b -> (ps, b)
-            b                -> ([], b)
-        stripTopCoerce (HS.Lambda ps b) = HS.Lambda ps $ stripTopCoerce b
-        stripTopCoerce e =
-          case hsAppView e of
-            [c,  e] | c == mazCoerce -> e
-            _                        -> e
+            b              -> ([], b)
 
+        tydecl  f ts t = HS.TypeSig [f] (foldr HS.TyFun t ts)
         funbind f ps b = HS.FunBind [HS.Match f ps (HS.UnGuardedRhs b) emptyBinds]
+        tyfunbind f ts t ps b =
+          let ts' = ts ++ (replicate (length ps - length ts) mazAnyType)
+          in [tydecl f ts' t, funbind f ps b]
 
     -- The definition of the non-stripped function
     (ps0, _) <- lamView <$> closedTerm (foldr ($) T.TErased $ replicate (length used) T.TLam)
     let b0 = foldl HS.App (hsVarUQ $ duname q) [ hsVarUQ x | (~(HS.PVar x), True) <- zip ps0 used ]
 
     return $ if dostrip
-      then [ funbind (dname q) ps0 b0
-           , funbind (duname q) ps b ]
-      else [ funbind (dname q) ps b ]
+      then tyfunbind (dname q) argTypes resType ps0 b0 ++
+           tyfunbind (duname q) argTypesS resType ps b
+      else tyfunbind (dname q) argTypes resType ps b
 
   mkwhere :: [HS.Decl] -> [HS.Decl]
   mkwhere (HS.FunBind [m0, HS.Match dn ps rhs emptyBinds] : fbs@(_:_)) =
@@ -391,9 +409,9 @@
 
   mkwhere fbs = fbs
 
-  fbWithType :: HaskellType -> HS.Exp -> [HS.Decl]
+  fbWithType :: HS.Type -> HS.Exp -> [HS.Decl]
   fbWithType ty e =
-    [ HS.TypeSig [unqhname "d" q] $ fakeType ty ] ++ fb e
+    [ HS.TypeSig [unqhname "d" q] ty ] ++ fb e
 
   fb :: HS.Exp -> [HS.Decl]
   fb e  = [HS.FunBind [HS.Match (unqhname "d" q) []
@@ -413,24 +431,24 @@
 -- | Environment for naming of local variables.
 --   Invariant: @reverse ccCxt ++ ccNameSupply@
 data CCEnv = CCEnv
-  { ccNameSupply :: NameSupply  -- ^ Supply of fresh names
-  , ccCxt        :: CCContext   -- ^ Names currently in scope
+  { _ccNameSupply :: NameSupply  -- ^ Supply of fresh names
+  , _ccContext    :: CCContext   -- ^ Names currently in scope
   }
 
 type NameSupply = [HS.Name]
 type CCContext  = [HS.Name]
 
-mapNameSupply :: (NameSupply -> NameSupply) -> CCEnv -> CCEnv
-mapNameSupply f e = e { ccNameSupply = f (ccNameSupply e) }
+ccNameSupply :: Lens' NameSupply CCEnv
+ccNameSupply f e =  (\ ns' -> e { _ccNameSupply = ns' }) <$> f (_ccNameSupply e)
 
-mapContext :: (CCContext -> CCContext) -> CCEnv -> CCEnv
-mapContext f e = e { ccCxt = f (ccCxt e) }
+ccContext :: Lens' CCContext CCEnv
+ccContext f e = (\ cxt -> e { _ccContext = cxt }) <$> f (_ccContext e)
 
 -- | Initial environment for expression generation.
 initCCEnv :: CCEnv
 initCCEnv = CCEnv
-  { ccNameSupply = map (ihname "v") [0..]  -- DON'T CHANGE THESE NAMES!
-  , ccCxt        = []
+  { _ccNameSupply = map (ihname "v") [0..]  -- DON'T CHANGE THESE NAMES!
+  , _ccContext    = []
   }
 
 -- | Term variables are de Bruijn indices.
@@ -442,18 +460,18 @@
 freshNames :: Int -> ([HS.Name] -> CC a) -> CC a
 freshNames n _ | n < 0 = __IMPOSSIBLE__
 freshNames n cont = do
-  (xs, rest) <- splitAt n <$> asks ccNameSupply
-  local (mapNameSupply (const rest)) $ cont xs
+  (xs, rest) <- splitAt n <$> view ccNameSupply
+  local (over ccNameSupply (const rest)) $ cont xs
 
 -- | Introduce n variables into the context.
 intros :: Int -> ([HS.Name] -> CC a) -> CC a
 intros n cont = freshNames n $ \xs ->
-  local (mapContext (reverse xs ++)) $ cont xs
+  local (over ccContext (reverse xs ++)) $ cont xs
 
 checkConstructorType :: QName -> HaskellCode -> TCM [HS.Decl]
 checkConstructorType q hs = do
   ty <- haskellType q
-  return [ HS.TypeSig [unqhname "check" q] $ fakeType ty
+  return [ HS.TypeSig [unqhname "check" q] ty
          , HS.FunBind [HS.Match (unqhname "check" q) []
                                 (HS.UnGuardedRhs $ fakeExp hs) emptyBinds]
          ]
@@ -477,17 +495,34 @@
          ]
 
 closedTerm :: T.TTerm -> TCM HS.Exp
-closedTerm v = hsCast <$> term v `runReaderT` initCCEnv
+closedTerm v = do
+  v <- addCoercions v
+  term v `runReaderT` initCCEnv
 
+-- Translate case on bool to if
+mkIf :: T.TTerm -> CC T.TTerm
+mkIf t@(TCase e _ d [TACon c1 0 b1, TACon c2 0 b2]) | T.isUnreachable d = do
+  mTrue  <- lift $ getBuiltinName builtinTrue
+  mFalse <- lift $ getBuiltinName builtinFalse
+  let isTrue  c = Just c == mTrue
+      isFalse c = Just c == mFalse
+  if | isTrue c1, isFalse c2 -> return $ T.tIfThenElse (TCoerce $ TVar e) b1 b2
+     | isTrue c2, isFalse c1 -> return $ T.tIfThenElse (TCoerce $ TVar e) b2 b1
+     | otherwise             -> return t
+mkIf t = return t
+
 -- | Extract Agda term to Haskell expression.
 --   Erased arguments are extracted as @()@.
 --   Types are extracted as @()@.
 term :: T.TTerm -> CC HS.Exp
-term tm0 = case tm0 of
+term tm0 = mkIf tm0 >>= \ tm0 -> case tm0 of
   T.TVar i -> do
-    x <- lookupIndex i <$> asks ccCxt
+    x <- lookupIndex i <$> view ccContext
     return $ hsVarUQ x
-  T.TApp (T.TDef f) ts -> do
+  T.TApp (T.TPrim T.PIf) [c, x, y] -> HS.If <$> term c
+                                            <*> term x
+                                            <*> term y
+  T.TApp t ts | Just (coe, f) <- coerceView t -> do
     used <- lift $ getCompiledArgUse f
     isCompiled <- lift $ isJust <$> getHaskellPragma f  -- #2248: no unused argument pruning for COMPILE'd functions
     let given   = length ts
@@ -495,39 +530,36 @@
         missing = drop given used
     if not isCompiled && any not used
       then if any not missing then term (etaExpand (needed - given) tm0) else do
-        f <- lift $ HS.Var <$> xhqn "du" f  -- used stripped function
+        f <- lift $ coe . HS.Var <$> xhqn "du" f  -- used stripped function
         f `apps` [ t | (t, True) <- zip ts $ used ++ repeat True ]
       else do
         t' <- term (T.TDef f)
-        t' `apps` ts
-  T.TApp (T.TCon c) ts -> do
-    kit <- lift coinductionKit
-    if Just c == (nameOfSharp <$> kit)
-      then do
-        t' <- HS.Var <$> lift (xhqn "d" c)
-        apps t' ts
-      else do
-        (ar, _) <- lift $ conArityAndPars c
-        erased  <- lift $ getErasedConArgs c
-        let missing = drop (length ts) erased
-            notErased = not
-        case all notErased missing of
-          False -> term $ etaExpand (length missing) tm0
-          True  -> do
-            f <- lift $ HS.Con <$> conhqn c
-            f `apps` [ t | (t, False) <- zip ts erased ]
+        coe t' `apps` ts
+    where coerceView (T.TCoerce (T.TDef f)) = Just (hsCoerce, f)
+          coerceView (T.TDef f)             = Just (id, f)
+          coerceView _                      = Nothing
+  T.TApp (T.TCon c) ts -> do  -- Note that constructors are never coerced
+    (ar, _) <- lift $ conArityAndPars c
+    erased  <- lift $ getErasedConArgs c
+    let missing = drop (length ts) erased
+        notErased = not
+    case all notErased missing of
+      False -> term $ etaExpand (length missing) tm0
+      True  -> do
+        f <- lift $ HS.Con <$> conhqn c
+        f `apps` [ t | (t, False) <- zip ts erased ]
   T.TApp t ts -> do
     t' <- term t
     t' `apps` ts
   T.TLam at -> do
-    (nm:_) <- asks ccNameSupply
+    (nm:_) <- view ccNameSupply
     intros 1 $ \ [x] ->
       hsLambda [HS.PVar x] <$> term at
   T.TLet t1 t2 -> do
     t1' <- term t1
     intros 1 $ \[x] -> do
       t2' <- term t2
-      return $ hsLet x (hsCast t1') t2'
+      return $ hsLet x t1' t2'
 
   T.TCase sc ct def alts -> do
     sc' <- term (T.TVar sc)
@@ -535,7 +567,7 @@
     def' <- term def
     let defAlt = HS.Alt HS.PWildCard (HS.UnGuardedRhs def') emptyBinds
 
-    return $ HS.Case (hsCast sc') (alts' ++ [defAlt])
+    return $ HS.Case (hsCoerce sc') (alts' ++ [defAlt])
 
   T.TLit l -> return $ literal l
   T.TDef q -> do
@@ -544,6 +576,7 @@
   T.TPrim p  -> return $ compilePrim p
   T.TUnit    -> return HS.unit_con
   T.TSort    -> return HS.unit_con
+  T.TCoerce e -> hsCoerce <$> term e
   T.TErased  -> return $ hsVarUQ $ HS.Ident mazErasedName
   T.TError e -> return $ case e of
     T.TUnreachable ->  rtmUnreachableError
@@ -553,6 +586,8 @@
                 (T.mkTApp (raise n t) [T.TVar i | i <- [n - 1, n - 2..0]])
                 (replicate n ())
 
+hsCoerce :: HS.Exp -> HS.Exp
+hsCoerce t = HS.App mazCoerce t
 
 compilePrim :: T.TPrim -> HS.Exp
 compilePrim s = HS.Var $ hsName $ treelessPrimName s
@@ -563,7 +598,12 @@
     T.TACon {T.aCon = c} -> do
       intros (T.aArity a) $ \ xs -> do
         erased <- lift $ getErasedConArgs c
-        hConNm <- lift $ conhqn c
+        nil  <- lift $ getBuiltinName builtinNil
+        cons <- lift $ getBuiltinName builtinCons
+        hConNm <-
+          if | Just c == nil  -> return $ HS.UnQual $ HS.Ident "[]"
+             | Just c == cons -> return $ HS.UnQual $ HS.Symbol ":"
+             | otherwise      -> lift $ conhqn c
         mkAlt (HS.PApp hConNm $ map HS.PVar [ x | (x, False) <- zip xs erased ])
     T.TAGuard g b -> do
       g <- term g
@@ -578,22 +618,25 @@
   where
     mkGuarded eq lit b = do
       b  <- term b
-      sc <- term (T.TVar sc)
-      let guard =
+      let varName = HS.Ident "l" -- only used locally in the guard
+          pv = HS.PVar varName
+          v  = hsVarUQ varName
+          guard =
             HS.Var (HS.UnQual (HS.Ident eq)) `HS.App`
-              sc `HS.App` lit
-      return $ HS.Alt HS.PWildCard
+              v `HS.App` lit
+      return $ HS.Alt pv
                       (HS.GuardedRhss [HS.GuardedRhs [HS.Qualifier guard] b])
                       emptyBinds
 
     mkAlt :: HS.Pat -> CC HS.Alt
     mkAlt pat = do
         body' <- term $ T.aBody a
-        return $ HS.Alt pat (HS.UnGuardedRhs $ hsCast body') emptyBinds
+        return $ HS.Alt pat (HS.UnGuardedRhs body') emptyBinds
 
 literal :: Literal -> HS.Exp
 literal l = case l of
   LitNat    _ _   -> typed "Integer"
+  LitWord64 _ _   -> typed "MAlonzo.RTE.Word64"
   LitFloat  _ x   -> floatExp x "Double"
   LitQName  _ x   -> litqname x
   LitString _ s   -> litString s
@@ -620,6 +663,7 @@
 
 hslit :: Literal -> HS.Literal
 hslit l = case l of LitNat    _ x -> HS.Int    x
+                    LitWord64 _ x -> HS.Int    (fromIntegral x)
                     LitFloat  _ x -> HS.Frac   (toRational x)
                     LitChar   _ x -> HS.Char   x
                     LitQName  _ x -> __IMPOSSIBLE__
@@ -668,20 +712,21 @@
   erased  <- length . filter id <$> getErasedConArgs q
   return (ar - erased)
 
-condecl :: QName -> TCM (Nat, HS.ConDecl)
-condecl q = do
-  (ar, np) <- conArityAndPars q
-  erased   <- length . filter id <$> getErasedConArgs q
-  let ar' = ar - erased
-  return $ (ar' + np, cdecl q ar')
-
-cdecl :: QName -> Nat -> HS.ConDecl
-cdecl q n = HS.ConDecl (unqhname "C" q)
-            [ HS.TyVar $ ihname "a" i | i <- [0 .. n - 1] ]
+condecl :: QName -> Induction -> TCM HS.ConDecl
+condecl q _ind = do
+  def <- getConstInfo q
+  let Constructor{ conPars = np, conErased = erased } = theDef def
+  (argTypes0, _) <- hsTelApproximation (defType def)
+  let argTypes   = [ (Just HS.Lazy, t)
+                     -- Currently all constructors are lazy.
+                   | (t, False) <- zip (drop np argTypes0)
+                                       (erased ++ repeat False)
+                   ]
+  return $ HS.ConDecl (unqhname "C" q) argTypes
 
 compiledcondecl :: QName -> TCM HS.Decl
 compiledcondecl q = do
-  (ar, np) <- conArityAndPars q
+  ar <- erasedArity q
   hsCon <- fromMaybe __IMPOSSIBLE__ <$> getHaskellConstructor q
   let patVars = map (HS.PVar . ihname "a") [0 .. ar - 1]
   return $ HS.PatSyn (HS.PApp (HS.UnQual $ unqhname "C" q) patVars) (HS.PApp (hsName hsCon) patVars)
@@ -696,75 +741,28 @@
 tvaldecl :: QName
          -> Induction
             -- ^ Is the type inductive or coinductive?
-         -> Nat -> Nat -> [HS.ConDecl] -> Maybe Clause -> [HS.Decl]
-tvaldecl q ind ntv npar cds cl =
+         -> Nat -> [HS.ConDecl] -> Maybe Clause -> [HS.Decl]
+tvaldecl q ind npar cds cl =
   HS.FunBind [HS.Match vn pvs (HS.UnGuardedRhs HS.unit_con) emptyBinds] :
-  maybe [HS.DataDecl kind tn tvs cds []]
+  maybe [HS.DataDecl kind tn [] cds' []]
         (const []) cl
   where
   (tn, vn) = (unqhname "T" q, unqhname "d" q)
-  tvs = [ HS.UnkindedVar $ ihname "a" i | i <- [0 .. ntv  - 1]]
   pvs = [ HS.PVar        $ ihname "a" i | i <- [0 .. npar - 1]]
 
   -- Inductive data types consisting of a single constructor with a
   -- single argument are translated into newtypes.
-  kind = case (ind, cds) of
-    (Inductive, [HS.ConDecl _ [_]]) -> HS.NewType
-    _                               -> HS.DataType
+  (kind, cds') = case (ind, cds) of
+    (Inductive, [HS.ConDecl c [(_, t)]]) ->
+      (HS.NewType, [HS.ConDecl c [(Nothing, t)]])
+      -- The strictness annotations are removed for newtype
+      -- constructors.
+    _ -> (HS.DataType, cds)
 
 infodecl :: QName -> [HS.Decl] -> [HS.Decl]
 infodecl _ [] = []
-infodecl q ds = fakeD (unqhname "name" q) (show $ prettyShow q) : ds
-
---------------------------------------------------
--- Inserting unsafeCoerce
---------------------------------------------------
-
-hsCast :: HS.Exp -> HS.Exp
-{-
-hsCast = addcast . go where
-  addcast [e@(HS.Var(HS.UnQual(HS.Ident(c:ns))))] | c == 'v' && all isDigit ns = e
-  addcast es = foldl HS.App mazCoerce es
-  -- this need to be extended if you generate other kinds of exps.
-  go (HS.App e1 e2    ) = go e1 ++ [hsCast e2]
-  go (HS.Lambda _ ps e) = [ HS.Lambda ps (hsCast e) ]
-  go e = [e]
--}
-
--- TODO: what's the specification for hsCast, hsCast' and hsCoerce???
-hsCast e = hsCoerce (hsCast' e)
-
-hsCast' :: HS.Exp -> HS.Exp
-hsCast' (HS.InfixApp e1 op e2) = hsCoerce $ HS.InfixApp (hsCast' e1) op (hsCast' e2)
-hsCast' (HS.Lambda ps e)       = HS.Lambda ps $ hsCast' e
-hsCast' (HS.Let bs e)          = HS.Let bs $ hsCast' e
-hsCast' (HS.Case sc alts)      = HS.Case (hsCast' sc) (map (hsMapAlt hsCast') alts)
-hsCast' e =
-  case hsAppView e of
-    f : es -> foldl HS.App (hsCoerce f) (map hsCastApp es)
-    _      -> __IMPOSSIBLE__
-
--- We still have to coerce function applications in arguments to coerced
--- functions.
-hsCastApp :: HS.Exp -> HS.Exp
-hsCastApp (HS.Lambda ps b) = HS.Lambda ps (hsCastApp b)
-hsCastApp (HS.Let bs e) = HS.Let bs $ hsCastApp e
-hsCastApp (HS.Case sc bs) = HS.Case (hsCastApp sc) (map (hsMapAlt hsCastApp) bs)
-hsCastApp (HS.InfixApp e1 op e2) = HS.InfixApp (hsCastApp e1) op (hsCastApp e2)
-hsCastApp e =
-  case hsAppView e of
-    f : es@(_:_) -> foldl HS.App (hsCoerce f) $ map hsCastApp es
-    _ -> e
-
--- No coercion for literal integers
-hsCoerce :: HS.Exp -> HS.Exp
-hsCoerce e@(HS.ExpTypeSig (HS.Lit (HS.Int{})) _) = e
-hsCoerce (HS.Case sc alts) = HS.Case sc (map (hsMapAlt hsCoerce) alts)
-hsCoerce (HS.Let bs e) = HS.Let bs $ hsCoerce e
-hsCoerce e =
-  case hsAppView e of
-    c : _ | c == mazCoerce || c == mazIncompleteMatch -> e
-    _ -> mazCoerce `HS.App` e
+infodecl q ds =
+  fakeD (unqhname "name" q) (haskellStringLiteral $ prettyShow q) : ds
 
 --------------------------------------------------
 -- Writing out a haskell module
@@ -780,7 +778,7 @@
 writeModule (HS.Module m ps imp ds) = do
   -- Note that GHC assumes that sources use ASCII or UTF-8.
   out <- outFile m
-  liftIO $ UTF8.writeFile out $ prettyPrint $
+  liftIO $ UTF8.writeFile out $ (++ "\n") $ prettyPrint $
     HS.Module m (p : ps) imp ds
   where
   p = HS.LanguagePragma $ List.map HS.Ident $
diff --git a/src/full/Agda/Compiler/MAlonzo/HaskellTypes.hs b/src/full/Agda/Compiler/MAlonzo/HaskellTypes.hs
--- a/src/full/Agda/Compiler/MAlonzo/HaskellTypes.hs
+++ b/src/full/Agda/Compiler/MAlonzo/HaskellTypes.hs
@@ -3,11 +3,21 @@
 -- | Translating Agda types to Haskell types. Used to ensure that imported
 --   Haskell functions have the right type.
 
-module Agda.Compiler.MAlonzo.HaskellTypes where
+module Agda.Compiler.MAlonzo.HaskellTypes
+  ( haskellType
+  , checkConstructorCount
+  , hsTelApproximation, hsTelApproximation'
+  ) where
 
-import Control.Applicative
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
+import Control.Monad (zipWithM)
 import Data.Maybe (fromMaybe)
+import Data.List (intercalate)
 
+import Agda.Syntax.Position
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad
@@ -17,101 +27,137 @@
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Free
+import Agda.TypeChecking.Telescope
 
 import Agda.Compiler.MAlonzo.Pragmas
 import Agda.Compiler.MAlonzo.Misc
 import Agda.Compiler.MAlonzo.Pretty
 
-import Agda.Utils.Except ( MonadError(catchError) )
+import qualified Agda.Utils.Haskell.Syntax as HS
+import Agda.Utils.Except
 import Agda.Utils.Pretty (prettyShow)
+import Agda.Utils.Null
 
 #include "undefined.h"
 import Agda.Utils.Impossible
 
-type HaskellKind = String
+hsQCon :: String -> String -> HS.Type
+hsQCon m f = HS.TyCon $ HS.Qual (HS.ModuleName m) (HS.Ident f)
 
-hsStar :: HaskellKind
-hsStar = "*"
+hsCon :: String -> HS.Type
+hsCon = HS.TyCon . HS.UnQual . HS.Ident
 
-hsKFun :: HaskellKind -> HaskellKind -> HaskellKind
-hsKFun k l = "(" ++ k ++ " -> " ++ l ++ ")"
+hsUnit :: HS.Type
+hsUnit = hsCon "()"
 
-hsFun :: HaskellKind -> HaskellKind -> HaskellKind
-hsFun a b = "(" ++ a ++ " -> " ++ b ++ ")"
+hsVar :: HS.Name -> HS.Type
+hsVar = HS.TyVar
 
-hsUnit :: HaskellType
-hsUnit = "()"
+hsApp :: HS.Type -> [HS.Type] -> HS.Type
+hsApp d ds = foldl HS.TyApp d ds
 
-hsVar :: Name -> HaskellType
-hsVar x = "x" ++ concatMap encode (prettyShow x)
+hsForall :: HS.Name -> HS.Type -> HS.Type
+hsForall x = HS.TyForall [HS.UnkindedVar x]
+
+data WhyNot = NoPragmaFor QName
+            | WrongPragmaFor Range QName
+            | BadLambda Term
+            | BadMeta Term
+            | BadDontCare Term
+
+type ToHs = ExceptT WhyNot TCM
+
+notAHaskellType :: Term -> WhyNot -> TCM a
+notAHaskellType top offender = typeError . GenericDocError =<< do
+  fsep (pwords "The type" ++ [prettyTCM top] ++
+        pwords "cannot be translated to a corresponding Haskell type, because it contains" ++
+        reason offender) $$ possibleFix offender
   where
-    okChars = ['a'..'z'] ++ ['A'..'Y'] ++ "_'"
-    encode 'Z' = "ZZ"
-    encode c
-      | c `elem` okChars = [c]
-      | otherwise        = "Z" ++ show (fromEnum c)
+    reason (BadLambda        v) = pwords "the lambda term" ++ [prettyTCM v <> text "."]
+    reason (BadMeta          v) = pwords "a meta variable" ++ [prettyTCM v <> text "."]
+    reason (BadDontCare      v) = pwords "an erased term" ++ [prettyTCM v <> text "."]
+    reason (NoPragmaFor      x) = [prettyTCM x] ++ pwords "which does not have a COMPILE pragma."
+    reason (WrongPragmaFor _ x) = [prettyTCM x] ++ pwords "which has the wrong kind of COMPILE pragma."
 
+    possibleFix BadLambda{}     = empty
+    possibleFix BadMeta{}       = empty
+    possibleFix BadDontCare{}   = empty
+    possibleFix (NoPragmaFor d) = suggestPragma d $ text "add a pragma"
+    possibleFix (WrongPragmaFor r d) = suggestPragma d $
+      sep [ text "replace the value-level pragma at", nest 2 $ pretty r, text "by" ]
 
-hsApp :: String -> [HaskellType] -> HaskellType
-hsApp d [] = d
-hsApp d as = "(" ++ unwords (d : as) ++ ")"
+    suggestPragma d action = do
+      def    <- theDef <$> getConstInfo d
+      let dataPragma n = ("data type HsD", "data HsD (" ++ intercalate " | " [ "C" ++ show i | i <- [1..n] ] ++ ")")
+          typePragma   = ("type HsT", "type HsT")
+          (hsThing, pragma) =
+            case def of
+              Datatype{ dataCons = cs } -> dataPragma (length cs)
+              Record{}                  -> dataPragma 1
+              _                         -> typePragma
+      vcat [ sep [text "Possible fix:", action]
+           , nest 2 $ hsep [ text "{-# COMPILE GHC", prettyTCM d, text "=", text pragma, text "#-}" ]
+           , text ("for a suitable Haskell " ++ hsThing ++ ".")
+           ]
 
-hsForall :: String -> HaskellType -> HaskellType
-hsForall x a = "(forall " ++ x ++ ". " ++ a ++ ")"
+runToHs :: Term -> ToHs a -> TCM a
+runToHs top m = either (notAHaskellType top) return =<< runExceptT m
 
-notAHaskellType :: Type -> TCM a
-notAHaskellType a = typeError . GenericDocError =<< do
-  fsep $ pwords "The type" ++ [prettyTCM a] ++
-         pwords "cannot be translated to a Haskell type."
+liftE1 :: (forall a. m a -> m a) -> ExceptT e m a -> ExceptT e m a
+liftE1 f = mkExceptT . f . runExceptT
 
+liftE1' :: (forall b. (a -> m b) -> m b) -> (a -> ExceptT e m b) -> ExceptT e m b
+liftE1' f k = mkExceptT (f (runExceptT . k))
 
-getHsType :: QName -> TCM HaskellType
+-- Only used in hsTypeApproximation below, and in that case we catch the error.
+getHsType' :: QName -> TCM HS.Type
+getHsType' q = runToHs (Def q []) (getHsType q)
+
+getHsType :: QName -> ToHs HS.Type
 getHsType x = do
-  d <- getHaskellPragma x
-  let namedType = do
+  d <- liftTCM $ getHaskellPragma x
+  list <- liftTCM $ getBuiltinName builtinList
+  inf  <- liftTCM $ getBuiltinName builtinInf
+  let namedType = liftTCM $ do
         -- For these builtin types, the type name (xhqn ...) refers to the
         -- generated, but unused, datatype and not the primitive type.
         nat  <- getBuiltinName builtinNat
         int  <- getBuiltinName builtinInteger
         bool <- getBuiltinName builtinBool
-        case () of
-          _ | Just x `elem` [nat, int] -> return "Integer"
-            | Just x == bool           -> return "Bool"
-            | otherwise                -> prettyShow <$> xhqn "T" x
-  setCurrentRange d $ case d of
-    Just HsDefn{} -> return hsUnit
-    Just HsType{} -> namedType
-    Just HsData{} -> namedType
-    _             -> notAHaskellType (El Prop $ Def x [])
-
-getHsVar :: Nat -> TCM HaskellCode
-getHsVar i = hsVar <$> nameOfBV i
+        if  | Just x `elem` [nat, int] -> return $ hsCon "Integer"
+            | Just x == bool           -> return $ hsCon "Bool"
+            | otherwise                -> hsCon . prettyShow <$> xhqn "T" x
+  liftE1 (setCurrentRange d) $ case d of
+    _ | Just x == list -> liftTCM $ hsCon . prettyShow <$> xhqn "T" x -- we ignore Haskell pragmas for List
+    _ | Just x == inf  -> return $ hsQCon "MAlonzo.RTE" "Infinity"
+    Just HsDefn{}      -> throwError $ WrongPragmaFor (getRange d) x
+    Just HsType{}      -> namedType
+    Just HsData{}      -> namedType
+    _                  -> throwError $ NoPragmaFor x
 
--- | Note that @Inf a b@, where @Inf@ is the INFINITY builtin, is
--- translated to @<translation of b>@ (assuming that all coinductive
--- builtins are defined).
---
--- Note that if @haskellType@ supported universe polymorphism then the
--- special treatment of INFINITY might not be needed.
+getHsVar :: MonadTCM tcm => Nat -> tcm HS.Name
+getHsVar i = HS.Ident . encodeName <$> nameOfBV i
+  where
+    encodeName x = "x" ++ concatMap encode (prettyShow x)
+    okChars = ['a'..'z'] ++ ['A'..'Y'] ++ "_'"
+    encode 'Z' = "ZZ"
+    encode c
+      | c `elem` okChars = [c]
+      | otherwise        = "Z" ++ show (fromEnum c)
 
-haskellType' :: Type -> TCM HaskellType
-haskellType' t = fromType t
+haskellType' :: Type -> TCM HS.Type
+haskellType' t = runToHs (unEl t) (fromType t)
   where
-    err      = notAHaskellType t
     fromArgs = mapM (fromTerm . unArg)
     fromType = fromTerm . unEl
     fromTerm v = do
-      v   <- unSpine <$> reduce v
+      v   <- liftTCM $ unSpine <$> reduce v
       reportSLn "compile.haskell.type" 50 $ "toHaskellType " ++ show v
       kit <- liftTCM coinductionKit
       case v of
         Var x es -> do
           let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
-          hsApp <$> getHsVar x <*> fromArgs args
-        Def d es | Just d == (nameOfInf <$> kit) ->
-          case es of
-            [Apply a, Apply b] -> fromTerm (unArg b)
-            _                  -> err
+          hsApp . hsVar <$> getHsVar x <*> fromArgs args
         Def d es -> do
           let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
           hsApp <$> getHsType d <*> fromArgs args
@@ -119,25 +165,32 @@
           if isBinderUsed b  -- Andreas, 2012-04-03.  Q: could we rely on Abs/NoAbs instead of again checking freeness of variable?
           then do
             hsA <- fromType (unDom a)
-            underAbstraction a b $ \b ->
-              hsForall <$> getHsVar 0 <*> (hsFun hsA <$> fromType b)
-          else hsFun <$> fromType (unDom a) <*> fromType (noabsApp __IMPOSSIBLE__ b)
-        Con c ci args -> hsApp <$> getHsType (conName c) <*> fromArgs args
-        Lam{}      -> err
+            liftE1' (underAbstraction a b) $ \ b ->
+              hsForall <$> getHsVar 0 <*> (HS.TyFun hsA <$> fromType b)
+          else HS.TyFun <$> fromType (unDom a) <*> fromType (noabsApp __IMPOSSIBLE__ b)
+        Con c ci es -> do
+          let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
+          hsApp <$> getHsType (conName c) <*> fromArgs args
+        Lam{}      -> throwError (BadLambda v)
         Level{}    -> return hsUnit
         Lit{}      -> return hsUnit
         Sort{}     -> return hsUnit
-        Shared p   -> fromTerm $ derefPtr p
-        MetaV{}    -> err
-        DontCare{} -> err
+        MetaV{}    -> throwError (BadMeta v)
+        DontCare{} -> throwError (BadDontCare v)
 
-haskellType :: QName -> TCM HaskellType
+haskellType :: QName -> TCM HS.Type
 haskellType q = do
   def <- getConstInfo q
-  let np = case theDef def of
-             Constructor{ conPars = np } -> np
-             _                           -> 0
-      underPars 0 a = haskellType' a
+  let (np, erased) =
+        case theDef def of
+          Constructor{ conPars = np, conErased = erased }
+            -> (np, erased ++ repeat False)
+          _ -> (0, repeat False)
+      stripErased (True  : es) (HS.TyFun _ t)     = stripErased es t
+      stripErased (False : es) (HS.TyFun s t)     = HS.TyFun s $ stripErased es t
+      stripErased es           (HS.TyForall xs t) = HS.TyForall xs $ stripErased es t
+      stripErased _            t                  = t
+      underPars 0 a = stripErased erased <$> haskellType' a
       underPars n a = do
         a <- reduce a
         case unEl a of
@@ -145,7 +198,7 @@
           Pi a b  -> underAbstraction a b $ \b -> hsForall <$> getHsVar 0 <*> underPars (n - 1) b
           _       -> __IMPOSSIBLE__
   ty <- underPars np $ defType def
-  reportSLn "tc.pragma.compile" 10 $ "Haskell type for " ++ prettyShow q ++ ": " ++ ty
+  reportSDoc "tc.pragma.compile" 10 $ (text "Haskell type for" <+> prettyTCM q <> text ":") <?> pretty ty
   return ty
 
 checkConstructorCount :: QName -> [QName] -> [HaskellCode] -> TCM ()
@@ -165,3 +218,59 @@
   where
     n  = length cs
     hn = length hsCons
+
+-- Type approximations ----------------------------------------------------
+
+data PolyApprox = PolyApprox | NoPolyApprox
+  deriving (Eq)
+
+hsTypeApproximation :: PolyApprox -> Int -> Type -> TCM HS.Type
+hsTypeApproximation poly fv t = do
+  list <- getBuiltinName builtinList
+  bool <- getBuiltinName builtinBool
+  int  <- getBuiltinName builtinInteger
+  nat  <- getBuiltinName builtinNat
+  word <- getBuiltinName builtinWord64
+  let is q b = Just q == b
+      tyCon  = HS.TyCon . HS.UnQual . HS.Ident
+      rteCon = HS.TyCon . HS.Qual mazRTE . HS.Ident
+      tyVar n i = HS.TyVar $ HS.Ident $ "a" ++ show (n - i)
+  let go n t = do
+        t <- unSpine <$> reduce t
+        case t of
+          Var i _ | poly == PolyApprox -> return $ tyVar n i
+          Pi a b -> HS.TyFun <$> go n (unEl $ unDom a) <*> go (n + k) (unEl $ unAbs b)
+            where k = case b of Abs{} -> 1; NoAbs{} -> 0
+          Def q els
+            | q `is` list, Apply t <- last ([Proj ProjSystem __IMPOSSIBLE__] ++ els)
+                        -> HS.TyApp (tyCon "[]") <$> go n (unArg t)
+            | q `is` bool -> return $ tyCon "Bool"
+            | q `is` int  -> return $ tyCon "Integer"
+            | q `is` nat  -> return $ tyCon "Integer"
+            | q `is` word -> return $ rteCon "Word64"
+            | otherwise -> do
+                let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims els
+                foldl HS.TyApp <$> getHsType' q <*> mapM (go n . unArg) args
+              `catchError` \ _ -> do -- Not a Haskell type
+                def <- theDef <$> getConstInfo q
+                let isData | Datatype{} <- def = True
+                           | Record{}   <- def = True
+                           | otherwise         = False
+                if isData then HS.TyCon <$> xhqn "T" q
+                          else return mazAnyType
+          Sort{} -> return $ HS.FakeType "()"
+          _ -> return mazAnyType
+  go fv (unEl t)
+
+-- Approximating polymorphic types is not actually a good idea unless we
+-- actually keep track of type applications in recursive functions, and
+-- generate parameterised datatypes. Otherwise we'll just coerce all type
+-- variables to `Any` at the first `unsafeCoerce`.
+hsTelApproximation :: Type -> TCM ([HS.Type], HS.Type)
+hsTelApproximation = hsTelApproximation' NoPolyApprox
+
+hsTelApproximation' :: PolyApprox -> Type -> TCM ([HS.Type], HS.Type)
+hsTelApproximation' poly t = do
+  TelV tel res <- telView t
+  let args = map (snd . unDom) (telToList tel)
+  (,) <$> zipWithM (hsTypeApproximation poly) [0..] args <*> hsTypeApproximation poly (length args) res
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
@@ -81,15 +81,12 @@
 
 -- always use the original name for a constructor even when it's redefined.
 conhqn :: QName -> TCM HS.QName
-conhqn q = do
-    cq  <- canonicalName q
-    def <- getConstInfo cq
-    xhqn "C" cq
+conhqn q = xhqn "C" =<< canonicalName q
 
 -- qualify name s by the module of builtin b
 bltQual :: String -> String -> TCM HS.QName
 bltQual b s = do
-  Def q _ <- ignoreSharing <$> getBuiltin b
+  Def q _ <- getBuiltin b
   xqual q (HS.Ident s)
 
 dname :: QName -> HS.Name
@@ -164,6 +161,9 @@
 mazErasedName :: String
 mazErasedName = "erased"
 
+mazAnyTypeName :: String
+mazAnyTypeName = "AgdaAny"
+
 mazCoerce :: HS.Exp
 -- mazCoerce = HS.Var $ HS.Qual unsafeCoerceMod (HS.Ident "unsafeCoerce")
 -- mazCoerce = HS.Var $ HS.Qual mazRTE $ HS.Ident mazCoerceName
@@ -181,6 +181,9 @@
 
 rtmUnreachableError :: HS.Exp
 rtmUnreachableError = mazUnreachableError
+
+mazAnyType :: HS.Type
+mazAnyType = HS.TyCon (hsName mazAnyTypeName)
 
 mazRTE :: HS.ModuleName
 mazRTE = HS.ModuleName "MAlonzo.RTE"
diff --git a/src/full/Agda/Compiler/MAlonzo/Pragmas.hs b/src/full/Agda/Compiler/MAlonzo/Pragmas.hs
--- a/src/full/Agda/Compiler/MAlonzo/Pragmas.hs
+++ b/src/full/Agda/Compiler/MAlonzo/Pragmas.hs
@@ -1,7 +1,6 @@
 {-# LANGUAGE CPP #-}
 module Agda.Compiler.MAlonzo.Pragmas where
 
-import Control.Applicative
 import Control.Monad
 import Data.Maybe
 import Data.Char
@@ -27,11 +26,16 @@
 import Agda.Utils.Impossible
 #include "undefined.h"
 
+-- | GHC backend translation pragmas.
 data HaskellPragma
-      = HsDefn Range HaskellCode
-      | HsType Range HaskellType
-      | HsData Range HaskellType [HaskellCode]
-      | HsExport Range HaskellCode
+  = HsDefn Range HaskellCode
+      --  ^ @COMPILE GHC x = <code>@
+  | HsType Range HaskellType
+      --  ^ @COMPILE GHC X = type <type>@
+  | HsData Range HaskellType [HaskellCode]
+      -- ^ @COMPILE GHC X = data D (c₁ | ... | cₙ)
+  | HsExport Range HaskellCode
+      -- ^ @COMPILE GHC x as f@
   deriving (Show, Eq)
 
 instance HasRange HaskellPragma where
@@ -143,9 +147,15 @@
   cDef  <- theDef <$> getConstInfo c
   true  <- getBuiltinName builtinTrue
   false <- getBuiltinName builtinFalse
+  nil   <- getBuiltinName builtinNil
+  cons  <- getBuiltinName builtinCons
+  sharp <- getBuiltinName builtinSharp
   case cDef of
     _ | Just c == true  -> return $ Just "True"
       | Just c == false -> return $ Just "False"
+      | Just c == nil   -> return $ Just "[]"
+      | Just c == cons  -> return $ Just "(:)"
+      | Just c == sharp -> return $ Just "MAlonzo.RTE.Sharp"
     Constructor{conData = d} -> do
       mp <- getHaskellPragma d
       case mp of
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
@@ -6,6 +6,10 @@
 
 module Agda.Compiler.MAlonzo.Pretty where
 
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
 import Data.Generics.Geniplate
 import qualified Agda.Utils.Haskell.Syntax as HS
 import Text.PrettyPrint (empty)
@@ -71,8 +75,14 @@
     HS.FakeDecl s -> text s
 
 instance Pretty HS.ConDecl where
-  pretty (HS.ConDecl c ts) = pretty c <+> fsep (map (prettyPrec 10) ts)
+  pretty (HS.ConDecl c sts) =
+    pretty c <+>
+    fsep (map (\(s, t) -> maybe empty pretty s <> prettyPrec 10 t) sts)
 
+instance Pretty HS.Strictness where
+  pretty HS.Strict = text "!"
+  pretty HS.Lazy   = empty
+
 instance Pretty HS.Match where
   pretty (HS.Match f ps rhs wh) =
     prettyWhere wh $
@@ -127,7 +137,10 @@
           sep [ prettyPrec 5 a <+> text "->", prettyPrec 4 b ]
       HS.TyCon c -> pretty c
       HS.TyVar x -> pretty x
+      HS.TyApp (HS.TyCon (HS.UnQual (HS.Ident "[]"))) t ->
+        brackets $ pretty t
       t@HS.TyApp{} ->
+        mparens (pr > 9) $
           sep [ prettyPrec 9 f
               , nest 2 $ fsep $ map (prettyPrec 10) ts ]
         where
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
@@ -47,9 +47,9 @@
 checkTypeOfMain q ty ret
   | not (isMainFunction q) = ret
   | otherwise = do
-    Def io _ <- ignoreSharing <$> primIO
+    Def io _ <- primIO
     ty <- normalise ty
-    case ignoreSharing $ unEl ty of
+    case unEl ty of
       Def d _ | d == io -> (mainAlias :) <$> ret
       _                 -> do
         err <- fsep $
@@ -59,7 +59,7 @@
   where
     mainAlias = HS.FunBind [HS.Match mainLHS [] mainRHS emptyBinds ]
     mainLHS   = HS.Ident "main"
-    mainRHS   = HS.UnGuardedRhs $ HS.Var $ HS.UnQual $ unqhname "d" q
+    mainRHS   = HS.UnGuardedRhs $ HS.App mazCoerce (HS.Var $ HS.UnQual $ unqhname "d" q)
 
 treelessPrimName :: TPrim -> String
 treelessPrimName p =
@@ -72,6 +72,15 @@
     PGeq  -> "geqInt"
     PLt   -> "ltInt"
     PEqI  -> "eqInt"
+    PQuot64 -> "quot64"
+    PRem64  -> "rem64"
+    PSub64  -> "sub64"
+    PAdd64  -> "add64"
+    PMul64  -> "mul64"
+    PLt64   -> "lt64"
+    PEq64  -> "eq64"
+    PITo64 -> "word64FromNat"
+    P64ToI -> "word64ToNat"
     PEqF  -> "eqFloat"
     -- MAlonzo uses literal patterns, so we don't need equality for the other primitive types
     PEqC  -> __IMPOSSIBLE__
@@ -109,7 +118,6 @@
   bs <- toList <$> gets stBuiltinThings
   let getName (Builtin (Def q _))    = q
       getName (Builtin (Con q _ _))  = conName q
-      getName (Builtin (Shared p))   = getName (Builtin $ derefPtr p)
       getName (Builtin (Lam _ b))    = getName (Builtin $ unAbs b)
       getName (Builtin _)            = __IMPOSSIBLE__
       getName (Prim (PrimFun q _ _)) = q
@@ -148,6 +156,10 @@
   , "primNatEquality"  |-> relNat "(==)"
   , "primNatLess"      |-> relNat "(<)"
 
+  -- Machine word functions
+  , "primWord64ToNat"   |-> return "MAlonzo.RTE.word64ToNat"
+  , "primWord64FromNat" |-> return "MAlonzo.RTE.word64FromNat"
+
   -- Floating point functions
   , "primNatToFloat"        |-> return "(fromIntegral :: Integer -> Double)"
   , "primFloatPlus"         |-> return "((+)          :: Double -> Double -> Double)"
@@ -158,9 +170,10 @@
   -- ASR (2016-09-14). We use bitwise equality for comparing Double
   -- because Haskell's Eq, which equates 0.0 and -0.0, allows to prove
   -- a contradiction (see Issue #2169).
-  , "primFloatEquality"     |-> return "MAlonzo.RTE.eqFloat"
+  , "primFloatEquality"          |-> return "MAlonzo.RTE.eqFloat"
+  , "primFloatLess"              |-> return "MAlonzo.RTE.ltFloat"
   , "primFloatNumericalEquality" |-> return "MAlonzo.RTE.eqNumFloat"
-  , "primFloatNumericalLess" |-> return "MAlonzo.RTE.ltNumFloat"
+  , "primFloatNumericalLess"     |-> return "MAlonzo.RTE.ltNumFloat"
   , "primFloatSqrt"         |-> return "(sqrt :: Double -> Double)"
   , "primRound"             |-> return "(round :: Double -> Integer)"
   , "primFloor"             |-> return "(floor :: Double -> Integer)"
@@ -246,7 +259,7 @@
 
 
 pconName :: String -> TCM String
-pconName s = toS . ignoreSharing =<< getBuiltin s where
+pconName s = toS =<< getBuiltin s where
   toS (Con q _ _) = prettyPrint <$> conhqn (conName q)
   toS (Lam _ t) = toS (unAbs t)
   toS _ = mazerror $ "pconName" ++ s
diff --git a/src/full/Agda/Compiler/ToTreeless.hs b/src/full/Agda/Compiler/ToTreeless.hs
--- a/src/full/Agda/Compiler/ToTreeless.hs
+++ b/src/full/Agda/Compiler/ToTreeless.hs
@@ -5,7 +5,7 @@
   , closedTermToTreeless
   ) where
 
-import Control.Applicative
+import Control.Arrow (first, second)
 import Control.Monad.Reader
 import Control.Monad.State
 import Data.Maybe
@@ -14,14 +14,16 @@
 import Data.Traversable (traverse)
 
 import Agda.Syntax.Common
-import Agda.Syntax.Internal (QName)
+import Agda.Syntax.Internal as I
 import qualified Agda.Syntax.Treeless as C
-import qualified Agda.Syntax.Internal as I
+import Agda.Syntax.Treeless (TTerm)
 import Agda.Syntax.Literal
 import qualified Agda.TypeChecking.CompiledClause as CC
+import qualified Agda.TypeChecking.CompiledClause.Compile as CC
 import Agda.TypeChecking.Records (getRecordConstructor)
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.CompiledClause
+import Agda.TypeChecking.Telescope
 
 import Agda.Compiler.Treeless.Builtin
 import Agda.Compiler.Treeless.Simplify
@@ -52,6 +54,18 @@
 prettyPure :: P.Pretty a => a -> TCM Doc
 prettyPure = return . P.pretty
 
+-- | Recompile clauses with forcing translation turned on.
+getCompiledClauses :: QName -> TCM CC.CompiledClauses
+getCompiledClauses q = do
+  def <- getConstInfo q
+  let cs = defClauses def
+      isProj | Function{ funProjection = proj } <- theDef def = isJust (projProper =<< proj)
+             | otherwise = False
+      translate | isProj    = CC.DontRunRecordPatternTranslation
+                | otherwise = CC.RunRecordPatternTranslation
+  reportSDoc "treeless.convert" 40 $ text "-- before clause compiler" $$ (pretty q <+> text "=") <?> vcat (map pretty cs)
+  CC.compileClauses' translate cs
+
 -- | Converts compiled clauses to treeless syntax.
 --
 -- Note: Do not use any of the concrete names in the returned
@@ -64,7 +78,7 @@
 toTreeless' :: QName -> TCM C.TTerm
 toTreeless' q =
   flip fromMaybeM (getTreeless q) $ verboseBracket "treeless.convert" 20 ("compiling " ++ prettyShow q) $ do
-    Just cc <- defCompiled <$> getConstInfo q
+    cc <- getCompiledClauses q
     unlessM (alwaysInline q) $ setTreeless q (C.TDef q)
       -- so recursive inlining doesn't loop, but not for always inlined
       -- functions, since that would risk inlining to fail.
@@ -86,24 +100,7 @@
   reportSDoc "treeless.convert" (30 + v) $ text "-- compiled clauses of" <+> prettyTCM q $$ nest 2 (prettyPure cc)
   body <- casetreeTop cc
   reportSDoc "treeless.opt.converted" (30 + v) $ text "-- converted" $$ pbody body
-  body <- simplifyTTerm body
-  reportSDoc "treeless.opt.simpl" (35 + v) $ text "-- after first simplification"  $$ pbody body
-  body <- translateBuiltins body
-  reportSDoc "treeless.opt.builtin" (30 + v) $ text "-- after builtin translation" $$ pbody body
-  body <- simplifyTTerm body
-  reportSDoc "treeless.opt.simpl" (30 + v) $ text "-- after second simplification"  $$ pbody body
-  body <- eraseTerms q body
-  reportSDoc "treeless.opt.erase" (30 + v) $ text "-- after erasure"  $$ pbody body
-  body <- caseToSeq body
-  reportSDoc "treeless.opt.uncase" (30 + v) $ text "-- after uncase"  $$ pbody body
-  body <- recoverAsPatterns body
-  reportSDoc "treeless.opt.aspat" (30 + v) $ text "-- after @-pattern recovery"  $$ pbody body
-  body <- detectIdentityFunctions q body
-  reportSDoc "treeless.opt.id" (30 + v) $ text "-- after identity function detection"  $$ pbody body
-  body <- simplifyTTerm body
-  reportSDoc "treeless.opt.simpl" (30 + v) $ text "-- after third simplification"  $$ pbody body
-  body <- eraseTerms q body
-  reportSDoc "treeless.opt.erase" (30 + v) $ text "-- after second erasure"  $$ pbody body
+  body <- runPipeline q (compilerPipeline v q) body
   used <- usedArguments q body
   when (any not used) $
     reportSDoc "treeless.opt.unused" (30 + v) $
@@ -114,6 +111,63 @@
   setCompiledArgUse q used
   return body
 
+data Pipeline = FixedPoint Int Pipeline
+              | Sequential [Pipeline]
+              | SinglePass CompilerPass
+
+data CompilerPass = CompilerPass
+  { passTag       :: String
+  , passVerbosity :: Int
+  , passName      :: String
+  , passCode      :: TTerm -> TCM TTerm
+  }
+
+compilerPass :: String -> Int -> String -> (TTerm -> TCM TTerm) -> Pipeline
+compilerPass tag v name code = SinglePass (CompilerPass tag v name code)
+
+compilerPipeline :: Int -> QName -> Pipeline
+compilerPipeline v q =
+  Sequential
+    [ compilerPass "simpl"   (35 + v) "simplification"      simplifyTTerm
+    , compilerPass "builtin" (30 + v) "builtin translation" translateBuiltins
+    , FixedPoint 5 $ Sequential
+      [ compilerPass "simpl"  (30 + v) "simplification"                simplifyTTerm
+      , compilerPass "erase"  (30 + v) "erasure" $                     eraseTerms q
+      , compilerPass "uncase" (30 + v) "uncase"                        caseToSeq
+      , compilerPass "aspat"  (30 + v) "@-pattern recovery"            recoverAsPatterns
+      ]
+    , compilerPass "id" (30 + v) "identity function detection" $ detectIdentityFunctions q
+    ]
+
+runPipeline :: QName -> Pipeline -> TTerm -> TCM TTerm
+runPipeline q pipeline t = case pipeline of
+  SinglePass p   -> runCompilerPass q p t
+  Sequential ps  -> foldM (flip $ runPipeline q) t ps
+  FixedPoint n p -> runFixedPoint n q p t
+
+runCompilerPass :: QName -> CompilerPass -> TTerm -> TCM TTerm
+runCompilerPass q p t = do
+  t' <- passCode p t
+  let dbg f   = reportSDoc ("treeless.opt." ++ passTag p) (passVerbosity p) $ f $ text ("-- " ++ passName p)
+      pbody b = sep [ text (prettyShow q) <+> text "=", nest 2 $ prettyPure b ]
+  dbg $ if | t == t'   -> (<+> text "(No effect)")
+           | otherwise -> ($$ pbody t')
+  return t'
+
+runFixedPoint :: Int -> QName -> Pipeline -> TTerm -> TCM TTerm
+runFixedPoint n q pipeline = go 1
+  where
+    go i t | i > n = do
+      reportSLn "treeless.opt.loop" 20 $ "++ Optimisation loop reached maximum iterations (" ++ show n ++ ")"
+      return t
+    go i t = do
+      reportSLn "treeless.opt.loop" 30 $ "++ Optimisation loop iteration " ++ show i
+      t' <- runPipeline q pipeline t
+      if | t == t'   -> do
+            reportSLn "treeless.opt.loop" 30 $ "++ Optimisation loop terminating after " ++ show i ++ " iterations"
+            return t'
+         | otherwise -> go (i + 1) t'
+
 closedTermToTreeless :: I.Term -> TCM C.TTerm
 closedTermToTreeless t = do
   substTerm t `runReaderT` initCCEnv
@@ -173,19 +227,21 @@
       -- if some arguments are not used in the body.
       v <- lift (putAllowedReductions [ProjectionReductions, CopatternReductions] $ normalise v)
       substTerm v
-    CC.Case _ (CC.Branches True _ _ Just{}) -> __IMPOSSIBLE__
+    CC.Case _ (CC.Branches True _ _ _ Just{} _) -> __IMPOSSIBLE__
       -- Andreas, 2016-06-03, issue #1986: Ulf: "no catch-all for copatterns!"
       -- lift $ do
       --   typeError . GenericDocError =<< do
       --     text "Not yet implemented: compilation of copattern matching with catch-all clause"
-    CC.Case (Arg _ n) (CC.Branches True conBrs _ Nothing) -> lambdasUpTo n $ do
+    CC.Case (Arg _ n) (CC.Branches True conBrs _ _ Nothing _) -> lambdasUpTo n $ do
       mkRecord =<< traverse casetree (CC.content <$> conBrs)
-    CC.Case (Arg _ n) (CC.Branches False conBrs litBrs catchAll) -> lambdasUpTo (n + 1) $ do
-      if Map.null conBrs && Map.null litBrs then do
+    CC.Case (Arg _ n) (CC.Branches False conBrs etaBr litBrs catchAll lazy) -> lambdasUpTo (n + 1) $ do
+                    -- We can treat eta-matches as regular matches here.
+      let conBrs' = Map.union conBrs $ Map.fromList $ map (first conName) $ maybeToList etaBr
+      if Map.null conBrs' && Map.null litBrs then do
         -- there are no branches, just return default
-        fromCatchAll
+        updateCatchAll catchAll fromCatchAll
       else do
-        caseTy <- case (Map.keys conBrs, Map.keys litBrs) of
+        caseTy <- case (Map.keys conBrs', Map.keys litBrs) of
               ((c:_), []) -> do
                 c' <- lift (canonicalName c)
                 dtNm <- conData . theDef <$> lift (getConstInfo c')
@@ -198,8 +254,9 @@
         updateCatchAll catchAll $ do
           x <- lookupLevel n <$> asks ccCxt
           def <- fromCatchAll
-          C.TCase x caseTy def <$> do
-            br1 <- conAlts n conBrs
+          let caseInfo = C.CaseInfo { caseType = caseTy, caseLazy = lazy }
+          C.TCase x caseInfo def <$> do
+            br1 <- conAlts n conBrs'
             br2 <- litAlts n litBrs
             return (br1 ++ br2)
   where
@@ -214,12 +271,13 @@
     [] -> 0
     as -> minimum as
   where
-    arities cxt (Case (Arg _ x) (Branches False cons lits def)) =
+    arities cxt (Case (Arg _ x) (Branches False cons eta lits def _)) =
       concatMap (wArities cxt') (Map.elems cons) ++
+      concatMap (wArities cxt') (map snd $ maybeToList eta) ++
       concatMap (wArities cxt' . WithArity 0) (Map.elems lits) ++
       concat [ arities cxt' c | Just c <- [def] ] -- ??
       where cxt' = max (x + 1) cxt
-    arities cxt (Case _ (Branches True _ _ _)) = [cxt]
+    arities cxt (Case _ Branches{projPatterns = True}) = [cxt]
     arities cxt (Done xs _) = [max cxt (length xs)]
     arities _   Fail        = []
 
@@ -333,7 +391,7 @@
 --   indices in the environment as well.
 substTerm :: I.Term -> CC C.TTerm
 substTerm term = normaliseStatic term >>= \ term ->
-  case I.ignoreSharing $ I.unSpine term of
+  case I.unSpine term of
     I.Var ind es -> do
       ind' <- lookupIndex ind <$> asks ccCxt
       let args = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es
@@ -347,10 +405,10 @@
     I.Def q es -> do
       let args = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es
       maybeInlineDef q args
-    I.Con c ci args -> do
+    I.Con c ci es -> do
+        let args = fromMaybe __IMPOSSIBLE__ $ I.allApplyElims es
         c' <- lift $ canonicalName $ I.conName c
         C.mkTApp (C.TCon c') <$> substArgs args
-    I.Shared _ -> __IMPOSSIBLE__ -- the ignoreSharing fun should already take care of this
     I.Pi _ _ -> return C.TUnit
     I.Sort _  -> return C.TSort
     I.MetaV _ _ -> __IMPOSSIBLE__   -- we don't compiled if unsolved metas
@@ -391,5 +449,4 @@
       case getRelevance x of
         Irrelevant -> True
         NonStrict  -> True
-        Forced{}   -> False -- TODO: would like this to be True
         Relevant   -> False
diff --git a/src/full/Agda/Compiler/Treeless/AsPatterns.hs b/src/full/Agda/Compiler/Treeless/AsPatterns.hs
--- a/src/full/Agda/Compiler/Treeless/AsPatterns.hs
+++ b/src/full/Agda/Compiler/Treeless/AsPatterns.hs
@@ -1,7 +1,6 @@
 {-# LANGUAGE CPP #-}
 module Agda.Compiler.Treeless.AsPatterns (recoverAsPatterns) where
 
-import Control.Applicative
 import Control.Monad.Reader
 import Data.Monoid
 
@@ -61,6 +60,7 @@
     TCon{} -> tApp t []   -- need to recover nullary constructors as well (to make deep @-patterns work)
     TLet v b -> TLet <$> recover v <*> underBinds 1 (recover b)
     TCase x ct d bs -> TCase x ct <$> recover d <*> mapM (recoverAlt x) bs
+    TCoerce t -> TCoerce <$> recover t
     TLit{}    -> pure t
     TVar{}    -> pure t
     TPrim{}   -> pure t
diff --git a/src/full/Agda/Compiler/Treeless/Builtin.hs b/src/full/Agda/Compiler/Treeless/Builtin.hs
--- a/src/full/Agda/Compiler/Treeless/Builtin.hs
+++ b/src/full/Agda/Compiler/Treeless/Builtin.hs
@@ -17,8 +17,6 @@
 {-# LANGUAGE CPP #-}
 module Agda.Compiler.Treeless.Builtin (translateBuiltins) where
 
-import Control.Applicative
-
 import qualified Agda.Syntax.Internal as I
 import Agda.Syntax.Abstract.Name (QName)
 import Agda.Syntax.Position
@@ -47,6 +45,8 @@
   , isLess   :: QName -> Bool
   , isEqual  :: QName -> Bool
   , isForce  :: QName -> Bool
+  , isWord64FromNat :: QName -> Bool
+  , isWord64ToNat   :: QName -> Bool
   }
 
 builtinKit :: TCM BuiltinKit
@@ -60,6 +60,8 @@
              <*> isB def builtinNatLess
              <*> isB def builtinNatEquals
              <*> isP pf  "primForce"
+             <*> isP pf  "primWord64FromNat"
+             <*> isP pf  "primWord64ToNat"
   where
     con (I.Con c _ _) = pure $ I.conName c
     con _           = Nothing
@@ -91,12 +93,14 @@
              | isTimes f  -> TPrim PMul
              | isLess f   -> TPrim PLt
              | isEqual f  -> TPrim PEqI
+             | isWord64ToNat f   -> TPrim P64ToI
+             | isWord64FromNat f -> TPrim PITo64
         -- Note: Don't do this for builtinNatMinus! PSub is integer minus and
         --       builtin minus is monus. The simplifier will do it if it can see
         --       that it won't underflow.
 
-      TApp (TDef q) [_, _, _, _, e, f]
-        | isForce q -> tr $ TLet e $ tOp PSeq (TVar 0) $ mkTApp (raise 1 f) [TVar 0]
+      TApp (TDef q) (_ : _ : _ : _ : e : f : es)
+        | isForce q -> tr $ TLet e $ mkTApp (tOp PSeq (TVar 0) $ mkTApp (raise 1 f) [TVar 0]) es
 
       TApp (TCon s) [e] | isSuc s ->
         case tr e of
@@ -112,7 +116,7 @@
           e | Just (i, e) <- plusKView e -> tNegPlusK (i + 1) e
           e -> tNegPlusK 1 e
 
-      TCase e t d bs -> TCase e (caseType t bs) (tr d) $ concatMap trAlt bs
+      TCase e t d bs -> TCase e (inferCaseType t bs) (tr d) $ concatMap trAlt bs
         where
           trAlt b = case b of
             TACon c 0 b | isZero c -> [TALit (LitNat noRange 0) (tr b)]
@@ -175,16 +179,18 @@
       TErased{} -> t
       TError{}  -> t
 
+      TCoerce a -> TCoerce (tr a)
+
       TLam b                  -> TLam (tr b)
       TApp a bs               -> TApp (tr a) (map tr bs)
       TLet e b                -> TLet (tr e) (tr b)
 
-    caseType t (TACon c _ _ : _)
-      | isZero c   = CTNat
-      | isSuc c    = CTNat
-      | isPos c    = CTInt
-      | isNegSuc c = CTInt
-    caseType t _ = t
+    inferCaseType t (TACon c _ _ : _)
+      | isZero c   = t { caseType = CTNat }
+      | isSuc c    = t { caseType = CTNat }
+      | isPos c    = t { caseType = CTInt }
+      | isNegSuc c = t { caseType = CTInt }
+    inferCaseType t _ = t
 
     nPlusKView (TAGuard (TApp (TPrim PGeq) [TVar 0, (TLit (LitNat _ k))])
                         (TLet (TApp (TPrim PSub) [TVar 0, (TLit (LitNat _ j))]) b))
diff --git a/src/full/Agda/Compiler/Treeless/Compare.hs b/src/full/Agda/Compiler/Treeless/Compare.hs
--- a/src/full/Agda/Compiler/Treeless/Compare.hs
+++ b/src/full/Agda/Compiler/Treeless/Compare.hs
@@ -52,4 +52,13 @@
 applyPrim PEqQ _ _ = Nothing
 applyPrim PIf  _ _ = Nothing
 applyPrim PSeq _ _ = Nothing
+applyPrim PAdd64 _ _ = Nothing
+applyPrim PSub64 _ _ = Nothing
+applyPrim PMul64 _ _ = Nothing
+applyPrim PQuot64 _ _ = Nothing
+applyPrim PRem64 _ _ = Nothing
+applyPrim PLt64  _ _ = Nothing
+applyPrim PEq64 _ _ = Nothing
+applyPrim PITo64 _ _ = Nothing
+applyPrim P64ToI _ _ = Nothing
 
diff --git a/src/full/Agda/Compiler/Treeless/EliminateDefaults.hs b/src/full/Agda/Compiler/Treeless/EliminateDefaults.hs
--- a/src/full/Agda/Compiler/Treeless/EliminateDefaults.hs
+++ b/src/full/Agda/Compiler/Treeless/EliminateDefaults.hs
@@ -3,7 +3,6 @@
 -- constructors. Literal cases are preserved as-is.
 module Agda.Compiler.Treeless.EliminateDefaults where
 
-import Control.Applicative
 import Control.Monad
 import qualified Data.List as List
 import Data.Maybe
@@ -29,7 +28,7 @@
   where
     tr :: TTerm -> TCM TTerm
     tr t = case t of
-      TCase sc ct@(CTData qn) def alts | not (isUnreachable def) -> do
+      TCase sc ct@CaseInfo{caseType = CTData qn} def alts | not (isUnreachable def) -> do
         dtCons <- defConstructors . theDef <$> getConstInfo qn
         let missingCons = dtCons List.\\ map aCon alts
         def <- tr def
@@ -52,6 +51,7 @@
       TErased{} -> tt
       TError{}  -> tt
 
+      TCoerce a               -> TCoerce <$> tr a
       TLam b                  -> TLam <$> tr b
       TApp a bs               -> TApp <$> tr a <*> mapM tr bs
       TLet e b                -> TLet <$> tr e <*> tr b
diff --git a/src/full/Agda/Compiler/Treeless/EliminateLiteralPatterns.hs b/src/full/Agda/Compiler/Treeless/EliminateLiteralPatterns.hs
--- a/src/full/Agda/Compiler/Treeless/EliminateLiteralPatterns.hs
+++ b/src/full/Agda/Compiler/Treeless/EliminateLiteralPatterns.hs
@@ -2,7 +2,6 @@
 -- | Converts case matches on literals to if cascades with equality comparisons.
 module Agda.Compiler.Treeless.EliminateLiteralPatterns where
 
-import Control.Applicative
 import Data.Maybe
 
 import Agda.Syntax.Abstract.Name (QName)
@@ -36,7 +35,7 @@
   where
     tr :: TTerm -> TTerm
     tr t = case t of
-      TCase sc t def alts | t `elem` [CTChar, CTString, CTQName, CTNat, CTInt, CTFloat] ->
+      TCase sc t def alts | caseType t `elem` [CTChar, CTString, CTQName, CTNat, CTInt, CTFloat] ->
         foldr litAlt (tr def) alts
         where
           litAlt :: TAlt -> TTerm -> TTerm
@@ -46,7 +45,7 @@
               (tr body)
               cont
           litAlt _ _ = __IMPOSSIBLE__
-      TCase sc t@(CTData dt) def alts -> TCase sc t (tr def) (map trAlt alts)
+      TCase sc t@CaseInfo{caseType = CTData dt} def alts -> TCase sc t (tr def) (map trAlt alts)
         where
           trAlt a = case a of
             TAGuard g b -> TAGuard (tr g) (tr b)
@@ -64,6 +63,7 @@
       TErased{} -> t
       TError{}  -> t
 
+      TCoerce a               -> TCoerce (tr a)
       TLam b                  -> TLam (tr b)
       TApp a bs               -> TApp (tr a) (map tr bs)
       TLet e b                -> TLet (tr e) (tr b)
diff --git a/src/full/Agda/Compiler/Treeless/Erase.hs b/src/full/Agda/Compiler/Treeless/Erase.hs
--- a/src/full/Agda/Compiler/Treeless/Erase.hs
+++ b/src/full/Agda/Compiler/Treeless/Erase.hs
@@ -1,13 +1,14 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE PatternSynonyms #-}
 
 module Agda.Compiler.Treeless.Erase (eraseTerms, computeErasedConstructorArgs) where
 
 import Control.Arrow ((&&&), (***), first, second)
-import Control.Applicative
 import Control.Monad
 import Control.Monad.State
 import Data.Map (Map)
 import qualified Data.Map as Map
+import Data.Semigroup
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal as I
@@ -22,10 +23,12 @@
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Datatypes
-import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Pretty hiding ((<>))
+import Agda.TypeChecking.Primitive
 
 import Agda.Compiler.Treeless.Subst
 import Agda.Compiler.Treeless.Pretty
+import Agda.Compiler.Treeless.Unused
 
 import Agda.Utils.Functor
 import Agda.Utils.Lens
@@ -34,6 +37,8 @@
 import Agda.Utils.Monad
 import Agda.Utils.Pretty (prettyShow)
 import qualified Agda.Utils.Pretty as P
+import Agda.Utils.IntSet.Infinite (IntSet)
+import qualified Agda.Utils.IntSet.Infinite as IntSet
 
 #include "undefined.h"
 import Agda.Utils.Impossible
@@ -59,7 +64,7 @@
   runE $ mapM_ getFunInfo cs
 
 eraseTerms :: QName -> TTerm -> TCM TTerm
-eraseTerms q = runE . eraseTop q
+eraseTerms q t = usedArguments q t *> runE (eraseTop q t)
   where
     eraseTop q t = do
       (_, h) <- getFunInfo q
@@ -101,14 +106,16 @@
                    _             -> erase $ subst 0 TErased b
             else tLet e <$> erase b
         TCase x t d bs -> do
-          d  <- ifM (isComplete t bs) (pure tUnreachable) (erase d)
-          bs <- mapM eraseAlt bs
+          (d, bs) <- pruneUnreachable x (caseType t) d bs
+          d       <- erase d
+          bs      <- mapM eraseAlt bs
           tCase x t d bs
 
         TUnit          -> pure t
         TSort          -> pure t
         TErased        -> pure t
         TError{}       -> pure t
+        TCoerce e      -> TCoerce <$> erase e
 
     tLam TErased = TErased
     tLam t       = TLam t
@@ -151,12 +158,48 @@
 
 -- | Doesn't have any type information (other than the name of the data type),
 --   so we can't do better than checking if all constructors are present.
-isComplete :: CaseType -> [TAlt] -> E Bool
-isComplete (CTData d) bs = do
-  cs <- lift $ getConstructors d
-  return $ length cs == length [ b | b@TACon{} <- bs ]
-isComplete _ _ = pure False
+pruneUnreachable :: Int -> CaseType -> TTerm -> [TAlt] -> E (TTerm, [TAlt])
+pruneUnreachable _ (CTData q) d bs = do
+  cs <- lift $ getConstructors q
+  let complete =length cs == length [ b | b@TACon{} <- bs ]
+  let d' | complete  = tUnreachable
+         | otherwise = d
+  return (d', bs)
+pruneUnreachable x CTNat d bs = return $ pruneIntCase x d bs (IntSet.below 0)
+pruneUnreachable x CTInt d bs = return $ pruneIntCase x d bs IntSet.empty
+pruneUnreachable _ _ d bs = pure (d, bs)
 
+-- These are the guards we generate for Int/Nat pattern matching
+pattern Below :: Range -> Int -> Integer -> TTerm
+pattern Below r x n = TApp (TPrim PLt)  [TVar x, TLit (LitNat r n)]
+
+pattern Above :: Range -> Int -> Integer -> TTerm
+pattern Above r x n = TApp (TPrim PGeq) [TVar x, TLit (LitNat r n)]
+
+-- | Strip unreachable clauses (replace by tUnreachable for the default).
+--   Fourth argument is the set of ints covered so far.
+pruneIntCase :: Int -> TTerm -> [TAlt] -> IntSet -> (TTerm, [TAlt])
+pruneIntCase x d bs cover = go bs cover
+  where
+    go [] cover
+      | cover == IntSet.full = (tUnreachable, [])
+      | otherwise            = (d, [])
+    go (b : bs) cover =
+      case b of
+        TAGuard (Below _ y n) _ | x == y -> rec (IntSet.below n)
+        TAGuard (Above _ y n) _ | x == y -> rec (IntSet.above n)
+        TALit (LitNat _ n) _             -> rec (IntSet.singleton n)
+        _                                -> second (b :) $ go bs cover
+      where
+        rec this = second addAlt $ go bs cover'
+          where
+            this'  = IntSet.difference this cover
+            cover' = this' <> cover
+            addAlt = case IntSet.toFiniteList this' of
+                       Just []  -> id                                     -- unreachable case
+                       Just [n] -> (TALit (LitNat noRange n) (aBody b) :) -- possibly refined case
+                       _        -> (b :)                                  -- unchanged case
+
 data TypeInfo = Empty | Erasable | NotErasable
   deriving (Eq, Show)
 
@@ -171,7 +214,6 @@
 
 erasableR :: Relevance -> Bool
 erasableR Relevant   = False
-erasableR Forced{}   = False    -- TODO: should be True but need to transform clauses
 erasableR NonStrict  = True
 erasableR Irrelevant = True
 
@@ -188,19 +230,23 @@
     getInfo q = do
       (rs, t) <- do
         (tel, t) <- lift $ typeWithoutParams q
-        is <- mapM (getTypeInfo . snd . dget) tel
-        return (zipWith (mkR . getRelevance) tel is, t)
+        is     <- mapM (getTypeInfo . snd . dget) tel
+        used   <- lift $ (++ repeat True) <$> getCompiledArgUse q
+        forced <- lift $ (++ repeat NotForced) <$> getForcedArgs q
+        return (zipWith3 (uncurry . mkR . getRelevance) tel (zip forced used) is, t)
       h <- if isAbsurdLambdaName q then pure Erasable else getTypeInfo t
       lift $ reportSLn "treeless.opt.erase.info" 50 $ "type info for " ++ prettyShow q ++ ": " ++ show rs ++ " -> " ++ show h
       lift $ setErasedConArgs q $ map erasableR rs
       return (rs, h)
 
-    -- Treat empty or erasable arguments as NonStrict (and thus erasable)
-    mkR :: Relevance -> TypeInfo -> Relevance
-    mkR Irrelevant _ = Irrelevant
-    mkR r NotErasable = r
-    mkR _ Empty       = NonStrict
-    mkR _ Erasable    = NonStrict
+    -- Treat empty, erasable, or unused arguments as NonStrict (and thus erasable)
+    mkR :: Relevance -> IsForced -> Bool -> TypeInfo -> Relevance
+    mkR Irrelevant _ _ _  = Irrelevant
+    mkR _ _ False _       = NonStrict
+    mkR _ Forced _ _      = NonStrict
+    mkR r _ _ NotErasable = r
+    mkR _ _ _ Empty       = NonStrict
+    mkR _ _ _ Erasable    = NonStrict
 
 telListView :: Type -> TCM (ListTel, Type)
 telListView t = do
@@ -219,8 +265,14 @@
 getTypeInfo :: Type -> E TypeInfo
 getTypeInfo t0 = do
   (tel, t) <- lift $ telListView t0
-  et <- case ignoreSharing $ I.unEl t of
-    I.Def d _ -> typeInfo d
+  et <- case I.unEl t of
+    I.Def d _ -> do
+      -- #2916: Only update the memo table for d. Results for other types are
+      -- under the assumption that d is erasable!
+      oldMap <- use typeMap
+      dInfo <- typeInfo d
+      typeMap .= Map.insert d dInfo oldMap
+      return dInfo
     Sort{}    -> return Erasable
     _         -> return NotErasable
   is <- mapM (getTypeInfo . snd . dget) tel
@@ -233,12 +285,15 @@
   where
     typeInfo :: QName -> E TypeInfo
     typeInfo q = memoRec (typeMap . key q) Erasable $ do  -- assume recursive occurrences are erasable
-      def <- lift $ getConstInfo q
-      mcs <- return $ case I.theDef def of
+      msizes <- lift $ mapM getBuiltinName
+                         [builtinSize, builtinSizeLt]
+      def    <- lift $ getConstInfo q
+      mcs    <- return $ case I.theDef def of
         I.Datatype{ dataCons = cs } -> Just cs
         I.Record{ recConHead = c }  -> Just [conName c]
         _                           -> Nothing
       case mcs of
+        _ | Just q `elem` msizes -> return Erasable
         Just [c] -> do
           (ts, _) <- lift $ typeWithoutParams c
           let rs = map getRelevance ts
diff --git a/src/full/Agda/Compiler/Treeless/GuardsToPrims.hs b/src/full/Agda/Compiler/Treeless/GuardsToPrims.hs
--- a/src/full/Agda/Compiler/Treeless/GuardsToPrims.hs
+++ b/src/full/Agda/Compiler/Treeless/GuardsToPrims.hs
@@ -53,6 +53,7 @@
       TErased{} -> t
       TError{}  -> t
 
+      TCoerce a               -> TCoerce (tr a)
       TLam b                  -> TLam (tr b)
       TApp a bs               -> TApp (tr a) (map tr bs)
       TLet e b                -> TLet (tr e) (tr b)
diff --git a/src/full/Agda/Compiler/Treeless/Identity.hs b/src/full/Agda/Compiler/Treeless/Identity.hs
--- a/src/full/Agda/Compiler/Treeless/Identity.hs
+++ b/src/full/Agda/Compiler/Treeless/Identity.hs
@@ -2,7 +2,7 @@
 module Agda.Compiler.Treeless.Identity
   ( detectIdentityFunctions ) where
 
-import Control.Applicative
+import Control.Applicative ( Alternative((<|>), empty) )
 import Data.Foldable (foldMap)
 import Data.Semigroup
 import Data.List.NonEmpty (NonEmpty(..))
@@ -18,12 +18,12 @@
   case isIdentity q t of
     Nothing     -> return t
     Just (n, k) -> do
-      markInline q
+      markInline True q
       def <- theDef <$> getConstInfo q
       return $ mkTLam n $ TVar k
 
 -- If isIdentity f t = Just (n, k) then
--- f = t is equivalent to f = λ xₙ₋₁ .. x₀ → xk
+-- f = t is equivalent to f = λ xn₋₁ .. x₀ → xk
 isIdentity :: QName -> TTerm -> Maybe (Int, Int)
 isIdentity q t =
   trivialIdentity q t <|> recursiveIdentity q t
@@ -84,6 +84,7 @@
         TCase _ _ d bs     -> sconcat (go k d :| map (goAlt k) bs)
         TApp (TDef f) args
           | f == q         -> IdIn [ y | (TVar x, y) <- zip (reverse args) [0..], y + k == x ]
+        TCoerce v          -> go k v
         TApp{}             -> notId
         TLam{}             -> notId
         TLit{}             -> notId
diff --git a/src/full/Agda/Compiler/Treeless/NormalizeNames.hs b/src/full/Agda/Compiler/Treeless/NormalizeNames.hs
--- a/src/full/Agda/Compiler/Treeless/NormalizeNames.hs
+++ b/src/full/Agda/Compiler/Treeless/NormalizeNames.hs
@@ -14,8 +14,6 @@
 {-# LANGUAGE CPP #-}
 module Agda.Compiler.Treeless.NormalizeNames ( normalizeNames ) where
 
-import Control.Applicative
-
 import Agda.TypeChecking.Monad
 import Agda.Syntax.Treeless
 
@@ -38,6 +36,7 @@
       TApp a bs               -> TApp <$> tr a <*> mapM tr bs
       TLet e b                -> TLet <$> tr e <*> tr b
       TCase sc t def alts     -> TCase sc t <$> tr def <*> mapM trAlt alts
+      TCoerce a               -> TCoerce <$> tr a
       where
         done :: TCM TTerm
         done = return t
diff --git a/src/full/Agda/Compiler/Treeless/Pretty.hs b/src/full/Agda/Compiler/Treeless/Pretty.hs
--- a/src/full/Agda/Compiler/Treeless/Pretty.hs
+++ b/src/full/Agda/Compiler/Treeless/Pretty.hs
@@ -4,11 +4,12 @@
 module Agda.Compiler.Treeless.Pretty () where
 
 import Control.Arrow ((&&&), (***), first, second)
-import Control.Applicative
 import Control.Monad.Reader
 import Data.Maybe
+import qualified Data.Map as Map
 
 import Agda.Syntax.Treeless
+import Agda.Compiler.Treeless.Subst
 import Agda.Utils.Pretty
 
 data PEnv = PEnv { pPrec :: Int
@@ -25,6 +26,19 @@
   (xs, ys) <- asks $ splitAt n . pFresh
   local (\ e -> e { pFresh = ys }) (k xs)
 
+-- | Don't generate fresh names for unused variables.
+withNames' :: HasFree a => Int -> a -> ([String] -> P b) -> P b
+withNames' n tm k = withNames n' $ k . insBlanks
+  where
+    fv = freeVars tm
+    n'  = length $ filter (< n) $ Map.keys fv
+    insBlanks = go n
+      where
+        go 0 _ = []
+        go i xs0@(~(x : xs))
+          | Map.member (i - 1) fv = x   : go (i - 1) xs
+          | otherwise             = "_" : go (i - 1) xs0
+
 bindName :: String -> P a -> P a
 bindName x = local $ \ e -> e { pBound = x : pBound e }
 
@@ -59,13 +73,23 @@
 opName PGeq = ">="
 opName PLt  = "<"
 opName PEqI = "==I"
+opName PAdd64 = "+64"
+opName PSub64 = "-64"
+opName PMul64 = "*64"
+opName PQuot64 = "quot64"
+opName PRem64 = "rem64"
+opName PLt64  = "<64"
+opName PEq64 = "==64"
 opName PEqF = "==F"
 opName PEqS = "==S"
 opName PEqC = "==C"
 opName PEqQ = "==Q"
 opName PIf  = "if_then_else_"
 opName PSeq = "seq"
+opName PITo64 = "toWord64"
+opName P64ToI = "fromWord64"
 
+
 isInfix :: TPrim -> Maybe (Int, Int, Int)
 isInfix op =
   case op of
@@ -74,6 +98,10 @@
     PSub -> l 6
     PGeq -> non 4
     PLt  -> non 4
+    PMul64 -> l 7
+    PAdd64 -> l 6
+    PSub64 -> l 6
+    PLt64  -> non 4
     p | isPrimEq p -> non 4
     _    -> Nothing
   where
@@ -107,22 +135,18 @@
     paren 9 $ (\a bs -> sep [a, nest 2 $ fsep bs])
               <$> pTerm' 9 f
               <*> mapM (pTerm' 10) es
-  TLam _ -> paren 0 $ withNames n $ \xs -> bindNames xs $
+  TLam _ -> paren 0 $ withNames' n b $ \ xs -> bindNames xs $
     (\b -> sep [ text ("λ " ++ unwords xs ++ " →")
                , nest 2 b ]) <$> pTerm' 0 b
     where
-      (n, b) = lamV t
-      lamV (TLam b) = first succ $ lamV b
-      lamV t        = (0, t)
+      (n, b) = tLamView t
   TLet{} -> paren 0 $ withNames (length es) $ \ xs ->
     (\ (binds, b) -> sep [ text "let" <+> vcat [ sep [ text x <+> text "="
                                                      , nest 2 e ] | (x, e) <- binds ]
                               <+> text "in", b ])
       <$> pLets (zip xs es) b
     where
-      (es, b) = letV t
-      letV (TLet e b) = first (e :) $ letV b
-      letV t          = ([], t)
+      (es, b) = tLetView t
 
       pLets [] b = ([],) <$> pTerm' 0 b
       pLets ((x, e) : bs) b = do
@@ -142,7 +166,7 @@
         pAlt' <$> ((text "_" <+> text "|" <+>) <$> pTerm' 0 g)
               <*> (pTerm' 0 b)
       pAlt (TACon c a b) =
-        withNames a $ \ xs -> bindNames xs $
+        withNames' a b $ \ xs -> bindNames xs $
         pAlt' <$> pTerm' 0 (TApp (TCon c) [TVar i | i <- reverse [0..a - 1]])
               <*> pTerm' 0 b
       pAlt' p b = sep [p <+> text "→", nest 2 b]
@@ -151,3 +175,4 @@
   TSort -> pure $ text "Set"
   TErased -> pure $ text "_"
   TError err -> paren 9 $ pure $ text "error" <+> text (show (show err))
+  TCoerce t -> paren 9 $ (text "coe" <+>) <$> pTerm' 10 t
diff --git a/src/full/Agda/Compiler/Treeless/Simplify.hs b/src/full/Agda/Compiler/Treeless/Simplify.hs
--- a/src/full/Agda/Compiler/Treeless/Simplify.hs
+++ b/src/full/Agda/Compiler/Treeless/Simplify.hs
@@ -2,7 +2,6 @@
 module Agda.Compiler.Treeless.Simplify (simplifyTTerm) where
 
 import Control.Arrow (first, second, (***))
-import Control.Applicative
 import Control.Monad.Reader
 import Control.Monad.Writer
 import Data.Traversable (traverse)
@@ -82,20 +81,28 @@
   where
     simpl = rewrite' >=> unchainCase >=> \ t -> case t of
 
-      TDef{}         -> pure t
-      TPrim{}        -> pure t
-
-      TVar x  -> do
-        v <- lookupVar x
-        pure $ if isAtomic v then v else t
+      TDef{}  -> pure t
+      TPrim{} -> pure t
+      TVar{}  -> pure t
 
       TApp (TDef f) [TLit (LitNat _ 0), m, n, m']
         -- div/mod are equivalent to quot/rem on natural numbers.
         | m == m', Just f == divAux -> simpl $ tOp PQuot n (tPlusK 1 m)
         | m == m', Just f == modAux -> simpl $ tOp PRem n (tPlusK 1 m)
 
+      -- Word64 primitives --
+
+      --  toWord (a ∙ b) == toWord a ∙64 toWord b
+      TPFn PITo64 (TPOp op a b)
+        | Just op64 <- opTo64 op -> simpl $ tOp op64 (TPFn PITo64 a) (TPFn PITo64 b)
+        where
+          opTo64 op = lookup op [(PAdd, PAdd64), (PSub, PSub64), (PMul, PMul64),
+                                 (PQuot, PQuot64), (PRem, PRem64)]
+
       TApp (TPrim _) _ -> pure t  -- taken care of by rewrite'
 
+      TCoerce t -> TCoerce <$> simpl t
+
       TApp f es -> do
         f  <- simpl f
         es <- traverse simpl es
@@ -105,7 +112,15 @@
       TCon{}         -> pure t
       TLet e b       -> do
         e <- simpl e
-        tLet e <$> underLet e (simpl b)
+        case e of
+          TPFn P64ToI a -> do
+            -- Inline calls to P64ToI since these trigger optimisations.
+            -- Ideally, the optimisations would trigger anyway, but at the
+            -- moment they only do if inlining the entire let looks like a
+            -- good idea.
+            let rho = inplaceS 0 (TPFn P64ToI (TVar 0))
+            tLet a <$> underLet a (simpl (applySubst rho b))
+          _ -> tLet e <$> underLet e (simpl b)
 
       TCase x t d bs -> do
         v <- lookupVar x
@@ -194,10 +209,21 @@
     simplPrim t = pure t
 
     simplPrim' :: TTerm -> TTerm
+    simplPrim' (TApp (TPrim PSeq) (u : v : vs))
+      | u == v             = mkTApp v vs
+      | TApp TCon{} _ <- u = mkTApp v vs
+      | TApp TLit{} _ <- u = mkTApp v vs
     simplPrim' (TApp (TPrim PLt) [u, v])
       | Just (PAdd, k, u) <- constArithView u,
         Just (PAdd, j, v) <- constArithView v,
         k == j = tOp PLt u v
+      | Just (PAdd, k, v) <- constArithView v,
+        TApp (TPrim P64ToI) [u] <- u,
+        k >= 2^64, Just trueCon <- true = TCon trueCon
+      | Just k <- intView u
+      , Just j <- intView v
+      , Just trueCon <- true
+      , Just falseCon <- false = if k < j then TCon trueCon else TCon falseCon
     simplPrim' (TApp (TPrim op) [u, v])
       | elem op [PGeq, PLt, PEqI]
       , Just (PAdd, k, u) <- constArithView u
@@ -207,9 +233,17 @@
         Just (op2, j, v) <- constArithView v,
         op1 == op2, k == j,
         elem op1 [PAdd, PSub] = tOp PEqI u v
-    simplPrim' (TApp (TPrim PMul) [u, v])
-      | Just 0 <- intView u = tInt 0
-      | Just 0 <- intView v = tInt 0
+    simplPrim' (TPOp op u v)
+      | zeroL, isMul || isDiv = tInt 0
+      | zeroL, isAdd          = v
+      | zeroR, isMul          = tInt 0
+      | zeroR, isAdd || isSub = u
+      where zeroL = Just 0 == intView u || Just 0 == word64View u
+            zeroR = Just 0 == intView v || Just 0 == word64View v
+            isAdd = elem op [PAdd, PAdd64]
+            isSub = elem op [PSub, PSub64]
+            isMul = elem op [PMul, PMul64]
+            isDiv = elem op [PQuot, PQuot64, PRem, PRem64]
     simplPrim' (TApp (TPrim op) [u, v])
       | Just u <- negView u,
         Just v <- negView v,
@@ -221,6 +255,20 @@
     simplPrim' (TApp (TPrim PRem) [u, v])
       | Just u <- negView u  = simplArith $ tOp PSub (tInt 0) (tOp PRem u (unNeg v))
       | Just v <- negView v  = tOp PRem u v
+
+      -- (fromWord a == fromWord b) = (a ==64 b)
+    simplPrim' (TPOp op (TPFn P64ToI a) (TPFn P64ToI b))
+        | Just op64 <- opTo64 op = tOp op64 a b
+        where
+          opTo64 op = lookup op [(PEqI, PEq64), (PLt, PLt64)]
+
+      -- toWord/fromWord k == fromIntegral k
+    simplPrim' (TPFn PITo64 (TLit (LitNat r n)))    = TLit (LitWord64 r (fromIntegral n))
+    simplPrim' (TPFn P64ToI (TLit (LitWord64 r n))) = TLit (LitNat r    (fromIntegral n))
+
+      -- toWord (fromWord a) == a
+    simplPrim' (TPFn PITo64 (TPFn P64ToI a)) = a
+
     simplPrim' (TApp f@(TPrim op) [u, v]) = simplArith $ TApp f [simplPrim' u, simplPrim' v]
     simplPrim' u = u
 
@@ -235,10 +283,18 @@
     betterThan u v = operations u <= operations v
       where
         operations (TApp (TPrim _) [a, b]) = 1 + operations a + operations b
+        operations (TApp (TPrim PSeq) (a : _))
+          | notVar a                       = 1000000  -- only seq on variables!
+        operations (TApp (TPrim _) [a])    = 1 + operations a
         operations TVar{}                  = 0
         operations TLit{}                  = 0
+        operations TCon{}                  = 0
+        operations TDef{}                  = 0
         operations _                       = 1000
 
+        notVar TVar{} = False
+        notVar _      = True
+
     rewrite' t = rewrite =<< simplPrim t
 
     constArithView :: TTerm -> Maybe (TPrim, Integer, TTerm)
@@ -269,12 +325,9 @@
 
     maybeMinusToPrim f@(TDef minus) es@[a, b]
       | Just minus == natMinus = do
-      b_a  <- rewrite' (tOp PLt b a)
-      b_sa <- rewrite' (tOp PLt b (tOp PAdd (tInt 1) a))
-      a_b  <- rewrite' (tOp PLt a b)
-      if isTrue b_a || isTrue b_sa || isFalse a_b
-        then pure $ tOp PSub a b
-        else tApp f es
+      leq  <- checkLeq b a
+      if leq then pure $ tOp PSub a b
+             else tApp f es
 
     maybeMinusToPrim f es = tApp f es
 
@@ -282,7 +335,7 @@
     tLet e (TVar 0) = e
     tLet e b        = TLet e b
 
-    tCase :: Int -> CaseType -> TTerm -> [TAlt] -> S TTerm
+    tCase :: Int -> CaseInfo -> TTerm -> [TAlt] -> S TTerm
     tCase x t d [] = pure d
     tCase x t d bs
       | isUnreachable d =
@@ -309,11 +362,11 @@
         overlapped _              _              = False
 
     -- | Drop unreachable cases for Nat and Int cases.
-    pruneLitCases :: Int -> CaseType -> TTerm -> [TAlt] -> S TTerm
-    pruneLitCases x CTNat d bs =
+    pruneLitCases :: Int -> CaseInfo -> TTerm -> [TAlt] -> S TTerm
+    pruneLitCases x t d bs | CTNat == caseType t =
       case complete bs [] Nothing of
-        Just bs' -> tCase x CTNat tUnreachable bs'
-        Nothing  -> return $ TCase x CTNat d bs
+        Just bs' -> tCase x t tUnreachable bs'
+        Nothing  -> return $ TCase x t d bs
       where
         complete bs small (Just upper)
           | null $ [0..upper - 1] List.\\ small = Just []
@@ -322,9 +375,11 @@
         complete (b@(TAGuard (TApp (TPrim PGeq) [TVar y, TLit (LitNat _ j)]) _) : bs) small upper | x == y =
           (b :) <$> complete bs small (Just $ maybe j (min j) upper)
         complete _ _ _ = Nothing
-    pruneLitCases x CTInt d bs = return $ TCase x CTInt d bs -- TODO
-    pruneLitCases x t d bs = return $ TCase x t d bs
 
+    pruneLitCases x t d bs
+      | CTInt == caseType t = return $ TCase x t d bs -- TODO
+      | otherwise           = return $ TCase x t d bs
+
     tCase' x t d [] = return d
     tCase' x t d bs = pruneLitCases x t d bs
 
@@ -359,6 +414,46 @@
       TErased{} -> True
       TError{}  -> True
       _         -> False
+
+    checkLeq a b = do
+      rho  <- asks envSubst
+      rwr  <- asks envRewrite
+      let nf = toArith . applySubst rho
+          less = [ (nf a, nf b) | (TPOp PLt a b, rhs) <- rwr, isTrue  rhs ]
+          leq  = [ (nf b, nf a) | (TPOp PLt a b, rhs) <- rwr, isFalse rhs ]
+
+          match (j, as) (k, bs)
+            | as == bs  = Just (j - k)
+            | otherwise = Nothing
+
+          -- Do we have x ≤ y given x' < y' + d ?
+          matchEqn d x y (x', y') = isJust $ do
+            k <- match x x'     -- x = x' + k
+            j <- match y y'     -- y = y' + j
+            guard (k <= j + d)  -- x ≤ y if k ≤ j + d
+
+          matchLess = matchEqn 1
+          matchLeq  = matchEqn 0
+
+          literal (j, []) (k, []) = j <= k
+          literal _ _ = False
+
+          -- k + fromWord x ≤ y  if  k + 2^64 - 1 ≤ y
+          wordUpperBound (k, [Pos (TApp (TPrim P64ToI) _)]) y = go (k + 2^64 - 1, []) y
+          wordUpperBound _ _ = False
+
+          -- x ≤ k + fromWord y  if  x ≤ k
+          wordLowerBound a (k, [Pos (TApp (TPrim P64ToI) _)]) = go a (k, [])
+          wordLowerBound _ _ = False
+
+          go x y = or
+            [ literal x y
+            , wordUpperBound x y
+            , wordLowerBound x y
+            , any (matchLess x y) less
+            , any (matchLeq x y) leq ]
+
+      return $ go (nf a) (nf b)
 
 type Arith = (Integer, [Atom])
 
diff --git a/src/full/Agda/Compiler/Treeless/Subst.hs b/src/full/Agda/Compiler/Treeless/Subst.hs
--- a/src/full/Agda/Compiler/Treeless/Subst.hs
+++ b/src/full/Agda/Compiler/Treeless/Subst.hs
@@ -1,18 +1,22 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 module Agda.Compiler.Treeless.Subst where
 
-import Control.Applicative
 import qualified Data.Map as Map
 import Data.Map (Map)
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, All(..), Any(..))
 import Data.Maybe
+import Data.Monoid ( Monoid, mempty, mappend )
+import Data.Semigroup ( Semigroup, (<>), All(..), Any(..) )
 
 import Agda.Syntax.Treeless
 import Agda.Syntax.Internal (Substitution'(..))
 import Agda.TypeChecking.Substitute
 
+import Agda.Utils.Impossible
+#include "undefined.h"
+
 instance DeBruijn TTerm where
   deBruijnVar = TVar
   deBruijnView (TVar i) = Just i
@@ -38,6 +42,7 @@
           TVar j  -> TCase j t (applySubst rho d) (applySubst rho bs)
           e       -> TLet e $ TCase 0 t (applySubst rho' d) (applySubst rho' bs)
             where rho' = wkS 1 rho
+      TCoerce e -> TCoerce (applySubst rho e)
     where
       tApp (TPrim PSeq) [TErased, b] = b
       tApp f ts = TApp f ts
@@ -117,9 +122,17 @@
     TLam b         -> underLambda <$> freeVars (Binder 1 b)
     TLet e b       -> freeVars (e, Binder 1 b)
     TCase i _ d bs -> freeVars (i, (d, bs))
+    TCoerce t      -> freeVars t
 
 instance HasFree TAlt where
   freeVars a = case a of
     TACon _ i b -> freeVars (Binder i b)
     TALit _ b   -> freeVars b
     TAGuard g b -> freeVars (g, b)
+
+-- | Strenghtening.
+tryStrengthen :: (HasFree a, Subst t a) => Int -> a -> Maybe a
+tryStrengthen n t =
+  case Map.minViewWithKey (freeVars t) of
+    Just ((i, _), _) | i < n -> Nothing
+    _ -> Just $ applySubst (strengthenS __IMPOSSIBLE__ n) t
diff --git a/src/full/Agda/Compiler/Treeless/Uncase.hs b/src/full/Agda/Compiler/Treeless/Uncase.hs
--- a/src/full/Agda/Compiler/Treeless/Uncase.hs
+++ b/src/full/Agda/Compiler/Treeless/Uncase.hs
@@ -1,7 +1,6 @@
 {-# LANGUAGE CPP #-}
 module Agda.Compiler.Treeless.Uncase (caseToSeq) where
 
-import Control.Applicative
 import Data.Monoid
 
 import Agda.Syntax.Treeless
@@ -31,36 +30,40 @@
   TSort{}   -> t
   TErased{} -> t
   TError{}  -> t
+  TCoerce t -> TCoerce (uncase t)
   where
     uncaseAlt (TACon c a b) = TACon c a $ uncase b
     uncaseAlt (TALit l b)   = TALit l $ uncase b
     uncaseAlt (TAGuard g b) = TAGuard (uncase g) (uncase b)
 
     doCase x t d bs
-      | fv > 0               = fallback   -- can't do it for constructors with arguments
-      | all (equalTo x u) bs = tApp (TPrim PSeq) [TVar x, u]
+      | Just u <- mu,
+        all (equalTo x u) bs = maybeSeq u
       | otherwise            = fallback
       where
+        maybeSeq u | caseLazy t = u
+                   | otherwise  = tApp (TPrim PSeq) [TVar x, u]
         fallback = TCase x t d bs
-        (fv, u)
+        (fv, mu)
           | isUnreachable d =
             case last bs of
-              TACon _ a b -> (a, b)
-              TALit l b   -> (0, b)
-              TAGuard _ b -> (0, b)
-          | otherwise = (0, d)
+              TACon _ a b -> (a, tryStrengthen a b)
+              TALit l b   -> (0, Just b)
+              TAGuard _ b -> (0, Just b)
+          | otherwise = (0, Just d)
 
     equalTo :: Int -> TTerm -> TAlt -> Bool
-    equalTo x t (TACon c a b) = a == 0 && equalTerms (subst x (TCon c) t) (subst x (TCon c) b)
+    equalTo x t (TACon c a b)
+      | Just b' <- tryStrengthen a b = equalTerms (subst x v t) (subst x v b')
+      | otherwise                    = False
+      where v = mkTApp (TCon c) (replicate a TErased)
     equalTo x t (TALit l b)   = equalTerms (subst x (TLit l) t) (subst x (TLit l) b)
     equalTo x t (TAGuard _ b) = equalTerms t b
 
-    -- There's no sense binding an expression just to seq on it.
     tLet e b =
       case occursIn 0 b of
-        Occurs 0 _ _                   -> strengthen __IMPOSSIBLE__ b
-        Occurs _ _ (SeqArg (All True)) -> subst 0 TErased b -- this will get rid of the seq
-        _                              -> TLet e b
+        Occurs 0 _ _ -> strengthen __IMPOSSIBLE__ b
+        _            -> TLet e b
 
     -- Primitive operations are already strict
     tApp (TPrim PSeq) [_, b@(TApp (TPrim op) _)]
diff --git a/src/full/Agda/Compiler/Treeless/Unused.hs b/src/full/Agda/Compiler/Treeless/Unused.hs
--- a/src/full/Agda/Compiler/Treeless/Unused.hs
+++ b/src/full/Agda/Compiler/Treeless/Unused.hs
@@ -5,7 +5,6 @@
   ) where
 
 import Control.Arrow (first)
-import Control.Applicative
 import qualified Data.Set as Set
 import Data.Maybe
 
@@ -45,12 +44,16 @@
 
       TApp f ts -> Set.unions <$> mapM go (f : ts)
       TLam b    -> underBinder <$> go b
-      TLet e b  -> Set.union <$> go e <*> (underBinder <$> go b)
+      TLet e b  -> do
+        uses <- go b
+        if | Set.member 0 uses -> Set.union (underBinder uses) <$> go e
+           | otherwise         -> pure (underBinder uses)
       TCase x _ d bs -> Set.insert x . Set.unions <$> ((:) <$> go d <*> mapM goAlt bs)
       TUnit{}   -> pure Set.empty
       TSort{}   -> pure Set.empty
       TErased{} -> pure Set.empty
       TError{}  -> pure Set.empty
+      TCoerce t -> go t
 
     goAlt (TALit _   b) = go b
     goAlt (TAGuard g b) = Set.union <$> go g <*> go b
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
@@ -26,7 +26,7 @@
 import Agda.Syntax.Abstract.Views as A
 import Agda.Syntax.Abstract.Pretty
 import Agda.Syntax.Common
-import Agda.Syntax.Info (ExprInfo(..),MetaInfo(..),emptyMetaInfo,exprNoRange)
+import Agda.Syntax.Info (ExprInfo(..),MetaInfo(..),emptyMetaInfo,exprNoRange,defaultAppInfo_,defaultAppInfo)
 import qualified Agda.Syntax.Info as Info
 import Agda.Syntax.Internal as I
 import Agda.Syntax.Literal
@@ -35,7 +35,7 @@
 import Agda.Syntax.Translation.ConcreteToAbstract
 import Agda.Syntax.Scope.Base
 import Agda.Syntax.Scope.Monad
-import Agda.Syntax.Fixity(Precedence(..))
+import Agda.Syntax.Fixity(Precedence(..), argumentCtx_)
 import Agda.Syntax.Parser
 
 import Agda.TheTypeChecker
@@ -186,7 +186,7 @@
      giveExpr force (Just ii) mi e
     `catchError` \ case
       -- Turn PatternErr into proper error:
-      PatternErr{} -> typeError . GenericDocError =<< do
+      PatternErr -> typeError . GenericDocError =<< do
         withInteractionId ii $ TP.text "Failed to give" TP.<+> prettyTCM e
       err -> throwError err
   removeInteractionPoint ii
@@ -230,8 +230,8 @@
           ii <- registerInteractionPoint False rng Nothing
           let info = Info.MetaInfo
                 { Info.metaRange = rng
-                , Info.metaScope = scope { scopePrecedence = [ArgumentCtx] }
-                    -- Ulf, 2017-09-07: The `ArgumentCtx` above is causing #737.
+                , Info.metaScope = scope { scopePrecedence = [argumentCtx_] }
+                    -- Ulf, 2017-09-07: The `argumentCtx_` above is causing #737.
                     -- If we're building an operator application the precedence
                     -- should be something else.
                 , metaNumber = Nothing -- in order to print just as ?, not ?n
@@ -252,14 +252,26 @@
               -- reduce beta-redexes where the argument is used at most once
               smartApp i e arg =
                 case lamView $ unScope e of
-                  Just (x, e) | count x e < 2 -> mapExpr subX e
+                  Just (A.BindName x, e) | count x e < 2 -> mapExpr subX e
                     where subX (A.Var y) | x == y = namedArg arg
                           subX e = e
                   _ -> App i e arg
-          return $ smartApp (ExprRange r) e $ defaultNamedArg metaVar
-          --ToDo: The position of metaVar is not correct
-          --ToDo: The fixity of metavars is not correct -- fixed? MT
+          return $ smartApp (defaultAppInfo r) e $ defaultNamedArg metaVar
 
+-- Andreas, 2017-12-16:
+-- Ulf, your attempt to fix #737 introduced regression #2873.
+-- Going through concrete syntax does some arbitrary disambiguation
+-- of constructors, which subsequently makes refine fail.
+-- I am not convinced of the printing-parsing shortcut to address problems.
+-- (Unless you prove the roundtrip property.)
+--
+--           rescopeExpr scope $ smartApp (defaultAppInfo r) e $ defaultNamedArg metaVar
+-- -- | Turn an abstract expression into concrete syntax and then back into
+-- --   abstract. This ensures that context precedences are set correctly for
+-- --   abstract expressions built by hand. Used by refine above.
+-- rescopeExpr :: ScopeInfo -> Expr -> TCM Expr
+-- rescopeExpr scope = withScope_ scope . (concreteToAbstract_ <=< runAbsToCon . preserveInteractionIds . toConcrete)
+
 {-| Evaluate the given expression in the current environment -}
 evalInCurrent :: Expr -> TCM Expr
 evalInCurrent e =
@@ -334,6 +346,7 @@
       | IsEmptyType a
       | SizeLtSat a
       | FindInScopeOF b a [(a,a)]
+      | PTSInstance b b
   deriving (Functor)
 
 -- | A subset of 'OutputConstraint'.
@@ -363,6 +376,7 @@
       IsEmptyType _              -> __IMPOSSIBLE__   -- Should never be used on IsEmpty constraints
       SizeLtSat{}                -> __IMPOSSIBLE__
       FindInScopeOF _ _ _        -> __IMPOSSIBLE__
+      PTSInstance i _            -> i
 
 instance Reify ProblemConstraint (Closure (OutputForm Expr Expr)) where
   reify (PConstr pids cl) = enterClosure cl $ \c -> buildClosure =<< (OutputForm (getRange c) (Set.toList pids) <$> reify c)
@@ -373,11 +387,11 @@
     I.Proj _o f -> appl "proj" <$> reify ((defaultArg $ I.Def f []) :: Arg Term)
   where
     appl :: String -> Arg Expr -> Expr
-    appl s v = A.App exprNoRange (A.Lit (LitString noRange s)) $ fmap unnamed v
+    appl s v = A.App defaultAppInfo_ (A.Lit (LitString noRange s)) $ fmap unnamed v
 
 instance Reify Constraint (OutputConstraint Expr Expr) where
     reify (ValueCmp cmp t u v)   = CmpInType cmp <$> reify t <*> reify u <*> reify v
-    reify (ElimCmp cmp t v es1 es2) =
+    reify (ElimCmp cmp _ t v es1 es2) =
       CmpElim cmp <$> reify t <*> mapM reifyElimToExpr es1
                               <*> mapM reifyElimToExpr es2
     reify (LevelCmp cmp t t')    = CmpLevels cmp <$> reify t <*> reify t'
@@ -402,15 +416,15 @@
               domType <- maybe (return underscore) reify mt
               target  <- reify target
               let bs = TypedBindings noRange $ Arg ai $
-                       TBind noRange xs domType
-                  e  = A.Lam Info.defaultLamInfo_ (DomainFull bs) body
+                       TBind noRange (map (fmap A.BindName) xs) domType
+                  e  = A.Lam Info.exprNoRange (DomainFull bs) body
               return $ TypedAssign m' e target
             CheckArgs _ _ args t0 t1 _ -> do
               t0 <- reify t0
               t1 <- reify t1
               return $ PostponedCheckArgs m' (map (namedThing . unArg) args) t0 t1
             UnquoteTactic tac _ goal -> do
-              tac <- A.App exprNoRange (A.Unquote exprNoRange) . defaultNamedArg <$> reify tac
+              tac <- A.App defaultAppInfo_ (A.Unquote exprNoRange) . defaultNamedArg <$> reify tac
               OfType tac <$> reify goal
           Open{}  -> __IMPOSSIBLE__
           OpenIFS{}  -> __IMPOSSIBLE__
@@ -422,6 +436,11 @@
             (,) <$> reify tm <*> reify ty)
     reify (IsEmpty r a) = IsEmptyType <$> reify a
     reify (CheckSizeLtSat a) = SizeLtSat  <$> reify a
+    reify (CheckFunDef d i q cs) = __IMPOSSIBLE__
+    reify (HasBiggerSort a) = OfType <$> reify a <*> reify (UnivSort a)
+    reify (HasPTSRule a b) = do
+      (a,(x,b)) <- reify (a,b)
+      return $ PTSInstance a b
 
 -- ASR TODO (28 December 2014): This function will be unnecessary when
 -- using a Pretty instance for OutputConstraint instead of the Show
@@ -463,6 +482,7 @@
       where
       showCand (tm,ty) = indent 6 $ show tm ++ " : " ++ show ty
       indent n s = List.intercalate ("\n" ++ replicate n ' ') $ lines s
+    show (PTSInstance a b)      = "PTS instance for " ++ show (a,b)
 
 instance (ToConcrete a c, ToConcrete b d) =>
          ToConcrete (OutputForm a b) (OutputForm c d) where
@@ -474,17 +494,17 @@
     toConcrete (JustType e) = JustType <$> toConcrete e
     toConcrete (JustSort e) = JustSort <$> toConcrete e
     toConcrete (CmpInType cmp t e e') =
-      CmpInType cmp <$> toConcreteCtx TopCtx t <*> toConcreteCtx ArgumentCtx e
-                                               <*> toConcreteCtx ArgumentCtx e'
+      CmpInType cmp <$> toConcreteCtx TopCtx t <*> toConcreteCtx argumentCtx_ e
+                                               <*> toConcreteCtx argumentCtx_ e'
     toConcrete (CmpElim cmp t e e') =
       CmpElim cmp <$> toConcreteCtx TopCtx t <*> toConcreteCtx TopCtx e <*> toConcreteCtx TopCtx e'
-    toConcrete (CmpTypes cmp e e') = CmpTypes cmp <$> toConcreteCtx ArgumentCtx e
-                                                  <*> toConcreteCtx ArgumentCtx e'
-    toConcrete (CmpLevels cmp e e') = CmpLevels cmp <$> toConcreteCtx ArgumentCtx e
-                                                    <*> toConcreteCtx ArgumentCtx e'
+    toConcrete (CmpTypes cmp e e') = CmpTypes cmp <$> toConcreteCtx argumentCtx_ e
+                                                  <*> toConcreteCtx argumentCtx_ e'
+    toConcrete (CmpLevels cmp e e') = CmpLevels cmp <$> toConcreteCtx argumentCtx_ e
+                                                    <*> toConcreteCtx argumentCtx_ e'
     toConcrete (CmpTeles cmp e e') = CmpTeles cmp <$> toConcrete e <*> toConcrete e'
-    toConcrete (CmpSorts cmp e e') = CmpSorts cmp <$> toConcreteCtx ArgumentCtx e
-                                                  <*> toConcreteCtx ArgumentCtx e'
+    toConcrete (CmpSorts cmp e e') = CmpSorts cmp <$> toConcreteCtx argumentCtx_ e
+                                                  <*> toConcreteCtx argumentCtx_ e'
     toConcrete (Guard o pid) = Guard <$> toConcrete o <*> pure pid
     toConcrete (Assign m e) = noTakenNames $ Assign <$> toConcrete m <*> toConcreteCtx TopCtx e
     toConcrete (TypedAssign m e a) = TypedAssign <$> toConcrete m <*> toConcreteCtx TopCtx e
@@ -496,6 +516,7 @@
     toConcrete (FindInScopeOF s t cs) =
       FindInScopeOF <$> toConcrete s <*> toConcrete t
                     <*> mapM (\(tm,ty) -> (,) <$> toConcrete tm <*> toConcrete ty) cs
+    toConcrete (PTSInstance a b) = PTSInstance <$> toConcrete a <*> toConcrete b
 
 instance (Pretty a, Pretty b) => Pretty (OutputConstraint' a b) where
   pretty (OfType' e t) = pretty e <+> text ":" <+> pretty t
@@ -536,7 +557,7 @@
         scope <- getScope
         let sol v = do
               -- Andreas, 2014-02-17 exclude metas solved by metas
-              v <- ignoreSharing <$> instantiate v
+              v <- instantiate v
               let isMeta = case v of MetaV{} -> True; _ -> False
               if isMeta && not all then return [] else do
                 e <- reify =<< normalForm norm v
@@ -698,7 +719,6 @@
       I.Sort{}     -> pure v
       I.Level{}    -> pure v
       I.MetaV{}    -> pure v
-      I.Shared{}   -> pure v
     onNamesElims f = traverse $ traverse $ onNamesTm f
     onNamesArgs f  = traverse $ traverse $ onNamesTm f
     onNamesAbs f   = onNamesAbs' f (stringToArgName <.> f . argNameToString)
@@ -799,7 +819,7 @@
                 (EmptyTel, EmptyTel) -> return []
                 _ -> introFun (telToList tel' ++ telToList tel)
 
-        case ignoreSharing $ unEl t of
+        case unEl t of
           I.Def d _ -> do
             def <- getConstInfo d
             case theDef def of
@@ -884,7 +904,7 @@
       -- Unfortunately, referring to let-bound variables
       -- from the top level module telescope will for now result in a not-in-scope error.
       let names :: [A.Name]
-          names = map localVar $ filter ((False ==) . localLetBound) $ map snd $ reverse $ scopeLocals scope
+          names = map localVar $ filter ((LetBound /=) . localBinder) $ map snd $ reverse $ scopeLocals scope
       -- Andreas, 2016-12-31, issue #2371
       -- The following is an unnecessary complication, as shadowed locals
       -- are not in scope anyway (they are ambiguous).
@@ -904,7 +924,11 @@
         ]
       M.withCurrentModule current $
         withScope_ scope $
-          addContext gamma $
+          addContext gamma $ do
+            -- We're going inside the top-level module, so we have to set the
+            -- checkpoint for it and all its submodules to the new checkpoint.
+            cp <- view eCurrentCheckpoint
+            stModuleCheckpoints %= fmap (const cp)
             m
 
 -- | Parse a name.
diff --git a/src/full/Agda/Interaction/CommandLine.hs b/src/full/Agda/Interaction/CommandLine.hs
--- a/src/full/Agda/Interaction/CommandLine.hs
+++ b/src/full/Agda/Interaction/CommandLine.hs
@@ -3,7 +3,6 @@
 module Agda.Interaction.CommandLine where
 
 import Control.Monad.Reader
-import Control.Applicative
 
 import qualified Data.List as List
 import Data.Maybe
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,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 
 ------------------------------------------------------------------------
 -- | Code for instructing Emacs to do things
@@ -14,6 +15,10 @@
   , displayRunningInfo
   ) where
 
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
 import qualified Data.List as List
 
 import Agda.Utils.Pretty
@@ -30,6 +35,7 @@
     -- ^ List.
   | Q (Lisp a)
     -- Quoted expression.
+  deriving Eq
 
 instance Pretty a => Pretty (Lisp a) where
   pretty (A a )     = pretty a
diff --git a/src/full/Agda/Interaction/EmacsTop.hs b/src/full/Agda/Interaction/EmacsTop.hs
--- a/src/full/Agda/Interaction/EmacsTop.hs
+++ b/src/full/Agda/Interaction/EmacsTop.hs
@@ -3,7 +3,6 @@
 module Agda.Interaction.EmacsTop
     ( mimicGHCi
     ) where
-import Control.Applicative
 import Control.Monad.State
 
 import Data.Char
@@ -26,6 +25,7 @@
 import Agda.Interaction.InteractionTop
 import Agda.Interaction.EmacsCommand hiding (putResponse)
 import Agda.Interaction.Highlighting.Emacs
+import Agda.Interaction.Highlighting.Precise (TokenBased(..))
 import Agda.Interaction.Options
 
 import Agda.VersionCommit
@@ -122,8 +122,8 @@
 -- | Convert Response to an elisp value for the interactive emacs frontend.
 
 lispifyResponse :: Response -> IO [Lisp String]
-lispifyResponse (Resp_HighlightingInfo info method modFile) =
-  (:[]) <$> lispifyHighlightingInfo info method modFile
+lispifyResponse (Resp_HighlightingInfo info remove method modFile) =
+  (:[]) <$> lispifyHighlightingInfo info remove method modFile
 lispifyResponse (Resp_DisplayInfo info) = return $ case info of
     Info_CompilationOk w e -> f body "*Compilation result*"
       where (body, _) = formatWarningsAndErrors "The module was successfully compiled.\n" w e -- abusing the goals field since we ignore the title
@@ -153,7 +153,13 @@
     Info_Intro s -> f (render s) "*Intro*"
     Info_Version -> f ("Agda version " ++ versionWithCommitInfo) "*Agda Version*"
   where f content bufname = [ display_info' False bufname content ]
-lispifyResponse Resp_ClearHighlighting = return [ L [ A "agda2-highlight-clear" ] ]
+lispifyResponse (Resp_ClearHighlighting tokenBased) =
+  return [ L $ A "agda2-highlight-clear" :
+               case tokenBased of
+                 NotOnlyTokenBased -> []
+                 TokenBased        ->
+                   [ Q (lispifyTokenBased tokenBased) ]
+         ]
 lispifyResponse Resp_DoneAborting = return [ L [ A "agda2-abort-done" ] ]
 lispifyResponse Resp_ClearRunningInfo = return [ clearRunningInfo ]
 -- FNF: if Info_Warning comes back into use, the above should be
diff --git a/src/full/Agda/Interaction/Highlighting/Dot.hs b/src/full/Agda/Interaction/Highlighting/Dot.hs
--- a/src/full/Agda/Interaction/Highlighting/Dot.hs
+++ b/src/full/Agda/Interaction/Highlighting/Dot.hs
@@ -4,7 +4,6 @@
 
 module Agda.Interaction.Highlighting.Dot where
 
-import Control.Applicative
 import Control.Monad.State
 
 import qualified Data.Map as M
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
@@ -4,11 +4,13 @@
 
 module Agda.Interaction.Highlighting.Emacs
   ( lispifyHighlightingInfo
+  , lispifyTokenBased
   ) where
 
 import Agda.Interaction.Highlighting.Precise
 import Agda.Interaction.Highlighting.Range
 import Agda.Interaction.EmacsCommand
+import Agda.Interaction.Response
 import Agda.Syntax.Common
 import Agda.TypeChecking.Monad
   (TCM, envHighlightingMethod, HighlightingMethod(..), ModuleToSource)
@@ -16,7 +18,6 @@
 import qualified Agda.Utils.IO.UTF8 as UTF8
 import Agda.Utils.String
 
-import Control.Applicative
 import qualified Control.Exception as E
 import Control.Monad.Reader
 import Data.Char
@@ -64,14 +65,29 @@
       ++
     [L $ map A $ toAtoms m]
       ++
-    [A $ maybe "nil" quote $ note m]
-      ++
-    (maybeToList $ fmap defSite $ definitionSite m)
+    dropNils (
+      [lispifyTokenBased (tokenBased m)]
+        ++
+      [A $ maybe "nil" quote $ note m]
+        ++
+      (maybeToList $ fmap defSite $ definitionSite m))
   where
   defSite (DefinitionSite m p _ _) =
     Cons (A $ quote $ filePath f) (A $ show p)
     where f = Map.findWithDefault __IMPOSSIBLE__ m modFile
 
+  dropNils =
+    reverse .
+    dropWhile (== A "nil") .
+    reverse
+
+-- | Formats the 'TokenBased' tag for the Emacs backend. No quotes are
+-- added.
+
+lispifyTokenBased :: TokenBased -> Lisp String
+lispifyTokenBased TokenBased        = A "t"
+lispifyTokenBased NotOnlyTokenBased = A "nil"
+
 -- | Turns syntax highlighting information into a list of
 -- S-expressions.
 
@@ -82,18 +98,22 @@
 
 lispifyHighlightingInfo
   :: HighlightingInfo
+  -> RemoveTokenBasedHighlighting
   -> HighlightingMethod
   -> ModuleToSource
      -- ^ Must contain a mapping for every definition site's module.
   -> IO (Lisp String)
-lispifyHighlightingInfo h method modFile = do
+lispifyHighlightingInfo h remove method modFile = do
   case ranges h of
     _             | method == Direct                   -> direct
     ((_, mi) : _) | otherAspects mi == [TypeChecks] ||
                     mi == mempty                       -> direct
     _                                                  -> indirect
   where
-  info     = map (showAspects modFile) (ranges h)
+  info     = (case remove of
+                RemoveHighlighting -> A "remove"
+                KeepHighlighting   -> A "nil") :
+             map (showAspects modFile) (ranges h)
 
   direct   = return $ L (A "agda2-highlight-add-annotations" :
                          map Q info)
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
@@ -11,6 +11,7 @@
   , printUnsolvedInfo
   , printHighlightingInfo
   , highlightAsTypeChecked
+  , warningHighlighting
   , computeUnsolvedMetaWarnings
   , computeUnsolvedConstraints
   , storeDisambiguatedName
@@ -21,7 +22,6 @@
 import Control.Monad
 import Control.Monad.Trans
 import Control.Monad.Reader
-import Control.Applicative
 import Control.Arrow (second)
 
 import Data.Monoid
@@ -29,13 +29,15 @@
 import qualified Data.Map as Map
 import Data.Maybe
 import Data.List ((\\), isPrefixOf)
-import qualified Data.Foldable as Fold (fold, foldMap)
+import qualified Data.Foldable as Fold (fold, foldMap, toList)
 import qualified Data.IntMap as IntMap
 import Data.Void
 
 import Agda.Interaction.Response (Response(Resp_HighlightingInfo))
 import Agda.Interaction.Highlighting.Precise
 import Agda.Interaction.Highlighting.Range
+import Agda.Interaction.Response
+  (RemoveTokenBasedHighlighting(KeepHighlighting))
 
 import qualified Agda.TypeChecking.Errors as E
 import Agda.TypeChecking.MetaVars (isBlockedTerm)
@@ -45,6 +47,7 @@
 import Agda.TypeChecking.Positivity.Occurrence
 import Agda.TypeChecking.Warnings (runPM)
 
+import Agda.Syntax.Abstract (IsProjP(..))
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Concrete (FieldAssignment'(..))
 import qualified Agda.Syntax.Common as Common
@@ -57,6 +60,7 @@
 import qualified Agda.Syntax.Parser as Pa
 import qualified Agda.Syntax.Parser.Tokens as T
 import qualified Agda.Syntax.Position as P
+import Agda.Syntax.Position (getRange)
 
 import Agda.Utils.FileName
 import Agda.Utils.Function
@@ -99,7 +103,7 @@
   r'        = rToR (P.continuousPerLine r)
   delta     = rPre' `minus` r'
   clear     = mempty
-  highlight = mempty { otherAspects = [TypeChecks] }
+  highlight = parserBased { otherAspects = [TypeChecks] }
 
   wrap rs x y = do
     p rs x
@@ -107,12 +111,16 @@
     p rs y
     return v
     where
-    p rs x = printHighlightingInfo (singletonC rs x)
+    p rs x = printHighlightingInfo KeepHighlighting (singletonC rs x)
 
 -- | Lispify and print the given highlighting information.
 
-printHighlightingInfo :: MonadTCM tcm => HighlightingInfo -> tcm ()
-printHighlightingInfo info = do
+printHighlightingInfo ::
+  MonadTCM tcm =>
+  RemoveTokenBasedHighlighting ->
+  HighlightingInfo ->
+  tcm ()
+printHighlightingInfo remove info = do
   modToSrc <- use stModuleToSource
   method   <- view eHighlightingMethod
   liftTCM $ reportSLn "highlighting" 50 $ unlines
@@ -122,7 +130,7 @@
     ]
   unless (null $ ranges info) $ do
     liftTCM $ appInteractionOutputCallback $
-        Resp_HighlightingInfo info method modToSrc
+        Resp_HighlightingInfo info remove method modToSrc
 
 -- | Highlighting levels.
 
@@ -187,7 +195,7 @@
           Just i  -> ( fromIntegral $ P.posPos $ P.iStart i
                      , fromIntegral $ P.posPos $ P.iEnd i)
     (prevTokens, (curTokens, postTokens)) <-
-      (second (splitAtC to)) . splitAtC from <$> use stTokens
+      second (splitAtC to) . splitAtC from <$> use stTokens
 
     -- theRest needs to be placed before nameInfo here since record
     -- field declarations contain QNames. constructorInfo also needs
@@ -208,12 +216,12 @@
       stTokens     .= prevTokens `mappend` postTokens
 
     ifTopLevelAndHighlightingLevelIs NonInteractive $
-      printHighlightingInfo syntaxInfo
+      printHighlightingInfo KeepHighlighting syntaxInfo
   where
   -- All names mentioned in the syntax tree (not bound variables).
   names :: [A.AmbiguousQName]
   names =
-    (map (A.AmbQ . (:[])) $
+    (map I.unambiguous $
      filter (not . extendedLambda) $
      universeBi decl) ++
     universeBi decl
@@ -238,22 +246,27 @@
     , Fold.foldMap getNamedArg    $ universeBi decl
     ]
     where
-    bound n = nameToFile modMap file [] (A.nameConcrete n) P.noRange
-                         (\isOp -> mempty { aspect = Just $ Name (Just Bound) isOp })
+    bound (A.BindName n) = nameToFile modMap file [] (A.nameConcrete n) P.noRange
+                         (\isOp -> parserBased { aspect =
+                                     Just $ Name (Just Bound) isOp })
                          (Just $ A.nameBindingSite n)
 
-    patsyn n = nameToFileA modMap file n True $ \isOp ->
-                  mempty { aspect = Just $ Name (Just $ Constructor Common.Inductive) isOp }
+    patsyn n =               -- TODO: resolve overloading
+              nameToFileA modMap file (I.headAmbQ n) True $ \isOp ->
+                  parserBased { aspect =
+                    Just $ Name (Just $ Constructor Common.Inductive) isOp }
 
     macro n = nameToFileA modMap file n True $ \isOp ->
-                  mempty { aspect = Just $ Name (Just Macro) isOp }
+                  parserBased { aspect = Just $ Name (Just Macro) isOp }
 
     field m n = nameToFile modMap file m n P.noRange
-                           (\isOp -> mempty { aspect = Just $ Name (Just Field) isOp })
+                           (\isOp -> parserBased { aspect =
+                                       Just $ Name (Just Field) isOp })
                            Nothing
     asName n = nameToFile modMap file []
                           n P.noRange
-                          (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })
+                          (\isOp -> parserBased { aspect =
+                                      Just $ Name (Just Module) isOp })
                           Nothing
 
     -- For top level modules, we set the binding site to the beginning of the file
@@ -262,11 +275,13 @@
     mod isTopLevelModule n =
       nameToFile modMap file []
                  (A.nameConcrete n) P.noRange
-                 (\isOp -> mempty { aspect = Just $ Name (Just Module) isOp })
-                 (Just $ applyWhen isTopLevelModule P.beginningOfFile $ A.nameBindingSite n)
+                 (\isOp -> parserBased { aspect =
+                             Just $ Name (Just Module) isOp })
+                 (Just $ applyWhen isTopLevelModule P.beginningOfFile $
+                           A.nameBindingSite n)
 
     getVarAndField :: A.Expr -> File
-    getVarAndField (A.Var x)            = bound x
+    getVarAndField (A.Var x)            = bound $ A.BindName x
     getVarAndField (A.Rec       _ fs)   = mconcat [ field [] x | Left (FieldAssignment x _) <- fs ]
     getVarAndField (A.RecUpdate _ _ fs) = mconcat [ field [] x |      (FieldAssignment x _) <- fs ]
     getVarAndField _                    = mempty
@@ -274,7 +289,9 @@
     -- Ulf, 2014-04-09: It would be nicer to have it on Named_ a, but
     -- you can't have polymorphic functions in universeBi.
     getNamedArg :: Common.RString -> File
-    getNamedArg x = singleton (rToR $ P.getRange x) mempty{ aspect = Just $ Name (Just Argument) False }
+    getNamedArg x = singleton (rToR $ P.getRange x) $
+                       parserBased { aspect =
+                         Just $ Name (Just Argument) False }
 
     getLet :: A.LetBinding -> File
     getLet (A.LetBind _ _ x _ _)     = bound x
@@ -292,15 +309,17 @@
     getTyped A.TLet{}         = mempty
 
     getPatSynArgs :: A.Declaration -> File
-    getPatSynArgs (A.PatternSynDef _ xs _) = mconcat $ map (bound . Common.unArg) xs
+    getPatSynArgs (A.PatternSynDef _ xs _) = mconcat $ map (bound . A.BindName . Common.unArg) xs
     getPatSynArgs _                        = mempty
 
-    getPattern' :: A.Pattern' e -> File
+    getPattern' :: IsProjP e => A.Pattern' e -> 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' (A.DotP pi e)
+      | Just _ <- isProjP e = mempty
+      | otherwise =
+          singleton (rToR $ P.getRange pi)
+                (parserBased { otherAspects = [DottedPattern] })
     getPattern' (A.PatternSynP _ q _) = patsyn q
     getPattern' (A.RecP _ fs) = mconcat [ field [] x | FieldAssignment x _ <- fs ]
     getPattern' _             = mempty
@@ -342,7 +361,7 @@
     getModuleInfo :: SI.ModuleInfo -> File
     getModuleInfo (SI.ModuleInfo { SI.minfoAsTo   = asTo
                                  , SI.minfoAsName = name }) =
-      singleton (rToR asTo) (mempty { aspect = Just Symbol })
+      singleton (rToR asTo) (parserBased { aspect = Just Symbol })
         `mappend`
       maybe mempty asName name
 
@@ -381,6 +400,7 @@
   tokenToCFile (T.TokKeyword _ i)               = aToF Keyword (P.getRange i)
   tokenToCFile (T.TokSymbol  _ i)               = aToF Symbol (P.getRange i)
   tokenToCFile (T.TokLiteral (L.LitNat    r _)) = aToF Number r
+  tokenToCFile (T.TokLiteral (L.LitWord64 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
@@ -506,20 +526,21 @@
         constrs = IntMap.elems m2
 
     -- Return suitable syntax highlighting information.
-    let files = for constrs $ \ q -> generate modMap file kinds $ A.AmbQ [q]
+    let files = for constrs $ \ q -> generate modMap file kinds $ I.unambiguous q
     return $ Fold.fold files
 
 printSyntaxInfo :: P.Range -> TCM ()
 printSyntaxInfo r = do
   syntaxInfo <- use stSyntaxInfo
   ifTopLevelAndHighlightingLevelIs NonInteractive $
-      printHighlightingInfo (selectC r syntaxInfo)
-
+      printHighlightingInfo KeepHighlighting (selectC r syntaxInfo)
 
 -- | Prints syntax highlighting info for an error.
 
 printErrorInfo :: TCErr -> TCM ()
-printErrorInfo e = printHighlightingInfo . compress =<< errorHighlighting e
+printErrorInfo e =
+  printHighlightingInfo KeepHighlighting . compress =<<
+    errorHighlighting e
 
 -- | Generate highlighting for error.
 --   Does something special for termination errors.
@@ -540,9 +561,9 @@
   -- Print new highlighting.
   s <- E.prettyError e
   let error = singleton (rToR r)
-         $ mempty { otherAspects = [Error]
-                  , note         = Just s
-                  }
+         $ parserBased { otherAspects = [Error]
+                       , note         = Just s
+                       }
   return $ mconcat [ erase, error ]
 
 -- | Generate syntax highlighting for warnings.
@@ -554,15 +575,16 @@
   UnreachableClauses{}       -> unreachableErrorHighlighting $ P.getRange w
   CoverageIssue{}            -> coverageErrorHighlighting $ P.getRange w
   CoverageNoExactSplit{}     -> catchallHighlighting $ P.getRange w
+  UnsolvedConstraints cs     -> constraintsHighlighting cs
+  UnsolvedMetaVariables rs   -> metasHighlighting rs
   -- expanded catch-all case to get a warning for new constructors
-  UnsolvedMetaVariables{}    -> mempty
   UnsolvedInteractionMetas{} -> mempty
-  UnsolvedConstraints{}      -> mempty
   OldBuiltin{}               -> mempty
   EmptyRewritePragma{}       -> mempty
   UselessPublic{}            -> mempty
   UselessInline{}            -> mempty
   ParseWarning{}             -> mempty
+  InversionDepthReached{}    -> mempty
   GenericWarning{}           -> mempty
   GenericNonFatalError{}     -> mempty
   SafeFlagPostulate{}        -> mempty
@@ -574,13 +596,14 @@
   SafeFlagPolarity           -> mempty
   DeprecationWarning{}       -> mempty
   NicifierIssue{}            -> mempty
+  UserWarning{}              -> mempty
 
 -- | Generate syntax highlighting for termination errors.
 
 terminationErrorHighlighting :: [TerminationError] -> File
 terminationErrorHighlighting termErrs = functionDefs `mappend` callSites
   where
-    m            = mempty { otherAspects = [TerminationProblem] }
+    m            = parserBased { otherAspects = [TerminationProblem] }
     functionDefs = Fold.foldMap (\x -> singleton (rToR $ bindingSite x) m) $
                    concatMap M.termErrFunctions termErrs
     callSites    = Fold.foldMap (\r -> singleton (rToR r) m) $
@@ -594,20 +617,20 @@
 positivityErrorHighlighting q o = several (rToR <$> P.getRange q : rs) m
   where
     rs = case o of Unknown -> []; Known r _ -> [r]
-    m  = mempty { otherAspects = [PositivityProblem] }
+    m  = parserBased { otherAspects = [PositivityProblem] }
 
 unreachableErrorHighlighting :: P.Range -> File
 unreachableErrorHighlighting r = singleton (rToR $ P.continuousPerLine r) m
-  where m = mempty { otherAspects = [ReachabilityProblem] }
+  where m = parserBased { otherAspects = [ReachabilityProblem] }
 
 coverageErrorHighlighting :: P.Range -> File
 coverageErrorHighlighting r = singleton (rToR $ P.continuousPerLine r) m
-  where m = mempty { otherAspects = [CoverageProblem] }
+  where m = parserBased { otherAspects = [CoverageProblem] }
 
 
 catchallHighlighting :: P.Range -> File
 catchallHighlighting r = singleton (rToR $ P.continuousPerLine r) m
-  where m = mempty { otherAspects = [CatchallClause] }
+  where m = parserBased { otherAspects = [CatchallClause] }
 
 
 -- | Generates and prints syntax highlighting information for unsolved
@@ -618,7 +641,7 @@
   metaInfo       <- computeUnsolvedMetaWarnings
   constraintInfo <- computeUnsolvedConstraints
 
-  printHighlightingInfo
+  printHighlightingInfo KeepHighlighting
     (compress $ metaInfo `mappend` constraintInfo)
 
 -- | Generates syntax highlighting information for unsolved meta
@@ -635,20 +658,35 @@
   ms <- filterM notBlocked =<< getOpenMetas
 
   rs <- mapM getMetaRange (ms \\ is)
-  return $ several (map (rToR . P.continuousPerLine) rs)
-                   (mempty { otherAspects = [UnsolvedMeta] })
+  return $ metasHighlighting rs
 
+metasHighlighting :: [P.Range] -> File
+metasHighlighting rs = several (map (rToR . P.continuousPerLine) rs)
+                     $ parserBased { otherAspects = [UnsolvedMeta] }
+
 -- | Generates syntax highlighting information for unsolved constraints
--- that are not connected to a meta variable.
+--   (ideally: 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] })
+computeUnsolvedConstraints = constraintsHighlighting <$> getAllConstraints
 
+constraintsHighlighting :: Constraints -> File
+constraintsHighlighting cs =
+  several (map (rToR . P.continuousPerLine) rs)
+          (parserBased { otherAspects = [UnsolvedConstraint] })
+  where
+  -- get ranges of interesting unsolved constraints
+  rs = (`mapMaybe` (map theConstraint cs)) $ \case
+    Closure{ clValue = IsEmpty r t           } -> Just r
+    Closure{ clEnv = e, clValue = ValueCmp{} } -> Just $ getRange (envRange e)
+    Closure{ clEnv = e, clValue = ElimCmp{}  } -> Just $ getRange (envRange e)
+    Closure{ clEnv = e, clValue = TypeCmp{}  } -> Just $ getRange (envRange e)
+    Closure{ clEnv = e, clValue = TelCmp{}   } -> Just $ getRange (envRange e)
+    Closure{ clEnv = e, clValue = SortCmp{}  } -> Just $ getRange (envRange e)
+    Closure{ clEnv = e, clValue = LevelCmp{} } -> Just $ getRange (envRange e)
+    Closure{ clEnv = e, clValue = CheckSizeLtSat{} } -> Just $ getRange (envRange e)
+    _ -> Nothing
+
 -- | Generates a suitable file for a possibly ambiguous name.
 
 generate :: SourceToModule
@@ -659,9 +697,9 @@
          -> A.AmbiguousQName
          -> File
 generate modMap file kinds (A.AmbQ qs) =
-  mconcat $ map (\q -> nameToFileA modMap file q include m) qs
+  Fold.foldMap (\ q -> nameToFileA modMap file q include m) qs
   where
-    ks   = map kinds qs
+    ks   = map kinds (Fold.toList qs)
     -- Ulf, 2014-06-03: [issue1064] It's better to pick the first rather
     -- than doing no highlighting if there's an ambiguity between an
     -- inductive and coinductive constructor.
@@ -674,8 +712,8 @@
     -- Note that all names in an AmbiguousQName should have the same
     -- concrete name, so either they are all operators, or none of
     -- them are.
-    m isOp  = mempty { aspect = Just $ Name kind isOp }
-    include = allEqual (map bindingSite qs)
+    m isOp  = parserBased { aspect = Just $ Name kind isOp }
+    include = allEqual (map bindingSite $ Fold.toList qs)
 
 -- | Converts names to suitable 'File's.
 
diff --git a/src/full/Agda/Interaction/Highlighting/HTML.hs b/src/full/Agda/Interaction/Highlighting/HTML.hs
--- a/src/full/Agda/Interaction/Highlighting/HTML.hs
+++ b/src/full/Agda/Interaction/Highlighting/HTML.hs
@@ -16,7 +16,6 @@
   ) where
 
 import Prelude hiding ((!!), concatMap)
-import Control.Applicative
 import Control.Monad
 import Control.Monad.Trans
 
@@ -46,8 +45,12 @@
 import Agda.Interaction.Highlighting.Precise
 import Agda.Interaction.Options
 
+import Agda.Interaction.Highlighting.Generate
+  (computeUnsolvedMetaWarnings, computeUnsolvedConstraints)
+
 import qualified Agda.Syntax.Concrete as C
 import Agda.Syntax.Common
+import Agda.Syntax.Abstract.Name (ModuleName)
 
 import Agda.TypeChecking.Monad (TCM)
 import qualified Agda.TypeChecking.Monad as TCM
@@ -111,8 +114,8 @@
         ]
 
       -- Pull highlighting info from the state and generate all the
-      -- web pages.
-      mapM_ (\(m, h) -> generatePage dir m h) =<<
+      -- web pages.-
+      mapM_ (uncurry $ generatePage dir) =<<
         map (mapSnd $ TCM.iHighlighting . TCM.miInterface) .
           Map.toList <$> TCM.getVisitedModules
 
@@ -197,15 +200,28 @@
     -- Do not create anchors for whitespace.
     applyUnless (mi == mempty) (annotate pos mi) $ toHtml s
 
+  -- | Put anchors that enable referencing that token.
+  --   We put a fail safe numeric anchor (file position) for internal references (issue #2756),
+  --   as well as a heuristic name anchor for external references (issue #2604).
   annotate :: Int -> Aspects -> Html -> Html
-  annotate pos mi content = a content !! attributes
+  annotate pos mi = applyWhen hereAnchor (anchorage nameAttributes mempty <>) . anchorage posAttributes
     where
-    attributes = concat
-      [ [Attr.id $ stringValue $ applyWhen here anchorName $ show pos ]
-      , toList $ fmap link mDefinitionSite
+    -- | Warp an anchor (<A> tag) with the given attributes around some HTML.
+    anchorage :: [Attribute] -> Html -> Html
+    anchorage attrs html = a html !! attrs
+
+    -- | File position anchor (unique, reliable).
+    posAttributes :: [Attribute]
+    posAttributes = concat
+      [ [Attr.id $ stringValue $ show pos ]
+      , toList $ fmap link $ definitionSite mi
       , class_ (stringValue $ unwords classes) <$ guard (not $ null classes)
       ]
 
+    -- | Named anchor (not reliable, but useful in the general case for outside refs).
+    nameAttributes :: [Attribute]
+    nameAttributes = [ Attr.id $ stringValue $ fromMaybe __IMPOSSIBLE__ $ mDefSiteAnchor ]
+
     classes = concat
       [ concatMap noteClasses (note mi)
       , otherAspectClasses (otherAspects mi)
@@ -228,13 +244,27 @@
     -- Notes are not included.
     noteClasses s = []
 
+    -- | Should we output a named anchor?
+    --   Only if we are at the definition site now (@here@)
+    --   and such a pretty named anchor exists (see 'defSiteAnchor').
+    hereAnchor      :: Bool
+    hereAnchor      = here && isJust mDefSiteAnchor
+
+    mDefinitionSite :: Maybe DefinitionSite
     mDefinitionSite = definitionSite mi
-    here       = maybe False defSiteHere mDefinitionSite
-    anchorName = (`fromMaybe` maybe __IMPOSSIBLE__ defSiteAnchor mDefinitionSite)
-    link (DefinitionSite m pos _here aName) = href $ stringValue $
+
+    -- | Are we at the definition site now?
+    here            :: Bool
+    here            = maybe False defSiteHere mDefinitionSite
+
+    mDefSiteAnchor  :: Maybe String
+    mDefSiteAnchor  = maybe __IMPOSSIBLE__ defSiteAnchor mDefinitionSite
+
+    link (DefinitionSite m pos _here _aName) = href $ stringValue $
       -- If the definition site points to the top of a file,
       -- we drop the anchor part and just link to the file.
       applyUnless (pos <= 1)
         (++ "#" ++
-         Network.URI.Encode.encode (fromMaybe (show pos) aName))
+         Network.URI.Encode.encode (show pos))
+         -- Network.URI.Encode.encode (fromMaybe (show pos) aName)) -- Named links disabled
         (Network.URI.Encode.encode $ modToFile m)
diff --git a/src/full/Agda/Interaction/Highlighting/LaTeX.hs b/src/full/Agda/Interaction/Highlighting/LaTeX.hs
--- a/src/full/Agda/Interaction/Highlighting/LaTeX.hs
+++ b/src/full/Agda/Interaction/Highlighting/LaTeX.hs
@@ -13,8 +13,8 @@
 import Data.Char
 import Data.Maybe
 import Data.Function
+import Data.Foldable (toList)
 import Control.Monad.RWS.Strict
-import Control.Applicative
 import Control.Arrow (second)
 import System.Directory
 import System.Exit
@@ -48,8 +48,7 @@
 import Agda.Interaction.Highlighting.Precise
 import Agda.TypeChecking.Monad (TCM, Interface(..))
 import qualified Agda.TypeChecking.Monad as TCM
-import Agda.Interaction.Options
-  (optGHCiInteraction, optLaTeXDir, optCountClusters)
+import qualified Agda.Interaction.Options as O
 import Agda.Compiler.CallCompiler
 import qualified Agda.Utils.IO.UTF8 as UTF8
 import Agda.Utils.FileName (filePath, AbsolutePath, mkAbsolute)
@@ -218,10 +217,8 @@
 replaceSpaces = T.map (\c -> if isSpaceNotNewline c then ' ' else c)
 
 
--- | 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.
+-- | If the `Token` consists of spaces, the internal column counter is advanced
+--   by the length of the token. Otherwise, `moveColumnForToken` is a no-op.
 moveColumnForToken :: Token -> LaTeX ()
 moveColumnForToken t = do
   unless (isSpaces (text t)) $ do
@@ -295,12 +292,6 @@
 -- | Changes to the state that are performed at the start of a code
 -- block.
 
--- This code is based on the assumption that there are no
--- non-whitespace characters following \begin{code}. For occurrences
--- of \begin{code} which start a code block this is true. However, the
--- LaTeX backend does not identify code blocks correctly, see Issue
--- #2400.
-
 enterCode :: LaTeX ()
 enterCode = do
   resetColumn
@@ -420,10 +411,8 @@
 cmdArg x = T.singleton '{' <+> x <+> T.singleton '}'
 
 ------------------------------------------------------------------------
--- * Automaton.
+-- * Output generation from a stream of labelled tokens.
 
--- | The start state, @nonCode@, prints non-code (the LaTeX part of
---   literate Agda) until it sees a @beginBlock@.
 processLayers :: [(LayerRole, Tokens)] -> LaTeX ()
 processLayers = mapM_ $ \(layerRole,toks) -> do
   case layerRole of
@@ -432,9 +421,12 @@
     L.Code    -> processCode    toks
 
 processMarkup, processComment, processCode :: Tokens -> LaTeX ()
--- | Deals with markup
-processMarkup  = mapM_ moveColumnForToken
 
+-- | Deals with markup, which is output verbatim.
+processMarkup = mapM_ $ \t -> do
+  moveColumnForToken t
+  output (Text (text t))
+
 -- | Deals with literate text, which is output verbatim
 processComment = mapM_ $ \t -> do
   unless (T.singleton '%' == T.take 1 (T.stripStart (text t))) $ do
@@ -444,11 +436,11 @@
 -- | Deals with code blocks. Every token, except spaces, is pretty
 -- printed as a LaTeX command.
 processCode toks' = do
-  output $ Text $ beginCode <+> nl
+  output $ Text nl
   enterCode
   mapM_ go toks'
   ptOpenWhenColumnZero =<< gets column
-  output $ Text $ ptClose <+> nl <+> endCode
+  output $ Text $ ptClose <+> nl
   leaveCode
 
   where
@@ -467,10 +459,13 @@
             spaces $ T.group $ replaceSpaces tok
         else do
           ptOpenWhenColumnZero col
-          case aspect (info tok') of
-            Nothing -> output $ Text $ escape tok
-            Just a  -> output $ Text $
-                         cmdPrefix <+> T.pack (cmd a) <+> cmdArg (escape tok)
+          output $ Text $
+            -- we return the escaped token wrapped in commands corresponding
+            -- to its aspect (if any) and other aspects (e.g. error, unsolved meta)
+            foldr (\c t -> cmdPrefix <+> T.pack c <+> cmdArg t)
+                  (escape tok)
+                  $ concatMap fromAspect (toList $ aspect $ info tok')
+                    ++ map fromOtherAspect (otherAspects $ info tok')
 
     -- Non-whitespace tokens at the start of a line trigger an
     -- alignment column.
@@ -479,8 +474,13 @@
           registerColumnZero
           output . Text . ptOpen =<< columnZero
 
-    cmd :: Aspect -> String
-    cmd a = let s = show a in case a of
+    -- Translation from OtherAspect to command strings. So far it happens
+    -- to correspond to @show@ but it does not have to (cf. fromAspect)
+    fromOtherAspect :: OtherAspect -> String
+    fromOtherAspect = show
+
+    fromAspect :: Aspect -> [String]
+    fromAspect a = let s = [show a] in case a of
       Comment           -> s
       Option            -> s
       Keyword           -> s
@@ -488,7 +488,7 @@
       Number            -> s
       Symbol            -> s
       PrimitiveType     -> s
-      Name Nothing isOp -> cmd (Name (Just Postulate) isOp)
+      Name Nothing isOp -> fromAspect (Name (Just Postulate) isOp)
         -- At the time of writing the case above can be encountered in
         -- --only-scope-checking mode, for instance for the token "Size"
         -- in the following code:
@@ -497,30 +497,32 @@
         --
         -- The choice of "Postulate" works for this example, but might
         -- be less appropriate for others.
-      Name (Just kind) _ -> case kind of
-        Bound                     -> s
-        Constructor Inductive     -> "InductiveConstructor"
-        Constructor CoInductive   -> "CoinductiveConstructor"
-        Datatype                  -> s
-        Field                     -> s
-        Function                  -> s
-        Module                    -> s
-        Postulate                 -> s
-        Primitive                 -> s
-        Record                    -> s
-        Argument                  -> s
-        Macro                     -> s
+      Name (Just kind) isOp ->
+        (\c -> if isOp then ["Operator", c] else [c]) $
+        case kind of
+          Bound                     -> s
+          Constructor Inductive     -> "InductiveConstructor"
+          Constructor CoInductive   -> "CoinductiveConstructor"
+          Datatype                  -> s
+          Field                     -> s
+          Function                  -> s
+          Module                    -> s
+          Postulate                 -> s
+          Primitive                 -> s
+          Record                    -> s
+          Argument                  -> s
+          Macro                     -> s
         where
         s = show kind
 
--- Escapes special characters.
+-- | 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
-    '_'  -> "\\_"
+    '_'  -> "\\AgdaUnderscore{}"
     '{'  -> "\\{"
     '}'  -> "\\}"
     '#'  -> "\\#"
@@ -592,7 +594,7 @@
 
   output $ MaybeColumn column
 
--- Split multi-lines string literals into multiple string literals
+-- | Split multi-lines string literals into multiple string literals
 -- Isolating leading spaces for the alignment machinery to work
 -- properly
 stringLiteral :: Token -> Tokens
@@ -626,12 +628,12 @@
 
   options <- TCM.commandLineOptions
 
-  dir <- case optGHCiInteraction options of
-    False -> return $ optLaTeXDir options
+  dir <- case O.optGHCiInteraction options of
+    False -> return $ O.optLaTeXDir options
     True  -> do
       sourceFile <- Find.findFile mod
       return $ filePath (projectRoot sourceFile mod)
-                 </> optLaTeXDir options
+                 </> O.optLaTeXDir options
   liftIO $ createDirectoryIfMissing True dir
 
   (code, _, _) <- liftIO $ readProcessWithExitCode
@@ -654,7 +656,7 @@
   liftIO $ do
     source <- UTF8.readTextFile inAbsPath
     latex <- E.encodeUtf8 `fmap`
-               toLaTeX (optCountClusters options)
+               toLaTeX (O.optCountClusters $ O.optPragmaOptions options)
                        (mkAbsolute inAbsPath) source hi
     createDirectoryIfMissing True $ dir </> takeDirectory outPath
     BS.writeFile (dir </> outPath) latex
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
@@ -9,9 +9,11 @@
   , OtherAspect(..)
   , Aspects(..)
   , DefinitionSite(..)
+  , TokenBased(..)
   , File(..)
   , HighlightingInfo
     -- ** Creation
+  , parserBased
   , singleton
   , several
     -- ** Merging
@@ -47,7 +49,6 @@
 import Control.Monad
 import Data.IntMap (IntMap)
 import qualified Data.IntMap as IntMap
-import Data.Typeable (Typeable)
 
 import qualified Agda.Syntax.Position as P
 import qualified Agda.Syntax.Common as Common
@@ -71,7 +72,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)
+    deriving (Eq, Show)
 
 -- | @NameKind@s are figured out during scope checking.
 
@@ -87,7 +88,7 @@
   | Record                        -- ^ Record type.
   | Argument                      -- ^ Named argument, like x in {x = v}
   | Macro                         -- ^ Macro.
-    deriving (Eq, Show, Typeable)
+    deriving (Eq, Show)
 
 -- | Other aspects, generated by type checking.
 --   (These can overlap with each other and with 'Aspect's.)
@@ -109,7 +110,7 @@
   | CatchallClause
   | TypeChecks
     -- ^ Code which is being type-checked.
-    deriving (Eq, Show, Enum, Bounded, Typeable)
+    deriving (Eq, Show, Enum, Bounded)
 
 -- | Meta information which can be associated with a
 -- character\/character range.
@@ -125,8 +126,10 @@
   , definitionSite :: Maybe DefinitionSite
     -- ^ The definition site of the annotated thing, if applicable and
     --   known. File positions are counted from 1.
+  , tokenBased :: !TokenBased
+    -- ^ Is this entry token-based?
   }
-  deriving (Show, Typeable)
+  deriving Show
 
 data DefinitionSite = DefinitionSite
   { defSiteModule :: SC.TopLevelModuleName
@@ -138,20 +141,27 @@
   , defSiteAnchor :: Maybe String
       -- ^ A pretty name for the HTML linking.
   }
-  deriving (Show, Typeable)
+  deriving Show
 
 instance Eq DefinitionSite where
   DefinitionSite m p _ _ == DefinitionSite m' p' _ _ = m == m' && p == p'
 
+-- | Is the highlighting \"token-based\", i.e. based only on
+-- information from the lexer?
+
+data TokenBased = TokenBased | NotOnlyTokenBased
+  deriving (Eq, Show)
+
 instance Eq Aspects where
-  Aspects a o _ d == Aspects a' o' _ d' = (a, List.nub o, d) == (a', List.nub o', d')
+  Aspects a o _ d t == Aspects a' o' _ d' t' =
+    (a, List.nub o, d, t) == (a', List.nub o', d', t')
 
 -- | A 'File' is a mapping from file positions to meta information.
 --
 -- The first position in the file has number 1.
 
 newtype File = File { mapping :: IntMap Aspects }
-  deriving (Eq, Show, Typeable)
+  deriving (Eq, Show)
 
 -- | Syntax highlighting information.
 
@@ -160,6 +170,12 @@
 ------------------------------------------------------------------------
 -- Creation
 
+-- | A variant of 'mempty' with 'tokenBased' set to
+-- 'NotOnlyTokenBased'.
+
+parserBased :: Aspects
+parserBased = mempty { tokenBased = NotOnlyTokenBased }
+
 -- | @'singleton' rs m@ is a file whose positions are those in @rs@,
 -- and in which every position is associated with @m@.
 
@@ -175,6 +191,14 @@
 ------------------------------------------------------------------------
 -- Merging
 
+instance Semigroup TokenBased where
+  b1@NotOnlyTokenBased <> b2 = b1
+  TokenBased           <> b2 = b2
+
+instance Monoid TokenBased where
+  mempty  = TokenBased
+  mappend = (<>)
+
 -- | Merges meta information.
 
 mergeAspects :: Aspects -> Aspects -> Aspects
@@ -190,6 +214,7 @@
       (Nothing, Just n2) -> Just n2
       (Nothing, Nothing) -> Nothing
   , definitionSite = (mplus `on` definitionSite) m1 m2
+  , tokenBased     = tokenBased m1 <> tokenBased m2
   }
 
 instance Semigroup Aspects where
@@ -201,6 +226,7 @@
     , otherAspects   = []
     , note           = Nothing
     , definitionSite = Nothing
+    , tokenBased     = mempty
     }
   mappend = (<>)
 
@@ -239,7 +265,7 @@
 
 newtype CompressedFile =
   CompressedFile { ranges :: [(Range, Aspects)] }
-  deriving (Eq, Show, Typeable)
+  deriving (Eq, Show)
 
 -- | Invariant for compressed files.
 --
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
@@ -17,7 +17,6 @@
   ) where
 
 import Control.Applicative ((<$>))
-import Data.Typeable (Typeable)
 
 import qualified Agda.Syntax.Position as P
 import Agda.Utils.List
@@ -29,7 +28,7 @@
 -- Invariant: @'from' '<=' 'to'@.
 
 data Range = Range { from, to :: Int }
-             deriving (Eq, Ord, Show, Typeable)
+             deriving (Eq, Ord, Show)
 
 -- | The 'Range' invariant.
 
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
@@ -14,11 +14,6 @@
 import Control.Monad.Trans.Maybe
 import qualified Control.Exception as E
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Foldable ( Foldable )
-import Data.Traversable ( Traversable, traverse )
-#endif
-
 import Data.Function (on)
 import qualified Data.Map as Map
 import qualified Data.List as List
@@ -64,9 +59,12 @@
 import {-# SOURCE #-} Agda.Interaction.InteractionTop (showOpenMetas)
 import Agda.Interaction.Options
 import qualified Agda.Interaction.Options.Lenses as Lens
-import Agda.Interaction.Highlighting.Precise (HighlightingInfo)
+import Agda.Interaction.Highlighting.Precise
+  (HighlightingInfo, compress)
 import Agda.Interaction.Highlighting.Generate
 import Agda.Interaction.Highlighting.Vim
+import Agda.Interaction.Response
+  (RemoveTokenBasedHighlighting(KeepHighlighting))
 
 import Agda.Utils.Except ( MonadError(catchError, throwError) )
 import Agda.Utils.FileName
@@ -134,7 +132,7 @@
             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 (iPatternSyns i) (iDisplayForms i) warns
+    addImportedThings sig bi (iPatternSyns i) (iDisplayForms i) (iUserWarnings i) warns
     reportSLn "import.iface.merge" 20 $
       "  Rebinding primitives " ++ show prim
     mapM_ rebind prim
@@ -145,12 +143,13 @@
 
 addImportedThings ::
   Signature -> BuiltinThings PrimFun ->
-  A.PatternSynDefns -> DisplayForms -> [TCWarning] -> TCM ()
-addImportedThings isig ibuiltin patsyns display warnings = do
+  A.PatternSynDefns -> DisplayForms -> Map A.QName String -> [TCWarning] -> TCM ()
+addImportedThings isig ibuiltin patsyns display userwarn warnings = do
   stImports              %= \ imp -> unionSignatures [imp, isig]
   stImportedBuiltins     %= \ imp -> Map.union imp ibuiltin
   stPatternSynImports    %= \ imp -> Map.union imp patsyns
   stImportedDisplayForms %= \ imp -> HMap.unionWith (++) imp display
+  stUserWarnings         %= \ imp -> Map.union imp userwarn
   stTCWarnings           %= \ imp -> List.union imp warnings
   addImportedInstances isig
 
@@ -298,7 +297,7 @@
     -- Preserve the pragma options unless we are checking the main
     -- interface.
     bracket_ (use stPragmaOptions)
-             (unless (includeStateChanges isMain) . setPragmaOptions) $ do
+             (unless (includeStateChanges isMain) . (stPragmaOptions .=)) $ do
      -- Forget the pragma options (locally).
      setCommandLineOptions . stPersistentOptions . stPersistentState =<< get
 
@@ -490,18 +489,8 @@
   case isMain of
     MainInterface _ -> do
       r <- withMsgs $ createInterface file x isMain
-
-      -- Merge the signature with the signature for imported
-      -- things.
-      reportSLn "import.iface" 40 $ "Merging with state changes included."
-      sig     <- getSignature
-      patsyns <- getPatternSyns
-      display <- use stImportsDisplayForms
-      addImportedThings sig Map.empty patsyns display []
-      setSignature emptySignature
-      setPatternSyns Map.empty
-
       return (True, r)
+
     NotMainInterface -> do
       ms       <- getImportPath
       nesting  <- asks envModuleNestingLevel
@@ -514,6 +503,7 @@
       isig     <- use stImports
       ibuiltin <- use stImportedBuiltins
       display  <- use stImportsDisplayForms
+      userwarn <- use stUserWarnings
       ipatsyns <- getPatternSynImports
       ho       <- getInteractionOutputCallback
       -- Every interface is treated in isolation. Note: Some changes to
@@ -536,7 +526,7 @@
                setInteractionOutputCallback ho
                stModuleToSource .= mf
                setVisitedModules vs
-               addImportedThings isig ibuiltin ipatsyns display []
+               addImportedThings isig ibuiltin ipatsyns display userwarn []
 
                r  <- withMsgs $ createInterface file x isMain
                mf <- use stModuleToSource
@@ -575,7 +565,9 @@
 chaseMsg kind x file = do
   indentation <- (`replicate` ' ') <$> asks envModuleNestingLevel
   let maybeFile = caseMaybe file "." $ \ f -> " (" ++ f ++ ")."
-  reportSLn "import.chase" 1 $ concat $
+      vLvl | kind == "Checking" = 1
+           | otherwise          = 2
+  reportSLn "import.chase" vLvl $ concat $
     [ indentation, kind, " ", prettyShow x, maybeFile ]
 
 
@@ -590,8 +582,7 @@
   reportSLn "import.iface" 5 $
     "Generating syntax info for " ++ filePath file ++
     " (read from interface)."
-  printHighlightingInfo (iHighlighting i)
-
+  printHighlightingInfo KeepHighlighting (iHighlighting i)
 
 readInterface :: FilePath -> TCM (Maybe Interface)
 readInterface file = do
@@ -701,7 +692,7 @@
     Bench.billTo [Bench.Highlighting] $ do
       -- Generate and print approximate syntax highlighting info.
       ifTopLevelAndHighlightingLevelIs NonInteractive $
-        printHighlightingInfo fileTokenInfo
+        printHighlightingInfo KeepHighlighting fileTokenInfo
       let onlyScope = isMain == MainInterface ScopeCheck
       ifTopLevelAndHighlightingLevelIsOr NonInteractive onlyScope $
         mapM_ (\ d -> generateAndPrintSyntaxInfo d Partial onlyScope) ds
@@ -710,6 +701,10 @@
 
     -- Type checking.
 
+    -- Now that all the options are in we can check if caching should
+    -- be on.
+    activateLoadedFileCache
+
     -- invalidate cache if pragmas change, TODO move
     cachingStarts
     opts <- use stPragmaOptions
@@ -752,10 +747,21 @@
 
       -- Move any remaining token highlighting to stSyntaxInfo.
       toks <- use stTokens
-      ifTopLevelAndHighlightingLevelIs NonInteractive $ printHighlightingInfo toks
+      ifTopLevelAndHighlightingLevelIs NonInteractive $
+        printHighlightingInfo KeepHighlighting toks
       stTokens .= mempty
-      stSyntaxInfo %= \inf -> inf `mappend` toks
 
+      -- Grabbing warnings and unsolved metas to highlight them
+      warnings <- getAllWarnings' AllWarnings RespectFlags
+      unless (null warnings) $ reportSDoc "import.iface.create" 20 $
+        P.text "collected warnings: " P.<> prettyTCM warnings
+      unsolved <- getAllUnsolved
+      unless (null unsolved) $ reportSDoc "import.iface.create" 20 $
+        P.text "collected unsolved: " P.<> prettyTCM unsolved
+      let warningInfo = compress $ foldMap warningHighlighting $ unsolved ++ warnings
+
+      stSyntaxInfo %= \inf -> (inf `mappend` toks) `mappend` warningInfo
+
       whenM (optGenerateVimFile <$> commandLineOptions) $
         -- Generate Vim file.
         withScope_ scope $ generateVimFile $ filePath file
@@ -791,9 +797,8 @@
 
     -- Serialization.
     reportSLn "import.iface.create" 7 $ "Starting serialization."
-    syntaxInfo <- use stSyntaxInfo
     i <- Bench.billTo [Bench.Serialization, Bench.BuildInterface] $ do
-      buildInterface file topLevel syntaxInfo options
+      buildInterface file topLevel options
 
     reportSLn "tc.top" 101 $ unlines $
       "Signature:" :
@@ -844,22 +849,37 @@
 -- in by the user, or not (for instance when deciding if we are
 -- writing an interface file or not)
 
-getAllWarnings' :: WhichWarnings -> IgnoreFlags -> TCM [TCWarning]
-getAllWarnings' ww ifs = do
+getUniqueMetasRanges :: [MetaId] -> TCM [Range]
+getUniqueMetasRanges = fmap List.nub . mapM getMetaRange
+
+getUnsolvedMetas :: TCM [Range]
+getUnsolvedMetas = do
   openMetas            <- getOpenMetas
   interactionMetas     <- getInteractionMetas
-  let getUniqueMetas = fmap List.nub . mapM getMetaRange
-  unsolvedInteractions <- getUniqueMetas interactionMetas
-  unsolvedMetas        <- getUniqueMetas (openMetas List.\\ interactionMetas)
+  getUniqueMetasRanges (openMetas List.\\ interactionMetas)
+
+getAllUnsolved :: TCM [TCWarning]
+getAllUnsolved = do
+  unsolvedInteractions <- getUniqueMetasRanges =<< getInteractionMetas
   unsolvedConstraints  <- getAllConstraints
-  collectedTCWarnings  <- use stTCWarnings
+  unsolvedMetas        <- getUnsolvedMetas
 
-  unsolved <- mapM warning_
-                   [ UnsolvedInteractionMetas unsolvedInteractions
-                   , UnsolvedMetaVariables    unsolvedMetas
-                   , UnsolvedConstraints      unsolvedConstraints ]
+  let checkNonEmpty c rs = c rs <$ guard (not $ null rs)
 
-  fmap (filter ((<= ww) . classifyWarning . tcWarning))
+  mapM warning_ $ catMaybes
+                [ checkNonEmpty UnsolvedInteractionMetas unsolvedInteractions
+                , checkNonEmpty UnsolvedMetaVariables    unsolvedMetas
+                , checkNonEmpty UnsolvedConstraints      unsolvedConstraints ]
+
+getAllWarnings' :: WhichWarnings -> IgnoreFlags -> TCM [TCWarning]
+getAllWarnings' ww ifs = do
+  unsolved            <- getAllUnsolved
+  collectedTCWarnings <- use stTCWarnings
+
+  let showWarn w = classifyWarning w <= ww &&
+                    not (null unsolved && onlyShowIfUnsolved w)
+
+  fmap (filter (showWarn . tcWarning))
     $ applyFlagsToTCWarnings ifs $ reverse
     $ unsolved ++ collectedTCWarnings
 
@@ -898,12 +918,10 @@
   :: AbsolutePath
   -> TopLevelInfo
      -- ^ 'TopLevelInfo' for the current module.
-  -> HighlightingInfo
-     -- ^ Syntax highlighting info for the module.
   -> [OptionsPragma]
      -- ^ Options set in @OPTIONS@ pragmas.
   -> TCM Interface
-buildInterface file topLevel syntaxInfo pragmas = do
+buildInterface file topLevel pragmas = do
     reportSLn "import.iface" 5 "Building interface..."
     let m = topLevelModuleName topLevel
     scope'  <- getScope
@@ -925,9 +943,11 @@
     -- Ulf, 2016-04-12:
     -- Non-closed display forms are not applicable outside the module anyway,
     -- and should be dead-code eliminated (#1928).
-    display <- HMap.filter (not . null) . HMap.map (filter isGlobal) <$> use stImportsDisplayForms
+    display <- HMap.filter (not . null) . HMap.map (filter isClosed) <$> use stImportsDisplayForms
     -- TODO: Kill some ranges?
     (display, sig) <- eliminateDeadCode display =<< getSignature
+    userwarns <- use stUserWarnings
+    syntaxInfo <- use stSyntaxInfo
     -- Andreas, 2015-02-09 kill ranges in pattern synonyms before
     -- serialization to avoid error locations pointing to external files
     -- when expanding a pattern synoym.
@@ -944,6 +964,7 @@
       , iInsideScope     = topLevelScope topLevel
       , iSignature       = sig
       , iDisplayForms    = display
+      , iUserWarnings    = userwarns
       , iBuiltin         = builtin'
       , iForeignCode     = foreignCode
       , iHighlighting    = syntaxInfo
diff --git a/src/full/Agda/Interaction/InteractionTop.hs b/src/full/Agda/Interaction/InteractionTop.hs
--- a/src/full/Agda/Interaction/InteractionTop.hs
+++ b/src/full/Agda/Interaction/InteractionTop.hs
@@ -52,6 +52,7 @@
 import Agda.Syntax.Concrete.Pretty ()
 import Agda.Syntax.Abstract as A
 import Agda.Syntax.Abstract.Pretty
+import qualified Agda.Syntax.Internal as I
 import Agda.Syntax.Info (mkDefInfo)
 import Agda.Syntax.Translation.ConcreteToAbstract
 import Agda.Syntax.Translation.AbstractToConcrete hiding (withScope)
@@ -85,6 +86,7 @@
   , runExceptT
   )
 
+import Agda.Utils.Either
 import Agda.Utils.FileName
 import Agda.Utils.Function
 import Agda.Utils.Hash
@@ -285,8 +287,7 @@
             Right <$>
               (toIO $ handleErr $ Exception noRange $ text $ show e)
 
-          asyncHandler e@E.ThreadKilled = return (Left e)
-          asyncHandler e                = handle e
+          asyncHandler e@AsyncCancelled = return (Left e)
 
           generalHandler (e :: E.SomeException) = handle e
 
@@ -316,7 +317,8 @@
         unless (null s1) $ mapM_ putResponse $
             [ Resp_DisplayInfo $ Info_Error s ] ++
             tellEmacsToJumpToError (getRange e) ++
-            [ Resp_HighlightingInfo info method modFile ] ++
+            [ Resp_HighlightingInfo info KeepHighlighting
+                                    method modFile ] ++
             [ Resp_Status $ Status { sChecked = False
                                    , sShowImplicitArguments = x
                                    } ]
@@ -340,7 +342,9 @@
     withCurrentFile $ interpret cmd
 
     cf <- gets theCurrentFile
-    when (Just current == (fst <$> cf)) $
+    when (updateInteractionPointsAfter cmd
+            &&
+          Just current == (fst <$> cf)) $
         putResponse . Resp_InteractionPoints =<< gets theInteractionPoints
 
   where
@@ -462,9 +466,6 @@
     -- show those instead.
   | Cmd_metas
 
-    -- | Display all warnings.
-  | Cmd_warnings
-
     -- | Shows all the top-level names in the given module, along with
     -- their types. Uses the top-level scope.
   | Cmd_show_module_contents_toplevel
@@ -512,6 +513,20 @@
   | Cmd_load_highlighting_info
                         FilePath
 
+    -- | Tells Agda to compute token-based highlighting information
+    -- for the file.
+    --
+    -- This command works even if the file's module name does not
+    -- match its location in the file system, or if the file is not
+    -- scope-correct. Furthermore no file names are put in the
+    -- generated output. Thus it is fine to put source code into a
+    -- temporary file before calling this command. However, the file
+    -- extension should be correct.
+    --
+    -- If the second argument is 'Remove', then the (presumably
+    -- temporary) file is removed after it has been read.
+  | Cmd_tokenHighlighting FilePath Remove
+
     -- | Tells Agda to compute highlighting information for the expression just
     --   spliced into an interaction point.
   | Cmd_highlight InteractionId range String
@@ -596,6 +611,13 @@
          -- -^ What to do
             deriving (Show, Read, Functor, Foldable, Traversable)
 
+-- | Used to indicate whether something should be removed or not.
+
+data Remove
+  = Remove
+  | Keep
+  deriving (Show, Read)
+
 ---------------------------------------------------------
 -- Read instances
 
@@ -678,9 +700,49 @@
 independent (Cmd_load {})                   = True
 independent (Cmd_compile {})                = True
 independent (Cmd_load_highlighting_info {}) = True
+independent Cmd_tokenHighlighting {}        = True
 independent Cmd_show_version                = True
 independent _                               = False
 
+-- | Should 'Resp_InteractionPoints' be issued after the command has
+-- run?
+
+updateInteractionPointsAfter :: Interaction -> Bool
+updateInteractionPointsAfter Cmd_load{}                          = True
+updateInteractionPointsAfter Cmd_compile{}                       = True
+updateInteractionPointsAfter Cmd_constraints{}                   = False
+updateInteractionPointsAfter Cmd_metas{}                         = False
+updateInteractionPointsAfter Cmd_show_module_contents_toplevel{} = False
+updateInteractionPointsAfter Cmd_search_about_toplevel{}         = False
+updateInteractionPointsAfter Cmd_solveAll{}                      = True
+updateInteractionPointsAfter Cmd_solveOne{}                      = True
+updateInteractionPointsAfter Cmd_infer_toplevel{}                = False
+updateInteractionPointsAfter Cmd_compute_toplevel{}              = False
+updateInteractionPointsAfter Cmd_load_highlighting_info{}        = False
+updateInteractionPointsAfter Cmd_tokenHighlighting{}             = False
+updateInteractionPointsAfter Cmd_highlight{}                     = True
+updateInteractionPointsAfter ShowImplicitArgs{}                  = False
+updateInteractionPointsAfter ToggleImplicitArgs{}                = False
+updateInteractionPointsAfter Cmd_give{}                          = True
+updateInteractionPointsAfter Cmd_refine{}                        = True
+updateInteractionPointsAfter Cmd_intro{}                         = True
+updateInteractionPointsAfter Cmd_refine_or_intro{}               = True
+updateInteractionPointsAfter Cmd_auto{}                          = True
+updateInteractionPointsAfter Cmd_context{}                       = False
+updateInteractionPointsAfter Cmd_helper_function{}               = False
+updateInteractionPointsAfter Cmd_infer{}                         = False
+updateInteractionPointsAfter Cmd_goal_type{}                     = False
+updateInteractionPointsAfter Cmd_goal_type_context{}             = False
+updateInteractionPointsAfter Cmd_goal_type_context_infer{}       = False
+updateInteractionPointsAfter Cmd_goal_type_context_check{}       = False
+updateInteractionPointsAfter Cmd_show_module_contents{}          = False
+updateInteractionPointsAfter Cmd_make_case{}                     = True
+updateInteractionPointsAfter Cmd_compute{}                       = False
+updateInteractionPointsAfter Cmd_why_in_scope{}                  = False
+updateInteractionPointsAfter Cmd_why_in_scope_toplevel{}         = False
+updateInteractionPointsAfter Cmd_show_version{}                  = False
+updateInteractionPointsAfter Cmd_abort{}                         = False
+
 -- | Interpret an interaction
 
 interpret :: Interaction -> CommandM ()
@@ -721,13 +783,6 @@
   (pwe, pwa) <- interpretWarnings
   display_info $ Info_AllGoalsWarnings (unlines ms) pwa pwe
 
-interpret Cmd_warnings = do
-  -- Ulf, 2016-08-09: Warnings are now printed in the info buffer by Cmd_metas.
-  -- pws <- interpretWarnings
-  -- unless (null pwd) $ display_info $ Info_Warning pws
-  return ()
-
-
 interpret (Cmd_show_module_contents_toplevel norm s) =
   liftCommandMT B.atTopLevel $ showModuleContents norm noRange s
 
@@ -746,10 +801,10 @@
                   _            -> norm
 
 interpret (Cmd_infer_toplevel norm s) =
-  parseAndDoAtToplevel (B.typeInCurrent norm) Info_InferredType s
+  parseAndDoAtToplevel (prettyA <=< B.typeInCurrent norm) Info_InferredType s
 
 interpret (Cmd_compute_toplevel cmode s) =
-  parseAndDoAtToplevel' action Info_NormalForm $ computeWrapInput cmode s
+  parseAndDoAtToplevel action Info_NormalForm $ computeWrapInput cmode s
   where
   action = allowNonTerminatingReductions
          . (if computeIgnoreAbstract cmode then ignoreAbstractMode else inConcreteMode)
@@ -770,6 +825,8 @@
              ps { optShowImplicit = not $ optShowImplicit ps } }
 
 interpret (Cmd_load_highlighting_info source) = do
+  l <- envHighlightingLevel <$> ask
+  when (l /= None) $ do
     -- Make sure that the include directories have
     -- been set.
     setCommandLineOpts =<< lift commandLineOptions
@@ -797,16 +854,36 @@
                 return Nothing
     mapM_ putResponse resp
 
+interpret (Cmd_tokenHighlighting source remove) = do
+  info <- do l <- envHighlightingLevel <$> ask
+             if l == None
+               then return Nothing
+               else do
+                 source <- liftIO (absolute source)
+                 lift $ (Just <$> generateTokenInfo source)
+                           `catchError` \_ ->
+                        return Nothing
+      `finally`
+    case remove of
+      Remove -> liftIO $ removeFile source
+      Keep   -> return ()
+  case info of
+    Just info -> lift $ printHighlightingInfo RemoveHighlighting info
+    Nothing   -> return ()
+
 interpret (Cmd_highlight ii rng s) = do
-  scope <- getOldInteractionScope ii
-  removeOldInteractionScope ii
-  handle $ do
-    e <- try ("Highlighting failed to parse expression in " ++ show ii) $
-           B.parseExpr rng s
-    e <- try ("Highlighting failed to scope check expression in " ++ show ii) $
-           concreteToAbstract scope e
-    lift $ printHighlightingInfo =<< generateTokenInfoFromString rng s
-    lift $ highlightExpr e
+  l <- envHighlightingLevel <$> ask
+  when (l /= None) $ do
+    scope <- getOldInteractionScope ii
+    removeOldInteractionScope ii
+    handle $ do
+      e <- try ("Highlighting failed to parse expression in " ++ show ii) $
+             B.parseExpr rng s
+      e <- try ("Highlighting failed to scope check expression in " ++ show ii) $
+             concreteToAbstract scope e
+      lift $ printHighlightingInfo KeepHighlighting =<<
+               generateTokenInfoFromString rng s
+      lift $ highlightExpr e
   where
     handle :: ExceptT String TCM () -> CommandM ()
     handle m = do
@@ -816,7 +893,8 @@
         Right _ -> return ()
     try :: String -> TCM a -> ExceptT String TCM a
     try err m = mkExceptT $ do
-      (Right <$> m) `catchError` \ _ -> return (Left err)
+      (mapLeft (const err) <$> freshTCM m) `catchError` \ _ -> return (Left err)
+      -- freshTCM to avoid scope checking creating new interaction points
 
 interpret (Cmd_give   force ii rng s) = give_gen force ii rng s Give
 interpret (Cmd_refine ii rng s) = give_gen WithoutForce ii rng s Refine
@@ -926,14 +1004,12 @@
   liftCommandMT (B.withInteractionId ii) $ do
     hidden <- lift $ showImplicitArguments
     tel <- lift $ lookupSection (qnameModule f) -- don't shadow the names in this telescope
-    let cs'  :: [A.Clause] = List.map (extlam_dropLLifted casectxt hidden) cs
-    pcs      :: [Doc]     <- lift $ inTopContext $ addContext tel $ mapM prettyA cs'
-    let pcs' :: [String]   = List.map (extlam_dropName casectxt . render) pcs
+    pcs      :: [Doc]      <- lift $ inTopContext $ addContext tel $ mapM prettyA cs
+    let pcs' :: [String]    = List.map (extlam_dropName casectxt . render) pcs
     lift $ reportSDoc "interaction.case" 60 $ TCP.vcat
       [ TCP.text "InteractionTop.Cmd_make_case"
       , TCP.nest 2 $ TCP.vcat
         [ TCP.text "cs   = " TCP.<+> TCP.vcat (map prettyA cs)
-        , TCP.text "cs'  = " TCP.<+> TCP.vcat (map prettyA cs')
         , TCP.text "pcs  = " TCP.<+> TCP.vcat (map return pcs)
         , TCP.text "pcs' = " TCP.<+> TCP.vcat (map TCP.text pcs')
         ]
@@ -942,7 +1018,6 @@
       [ TCP.text "InteractionTop.Cmd_make_case"
       , TCP.nest 2 $ TCP.vcat
         [ TCP.text "cs   = " TCP.<+> TCP.text (show cs)
-        , TCP.text "cs'  = " TCP.<+> TCP.text (show cs')
         ]
       ]
     putResponse $ Resp_MakeCase (makeCaseVariant casectxt) pcs'
@@ -965,14 +1040,6 @@
         replEquals (w   : ws) = w : replEquals ws
         replEquals []         = []
 
-    -- Drops pattern added to extended lambda functions when lambda lifting them
-    extlam_dropLLifted :: CaseContext -> Bool -> A.Clause -> A.Clause
-    extlam_dropLLifted Nothing _ x = x
-    extlam_dropLLifted _ _ (A.Clause (A.LHS _ A.LHSProj{} _) _ _ _ _ _) = __IMPOSSIBLE__
-    extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden cl@A.Clause{ A.clauseLHS = A.LHS info (A.LHSHead name nps) ps }
-      = let n = if hidden then h + nh else nh
-        in cl{ A.clauseLHS = A.LHS info (A.LHSHead name (drop n nps)) ps }
-
 interpret (Cmd_compute cmode ii rng s) = display_info . Info_NormalForm =<< do
   liftLocalState $ do
     e <- B.parseExprIn ii rng $ computeWrapInput cmode s
@@ -1092,10 +1159,8 @@
     putResponse Resp_ClearRunningInfo
 
     -- Remove any prior syntax highlighting.
-    putResponse Resp_ClearHighlighting
+    putResponse (Resp_ClearHighlighting NotOnlyTokenBased)
 
-    -- We activate the cache only when agda is used interactively
-    lift activateLoadedFileCache
 
     ok <- lift $ Imp.typeCheckMain f mode
 
@@ -1184,7 +1249,7 @@
     iis       <- lift $ sortInteractionPoints iis
     modifyTheInteractionPoints $ replace ii iis
     -- print abstract expr
-    ce        <- lift $ abstractToConcreteEnv (makeEnv scope) ae
+    ce        <- lift $ abstractToConcreteScope scope ae
     lift $ reportSLn "interaction.give" 30 $ unlines
       [ "ce = " ++ show ce
       , "scopePrecedence = " ++ show (scopePrecedence scope)
@@ -1204,8 +1269,11 @@
     -- the highlighting is moved together with the text when the hole goes away.
     -- To make it work for refine we'd have to adjust the ranges.
     when literally $ lift $ do
-      printHighlightingInfo =<< generateTokenInfoFromString rng s
-      highlightExpr ae
+      l <- envHighlightingLevel <$> ask
+      when (l /= None) $ do
+        printHighlightingInfo KeepHighlighting =<<
+          generateTokenInfoFromString rng s
+        highlightExpr ae
     putResponse $ Resp_GiveAction ii $ mkNewTxt literally ce
     lift $ reportSLn "interaction.give" 30 $ "putResponse GiveAction passed"
     -- display new goal set (if not measuring time)
@@ -1465,7 +1533,7 @@
 -- as the scope), performs the given command with the expression as
 -- input, and displays the result.
 
-parseAndDoAtToplevel'
+parseAndDoAtToplevel
   :: (A.Expr -> TCM Doc)
      -- ^ The command to perform.
   -> (Doc -> DisplayInfo)
@@ -1473,15 +1541,12 @@
   -> String
      -- ^ The expression to parse.
   -> CommandM ()
-parseAndDoAtToplevel' cmd title s = do
+parseAndDoAtToplevel cmd title s = do
   (time, res) <- localStateCommandM $ do
     e <- lift $ runPM $ parse exprParser s
-    maybeTimed (lift $ B.atTopLevel $
-                cmd =<< concreteToAbstract_ e)
-  display_info (title $ fromMaybe empty time $$ res)
-
-parseAndDoAtToplevel :: (A.Expr -> TCM A.Expr) -> (Doc -> DisplayInfo) -> String -> CommandM ()
-parseAndDoAtToplevel cmd = parseAndDoAtToplevel' (prettyA <=< cmd)
+    maybeTimed $ lift $ B.atTopLevel $ do
+      cmd =<< concreteToAbstract_ e
+  display_info $ title $ fromMaybe empty time $$ res
 
 maybeTimed :: CommandM a -> CommandM (Maybe Doc, a)
 maybeTimed work = do
@@ -1497,7 +1562,7 @@
   :: Maybe (HighlightingInfo, HighlightingMethod, ModuleToSource) -> IO [Response]
 tellToUpdateHighlighting Nothing                = return []
 tellToUpdateHighlighting (Just (info, method, modFile)) =
-  return [Resp_HighlightingInfo info method modFile]
+  return [Resp_HighlightingInfo info KeepHighlighting method modFile]
 
 -- | Tells the Emacs mode to go to the first error position (if any).
 
diff --git a/src/full/Agda/Interaction/Library.hs b/src/full/Agda/Interaction/Library.hs
--- a/src/full/Agda/Interaction/Library.hs
+++ b/src/full/Agda/Interaction/Library.hs
@@ -28,7 +28,6 @@
   ) where
 
 import Control.Arrow (first, second)
-import Control.Applicative
 import Control.Exception
 import Control.Monad.Writer
 import Data.Char
@@ -59,6 +58,15 @@
 -- Types and Monads
 ------------------------------------------------------------------------
 
+
+data LibrariesFile = LibrariesFile
+  { lfPath   :: FilePath
+      -- ^ E.g. @~/.agda/libraries@.
+  , lfExists :: Bool
+       -- ^ The libraries file might not exist,
+       --   but we may print its assumed location in error messages.
+  } deriving (Show)
+
 -- | Library names are structured into the base name and a suffix of version
 --   numbers, e.g. @mylib-1.2.3@.  The version suffix is optional.
 data VersionView = VersionView
@@ -72,9 +80,10 @@
 -- | Collected errors while processing library files.
 --
 data LibError
-  = LibNotFound FilePath LibName
+  = LibNotFound LibrariesFile LibName
       -- ^ Raised when a library name could no successfully be resolved
       --   to an @.agda-lib@ file.
+      --
   | AmbiguousLib LibName [AgdaLibFile]
       -- ^ Raised when a library name is defined in several @.agda-lib files@.
   | OtherError String
@@ -167,7 +176,7 @@
   libs <- lift $ findAgdaLibFiles root
   if null libs
     then (,[]) <$> if optDefaultLibs then (libNameForCurrentDir :) <$> readDefaultsFile else return []
-    else libsAndPaths <$> parseLibFiles Nothing (zip (repeat 0) libs)
+    else libsAndPaths <$> parseLibFiles Nothing (map (0,) libs)
   where
     libsAndPaths ls = (concatMap libDepends ls, concatMap libIncludes ls)
 
@@ -196,15 +205,16 @@
 --
 getLibrariesFile
   :: Maybe FilePath -- ^ Override the default @libraries@ file?
-  -> IO FilePath
-getLibrariesFile (Just overrideLibFile) = return overrideLibFile
+  -> IO LibrariesFile
+getLibrariesFile (Just overrideLibFile) =
+  return $ LibrariesFile overrideLibFile True  -- Existence checked in cmdline option parser.
 getLibrariesFile Nothing = do
   agdaDir <- getAgdaAppDir
   let defaults = map (agdaDir </>) defaultLibraryFiles  -- NB: non-empty list
   files <- filterM doesFileExist defaults
   case files of
-    file : _ -> return file
-    []       -> return (last defaults) -- doesn't exist, but that's ok
+    file : _ -> return $ LibrariesFile file True
+    []       -> return $ LibrariesFile (last defaults) False -- doesn't exist, but that's ok
 
 -- | Parse the descriptions of the libraries Agda knows about.
 --
@@ -215,8 +225,8 @@
   -> LibM [AgdaLibFile] -- ^ Content of library files.  (Might have empty @LibName@s.)
 getInstalledLibraries overrideLibFile = mkLibM [] $ do
     file <- lift $ getLibrariesFile overrideLibFile
-    ifNotM (lift $ doesFileExist file) (return []) $ {-else-} do
-      ls    <- lift $ stripCommentLines <$> readFile file
+    if not (lfExists file) then return [] else do
+      ls    <- lift $ stripCommentLines <$> readFile (lfPath file)
       files <- lift $ sequence [ (i, ) <$> expandEnvironmentVariables s | (i, s) <- ls ]
       parseLibFiles (Just file) files
   `catchIO` \ e -> do
@@ -226,13 +236,13 @@
 -- | Parse the given library files.
 --
 parseLibFiles
-  :: Maybe FilePath            -- ^ Name of @libraries@ file for error reporting.
+  :: Maybe LibrariesFile       -- ^ Name of @libraries@ file for error reporting.
   -> [(LineNumber, FilePath)]  -- ^ Library files paired with their line number in @libraries@.
   -> LibErrorIO [AgdaLibFile]  -- ^ Content of library files.  (Might have empty @LibName@s.)
 parseLibFiles libFile files = do
   rs <- lift $ mapM (parseLibFile . snd) files
   -- Format and raise the errors.
-  let loc line | Just f <- libFile = f ++ ":" ++ show line ++ ": "
+  let loc line | Just f <- libFile = lfPath f ++ ":" ++ show line ++ ": "
                | otherwise         = ""
   tell [ OtherError $ pos ++ err
        | ((line, path), Left err) <- zip files rs
@@ -257,7 +267,7 @@
   LibNotFound file lib -> return $ vcat $
     [ text $ "Library '" ++ lib ++ "' not found."
     , sep [ text "Add the path to its .agda-lib file to"
-          , nest 2 $ text $ "'" ++ file ++ "'"
+          , nest 2 $ text $ "'" ++ lfPath file ++ "'"
           , text "to install."
           ]
     , text "Installed libraries:"
@@ -292,7 +302,7 @@
 
     -- | Due to library dependencies, the work list may grow temporarily.
     find
-      :: FilePath   -- ^ Only for error reporting.
+      :: LibrariesFile  -- ^ Only for error reporting.
       -> [LibName]  -- ^ Already resolved libraries.
       -> [LibName]  -- ^ Work list: libraries left to be resolved.
       -> Writer [LibError] [AgdaLibFile]
diff --git a/src/full/Agda/Interaction/Library/Parse.hs b/src/full/Agda/Interaction/Library/Parse.hs
--- a/src/full/Agda/Interaction/Library/Parse.hs
+++ b/src/full/Agda/Interaction/Library/Parse.hs
@@ -23,7 +23,6 @@
 --
 module Agda.Interaction.Library.Parse ( parseLibFile, splitCommas, trimLineComment, LineNumber ) where
 
-import Control.Applicative
 import Control.Exception
 import Control.Monad
 import Data.Char
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
@@ -16,15 +16,18 @@
 import Agda.Syntax.Position
 import qualified Agda.Syntax.Concrete as C
 import qualified Agda.Syntax.Abstract as A
+import qualified Agda.Syntax.Abstract.Views as A
 import qualified Agda.Syntax.Info as A
 import Agda.Syntax.Internal
 import Agda.Syntax.Internal.Pattern
-import Agda.Syntax.Scope.Monad (resolveName, ResolvedName(..))
+import Agda.Syntax.Scope.Base  ( ResolvedName(..), Binder(..) )
+import Agda.Syntax.Scope.Monad ( resolveName )
 import Agda.Syntax.Translation.ConcreteToAbstract
 import Agda.Syntax.Translation.InternalToAbstract
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Coverage
+import Agda.TypeChecking.Coverage.Match ( SplitPatVar(..) , SplitPattern , applySplitPSubst , fromSplitPatterns )
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.RecordPatterns
 import Agda.TypeChecking.Reduce
@@ -92,26 +95,21 @@
        , text $ "number of locals= " ++ show nlocals
        ]
 
-    -- Compute which variables correspond to module parameters. These cannot be split on.
-    -- Note: these are not necessarily the outer-most bound variables, since
-    -- module parameter refinement may have instantiated them, or
-    -- with-abstraction might have reshuffled the variables (#2181).
-    pars <- freeVarsToApply f
-    let nonSplittableVars = [ i | Var i [] <- map unArg pars ]
-
     -- Resolve each string to a variable.
     forM ss $ \ s -> do
-      let failNotVar = typeError $ GenericError $ "Not a variable: " ++ s
-          done i
-            | i < 0                    = typeError $ GenericError $
-               "Cannot split on local variable " ++ s
-               -- See issue #2239
-
-            | elem i nonSplittableVars = typeError $ GenericError $
-               "Cannot split on variable " ++ s ++ ". It is either a module parameter " ++
-               "or already instantiated by a dot pattern"
-
-            | otherwise                = return i
+      let failNotVar      = typeError $ GenericError $ "Not a variable: " ++ s
+          failUnbound     = typeError $ GenericError $ "Unbound variable " ++ s
+          failAmbiguous   = typeError $ GenericError $ "Ambiguous variable " ++ s
+          failLocal       = typeError $ GenericError $
+            "Cannot split on local variable " ++ s
+          failModuleBound = typeError $ GenericError $
+            "Cannot split on module parameter " ++ s
+          failLetBound v  = typeError . GenericError $
+            "cannot split on let-bound variable " ++ s
+          failInstantiatedVar v = typeError . GenericDocError =<< sep
+              [ text $ "Cannot split on variable " ++ s ++ ", because it is bound to"
+              , prettyTCM v
+              ]
 
       -- Note: the range in the concrete name is only approximate.
       resName <- resolveName $ C.QName $ C.Name r $ C.stringNameParts s
@@ -125,23 +123,31 @@
 
         -- If s is a variable name in scope, get its de Bruijn index
         -- via the type checker.
-        VarName x _ -> do
+        VarName x b -> do
           (v, _) <- getVarInfo x
-          case ignoreSharing v of
-            Var i [] -> done $ i - nlocals
-            _        -> typeError . GenericDocError =<< sep
-              [ text $ "Cannot split on variable " ++ s ++ ", because it is bound to"
-              , prettyTCM v
-              ]
+          case (v , b) of
+            -- Slightly dangerous: the pattern variable `x` may be
+            -- refined to the module parameter `var i`. But in this
+            -- case the instantiation could as well be the other way
+            -- around, so the new clauses will still make sense.
+            (Var i [] , PatternBound) -> do
+              when (i < nlocals) __IMPOSSIBLE__
+              return $ i - nlocals
+            (Var i [] , LambdaBound)
+              | i < nlocals -> failLocal
+              | otherwise   -> failModuleBound
+            (Var i [] , LetBound) -> failLetBound v
+            (_        , _       ) -> failInstantiatedVar v
 
         -- If s is not a name, compare it to the printed variable representation.
         -- This fallback is to enable splitting on hidden variables.
         UnknownName -> do
           case filter ((s ==) . fst) xs of
-            []      -> typeError $ GenericError $ "Unbound variable " ++ s
-            [(_,i)] -> done $ i - nlocals
+            []                    -> failUnbound
+            [(_,i)] | i < nlocals -> failLocal
+                    | otherwise   -> return $ i - nlocals
             -- Issue 1325: Variable names in context can be ambiguous.
-            _       -> typeError $ GenericError $ "Ambiguous variable " ++ s
+            _                     -> failAmbiguous
 
 -- | Lookup the clause for an interaction point in the signature.
 --   Returns the CaseContext, the clause itself, and a list of previous clauses
@@ -226,8 +232,25 @@
     scs <- if newPats then return [sc] else postProjInExtLam $ do
       res <- splitResult f sc
       case res of
-        Nothing  -> typeError $ GenericError $ "Cannot split on result here"
-        Just cov -> ifNotM (optCopatterns <$> pragmaOptions) failNoCop $ {-else-} do
+
+        Left err  -> do
+          -- Andreas, 2017-12-16, issue #2871
+          -- If there is nothing to split, introduce trailing hidden arguments.
+
+          -- Get trailing hidden pattern variables
+          let trailingPatVars :: [NamedArg DBPatVar]
+              trailingPatVars = takeWhileJust isVarP $ reverse ps
+              isVarP (Arg ai (Named n (VarP _ x))) = Just $ Arg ai $ Named n x
+              isVarP _ = Nothing
+          -- If all are already coming from the user, there is really nothing todo!
+          when (all ((UserWritten ==) . getOrigin) trailingPatVars) $ do
+            typeError . GenericDocError =<< do
+              text "Cannot split on result here, because" <+> prettyTCM err
+          -- Otherwise, we make these user-written
+          let xs = map (dbPatVarIndex . namedArg) trailingPatVars
+          return [makePatternVarsVisible xs sc]
+
+        Right cov -> ifNotM (optCopatterns <$> pragmaOptions) failNoCop $ {-else-} do
           -- Andreas, 2016-05-03: do not introduce function arguments after projection.
           -- This is sometimes annoying and can anyway be done by another C-c C-c.
           -- mapM (snd <.> fixTarget) $ splitClauses cov
@@ -249,7 +272,7 @@
             if isAbsurd then makeAbsurdClause f sc else makeAbstractClause f rhs sc
     reportSDoc "interaction.case" 65 $ vcat
       [ text "split result:"
-      , nest 2 $ vcat $ map (text . show) cs
+      , nest 2 $ vcat $ map (text . show . A.deepUnscope) cs
       ]
     checkClauseIsClean ipCl
     return (f, casectxt, cs)
@@ -273,7 +296,7 @@
 
   -- Finds the new variable corresponding to an old one, if any.
   newVar :: SplitClause -> Nat -> Maybe Nat
-  newVar c x = case ignoreSharing $ applyPatSubst (scSubst c) (var x) of
+  newVar c x = case applySplitPSubst (scSubst c) (var x) of
     Var y [] -> Just y
     _        -> Nothing
 
@@ -285,26 +308,27 @@
     when (List.any ((== ipCl) . ipClause) sips) $
       typeError $ GenericError $ "Cannot split as clause rhs has been refined.  Please reload"
 
--- | Mark the variables given by the list of deBruijn indices as 'UserWritten'
---   in the 'SplitClause'.
+-- | Make the given pattern variables visible by marking their origin as
+--   'CaseSplit' and pattern origin as 'PatOSplit' in the 'SplitClause'.
 makePatternVarsVisible :: [Nat] -> SplitClause -> SplitClause
 makePatternVarsVisible [] sc = sc
 makePatternVarsVisible is sc@SClause{ scPats = ps } =
-  sc{ scPats = map (mapNamedArg mkVis) ps }
+  sc{ scPats = mapNamedArgPattern mkVis ps }
   where
-  mkVis :: NamedArg DBPatVar -> NamedArg DBPatVar
-  mkVis nx@(Arg ai (Named n (DBPatVar x i)))
+  mkVis :: NamedArg SplitPattern -> NamedArg SplitPattern
+  mkVis (Arg ai (Named n (VarP o (SplitPatVar x i ls))))
     | i `elem` is =
       -- We could introduce extra consistency checks, like
       -- if visible ai then __IMPOSSIBLE__ else
       -- or passing the parsed name along and comparing it with @x@
-      setOrigin CaseSplit nx
-    | otherwise = nx
+      Arg (setOrigin CaseSplit ai) $ Named n $ VarP PatOSplit $ SplitPatVar x i ls
+  mkVis np = np
 
 -- | Make clause with no rhs (because of absurd match).
 
 makeAbsurdClause :: QName -> SplitClause -> TCM A.Clause
-makeAbsurdClause f (SClause tel ps _ _ t) = do
+makeAbsurdClause f (SClause tel sps _ _ t) = do
+  let ps = fromSplitPatterns sps
   reportSDoc "interaction.case" 10 $ vcat
     [ text "Interaction.MakeCase.makeAbsurdClause: split clause:"
     , nest 2 $ vcat
@@ -332,7 +356,7 @@
 
   lhs <- A.clauseLHS <$> makeAbsurdClause f cl
   reportSDoc "interaction.case" 60 $ text "reified lhs: " <+> text (show lhs)
-  return $ A.Clause lhs [] [] rhs [] False
+  return $ A.Clause lhs [] rhs A.noWhereDecls False
   -- let ii = InteractionId (-1)  -- Dummy interaction point since we never type check this.
   --                              -- Can end up in verbose output though (#1842), hence not __IMPOSSIBLE__.
   -- let info = A.emptyMetaInfo   -- metaNumber = Nothing in order to print as ?, not ?n
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
@@ -1,9 +1,5 @@
 {-# LANGUAGE CPP #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE DeriveDataTypeable #-}
-#endif
-
 module Agda.Interaction.Options
     ( CommandLineOptions(..)
     , IgnoreFlags(..)
@@ -33,17 +29,15 @@
     , getOptSimple
     ) where
 
-import Control.Applicative
 import Control.Monad            ( (>=>), when )
 import Control.Monad.Trans
 
+import Data.IORef
 import Data.Either
 import Data.Maybe
 import Data.List                ( isSuffixOf , intercalate )
-
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Typeable            ( Typeable )
-#endif
+import Data.Set                 ( Set )
+import qualified Data.Set as Set
 
 import System.Console.GetOpt    ( getOpt', usageInfo, ArgOrder(ReturnInOrder)
                                 , OptDescr(..), ArgDescr(..)
@@ -55,6 +49,9 @@
 import Agda.Termination.CutOff  ( CutOff(..) )
 
 import Agda.Interaction.Library
+import Agda.Interaction.Options.Help
+import Agda.Interaction.Options.IORefs
+import Agda.Interaction.Options.Warnings
 
 import Agda.Utils.Except
   ( ExceptT
@@ -74,6 +71,8 @@
 -- Paths_Agda.hs is in $(BUILD_DIR)/build/autogen/.
 import Paths_Agda ( getDataFileName )
 
+import qualified System.IO.Unsafe as UNSAFE (unsafePerformIO)
+
 -- | This should probably go somewhere else.
 isLiterate :: FilePath -> Bool
 isLiterate file = any (`isSuffixOf` file) literateExts
@@ -87,22 +86,6 @@
 data IgnoreFlags = IgnoreFlags | RespectFlags
   deriving Eq
 
--- Potentially turn harmless warnings into nothing, or errors
--- (does not apply to non-fatal errors)
-data WarningMode = LeaveAlone | TurnIntoErrors | IgnoreAllWarnings
-  deriving (Show, Eq
-#if __GLASGOW_HASKELL__ <= 708
-           , Typeable
-#endif
-           )
-
-warningModes :: [ (String, WarningMode) ]
-warningModes =
-  [ (defaultWarningMode, LeaveAlone)
-  , ("ignore"          , IgnoreAllWarnings)
-  , ("error"           , TurnIntoErrors)
-  ]
-
 -- Don't forget to update
 --   doc/user-manual/tools/command-line-options.rst
 -- if you make changes to the command-line options!
@@ -120,7 +103,7 @@
   , optUseLibs          :: Bool
   -- ^ look for .agda-lib files
   , optShowVersion      :: Bool
-  , optShowHelp         :: Bool
+  , optShowHelp         :: Maybe Help
   , optInteractive      :: Bool
   , optGHCiInteraction  :: Bool
   , optOptimSmashing    :: Bool
@@ -131,16 +114,11 @@
   , optGenerateHTML     :: Bool
   , optDependencyGraph  :: Maybe FilePath
   , optLaTeXDir         :: FilePath
-  , optCountClusters    :: Bool
-    -- ^ Count extended grapheme clusters rather than code points when
-    -- generating LaTeX.
   , optHTMLDir          :: FilePath
   , optCSSFile          :: Maybe FilePath
   , optIgnoreInterfaces :: Bool
   , optForcing          :: Bool
   , optPragmaOptions    :: PragmaOptions
-  , optSharing          :: Bool
-  , optCaching          :: Bool
   , optOnlyScopeChecking :: Bool
     -- ^ Should the top-level module only be scope-checked, and not
     --   type-checked?
@@ -152,6 +130,7 @@
 data PragmaOptions = PragmaOptions
   { optShowImplicit              :: Bool
   , optShowIrrelevant            :: Bool
+  , optUseUnicode                :: Bool
   , optVerbose                   :: Verbosity
   , optProofIrrelevance          :: Bool
   , optAllowUnsolved             :: Bool
@@ -177,16 +156,20 @@
       -- ^ Should system generated projections 'ProjSystem' be printed
       --   postfix (True) or prefix (False).
   , optInstanceSearchDepth       :: Int
+  , optInversionMaxDepth         :: Int
   , optSafe                      :: Bool
   , optWarningMode               :: WarningMode
   , optCompileNoMain             :: Bool
+  , optCaching                   :: Bool
+  , optCountClusters             :: Bool
+    -- ^ Count extended grapheme clusters rather than code points when
+    -- generating LaTeX.
+  , optAutoInline                :: Bool
+    -- ^ Automatic compile-time inlining for simple definitions (unless marked
+    --   NOINLINE).
+  , optPrintPatternSynonyms      :: Bool
   }
-  deriving ( Show
-           , Eq
-#if __GLASGOW_HASKELL__ <= 708
-           , Typeable
-#endif
-           )
+  deriving (Show, Eq)
 
 -- | The options from an @OPTIONS@ pragma.
 --
@@ -217,7 +200,7 @@
   , optDefaultLibs      = True
   , optUseLibs          = True
   , optShowVersion      = False
-  , optShowHelp         = False
+  , optShowHelp         = Nothing
   , optInteractive      = False
   , optGHCiInteraction  = False
   , optOptimSmashing    = True
@@ -227,14 +210,11 @@
   , optGenerateHTML     = False
   , optDependencyGraph  = Nothing
   , optLaTeXDir         = defaultLaTeXDir
-  , optCountClusters    = False
   , optHTMLDir          = defaultHTMLDir
   , optCSSFile          = Nothing
   , optIgnoreInterfaces = False
   , optForcing          = True
   , optPragmaOptions    = defaultPragmaOptions
-  , optSharing          = False
-  , optCaching          = False
   , optOnlyScopeChecking = False
   }
 
@@ -242,6 +222,7 @@
 defaultPragmaOptions = PragmaOptions
   { optShowImplicit              = False
   , optShowIrrelevant            = False
+  , optUseUnicode                = True
   , optVerbose                   = defaultVerbosity
   , optProofIrrelevance          = False
   , optExperimentalIrrelevance   = False
@@ -264,9 +245,14 @@
   , optRewriting                 = False
   , optPostfixProjections        = False
   , optInstanceSearchDepth       = 500
+  , optInversionMaxDepth         = 50
   , optSafe                      = False
-  , optWarningMode               = fromJust $ lookup defaultWarningMode warningModes
+  , optWarningMode               = defaultWarningMode
   , optCompileNoMain             = False
+  , optCaching                   = True
+  , optCountClusters             = False
+  , optAutoInline                = True
+  , optPrintPatternSynonyms      = True
   }
 
 -- | The default termination depth.
@@ -284,12 +270,6 @@
 defaultHTMLDir :: String
 defaultHTMLDir = "html"
 
--- | The default warning mode.
-
-defaultWarningMode :: String
-defaultWarningMode = "warn"
-
-
 type OptM = ExceptT String IO
 
 runOptM :: OptM a -> IO (Either String a)
@@ -366,16 +346,20 @@
 versionFlag :: Flag CommandLineOptions
 versionFlag o = return $ o { optShowVersion = True }
 
-helpFlag :: Flag CommandLineOptions
-helpFlag o = return $ o { optShowHelp = True }
+helpFlag :: Maybe String -> Flag CommandLineOptions
+helpFlag Nothing    o = return $ o { optShowHelp = Just GeneralHelp }
+helpFlag (Just str) o = case string2HelpTopic str of
+  Just hpt -> return $ o { optShowHelp = Just (HelpFor hpt) }
+  Nothing -> throwError $ "unknown help topic " ++ str ++ " (available: " ++
+                           intercalate ", " (map fst allHelpTopics) ++ ")"
 
 safeFlag :: Flag PragmaOptions
 safeFlag o = return $ o { optSafe = True }
 
 sharingFlag :: Bool -> Flag CommandLineOptions
-sharingFlag b o = return $ o { optSharing = b }
+sharingFlag _ o = return o
 
-cachingFlag :: Bool -> Flag CommandLineOptions
+cachingFlag :: Bool -> Flag PragmaOptions
 cachingFlag b o = return $ o { optCaching = b }
 
 proofIrrelevanceFlag :: Flag PragmaOptions
@@ -399,6 +383,11 @@
 showIrrelevantFlag :: Flag PragmaOptions
 showIrrelevantFlag o = return $ o { optShowIrrelevant = True }
 
+asciiOnlyFlag :: Flag PragmaOptions
+asciiOnlyFlag o = do
+  lift $ writeIORef unicodeOrAscii AsciiOnly
+  return $ o { optUseUnicode = False }
+
 ghciInteractionFlag :: Flag CommandLineOptions
 ghciInteractionFlag o = return $ o { optGHCiInteraction = True }
 
@@ -411,7 +400,7 @@
 onlyScopeCheckingFlag :: Flag CommandLineOptions
 onlyScopeCheckingFlag o = return $ o { optOnlyScopeChecking = True }
 
-countClustersFlag :: Flag CommandLineOptions
+countClustersFlag :: Flag PragmaOptions
 countClustersFlag o =
 #ifdef COUNT_CLUSTERS
   return $ o { optCountClusters = True }
@@ -420,6 +409,12 @@
     "Cluster counting has not been enabled in this build of Agda."
 #endif
 
+noAutoInlineFlag :: Flag PragmaOptions
+noAutoInlineFlag o = return $ o { optAutoInline = False }
+
+noPrintPatSynFlag :: Flag PragmaOptions
+noPrintPatSynFlag o = return $ o { optPrintPatternSynonyms = False }
+
 latexDirFlag :: FilePath -> Flag CommandLineOptions
 latexDirFlag d o = return $ o { optLaTeXDir = d }
 
@@ -496,6 +491,11 @@
   d <- integerArgument "--instance-search-depth" s
   return $ o { optInstanceSearchDepth = d }
 
+inversionMaxDepthFlag :: String -> Flag PragmaOptions
+inversionMaxDepthFlag s o = do
+  d <- integerArgument "--inversion-max-depth" s
+  return $ o { optInversionMaxDepth = d }
+
 interactiveFlag :: Flag CommandLineOptions
 interactiveFlag  o = return $ o { optInteractive    = True
                                 , optPragmaOptions  = (optPragmaOptions o)
@@ -551,13 +551,9 @@
     usage = throwError "argument to verbose should be on the form x.y.z:N or N"
 
 warningModeFlag :: String -> Flag PragmaOptions
-warningModeFlag s o =
-    case lookup s warningModes of
-      Just m -> return $ o { optWarningMode = m }
-      Nothing -> usage
-  where
-    usage = throwError $ "unknown warning mode (available: " ++
-                           intercalate ", " (map fst warningModes) ++ ")"
+warningModeFlag s o = case warningModeUpdate s of
+  Just upd -> return $ o { optWarningMode = upd (optWarningMode o) }
+  Nothing  -> throwError $ "unknown warning flag " ++ s ++ ". See --help=warning."
 
 terminationDepthFlag :: String -> Flag PragmaOptions
 terminationDepthFlag s o =
@@ -573,8 +569,11 @@
 
 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"]    (OptArg helpFlag "TOPIC")
+                      ("show help for TOPIC (available: "
+                       ++ intercalate ", " (map fst allHelpTopics)
+                       ++ ")")
     , Option ['I']  ["interactive"] (NoArg interactiveFlag)
                     "start in interactive mode"
     , Option []     ["interaction"] (NoArg ghciInteractionFlag)
@@ -590,15 +589,6 @@
     , Option []     ["latex-dir"] (ReqArg latexDirFlag "DIR")
                     ("directory in which LaTeX files are placed (default: " ++
                      defaultLaTeXDir ++ ")")
-    , Option []     ["count-clusters"] (NoArg countClustersFlag)
-                    ("count extended grapheme clusters when " ++
-                     "generating LaTeX (note that this flag " ++
-#ifdef COUNT_CLUSTERS
-                     "is not enabled in all builds of Agda)"
-#else
-                     "has not been enabled in this build of Agda)"
-#endif
-                    )
     , Option []     ["html"] (NoArg htmlFlag)
                     "generate HTML files with highlighted source code"
     , Option []     ["html-dir"] (ReqArg htmlDirFlag "DIR")
@@ -623,13 +613,9 @@
     , Option []     ["no-forcing"] (NoArg noForcingFlag)
                     "disable the forcing optimisation"
     , Option []     ["sharing"] (NoArg $ sharingFlag True)
-                    "enable sharing and call-by-need evaluation (experimental) (default: OFF)"
+                    "DEPRECATED: does nothing"
     , Option []     ["no-sharing"] (NoArg $ sharingFlag False)
-                    "disable sharing and call-by-need evaluation"
-    , Option []     ["caching"] (NoArg $ cachingFlag True)
-                    "enable caching of typechecking (experimental) (default: OFF)"
-    , Option []     ["no-caching"] (NoArg $ cachingFlag False)
-                    "disable caching of typechecking"
+                    "DEPRECATED: does nothing"
     , Option []     ["only-scope-checking"] (NoArg onlyScopeCheckingFlag)
                     "only scope-check the top-level module, do not type-check it"
     ] ++ map (fmap lift) pragmaOptions
@@ -645,6 +631,8 @@
                     "show implicit arguments when printing"
     , Option []     ["show-irrelevant"] (NoArg showIrrelevantFlag)
                     "show irrelevant arguments when printing"
+    , Option []     ["no-unicode"] (NoArg asciiOnlyFlag)
+                    "don't use unicode characters when printing terms"
     , Option ['v']  ["verbose"] (ReqArg verboseFlag "N")
                     "set verbosity level to N"
     -- , Option []          ["proof-irrelevance"] (NoArg proofIrrelevanceFlag)
@@ -699,14 +687,32 @@
                     "make postfix projection notation the default"
     , Option []     ["instance-search-depth"] (ReqArg instanceDepthFlag "N")
                     "set instance search depth to N (default: 500)"
+    , Option []     ["inversion-max-depth"] (ReqArg inversionMaxDepthFlag "N")
+                    "set maximum depth for pattern match inversion to N (default: 50)"
     , Option []     ["safe"] (NoArg safeFlag)
                     "disable postulates, unsafe OPTION pragmas and primTrustMe"
-    , Option ['W']  ["warning"] (ReqArg warningModeFlag "MODE")
-                    ("set warning mode to MODE (available: "
-                       ++ intercalate ", " (map fst warningModes)
-                       ++ ". Default: " ++  defaultWarningMode ++ ")")
+    , Option ['W']  ["warning"] (ReqArg warningModeFlag "FLAG")
+                    ("set warning flags. See --help=warning.")
     , Option []     ["no-main"] (NoArg compileFlagNoMain)
                     "do not treat the requested module as the main module of a program when compiling"
+    , Option []     ["caching"] (NoArg $ cachingFlag True)
+                    "enable caching of typechecking (default)"
+    , Option []     ["no-caching"] (NoArg $ cachingFlag False)
+                    "disable caching of typechecking"
+    , Option []     ["count-clusters"] (NoArg countClustersFlag)
+                    ("count extended grapheme clusters when " ++
+                     "generating LaTeX (note that this flag " ++
+#ifdef COUNT_CLUSTERS
+                     "is not enabled in all builds of Agda)"
+#else
+                     "has not been enabled in this build of Agda)"
+#endif
+                    )
+    , Option []     ["no-auto-inline"] (NoArg noAutoInlineFlag)
+                    ("disable automatic compile-time inlining " ++
+                     "(only definitions marked INLINE will be inlined)")
+    , Option []     ["no-print-pattern-synonyms"] (NoArg noPrintPatSynFlag)
+                    "expand pattern synonyms when printing terms"
     ]
 
 -- | Used for printing usage info.
@@ -793,11 +799,13 @@
 
 -- | The usage info message. The argument is the program name (probably
 --   agda).
-usage :: [OptDescr ()] -> String -> String
-usage options progName = usageInfo (header progName) options
+usage :: [OptDescr ()] -> String -> Help -> String
+usage options progName GeneralHelp = usageInfo (header progName) options
     where
         header progName = unlines [ "Agda version " ++ version, ""
                                   , "Usage: " ++ progName ++ " [OPTIONS...] [FILE]" ]
+
+usage options progName (HelpFor topic) = helpTopicUsage topic
 
 -- Remove +RTS .. -RTS from arguments
 stripRTS :: [String] -> [String]
diff --git a/src/full/Agda/Interaction/Options/Help.hs b/src/full/Agda/Interaction/Options/Help.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/Options/Help.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE CPP #-}
+
+module Agda.Interaction.Options.Help
+       (
+         Help (..)
+       , helpTopicUsage
+       , string2HelpTopic
+       , allHelpTopics
+       ) where
+
+import Data.Tuple ( swap )
+import Data.Maybe ( fromMaybe )
+
+import Agda.Interaction.Options.Warnings
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
+-- | Interface to the @help@ function
+data Help
+  = GeneralHelp
+  -- ^ General usage information
+  | HelpFor HelpTopic
+  -- ^ Specialised usage information about TOPIC
+  deriving (Eq, Show)
+
+-- | List of Help Topics
+-- NOTA BENE:
+-- You need to add each new topic together with its name to @allHelpTopics@
+
+data HelpTopic
+  = Warning
+  deriving (Eq, Show)
+
+allHelpTopics :: [(String, HelpTopic)]
+allHelpTopics = [("warning", Warning)]
+
+-- | Usage information generation
+
+helpTopicUsage :: HelpTopic -> String
+helpTopicUsage tp = case tp of
+  Warning -> usageWarning
+
+-- | Conversion functions to strings
+
+string2HelpTopic :: String -> Maybe HelpTopic
+string2HelpTopic str = lookup str allHelpTopics
+
+helpTopic2String :: HelpTopic -> String
+helpTopic2String w = fromMaybe __IMPOSSIBLE__ $ lookup w (map swap allHelpTopics)
diff --git a/src/full/Agda/Interaction/Options/IORefs.hs b/src/full/Agda/Interaction/Options/IORefs.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/Options/IORefs.hs
@@ -0,0 +1,18 @@
+-- | Some IORefs to access option values in pure code
+
+module Agda.Interaction.Options.IORefs
+    ( UnicodeOrAscii(..)
+    , unicodeOrAscii
+    ) where
+
+import Data.IORef
+import qualified System.IO.Unsafe as UNSAFE
+
+-- | In `Agda.Syntax.Concrete.Pretty` and `Agda.Utils.String` we want to know
+-- whether we are allowed to insert unicode characters or not.
+
+data UnicodeOrAscii = UnicodeOk | AsciiOnly
+
+{-# NOINLINE unicodeOrAscii #-}
+unicodeOrAscii :: IORef UnicodeOrAscii
+unicodeOrAscii = UNSAFE.unsafePerformIO $ newIORef UnicodeOk
diff --git a/src/full/Agda/Interaction/Options/Warnings.hs b/src/full/Agda/Interaction/Options/Warnings.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Interaction/Options/Warnings.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE CPP #-}
+
+module Agda.Interaction.Options.Warnings
+       (
+         WarningMode (..)
+       , warningSet
+       , warn2Error
+       , defaultWarningSet
+       , defaultWarningMode
+       , warningModeUpdate
+       , warningSets
+       , WarningName (..)
+       , warningName2String
+       , string2WarningName
+       , usageWarning
+       )
+where
+
+import Control.Arrow ( (&&&) )
+import Control.Monad ( guard )
+
+import Data.Traversable ( for )
+
+import Text.Read ( readMaybe )
+import Data.Set (Set)
+import qualified Data.Set as Set
+import Data.Maybe ( fromMaybe, catMaybes )
+import Data.List ( stripPrefix, intercalate )
+
+import Agda.Utils.Lens
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
+
+-- | A @WarningMode@ has two components: a set of warnings to be displayed
+-- and a flag stating whether warnings should be turned into fatal errors.
+data WarningMode = WarningMode
+  { _warningSet :: Set WarningName
+  , _warn2Error :: Bool
+  } deriving (Eq, Show)
+
+warningSet :: Lens' (Set WarningName) WarningMode
+warningSet f o = (\ ws -> o { _warningSet = ws }) <$> f (_warningSet o)
+
+warn2Error :: Lens' Bool WarningMode
+warn2Error f o = (\ ws -> o { _warn2Error = ws }) <$> f (_warn2Error o)
+
+-- | The @defaultWarningMode@ is a curated set of warnings covering non-fatal
+-- errors and disabling style-related ones
+
+defaultWarningSet :: String
+defaultWarningSet = "warn"
+
+defaultWarningMode :: WarningMode
+defaultWarningMode = WarningMode ws False where
+  ws = fst $ fromMaybe __IMPOSSIBLE__ $ lookup defaultWarningSet warningSets
+
+-- | @warningModeUpdate str@ computes the action of @str@ over the current
+-- @WarningMode@: it may reset the set of warnings, add or remove a specific
+-- flag or demand that any warning be turned into an error
+
+warningModeUpdate :: String -> Maybe (WarningMode -> WarningMode)
+warningModeUpdate str = case str of
+  "error"   -> Just $ set warn2Error True
+  "noerror" -> Just $ set warn2Error False
+  _ | Just ws <- fst <$> lookup str warningSets
+            -> Just $ set warningSet ws
+  _ -> case stripPrefix "no" str of
+    Just str' -> (over warningSet . Set.delete) <$> string2WarningName str'
+    Nothing   -> (over warningSet . Set.insert) <$> string2WarningName str
+
+-- | Common sets of warnings
+
+warningSets :: [(String, (Set WarningName, String))]
+warningSets = [ ("all"   , (allWarnings, "All of the existing warnings"))
+              , ("warn"  , (usualWarnings, "Default warning level"))
+              , ("ignore", (noWarnings, "Ignore all warnings"))
+              ]
+
+noWarnings :: Set WarningName
+noWarnings = Set.empty
+
+allWarnings :: Set WarningName
+allWarnings = Set.fromList [minBound..maxBound]
+
+usualWarnings :: Set WarningName
+usualWarnings = allWarnings Set.\\ Set.fromList
+              [ UnknownFixityInMixfixDecl_ ]
+
+-- | The @WarningName@ data enumeration is meant to have a one-to-one correspondance
+-- to existing warnings in the codebase.
+
+data WarningName
+  =
+  -- Parser Warning
+    OverlappingTokensWarning_
+  -- Nicifer Warning
+  | UnknownNamesInFixityDecl_
+  | UnknownFixityInMixfixDecl_
+  | UnknownNamesInPolarityPragmas_
+  | PolarityPragmasButNotPostulates_
+  | UselessPrivate_
+  | UselessAbstract_
+  | UselessInstance_
+  | EmptyMutual_
+  | EmptyAbstract_
+  | EmptyPrivate_
+  | EmptyInstance_
+  | EmptyMacro_
+  | EmptyPostulate_
+  | InvalidTerminationCheckPragma_
+  | InvalidNoPositivityCheckPragma_
+  | InvalidCatchallPragma_
+  -- Scope and Type Checking Warning
+  | OldBuiltin_
+  | EmptyRewritePragma_
+  | UselessPublic_
+  | UnreachableClauses_
+  | UselessInline_
+  | GenericWarning_
+  | DeprecationWarning_
+  | InversionDepthReached_
+  | TerminationIssue_
+  | CoverageIssue_
+  | CoverageNoExactSplit_
+  | NotStrictlyPositive_
+  | UnsolvedMetaVariables_
+  | UnsolvedInteractionMetas_
+  | UnsolvedConstraints_
+  | GenericNonFatalError_
+  | SafeFlagPostulate_
+  | SafeFlagPragma_
+  | SafeFlagNonTerminating_
+  | SafeFlagTerminating_
+  | SafeFlagPrimTrustMe_
+  | SafeFlagNoPositivityCheck_
+  | SafeFlagPolarity_
+  | UserWarning_
+  deriving (Eq, Ord, Show, Read, Enum, Bounded)
+
+-- | The flag corresponding to a warning is precisely the name of the constructor
+-- minus the trailing underscore.
+
+-- sorry
+string2WarningName :: String -> Maybe WarningName
+string2WarningName = readMaybe . (++ "_")
+
+warningName2String :: WarningName -> String
+warningName2String = init . show
+
+-- | @warningUsage@ generated using @warningNameDescription@
+
+usageWarning :: String
+usageWarning = intercalate "\n"
+  -- Looks like CPP doesn't like multiline string literals
+  [ concat [ "The -W or --warning option can be used to disable or enable "
+           , "different warnings. The flag -W error (or --warning=error) "
+           , "can be used to turn all warnings into errors, while -W noerror "
+           , "turns this off again."
+           ]
+  , ""
+  , concat [ "A group of warnings can be enabled by -W group, where group is "
+           , "one of the following:"
+           ]
+  , ""
+  , untable (fmap (fst &&& snd . snd) warningSets)
+  , concat [ "Individual warnings can be turned on and off by -W Name and "
+           , "-W noName respectively. The flags available are:"
+           ]
+  , ""
+  , untable $ catMaybes $ flip map [minBound..maxBound] $ \ w ->
+    let wnd = warningNameDescription w in
+    (warningName2String w, wnd) <$ guard (not $ null wnd)
+  ]
+
+  where
+
+    untable :: [(String, String)] -> String
+    untable rows =
+      let len = maximum (map (length . fst) rows) in
+      unlines $ flip map rows $ \ (hdr, cnt) ->
+        concat [ hdr, replicate (1 + len - length hdr) ' ', cnt ]
+
+-- | @WarningName@ descriptions used for generating usage information
+-- Leave String empty to skip that name.
+
+warningNameDescription :: WarningName -> String
+warningNameDescription w = case w of
+  OverlappingTokensWarning_        -> "Multi-line comments spanning one or more literate text blocks."
+  -- Nicifer Warning
+  UnknownNamesInFixityDecl_        -> "Names not declared in the same scope as their syntax or fixity declaration."
+  UnknownFixityInMixfixDecl_       -> "Mixfix names without an associated fixity declaration."
+  UnknownNamesInPolarityPragmas_   -> "Names not declared in the same scope as their polarity pragmas."
+  PolarityPragmasButNotPostulates_ -> "Polarity pragmas for non-postulates."
+  UselessPrivate_                  -> "`private' blocks where they have no effect."
+  UselessAbstract_                 -> "`abstract' blocks where they have no effect."
+  UselessInstance_                 -> "`instance' blocks where they have no effect."
+  EmptyMutual_                     -> "Empty `mutual' blocks."
+  EmptyAbstract_                   -> "Empty `abstract' blocks."
+  EmptyPrivate_                    -> "Empty `private' blocks."
+  EmptyInstance_                   -> "Empty `instance' blocks."
+  EmptyMacro_                      -> "Empty `macro' blocks."
+  EmptyPostulate_                  -> "Empty `postulate' blocks."
+  InvalidTerminationCheckPragma_   -> "Termination checking pragmas before non-function or `mutual' blocks."
+  InvalidNoPositivityCheckPragma_  -> "No positivity checking pragmas before non-`data', `record' or `mutual' blocks."
+  InvalidCatchallPragma_           -> "`CATCHALL' pragmas before a non-function clause."
+  -- Scope and Type Checking Warning
+  OldBuiltin_                      -> "Deprecated `BUILTIN' pragmas."
+  EmptyRewritePragma_              -> "Empty `REWRITE' pragmas."
+  UselessPublic_                   -> "`public' blocks where they have no effect."
+  UselessInline_                   -> "`INLINE' pragmas where they have no effect."
+  UnreachableClauses_              -> "Unreachable function clauses."
+  GenericWarning_                  -> ""
+  DeprecationWarning_              -> "Feature deprecation."
+  InversionDepthReached_           -> "Inversions of pattern-matching failed due to exhausted inversion depth."
+  TerminationIssue_                -> "Failed termination checks."
+  CoverageIssue_                   -> "Failed coverage checks."
+  CoverageNoExactSplit_            -> "Failed exact split checks."
+  NotStrictlyPositive_             -> "Failed strict positivity checks."
+  UnsolvedMetaVariables_           -> "Unsolved meta variables."
+  UnsolvedInteractionMetas_        -> "Unsolved interaction meta variables."
+  UnsolvedConstraints_             -> "Unsolved constraints."
+  GenericNonFatalError_            -> ""
+  SafeFlagPostulate_               -> "`postulate' blocks with the safe flag"
+  SafeFlagPragma_                  -> "Unsafe `OPTIONS' pragmas with the safe flag."
+  SafeFlagNonTerminating_          -> "`NON_TERMINATING' pragmas with the safe flag."
+  SafeFlagTerminating_             -> "`TERMINATING' pragmas with the safe flag."
+  SafeFlagPrimTrustMe_             -> "`primTrustMe' usages with the safe flag."
+  SafeFlagNoPositivityCheck_       -> "`NO_POSITIVITY_CHECK' pragmas with the safe flag."
+  SafeFlagPolarity_                -> "`POLARITY' pragmas with the safe flag."
+  UserWarning_                     -> "User-defined warning added using the 'WARNING_ON_USAGE' pragma."
diff --git a/src/full/Agda/Interaction/Response.hs b/src/full/Agda/Interaction/Response.hs
--- a/src/full/Agda/Interaction/Response.hs
+++ b/src/full/Agda/Interaction/Response.hs
@@ -6,6 +6,7 @@
 
 module Agda.Interaction.Response
   ( Response (..)
+  , RemoveTokenBasedHighlighting (..)
   , MakeCaseVariant (..)
   , DisplayInfo (..)
   , Status (..)
@@ -33,7 +34,11 @@
 --   so the user can have timely response even during long computations.
 
 data Response
-    = Resp_HighlightingInfo HighlightingInfo HighlightingMethod ModuleToSource
+    = Resp_HighlightingInfo
+        HighlightingInfo
+        RemoveTokenBasedHighlighting
+        HighlightingMethod
+        ModuleToSource
     | Resp_Status Status
     | Resp_JumpToError FilePath Int32
     | Resp_InteractionPoints [InteractionId]
@@ -45,10 +50,21 @@
     | Resp_RunningInfo Int String
       -- ^ The integer is the message's debug level.
     | Resp_ClearRunningInfo
-    | Resp_ClearHighlighting
+    | Resp_ClearHighlighting TokenBased
+      -- ^ Clear highlighting of the given kind.
     | Resp_DoneAborting
       -- ^ A command sent when an abort command has completed
       -- successfully.
+
+-- | Should token-based highlighting be removed in conjunction with
+-- the application of new highlighting (in order to reduce the risk of
+-- flicker)?
+
+data RemoveTokenBasedHighlighting
+  = RemoveHighlighting
+    -- ^ Yes, remove all token-based highlighting from the file.
+  | KeepHighlighting
+    -- ^ No.
 
 -- | There are two kinds of \"make case\" commands.
 
diff --git a/src/full/Agda/Interaction/SearchAbout.hs b/src/full/Agda/Interaction/SearchAbout.hs
--- a/src/full/Agda/Interaction/SearchAbout.hs
+++ b/src/full/Agda/Interaction/SearchAbout.hs
@@ -1,12 +1,12 @@
 module Agda.Interaction.SearchAbout (findMentions) where
 
-import Control.Applicative
 import Control.Monad
 
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 import Data.List (isInfixOf)
 import Data.Either (partitionEithers)
+import Data.Foldable (toList)
 
 import Agda.Syntax.Position (Range)
 import Agda.Syntax.Scope.Base
@@ -69,6 +69,6 @@
       | otherwise        = Right str
 
     anames (DefinedName _ an)     = [an]
-    anames (FieldName     ans)    = ans
-    anames (ConstructorName ans)  = ans
+    anames (FieldName     ans)    = toList ans
+    anames (ConstructorName ans)  = toList ans
     anames _                      = []
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
@@ -5,7 +5,6 @@
 module Agda.Main where
 
 import Control.Monad.State
-import Control.Applicative
 
 import Data.Maybe
 
@@ -19,6 +18,7 @@
 
 import Agda.Interaction.CommandLine
 import Agda.Interaction.Options
+import Agda.Interaction.Options.Help (Help (..))
 import Agda.Interaction.Monad
 import Agda.Interaction.EmacsTop (mimicGHCi)
 import Agda.Interaction.Imports (MaybeWarnings'(..))
@@ -96,12 +96,12 @@
   -> CommandLineOptions -- ^ parsed command line options
   -> TCM (Maybe a)
 runAgdaWithOptions backends generateHTML interaction progName opts
-      | optShowHelp opts    = Nothing <$ liftIO (printUsage backends)
-      | optShowVersion opts = Nothing <$ liftIO (printVersion backends)
+      | Just hp <- optShowHelp opts = Nothing <$ liftIO (printUsage backends hp)
+      | optShowVersion opts         = Nothing <$ liftIO (printVersion backends)
       | isNothing (optInputFile opts)
           && not (optInteractive opts)
           && not (optGHCiInteraction opts)
-                            = Nothing <$ liftIO (printUsage backends)
+                            = Nothing <$ liftIO (printUsage backends GeneralHelp)
       | otherwise           = do
           -- Main function.
           -- Bill everything to root of Benchmark trie.
@@ -117,7 +117,7 @@
             Bench.print
 
             -- Print accumulated statistics.
-            printStatistics 20 Nothing =<< use lensAccumStatistics
+            printStatistics 1 Nothing =<< use lensAccumStatistics
   where
     checkFile = Just <$> do
       when (optInteractive opts) $ liftIO $ putStr splashScreen
@@ -171,11 +171,11 @@
 
 
 -- | Print usage information.
-printUsage :: [Backend] -> IO ()
-printUsage backends = do
+printUsage :: [Backend] -> Help -> IO ()
+printUsage backends hp = do
   progName <- getProgName
-  putStr $ usage standardOptions_ progName
-  mapM_ (putStr . backendUsage) backends
+  putStr $ usage standardOptions_ progName hp
+  when (hp == GeneralHelp) $ mapM_ (putStr . backendUsage) backends
 
 backendUsage :: Backend -> String
 backendUsage (Backend b) =
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,6 +1,7 @@
 {-# LANGUAGE CPP                   #-}
 {-# LANGUAGE DeriveDataTypeable    #-}
 {-# LANGUAGE TemplateHaskell       #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 
 {-| The abstract syntax. This is what you get after desugaring and scope
     analysis of the concrete syntax. The type checker works on abstract syntax,
@@ -12,11 +13,11 @@
     ) where
 
 import Prelude
-import Control.Arrow (first)
-import Control.Applicative
+import Control.Arrow (first, second)
 
 import Data.Foldable (Foldable)
 import qualified Data.Foldable as Fold
+import Data.Function (on)
 import Data.Map (Map)
 import Data.Maybe
 import Data.Sequence (Seq, (<|), (><))
@@ -25,10 +26,9 @@
 import Data.Void
 
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import Agda.Syntax.Concrete.Name (NumHoles(..))
-import Agda.Syntax.Concrete (FieldAssignment'(..), exprFieldA)
+import Agda.Syntax.Concrete (FieldAssignment'(..), exprFieldA, HoleContent'(..))
 import qualified Agda.Syntax.Concrete as C
 import Agda.Syntax.Concrete.Pretty ()
 import Agda.Syntax.Info
@@ -45,11 +45,32 @@
 import Agda.Utils.Functor
 import Agda.Utils.Geniplate
 import Agda.Utils.Lens
+import Agda.Utils.NonemptyList
 import Agda.Utils.Pretty
 
 #include "undefined.h"
 import Agda.Utils.Impossible
 
+-- A name in a binding position: we also compare the nameConcrete
+-- when comparing the binders for equality.
+
+-- With --caching on we compare abstract syntax to determine if we can
+-- reuse previous typechecking results: during that comparison two
+-- names can have the same nameId but be semantically different,
+-- e.g. in "{_ : A} -> .." vs "{r : A} -> ..".
+newtype BindName = BindName { unBind :: Name }
+  deriving (Show,Data,HasRange,SetRange,KillRange)
+
+instance Eq BindName where
+  (BindName n) == (BindName m)
+    = ((==) `on` nameId) n m
+      && ((==) `on` nameConcrete) n m
+
+instance Ord BindName where
+  (BindName n) `compare` (BindName m)
+    = (compare `on` nameId) n m
+      `mappend` (compare `on` nameConcrete) n m
+
 type Args = [NamedArg Expr]
 
 -- | Expressions after scope checking (operators parsed, names resolved).
@@ -58,7 +79,7 @@
   | Def  QName                         -- ^ Constant: axiom, function, data or record type.
   | Proj ProjOrigin AmbiguousQName     -- ^ Projection (overloaded).
   | Con  AmbiguousQName                -- ^ Constructor (overloaded).
-  | PatternSyn QName                   -- ^ Pattern synonym.
+  | PatternSyn AmbiguousQName          -- ^ Pattern synonym.
   | Macro QName                        -- ^ Macro.
   | Lit Literal                        -- ^ Literal.
   | QuestionMark MetaInfo InteractionId
@@ -71,11 +92,11 @@
   | Underscore   MetaInfo
     -- ^ Meta variable for hidden argument (must be inferred locally).
   | Dot ExprInfo Expr                  -- ^ @.e@, for postfix projection.
-  | App  ExprInfo Expr (NamedArg Expr) -- ^ Ordinary (binary) application.
+  | App  AppInfo Expr (NamedArg Expr)  -- ^ Ordinary (binary) application.
   | WithApp ExprInfo Expr [Expr]       -- ^ With application.
-  | Lam  LamInfo LamBinding Expr      -- ^ @λ bs → e@.
-  | AbsurdLam LamInfo Hiding          -- ^ @λ()@ or @λ{}@.
-  | ExtendedLam LamInfo DefInfo QName [Clause]
+  | Lam  ExprInfo LamBinding Expr      -- ^ @λ bs → e@.
+  | AbsurdLam ExprInfo Hiding          -- ^ @λ()@ or @λ{}@.
+  | ExtendedLam ExprInfo DefInfo QName [Clause]
   | Pi   ExprInfo Telescope Expr       -- ^ Dependent function space @Γ → A@.
   | Fun  ExprInfo (Arg Expr) Expr      -- ^ Non-dependent function space.
   | Set  ExprInfo Integer              -- ^ @Set@, @Set1@, @Set2@, ...
@@ -93,7 +114,7 @@
   | Tactic ExprInfo Expr [NamedArg Expr] [NamedArg Expr]
                                        -- ^ @tactic e x1 .. xn | y1 | .. | yn@
   | DontCare Expr                      -- ^ For printing @DontCare@ from @Syntax.Internal@.
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 -- | Record field assignment @f = e@.
 type Assign  = FieldAssignment' Expr
@@ -106,7 +127,7 @@
   = FunSig    -- ^ A function signature.
   | NoFunSig  -- ^ Not a function signature, i.e., a postulate (in user input)
               --   or another (e.g. data/record) type signature (internally).
-  deriving (Typeable, Data, Eq, Ord, Show)
+  deriving (Data, Eq, Ord, Show)
 
 -- | Renaming (generic).
 type Ren a = [(a, a)]
@@ -114,7 +135,7 @@
 data ScopeCopyInfo = ScopeCopyInfo
   { renModules :: Ren ModuleName
   , renNames   :: Ren QName }
-  deriving (Eq, Show, Typeable, Data)
+  deriving (Eq, Show, Data)
 
 initCopyInfo :: ScopeCopyInfo
 initCopyInfo = ScopeCopyInfo
@@ -151,7 +172,7 @@
   | DataDef    DefInfo QName [LamBinding] [Constructor]
       -- ^ the 'LamBinding's are 'DomainFree' and bind the parameters of the datatype.
   | RecSig     DefInfo QName Telescope Expr -- ^ lone record signature
-  | RecDef     DefInfo QName (Maybe (Ranged Induction)) (Maybe Bool) (Maybe QName) [LamBinding] Expr [Declaration]
+  | RecDef     DefInfo QName (Maybe (Ranged Induction)) (Maybe HasEta) (Maybe QName) [LamBinding] Expr [Declaration]
       -- ^ The 'LamBinding's are 'DomainFree' and bind the parameters of the datatype.
       --   The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,
       --   and the optional name is the constructor's name.
@@ -160,7 +181,7 @@
   | UnquoteDecl MutualInfo [DefInfo] [QName] Expr
   | UnquoteDef  [DefInfo] [QName] Expr
   | ScopedDecl ScopeInfo [Declaration]  -- ^ scope annotation
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 class GetDefInfo a where
   getDefInfo :: a -> Maybe DefInfo
@@ -186,11 +207,13 @@
       -- ^ @tel. M args@:  applies @M@ to @args@ and abstracts @tel@.
     | RecordModuleIFS ModuleName
       -- ^ @M {{...}}@
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 data Pragma
   = OptionsPragma [String]
-  | BuiltinPragma String Expr
+  | BuiltinPragma String ResolvedName
+    -- ^ 'ResolvedName' is not 'UnknownName'.
+    --   Name can be ambiguous e.g. for built-in constructors.
   | BuiltinNoDefPragma String QName
     -- ^ Builtins that do not come with a definition,
     --   but declare a name for an Agda concept.
@@ -208,13 +231,13 @@
     -- ^ For coinductive records, use pragma instead of regular
     --   @eta-equality@ definition (as it is might make Agda loop).
   | InjectivePragma QName
-  | InlinePragma QName
+  | InlinePragma Bool QName -- INLINE or NOINLINE
   | DisplayPragma QName [NamedArg Pattern] Expr
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 -- | Bindings that are valid in a @let@.
 data LetBinding
-  = LetBind LetInfo ArgInfo Name Expr Expr
+  = LetBind LetInfo ArgInfo BindName Expr Expr
     -- ^ @LetBind info rel name type defn@
   | LetPatBind LetInfo Pattern Expr
     -- ^ Irrefutable pattern binding.
@@ -223,11 +246,12 @@
     -- The @ImportDirective@ is for highlighting purposes.
   | LetOpen ModuleInfo ModuleName ImportDirective
     -- ^ only for highlighting and abstractToConcrete
-  | LetDeclaredVariable Name
+  | LetDeclaredVariable BindName
     -- ^ Only used for highlighting. Refers to the first occurrence of
     -- @x@ in @let x : A; x = e@.
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
+
 -- | Only 'Axiom's.
 type TypeSignature  = Declaration
 type Constructor    = TypeSignature
@@ -235,14 +259,15 @@
 
 -- | A lambda binding is either domain free or typed.
 data LamBinding
-  = DomainFree ArgInfo Name   -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@
+  = DomainFree ArgInfo BindName   -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@
   | DomainFull TypedBindings  -- ^ . @(xs:e)@ or @{xs:e}@ or @(let Ds)@
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
+
 -- | Typed bindings with hiding information.
 data TypedBindings = TypedBindings Range (Arg TypedBinding)
             -- ^ . @(xs : e)@ or @{xs : e}@
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 -- | A typed binding.  Appears in dependent function spaces, typed lambdas, and
 --   telescopes.  It might be tempting to simplify this to only bind a single
@@ -259,41 +284,56 @@
 --   that the metas of the copy are aliases of the metas of the original.
 
 data TypedBinding
-  = TBind Range [WithHiding Name] Expr
+  = TBind Range [WithHiding BindName] Expr
     -- ^ As in telescope @(x y z : A)@ or type @(x y z : A) -> B@.
   | TLet Range [LetBinding]
     -- ^ E.g. @(let x = e)@ or @(let open M)@.
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
-type Telescope  = [TypedBindings]
 
-data NamedDotPattern = NamedDot Name I.Term I.Type
-  deriving (Typeable, Data, Show)
+type Telescope  = [TypedBindings]
 
-data StrippedDotPattern = StrippedDot Expr I.Term I.Type
-  deriving (Typeable, Data, Show)
+-- | A user pattern together with an internal term that it should be equal to
+--   after splitting is complete.
+--   Special cases:
+--    * User pattern is a variable but internal term isn't:
+--      this will be turned into an as pattern.
+--    * User pattern is a dot pattern:
+--      this pattern won't trigger any splitting but will be checked
+--      for equality after all splitting is complete and as patterns have
+--      been bound.
+--    * User pattern is an absurd pattern:
+--      emptiness of the type will be checked after splitting is complete.
+data ProblemEq = ProblemEq
+  { problemInPat :: Pattern
+  , problemInst  :: I.Term
+  , problemType  :: Dom I.Type
+  } deriving (Data, Show)
 
 -- These are not relevant for caching purposes
-instance Eq NamedDotPattern    where _ == _ = True
-instance Eq StrippedDotPattern where _ == _ = True
+instance Eq ProblemEq where _ == _ = True
 
 -- | 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' lhs = Clause
   { clauseLHS        :: lhs
-  , clauseNamedDots  :: [NamedDotPattern]
-      -- ^ Only in with-clauses where we inherit some already checked dot patterns from the parent.
+  , clauseStrippedPats :: [ProblemEq]
+      -- ^ Only in with-clauses where we inherit some already checked patterns from the parent.
       --   These live in the context of the parent clause left-hand side.
-  , clauseStrippedDots :: [StrippedDotPattern]
-      -- ^ In with-clauses where a dot pattern from the parent clause is
-      --   repeated in the with-clause. In this case it's not actually part of
-      --   the clause, but it still needs to be checked (Issue 142).
   , clauseRHS        :: RHS
-  , clauseWhereDecls :: [Declaration]
+  , clauseWhereDecls :: WhereDeclarations
   , clauseCatchall   :: Bool
-  } deriving (Typeable, Data, Show, Functor, Foldable, Traversable, Eq)
+  } deriving (Data, Show, Functor, Foldable, Traversable, Eq)
 
+data WhereDeclarations = WhereDecls
+  { whereModule :: Maybe ModuleName
+  , whereDecls  :: [Declaration]
+  } deriving (Data, Show, Eq)
+
+noWhereDecls :: WhereDeclarations
+noWhereDecls = WhereDecls Nothing []
+
 type Clause = Clause' LHS
 type SpineClause = Clause' SpineLHS
 
@@ -312,19 +352,23 @@
     { rewriteExprs      :: [(QName, Expr)]
       -- ^ The 'QName's are the names of the generated with functions,
       --   one for each 'Expr'.
+    , rewriteStrippedPats :: [ProblemEq]
+      -- ^ The patterns stripped by with-desugaring. These are only present
+      --   if this rewrite follows a with.
     , rewriteRHS        :: RHS
       -- ^ The RHS should not be another @RewriteRHS@.
-    , rewriteWhereDecls :: [Declaration]
+    , rewriteWhereDecls :: WhereDeclarations
       -- ^ The where clauses are attached to the @RewriteRHS@ by
       ---  the scope checker (instead of to the clause).
     }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
+-- | Ignore 'rhsConcrete' when comparing 'RHS's.
 instance Eq RHS where
   RHS e _          == RHS e' _            = e == e'
   AbsurdRHS        == AbsurdRHS           = True
   WithRHS a b c    == WithRHS a' b' c'    = and [ a == a', b == b', c == c' ]
-  RewriteRHS a b c == RewriteRHS a' b' c' = and [ a == a', b == b', c == c' ]
+  RewriteRHS a b c d == RewriteRHS a' b' c' d' = and [ a == a', b == b', c == c' , d == d' ]
   _                == _                   = False
 
 -- | The lhs of a clause in spine view (inside-out).
@@ -333,139 +377,80 @@
 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 @|@).
+  , spLhsPats     :: [NamedArg Pattern]  -- ^ Elimination by pattern, projections, with-patterns.
   }
-  deriving (Typeable, Data, Show, Eq)
-
+  deriving (Data, Show, Eq)
 
+-- | Ignore 'Range' when comparing 'LHS's.
 instance Eq LHS where
-  (LHS _ core wps) == (LHS _ core' wps') = core == core' && wps == wps'
+  LHS _ core == LHS _ core' = core == core'
 
 -- | The lhs of a clause in focused (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, Data, Show)
+  deriving (Data, Show)
 
--- | The lhs minus @with@-patterns in projection-application view.
+-- | The lhs in projection-application and with-pattern 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@.
+  = LHSHead  { lhsDefName  :: QName
+                 -- ^ Head @f@.
+             , lhsPats     :: [NamedArg (Pattern' e)]
+                 -- ^ Applied to patterns @ps@.
              }
-    -- | Projection
+    -- | Projection.
   | LHSProj  { lhsDestructor :: AmbiguousQName
-               -- ^ Record projection identifier.
+                 -- ^ Record projection identifier.
              , lhsFocus      :: NamedArg (LHSCore' e)
-               -- ^ Main branch.
-             , lhsPatsRight  :: [NamedArg (Pattern' e)]
-               -- ^ Further applied to patterns.
+                 -- ^ Main argument of projection.
+             , lhsPats       :: [NamedArg (Pattern' e)]
+                 -- ^ Further applied to patterns.
              }
-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable, Eq)
+    -- | With patterns.
+  | LHSWith  { lhsHead         :: LHSCore' e
+                 -- ^ E.g. the 'LHSHead'.
+             , lhsWithPatterns :: [Pattern' e]
+                 -- ^ Applied to with patterns @| p1 | ... | pn@.
+                 --   These patterns are not prefixed with @WithP@!
+             , lhsPats         :: [NamedArg (Pattern' e)]
+                 -- ^ Further applied to patterns.
+             }
+  deriving (Data, Show, Functor, Foldable, Traversable, Eq)
 
 type LHSCore = LHSCore' Expr
 
--- | Convert a focused lhs to spine view and back.
-class LHSToSpine a b where
-  lhsToSpine :: a -> b
-  spineToLhs :: b -> a
-
--- | Clause instance.
-instance LHSToSpine Clause SpineClause where
-  lhsToSpine = fmap lhsToSpine
-  spineToLhs = fmap spineToLhs
-
--- | List instance (for clauses).
-instance LHSToSpine a b => LHSToSpine [a] [b] where
-  lhsToSpine = map lhsToSpine
-  spineToLhs = map spineToLhs
-
--- | LHS instance.
-instance LHSToSpine LHS SpineLHS where
-  lhsToSpine (LHS i core wps) = SpineLHS i f ps wps
-    where QNamed f ps = lhsCoreToSpine core
-  spineToLhs (SpineLHS i f ps wps) = LHS i (spineToLhsCore $ QNamed f ps) wps
-
-lhsCoreToSpine :: LHSCore' e -> A.QNamed [NamedArg (Pattern' e)]
-lhsCoreToSpine (LHSHead f ps) = QNamed f ps
-lhsCoreToSpine (LHSProj d h ps) = (++ (p : ps)) <$> lhsCoreToSpine (namedArg h)
-  where p = updateNamedArg (const $ ProjP patNoRange ProjPrefix d) h
-
-spineToLhsCore :: IsProjP e => QNamed [NamedArg (Pattern' e)] -> LHSCore' e
-spineToLhsCore (QNamed f ps) = lhsCoreAddSpine (LHSHead f []) ps
-
--- | Add applicative patterns (non-projection patterns) to the right.
-lhsCoreApp :: IsProjP e => LHSCore' e -> [NamedArg (Pattern' e)] -> LHSCore' e
-lhsCoreApp (LHSHead f ps)   ps' = LHSHead f   $ ps ++ ps'
-lhsCoreApp (LHSProj d h ps) ps' = LHSProj d h $ ps ++ ps'
-
--- | Add projection and applicative patterns to the right.
-lhsCoreAddSpine :: IsProjP e => LHSCore' e -> [NamedArg (Pattern' e)] -> LHSCore' e
-lhsCoreAddSpine core ps = case ps2 of
-    [] -> lhsCoreApp core ps
-    p@(Arg info (Named n (ProjP i o d))) : ps2' | let nh = numHoles d->
-      -- Andreas, 2016-06-13
-      -- If the projection was written prefix by the user
-      -- or it is fully applied an operator
-      -- we turn it to prefix projection form.
-      (if o == ProjPrefix || nh > 0 && nh <= 1 + length ps2' then
-        LHSProj d (Arg info $ Named n $ lhsCoreApp core ps1) []
-      else lhsCoreApp core $ ps1 ++ [p])
-        `lhsCoreAddSpine` ps2'
-    _ -> __IMPOSSIBLE__
-  where
-    (ps1, ps2) = break (isJust . isProjP) ps
-
--- | Used for checking pattern linearity.
-lhsCoreAllPatterns :: LHSCore' e -> [Pattern' e]
-lhsCoreAllPatterns = map namedArg . qnamed . lhsCoreToSpine
-
--- | Used in AbstractToConcrete.
-lhsCoreToPattern :: LHSCore -> Pattern
-lhsCoreToPattern lc =
-  case lc of
-    LHSHead f aps -> DefP noInfo (AmbQ [f]) aps
-    LHSProj d lhscore aps -> DefP noInfo d $
-      fmap (fmap lhsCoreToPattern) lhscore : aps
-  where noInfo = patNoRange -- TODO, preserve range!
-
-mapLHSHead :: (QName -> [NamedArg Pattern] -> LHSCore) -> LHSCore -> LHSCore
-mapLHSHead f (LHSHead x ps)   = f x ps
-mapLHSHead f (LHSProj d l ps) = LHSProj d (fmap (fmap (mapLHSHead f)) l) ps
-
 ---------------------------------------------------------------------------
 -- * Patterns
 ---------------------------------------------------------------------------
 
 -- | Parameterised over the type of dot patterns.
 data Pattern' e
-  = VarP Name
-  | ConP ConPatInfo AmbiguousQName [NamedArg (Pattern' e)]
+  = VarP BindName
+  | ConP ConPatInfo AmbiguousQName (NAPs e)
   | ProjP PatInfo ProjOrigin AmbiguousQName
     -- ^ Destructor pattern @d@.
-  | DefP PatInfo AmbiguousQName [NamedArg (Pattern' e)]
+  | DefP PatInfo AmbiguousQName (NAPs e)
     -- ^ Defined pattern: function definition @f ps@.
     --   It is also abused to convert destructor patterns into concrete syntax
     --   thus, we put AmbiguousQName here as well.
   | WildP PatInfo
     -- ^ Underscore pattern entered by user.
     --   Or generated at type checking for implicit arguments.
-  | AsP PatInfo Name (Pattern' e)
-  | DotP PatInfo Origin e
-    -- ^ Dot pattern @.e@: the Origin keeps track whether this dot pattern was
-    --   written by the user or inserted by the system (e.g. while expanding
-    --   the ellipsis in a with clause).
+  | AsP PatInfo BindName (Pattern' e)
+  | DotP PatInfo e
+    -- ^ Dot pattern @.e@
   | AbsurdP PatInfo
   | LitP Literal
-  | PatternSynP PatInfo QName [NamedArg (Pattern' e)]
+  | PatternSynP PatInfo AmbiguousQName (NAPs e)
   | RecP PatInfo [FieldAssignment' (Pattern' e)]
-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable, Eq)
+  | WithP PatInfo (Pattern' e)  -- ^ @| p@, for with-patterns.
+  deriving (Data, Show, Functor, Foldable, Traversable, Eq)
 
+type NAPs e   = [NamedArg (Pattern' e)]
 type Pattern  = Pattern' Expr
 type Patterns = [NamedArg Pattern]
 
@@ -482,7 +467,7 @@
   maybePostfixProjP :: a -> Maybe (ProjOrigin, AmbiguousQName)
 
 instance IsProjP e => MaybePostfixProjP (Pattern' e) where
-  maybePostfixProjP (DotP _ _ e)  = isProjP e <&> \ (_o, d) -> (ProjPostfix, d)
+  maybePostfixProjP (DotP _ e)    = isProjP e <&> \ (_o, d) -> (ProjPostfix, d)
   maybePostfixProjP (ProjP _ o d) = Just (o, d)
   maybePostfixProjP _ = Nothing
 
@@ -493,6 +478,12 @@
   maybePostfixProjP = maybePostfixProjP . namedThing
 
 {--------------------------------------------------------------------------
+    Things we parse but are not part of the Agda file syntax
+ --------------------------------------------------------------------------}
+
+type HoleContent = C.HoleContent' Expr
+
+{--------------------------------------------------------------------------
     Instances
  --------------------------------------------------------------------------}
 
@@ -639,57 +630,63 @@
     getRange (UnquoteDef i _ _)       = getRange i
 
 instance HasRange (Pattern' e) where
-    getRange (VarP x)            = getRange x
+    getRange (VarP x)           = getRange x
     getRange (ConP i _ _)        = getRange i
     getRange (ProjP i _ _)       = getRange i
     getRange (DefP i _ _)        = getRange i
     getRange (WildP i)           = getRange i
     getRange (AsP i _ _)         = getRange i
-    getRange (DotP i _ _)        = getRange i
+    getRange (DotP i _)          = getRange i
     getRange (AbsurdP i)         = getRange i
     getRange (LitP l)            = getRange l
     getRange (PatternSynP i _ _) = getRange i
     getRange (RecP i _)          = getRange i
+    getRange (WithP i _)         = getRange i
 
 instance HasRange SpineLHS where
-    getRange (SpineLHS i _ _ _)  = getRange i
+    getRange (SpineLHS 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 (LHSHead f ps)         = fuseRange f ps
     getRange (LHSProj d lhscore ps) = d `fuseRange` lhscore `fuseRange` ps
+    getRange (LHSWith h wps ps)     = h `fuseRange` wps `fuseRange` ps
 
 instance HasRange a => HasRange (Clause' a) where
-    getRange (Clause lhs _ _ rhs ds catchall) = getRange (lhs, rhs, ds)
+    getRange (Clause lhs _ rhs ds catchall) = getRange (lhs, rhs, ds)
 
 instance HasRange RHS where
     getRange AbsurdRHS                = noRange
     getRange (RHS e _)                = getRange e
     getRange (WithRHS _ e cs)         = fuseRange e cs
-    getRange (RewriteRHS xes rhs wh)  = getRange (map snd xes, rhs, wh)
+    getRange (RewriteRHS xes _ rhs wh) = getRange (map snd xes, rhs, wh)
 
+instance HasRange WhereDeclarations where
+  getRange (WhereDecls _ ds) = getRange ds
+
 instance HasRange LetBinding where
-    getRange (LetBind  i _ _ _ _     ) = getRange i
+    getRange (LetBind i _ _ _ _     ) = getRange i
     getRange (LetPatBind  i _ _      ) = getRange i
     getRange (LetApply i _ _ _ _     ) = getRange i
     getRange (LetOpen  i _ _         ) = getRange i
-    getRange (LetDeclaredVariable x)   = getRange x
+    getRange (LetDeclaredVariable x)  = getRange x
 
 -- 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 (VarP x)            = VarP (setRange r x)
     setRange r (ConP i ns as)       = ConP (setRange r i) ns as
     setRange r (ProjP _ o ns)       = ProjP (PatRange r) o ns
     setRange r (DefP _ ns as)       = DefP (PatRange r) ns as -- (setRange r n) as
     setRange r (WildP _)            = WildP (PatRange r)
     setRange r (AsP _ n p)          = AsP (PatRange r) (setRange r n) p
-    setRange r (DotP _ o e)         = DotP (PatRange r) o e
+    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
+    setRange r (PatternSynP _ n as) = PatternSynP (PatRange r) n as
     setRange r (RecP i as)          = RecP (PatRange r) as
+    setRange r (WithP i p)          = WithP (setRange r i) p
 
 instance KillRange LamBinding where
   killRange (DomainFree info x) = killRange1 (DomainFree info) x
@@ -763,49 +760,51 @@
   killRange (ScopeCopyInfo a b) = killRange2 ScopeCopyInfo a b
 
 instance KillRange e => KillRange (Pattern' e) where
-  killRange (VarP x)            = killRange1 VarP x
+  killRange (VarP x)           = killRange1 VarP x
   killRange (ConP i a b)        = killRange3 ConP i a b
   killRange (ProjP i o a)       = killRange3 ProjP i o a
   killRange (DefP i a b)        = killRange3 DefP i a b
   killRange (WildP i)           = killRange1 WildP i
   killRange (AsP i a b)         = killRange3 AsP i a b
-  killRange (DotP i o a)        = killRange3 DotP i o a
+  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
   killRange (RecP i as)         = killRange2 RecP i as
+  killRange (WithP i p)         = killRange2 WithP i p
 
 instance KillRange SpineLHS where
-  killRange (SpineLHS i a b c)  = killRange4 SpineLHS i a b c
+  killRange (SpineLHS i a b)  = killRange3 SpineLHS i a b
 
 instance KillRange LHS where
-  killRange (LHS i a b)   = killRange3 LHS i a b
+  killRange (LHS i a)   = killRange2 LHS i a
 
 instance KillRange e => KillRange (LHSCore' e) where
   killRange (LHSHead a b)   = killRange2 LHSHead a b
   killRange (LHSProj a b c) = killRange3 LHSProj a b c
+  killRange (LHSWith a b c) = killRange3 LHSWith a b c
 
 instance KillRange a => KillRange (Clause' a) where
-  killRange (Clause lhs dots sdots rhs ds catchall) = killRange6 Clause lhs dots sdots rhs ds catchall
-
-instance KillRange NamedDotPattern where
-  killRange (NamedDot a b c) = killRange3 NamedDot a b c
+  killRange (Clause lhs spats rhs ds catchall) = killRange5 Clause lhs spats rhs ds catchall
 
-instance KillRange StrippedDotPattern where
-  killRange (StrippedDot a b c) = killRange3 StrippedDot a b c
+instance KillRange ProblemEq where
+  killRange (ProblemEq p v a) = killRange3 ProblemEq p v a
 
 instance KillRange RHS where
   killRange AbsurdRHS                = AbsurdRHS
   killRange (RHS e c)                = killRange2 RHS e c
   killRange (WithRHS q e cs)         = killRange3 WithRHS q e cs
-  killRange (RewriteRHS xes rhs wh)  = killRange3 RewriteRHS xes rhs wh
+  killRange (RewriteRHS xes spats rhs wh) = killRange4 RewriteRHS xes spats rhs wh
 
+instance KillRange WhereDeclarations where
+  killRange (WhereDecls a b) = killRange2 WhereDecls a b
+
 instance KillRange LetBinding where
-  killRange (LetBind    i info a b c) = killRange5 LetBind  i info a b c
+  killRange (LetBind   i info a b c) = killRange5 LetBind i info a b c
   killRange (LetPatBind i a b       ) = killRange3 LetPatBind i a b
   killRange (LetApply   i a b c d   ) = killRange5 LetApply i a b c d
   killRange (LetOpen    i x dir     ) = killRange3 LetOpen  i x dir
-  killRange (LetDeclaredVariable x)   = killRange1 LetDeclaredVariable x
+  killRange (LetDeclaredVariable x)  = killRange1 LetDeclaredVariable x
 
 -- See Agda.Utils.GeniPlate:
 -- Does not descend into ScopeInfo and renaming maps, for instance.
@@ -881,8 +880,11 @@
   allNames (RHS e _)                 = allNames e
   allNames AbsurdRHS{}               = Seq.empty
   allNames (WithRHS q _ cls)         = q <| allNames cls
-  allNames (RewriteRHS qes rhs cls) = Seq.fromList (map fst qes) >< allNames rhs >< allNames cls
+  allNames (RewriteRHS qes _ rhs cls) = Seq.fromList (map fst qes) >< allNames rhs >< allNames cls
 
+instance AllNames WhereDeclarations where
+  allNames (WhereDecls _ ds) = allNames ds
+
 instance AllNames Expr where
   allNames Var{}                   = Seq.empty
   allNames Def{}                   = Seq.empty
@@ -928,7 +930,7 @@
   allNames (TLet _ lbs)  = allNames lbs
 
 instance AllNames LetBinding where
-  allNames (LetBind _ _ _ e1 e2)   = allNames e1 >< allNames e2
+  allNames (LetBind _ _ _ e1 e2)  = allNames e1 >< allNames e2
   allNames (LetPatBind _ _ e)      = allNames e
   allNames (LetApply _ _ app _ _)  = allNames app
   allNames LetOpen{}               = Seq.empty
@@ -969,62 +971,63 @@
   anyAbstract (RecSig i _ _ _)       = defAbstract i == AbstractDef
   anyAbstract _                      = __IMPOSSIBLE__
 
+class NameToExpr a where
+  nameExpr :: a -> Expr
+
 -- | Turn an 'AbstractName' to an expression.
-nameExpr :: AbstractName -> Expr
-nameExpr d = mk (anameKind d) $ anameName d
-  where
+instance NameToExpr AbstractName where
+  nameExpr d = mk (anameKind d) $ anameName d
+    where
     mk DefName        x = Def x
-    mk FldName        x = Proj ProjSystem $ AmbQ [x]
-    mk ConName        x = Con $ AmbQ [x]
-    mk PatternSynName x = PatternSyn x
+    mk FldName        x = Proj ProjSystem $ unambiguous x
+    mk ConName        x = Con $ unambiguous x
+    mk PatternSynName x = PatternSyn $ unambiguous x
     mk MacroName      x = Macro x
-    mk QuotableName   x = App i (Quote i) (defaultNamedArg $ Def x)
-      where i = ExprRange (getRange x)
+    mk QuotableName   x = App (defaultAppInfo r) (Quote i) (defaultNamedArg $ Def x)
+      where i = ExprRange r
+            r = getRange x
 
+-- | Assumes name is not 'UnknownName'.
+instance NameToExpr ResolvedName where
+  nameExpr = \case
+    VarName x _          -> Var x
+    DefinedName _ x      -> nameExpr x  -- Can be 'DefName', 'MacroName', 'QuotableName'.
+    FieldName xs         -> Proj ProjSystem . AmbQ . fmap anameName $ xs
+    ConstructorName xs   -> Con . AmbQ . fmap anameName $ xs
+    PatternSynResName xs -> PatternSyn . AmbQ . fmap anameName $ xs
+    UnknownName          -> __IMPOSSIBLE__
+
 app :: Expr -> [NamedArg Expr] -> Expr
-app = foldl (App (ExprRange noRange))
+app = foldl (App defaultAppInfo_)
 
 mkLet :: ExprInfo -> [LetBinding] -> Expr -> Expr
 mkLet i [] e = e
 mkLet i ds e = Let i ds e
 
 patternToExpr :: Pattern -> Expr
-patternToExpr (VarP x)            = Var x
+patternToExpr (VarP x)           = Var (unBind x)
 patternToExpr (ConP _ c ps)       =
   Con c `app` map (fmap (fmap patternToExpr)) ps
 patternToExpr (ProjP _ o ds)      = Proj o ds
-patternToExpr (DefP _ (AmbQ [f]) ps) =
-  Def f `app` map (fmap (fmap patternToExpr)) ps
-patternToExpr (DefP _ (AmbQ _) ps) = __IMPOSSIBLE__
+patternToExpr (DefP _ fs ps) =
+  Def (headAmbQ fs) `app` map (fmap (fmap patternToExpr)) ps
 patternToExpr (WildP _)           = Underscore emptyMetaInfo
 patternToExpr (AsP _ _ p)         = patternToExpr p
-patternToExpr (DotP _ _ e)        = e
+patternToExpr (DotP _ e)          = e
 patternToExpr (AbsurdP _)         = Underscore emptyMetaInfo  -- TODO: could this happen?
 patternToExpr (LitP l)            = Lit l
-patternToExpr (PatternSynP _ _ _) = __IMPOSSIBLE__
+patternToExpr (PatternSynP _ c ps) = PatternSyn c `app` (map . fmap . fmap) patternToExpr ps
 patternToExpr (RecP _ as)         = Rec exprNoRange $ map (Left . fmap patternToExpr) as
+patternToExpr (WithP r p)         = __IMPOSSIBLE__
 
 type PatternSynDefn = ([Arg Name], Pattern' Void)
 type PatternSynDefns = Map QName PatternSynDefn
 
 lambdaLiftExpr :: [Name] -> Expr -> Expr
 lambdaLiftExpr []     e = e
-lambdaLiftExpr (n:ns) e = Lam defaultLamInfo_ (DomainFree defaultArgInfo n) $
-                                     lambdaLiftExpr ns e
+lambdaLiftExpr (n:ns) e = Lam exprNoRange (DomainFree defaultArgInfo $ BindName n) $
+                            lambdaLiftExpr ns e
 
-substPattern :: [(Name, Pattern)] -> Pattern -> Pattern
-substPattern s p = case p of
-  VarP z        -> fromMaybe p (lookup z s)
-  ConP i q ps   -> ConP i q (map (fmap (fmap (substPattern s))) ps)
-  RecP i ps     -> RecP i (map (fmap (substPattern s)) ps)
-  ProjP{}       -> p
-  WildP i       -> p
-  DotP i o e    -> DotP i o (substExpr (map (fmap patternToExpr) s) e)
-  AbsurdP i     -> p
-  LitP l        -> p
-  DefP{}        -> p              -- destructor pattern
-  AsP i x p     -> AsP i x (substPattern s p) -- Note: cannot substitute into as-variable
-  PatternSynP{} -> __IMPOSSIBLE__ -- pattern synonyms (already gone)
 
 class SubstExpr a where
   substExpr :: [(Name, Expr)] -> a -> a
diff --git a/src/full/Agda/Syntax/Abstract/Copatterns.hs b/src/full/Agda/Syntax/Abstract/Copatterns.hs
--- a/src/full/Agda/Syntax/Abstract/Copatterns.hs
+++ b/src/full/Agda/Syntax/Abstract/Copatterns.hs
@@ -4,7 +4,6 @@
 
 import Prelude hiding (mapM)
 
-import Control.Applicative
 import Control.Monad hiding (mapM)
 import Control.Monad.Writer hiding (mapM)
 
@@ -137,8 +136,8 @@
     map (mapSnd $ sortBy (compare `on` thePath)) cps
   return $ map (\ (c, e) -> c { clauseRHS = RHS e Nothing }) ces  -- TODO: preserve C.Expr
   where
-    noCopats Clause{ clauseLHS = LHS _ LHSHead{} _ } = True
-    noCopats _                                       = False
+    noCopats Clause{ clauseLHS = LHS _ LHSHead{} } = True
+    noCopats _                                     = False
 
 -- | A sequence of decisions @b@ leading to a head @a@.
 data Path a b = Path
@@ -179,18 +178,19 @@
     rhsExpr _       = __IMPOSSIBLE__
 
 clauseToPath :: Clause -> ScopeM (ProjPath Clause)
-clauseToPath (Clause (LHS i lhs wps) dots sdots (RHS e c) [] catchall) =
-  fmap (\ lhs -> Clause (LHS i lhs wps) dots sdots (RHS e c) [] catchall) <$> 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"
+clauseToPath (Clause (LHS i lhs) spats (RHS e c) wh@(WhereDecls _ []) catchall) =
+  fmap (\ lhs -> Clause (LHS i lhs) spats (RHS e c) wh catchall) <$> lhsToPath [] lhs
+clauseToPath (Clause lhs _ (RHS e _) (WhereDecls _ (_:_)) _) = 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 lhs@LHSHead{}      = return $ Path acc lhs
+lhsToPath acc (LHSWith h wps ps) = __IMPOSSIBLE__  -- TODO!
 lhsToPath acc (LHSProj f lhs ps) = do
     let xs = fromMaybe __IMPOSSIBLE__ $ 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 (VarP n) = Just $ unBind n
         fromVarP _        = Nothing
 
 -- | Expects a sorted list.
@@ -207,13 +207,12 @@
 
         where
           abstractions :: (ProjEntry, Expr) -> ScopeM RecordAssign
-          abstractions (ProjEntry (AmbQ []) xs, e) = __IMPOSSIBLE__
-          abstractions (ProjEntry (AmbQ (p:_)) xs, e) = Left . FieldAssignment (C.unqualify $ qnameToConcrete p) <$>
+          abstractions (ProjEntry p xs, e) = Left . FieldAssignment (C.unqualify $ qnameToConcrete $ headAmbQ p) <$>
             foldr abstract (return e) xs
 
           abstract :: NamedArg Name -> ScopeM Expr -> ScopeM Expr
           abstract (Arg info (Named Nothing x)) me =
-            Lam defaultLamInfo_ (DomainFree info x) <$> me
+            Lam exprNoRange (DomainFree info $ BindName x) <$> me
           abstract (Arg _ (Named Just{} _)) me = typeError $ NotImplemented $
             "named arguments in projection patterns"
 
@@ -257,6 +256,9 @@
 instance Rename Name where
   rename rho x = fromMaybe x (rho x)
 
+instance Rename BindName where
+  rename rho (BindName x) = BindName $ rename rho x
+
 instance Rename Expr where
   rename rho e =
     case e of
@@ -320,25 +322,25 @@
   rename rho (TBind r ns e) = TBind r ns (rename rho e)
   rename rho (TLet r lbs)   = TLet r (rename rho lbs)
 
-instance Rename Clause where
-  rename rho (Clause lhs dots sdots rhs wheredecls catchall) =
-    Clause (rename rho lhs) (rename rho dots) (rename rho sdots) (rename rho rhs) (rename rho wheredecls) catchall
-
-instance Rename NamedDotPattern where
-  rename rho (NamedDot x v t) = NamedDot (rename rho x) v t
+instance Rename ProblemEq where
+  rename rho (ProblemEq p v a) = ProblemEq (rename rho p) v a
 
-instance Rename StrippedDotPattern where
-  rename rho (StrippedDot e v t) = StrippedDot (rename rho e) v t
+instance Rename Clause where
+  rename rho (Clause lhs spats rhs wheredecls catchall) =
+    Clause (rename rho lhs) (rename rho spats) (rename rho rhs) (rename rho wheredecls) catchall
 
 instance Rename RHS where
   rename rho e = case e of
       RHS e c               -> RHS (rename rho e) c
       AbsurdRHS             -> e
       WithRHS n es cs       -> WithRHS n (rename rho es) (rename rho cs)
-      RewriteRHS nes r ds   -> RewriteRHS (rename rho nes) (rename rho r) (rename rho ds)
+      RewriteRHS nes spats r ds -> RewriteRHS (rename rho nes) (rename rho spats) (rename rho r) (rename rho ds)
 
+instance Rename WhereDeclarations where
+  rename rho (WhereDecls m ds) = WhereDecls m (rename rho ds)
+
 instance Rename LHS where
-  rename rho (LHS i core ps) = LHS i (rename rho core) (rename rho ps)
+  rename rho (LHS i core) = LHS i (rename rho core)
 
 instance Rename LHSCore where
   rename rho = fmap (rename rho) -- only rename in dot patterns
@@ -379,12 +381,12 @@
 instance Alpha (Pattern' e) where
   alpha' p p' =
     case (p,p') of
-      ((VarP x)             , (VarP x')             ) -> tell1 (x, x')
+      ((VarP x)             , (VarP x')             ) -> tell1 (unBind x, unBind 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 ()
+      ((AsP _ x p)          , (AsP _ x' p')         ) -> tell1 (unBind x, unBind x') >> alpha' p p'
+      ((DotP _ _)           , (DotP _ _)            ) -> return ()
       (AbsurdP{}            , AbsurdP{}             ) -> return ()
       ((LitP l)             , (LitP l')             ) -> guard (l == l')
       ((PatternSynP _ x ps) , (PatternSynP _ x' ps')) -> guard (x == x') >> alpha' ps ps'
@@ -397,10 +399,12 @@
   alpha' (LHSHead f ps) (LHSHead f' ps') = guard (f == f') >> alpha' ps ps'
   alpha' (LHSProj d lhs ps) (LHSProj d' lhs' ps') =
      guard (d == d') >> alpha' lhs lhs' >> alpha' ps ps'
+  alpha' (LHSWith h wps ps) (LHSWith h' wps' ps') =
+     alpha' h h' >> alpha' wps wps' >> alpha' ps ps'
   alpha' _ _ = fail "not alpha equivalent"
 
 instance Alpha LHS where
-  alpha' (LHS _ core wps) (LHS _ core' wps') = alpha' core core' >> alpha' wps wps'
+  alpha' (LHS _ core) (LHS _ core') = alpha' core core'
 
 instance Alpha a => Alpha (Arg a) where
   alpha' a a' = alpha' (unArg a) (unArg a')
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
@@ -9,15 +9,19 @@
   , IsNoName(..)
   ) where
 
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
 import Control.DeepSeq
 
-import Data.Foldable (Foldable)
+import Data.Foldable (Foldable, toList)
 import Data.Traversable (Traversable)
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 import Data.List
 import Data.Function
 import Data.Hashable (Hashable(..))
+import Data.Void
 
 import Agda.Syntax.Position
 import Agda.Syntax.Common
@@ -28,6 +32,7 @@
 import Agda.Utils.List
 import Agda.Utils.Maybe
 import Agda.Utils.Monad
+import Agda.Utils.NonemptyList
 import Agda.Utils.Pretty
 import Agda.Utils.Size
 import Agda.Utils.Suffix
@@ -43,7 +48,7 @@
                  , nameBindingSite :: Range
                  , nameFixity      :: Fixity'
                  }
-    deriving (Typeable, Data)
+    deriving Data
 
 -- | 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
@@ -54,29 +59,46 @@
 data QName = QName { qnameModule :: ModuleName
                    , qnameName   :: Name
                    }
-    deriving (Typeable, Data)
+    deriving Data
 
 -- | Something preceeded by a qualified name.
 data QNamed a = QNamed
   { qname  :: QName
   , qnamed :: a
   }
-  deriving (Typeable, Functor, Foldable, Traversable)
+  deriving (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, Data)
 
 -- | Ambiguous qualified names. Used for overloaded constructors.
 --
 -- Invariant: All the names in the list must have the same concrete,
 -- unqualified name.  (This implies that they all have the same 'Range').
-newtype AmbiguousQName = AmbQ { unAmbQ :: [QName] }
-  deriving (Eq, Ord, Typeable, Data)
+newtype AmbiguousQName = AmbQ { unAmbQ :: NonemptyList QName }
+  deriving (Eq, Ord, Data)
 
+-- | A singleton "ambiguous" name.
+unambiguous :: QName -> AmbiguousQName
+unambiguous x = AmbQ (x :! [])
+
+-- | Get the first of the ambiguous names.
+headAmbQ :: AmbiguousQName -> QName
+headAmbQ (AmbQ xs) = headNe xs
+
+-- | Is a name ambiguous.
+isAmbiguous :: AmbiguousQName -> Bool
+isAmbiguous (AmbQ (_ :! xs)) = not (null xs)
+
+-- | Get the name if unambiguous.
+getUnambiguous :: AmbiguousQName -> Maybe QName
+getUnambiguous (AmbQ (x :! [])) = Just x
+getUnambiguous _                = Nothing
+
 -- | Check whether we are a projection pattern.
 class IsProjP a where
   isProjP :: a -> Maybe (ProjOrigin, AmbiguousQName)
@@ -87,6 +109,9 @@
 instance IsProjP a => IsProjP (Named n a) where
   isProjP = isProjP . namedThing
 
+instance IsProjP Void where
+  isProjP _ = __IMPOSSIBLE__
+
 -- | A module is anonymous if the qualification path ends in an underscore.
 isAnonymousModuleName :: ModuleName -> Bool
 isAnonymousModuleName (MName []) = False
@@ -268,7 +293,7 @@
 
 -- | We can have an instance for ambiguous names as all share a common concrete name.
 instance NumHoles AmbiguousQName where
-  numHoles (AmbQ qs) = numHoles $ fromMaybe __IMPOSSIBLE__ $ headMaybe qs
+  numHoles = numHoles . headAmbQ
 
 ------------------------------------------------------------------------
 -- * Show instances (only for debug printing!)
@@ -315,7 +340,7 @@
   pretty = hcat . punctuate (text ".") . map pretty . qnameToList
 
 instance Pretty AmbiguousQName where
-  pretty (AmbQ qs) = hcat $ punctuate (text " | ") $ map pretty qs
+  pretty (AmbQ qs) = hcat $ punctuate (text " | ") $ map pretty (toList qs)
 
 instance Pretty a => Pretty (QNamed a) where
   pretty (QNamed a b) = pretty a <> text "." <> pretty b
@@ -339,8 +364,7 @@
 -- | The range of an @AmbiguousQName@ is the range of any of its
 --   disambiguations (they are the same concrete name).
 instance HasRange AmbiguousQName where
-  getRange (AmbQ [])    = noRange
-  getRange (AmbQ (c:_)) = getRange c
+  getRange (AmbQ (c :! _)) = getRange c
 
 -- ** SetRange
 
diff --git a/src/full/Agda/Syntax/Abstract/Pattern.hs b/src/full/Agda/Syntax/Abstract/Pattern.hs
--- a/src/full/Agda/Syntax/Abstract/Pattern.hs
+++ b/src/full/Agda/Syntax/Abstract/Pattern.hs
@@ -8,22 +8,38 @@
 
 module Agda.Syntax.Abstract.Pattern where
 
+import Prelude hiding (null)
+
+import Control.Arrow ((***), second)
 import Control.Monad ((>=>))
-import Control.Applicative (Applicative)
+import Control.Monad.Identity
+import Control.Applicative (Applicative, liftA2)
 
 import Data.Foldable (Foldable, foldMap)
-import Data.Traversable (Traversable, traverse)
 import Data.Functor
+
+import Data.Traversable (Traversable, traverse)
+
+import Data.Maybe
 import Data.Monoid
 
+import Agda.Syntax.Abstract as A
 import Agda.Syntax.Common
 import Agda.Syntax.Concrete (FieldAssignment', exprFieldA)
-import Agda.Syntax.Abstract as A
+import qualified Agda.Syntax.Concrete as C
+import Agda.Syntax.Concrete.Pattern (IsWithP(..))
+import Agda.Syntax.Info
+import Agda.Syntax.Position
 
+import Agda.Utils.Functor
+import Agda.Utils.List
+import Agda.Utils.Null
+
 #include "undefined.h"
 import Agda.Utils.Impossible
 
 -- * Generic traversals
+------------------------------------------------------------------------
 
 type NAP = NamedArg Pattern
 
@@ -53,11 +69,16 @@
       RecP i fs          -> f $ setNamedArg p $ RecP i $ map (fmap namedArg) $ mapNamedArgPattern f $ map (fmap (setNamedArg p)) fs
       -- AsP: we hand the NamedArg info to the subpattern
       AsP i x p0         -> f $ updateNamedArg (AsP i x) $ mapNamedArgPattern f $ setNamedArg p p0
+      -- WithP: like AsP
+      WithP i p0         -> f $ updateNamedArg (WithP i) $ mapNamedArgPattern f $ setNamedArg p p0
 
 instance MapNamedArgPattern a => MapNamedArgPattern [a]                  where
 instance MapNamedArgPattern a => MapNamedArgPattern (FieldAssignment' a) where
 instance MapNamedArgPattern a => MapNamedArgPattern (Maybe a)            where
 
+instance (MapNamedArgPattern a, MapNamedArgPattern b) => MapNamedArgPattern (a,b) where
+  mapNamedArgPattern f (a, b) = (mapNamedArgPattern f a, mapNamedArgPattern f b)
+
 -- | Generic pattern traversal.
 
 class APatternLike a p | p -> a where
@@ -75,21 +96,17 @@
   foldrAPattern = foldMap . foldrAPattern
 
   -- | Traverse pattern.
-  traverseAPatternM :: (Monad m
-#if __GLASGOW_HASKELL__ <= 708
-    , Applicative m, Functor m
-#endif
-    ) => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.
-      -> (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.
-      -> p -> m p
+  traverseAPatternM
+    :: Monad m
+    => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.
+    -> (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.
+    -> p -> m p
 
-  default traverseAPatternM :: (Traversable f, APatternLike a q, f q ~ p, Monad m
-#if __GLASGOW_HASKELL__ <= 708
-    , Applicative m, Functor m
-#endif
-    ) => (Pattern' a -> m (Pattern' a))
-      -> (Pattern' a -> m (Pattern' a))
-      -> p -> m p
+  default traverseAPatternM
+    :: (Traversable f, APatternLike a q, f q ~ p, Monad m)
+    => (Pattern' a -> m (Pattern' a))
+    -> (Pattern' a -> m (Pattern' a))
+    -> p -> m p
   traverseAPatternM pre post = traverse $ traverseAPatternM pre post
 
 -- | Compute from each subpattern a value and collect them all in a monoid.
@@ -99,24 +116,25 @@
 
 -- | Traverse pattern(s) with a modification before the recursive descent.
 
-preTraverseAPatternM :: (APatternLike a b, Monad m
-#if __GLASGOW_HASKELL__ <= 708
-  , Applicative m, Functor m
-#endif
-  ) => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.
-    -> b -> m b
+preTraverseAPatternM
+  :: (APatternLike a b, Monad m )
+  => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.
+  -> b -> m b
 preTraverseAPatternM pre p = traverseAPatternM pre return p
 
 -- | Traverse pattern(s) with a modification after the recursive descent.
 
-postTraverseAPatternM :: (APatternLike a b, Monad m
-#if __GLASGOW_HASKELL__ <= 708
-  , Applicative m, Functor m
-#endif
-  ) => (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.
-    -> b -> m b
+postTraverseAPatternM
+  :: (APatternLike a b, Monad m)
+  => (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.
+  -> b -> m b
 postTraverseAPatternM post p = traverseAPatternM return post p
 
+-- | Map pattern(s) with a modification after the recursive descent.
+
+mapAPattern :: APatternLike a p => (Pattern' a -> Pattern' a) -> p -> p
+mapAPattern f = runIdentity . postTraverseAPatternM (Identity . f)
+
 -- Interesting instance:
 
 instance APatternLike a (Pattern' a) where
@@ -127,10 +145,11 @@
       DefP _ _ ps        -> foldrAPattern f ps
       RecP _ ps          -> foldrAPattern f ps
       PatternSynP _ _ ps -> foldrAPattern f ps
+      WithP _ p          -> foldrAPattern f p
       VarP _             -> mempty
       ProjP _ _ _        -> mempty
       WildP _            -> mempty
-      DotP _ _ _         -> mempty
+      DotP _ _           -> mempty
       AbsurdP _          -> mempty
       LitP _             -> mempty
 
@@ -150,6 +169,7 @@
       A.AsP         i x  p  -> A.AsP         i x  <$> traverseAPatternM pre post p
       A.RecP        i    ps -> A.RecP        i    <$> traverseAPatternM pre post ps
       A.PatternSynP i x  ps -> A.PatternSynP i x  <$> traverseAPatternM pre post ps
+      A.WithP       i p     -> A.WithP       i    <$> traverseAPatternM pre post p
 
 -- The following instances need UndecidableInstances
 -- for the FunctionalDependency (since injectivity is not taken into account).
@@ -160,7 +180,18 @@
 instance APatternLike a b => APatternLike a (Maybe b)            where
 instance APatternLike a b => APatternLike a (FieldAssignment' b) where
 
+instance (APatternLike a b, APatternLike a c) => APatternLike a (b,c) where
+  foldrAPattern f (p, p') =
+    foldrAPattern f p `mappend` foldrAPattern f p'
+
+  traverseAPatternM pre post (p, p') =
+    liftA2 (,)
+      (traverseAPatternM pre post p)
+      (traverseAPatternM pre post p')
+
+
 -- * Specific folds
+------------------------------------------------------------------------
 
 -- | Collect pattern variables in left-to-right textual order.
 
@@ -170,8 +201,8 @@
   -- We use difference lists @[A.Name] -> [A.Name]@ to avoid reconcatenation.
   f :: Pattern' a -> Endo [A.Name]
   f = \case
-    A.VarP x         -> Endo (x :)
-    A.AsP _ x _      -> Endo (x :)
+    A.VarP x         -> Endo (unBind x :)
+    A.AsP _ x _      -> Endo (unBind x :)
     A.LitP        {} -> mempty
     A.ConP        {} -> mempty
     A.RecP        {} -> mempty
@@ -181,6 +212,7 @@
     A.DotP        {} -> mempty
     A.AbsurdP     {} -> mempty
     A.PatternSynP {} -> mempty
+    A.WithP _ _      -> mempty
 
 -- | Check if a pattern contains a specific (sub)pattern.
 
@@ -207,3 +239,188 @@
     A.PatternSynP{} -> __IMPOSSIBLE__
     A.AsP{}         -> True
     _               -> False
+
+-- | Check if any user-written pattern variables occur more than once,
+--   and throw the given error if they do.
+checkPatternLinearity :: (Monad m, APatternLike a p)
+                      => p -> ([C.Name] -> m ()) -> m ()
+checkPatternLinearity ps err =
+  unlessNull (duplicates $ map nameConcrete $ patternVars ps) $ \ys -> err ys
+
+
+-- * Specific traversals
+------------------------------------------------------------------------
+
+-- | Pattern substitution.
+--
+-- For the embedded expression, the given pattern substitution is turned into
+-- an expression substitution.
+
+substPattern :: [(Name, Pattern)] -> Pattern -> Pattern
+substPattern s = substPattern' (substExpr $ map (second patternToExpr) s) s
+
+-- | Pattern substitution, parametrized by substitution function for embedded expressions.
+
+substPattern'
+  :: (e -> e)              -- ^ Substitution function for expressions.
+  -> [(Name, Pattern' e)]  -- ^ (Parallel) substitution.
+  -> Pattern' e            -- ^ Input pattern.
+  -> Pattern' e
+substPattern' subE s = mapAPattern $ \ p -> case p of
+  VarP (BindName x) -> fromMaybe p $ lookup x s
+  DotP i e          -> DotP i $ subE e
+  -- No action on the other patterns (besides the recursion):
+  ConP _ _ _        -> p
+  RecP _ _          -> p
+  ProjP _ _ _       -> p
+  WildP _           -> p
+  AbsurdP _         -> p
+  LitP _            -> p
+  DefP _ _ _        -> p
+  AsP _ _ _         -> p -- Note: cannot substitute into as-variable
+  PatternSynP _ _ _ -> p
+  WithP _ _         -> p
+
+
+-- * Other pattern utilities
+------------------------------------------------------------------------
+
+-- | Check for with-pattern.
+instance IsWithP (Pattern' e) where
+  isWithP = \case
+    WithP _ p -> Just p
+    _ -> Nothing
+
+-- | Split patterns into (patterns, trailing with-patterns).
+splitOffTrailingWithPatterns :: A.Patterns -> (A.Patterns, A.Patterns)
+splitOffTrailingWithPatterns ps = (reverse rps, reverse rwps)
+  where
+  (rwps, rps) = span (isJust . isWithP) $ reverse ps
+
+-- | Get the tail of with-patterns of a pattern spine.
+trailingWithPatterns :: Patterns -> Patterns
+trailingWithPatterns = snd . splitOffTrailingWithPatterns
+
+-- | The next patterns are ...
+--
+-- (This view discards 'PatInfo'.)
+data LHSPatternView e
+  = LHSAppP  (NAPs e)
+      -- ^ Application patterns (non-empty list).
+  | LHSProjP ProjOrigin AmbiguousQName (NamedArg (Pattern' e))
+      -- ^ A projection pattern.  Is also stored unmodified here.
+  | LHSWithP [Pattern' e]
+      -- ^ With patterns (non-empty list).
+      --   These patterns are not prefixed with 'WithP'.
+  deriving (Show)
+
+-- | Construct the 'LHSPatternView' of the given list (if not empty).
+--
+-- Return the view and the remaining patterns.
+
+lhsPatternView :: IsProjP e => NAPs e -> Maybe (LHSPatternView e, NAPs e)
+lhsPatternView [] = Nothing
+lhsPatternView (p0 : ps) =
+  case namedArg p0 of
+    ProjP _i o d -> Just (LHSProjP o d p0, ps)
+    -- If the next pattern is a with-pattern, collect more with-patterns
+    WithP _i p   -> Just (LHSWithP (p : map namedArg ps1), ps2)
+      where
+      (ps1, ps2) = spanJust isWithP ps
+    -- If the next pattern is an application pattern, collect more of these
+    _ -> Just (LHSAppP (p0 : ps1), ps2)
+      where
+      (ps1, ps2) = span (\ p -> isNothing (isProjP p) && isNothing (isWithP p)) ps
+
+-- * Left-hand-side manipulation
+------------------------------------------------------------------------
+
+-- | Convert a focused lhs to spine view and back.
+class LHSToSpine a b where
+  lhsToSpine :: a -> b
+  spineToLhs :: b -> a
+
+-- | Clause instance.
+instance LHSToSpine Clause SpineClause where
+  lhsToSpine = fmap lhsToSpine
+  spineToLhs = fmap spineToLhs
+
+-- | List instance (for clauses).
+instance LHSToSpine a b => LHSToSpine [a] [b] where
+  lhsToSpine = map lhsToSpine
+  spineToLhs = map spineToLhs
+
+-- | LHS instance.
+instance LHSToSpine LHS SpineLHS where
+  lhsToSpine (LHS i core) = SpineLHS i f ps
+    where QNamed f ps = lhsCoreToSpine core
+  spineToLhs (SpineLHS i f ps) = LHS i (spineToLhsCore $ QNamed f ps)
+
+lhsCoreToSpine :: LHSCore' e -> A.QNamed [NamedArg (Pattern' e)]
+lhsCoreToSpine = \case
+  LHSHead f ps     -> QNamed f ps
+  LHSProj d h ps   -> lhsCoreToSpine (namedArg h) <&> (++ (p : ps))
+    where p = updateNamedArg (const $ ProjP empty ProjPrefix d) h
+  LHSWith h wps ps -> lhsCoreToSpine h <&> (++ map (defaultNamedArg . mkWithP) wps ++ ps)
+    where mkWithP p = WithP (PatRange $ getRange p) p
+
+spineToLhsCore :: IsProjP e => QNamed [NamedArg (Pattern' e)] -> LHSCore' e
+spineToLhsCore (QNamed f ps) = lhsCoreAddSpine (LHSHead f []) ps
+
+-- | Add applicative patterns (non-projection / non-with patterns) to the right.
+lhsCoreApp :: LHSCore' e -> [NamedArg (Pattern' e)] -> LHSCore' e
+lhsCoreApp core ps = core { lhsPats = lhsPats core ++ ps }
+
+-- | Add with-patterns to the right.
+lhsCoreWith :: LHSCore' e -> [Pattern' e] -> LHSCore' e
+lhsCoreWith (LHSWith core wps []) wps' = LHSWith core (wps ++ wps') []
+lhsCoreWith core                  wps' = LHSWith core wps' []
+
+lhsCoreAddChunk :: IsProjP e => LHSCore' e -> LHSPatternView e -> LHSCore' e
+lhsCoreAddChunk core = \case
+  LHSAppP ps               -> lhsCoreApp core ps
+  LHSWithP wps             -> lhsCoreWith core wps
+  LHSProjP ProjPrefix d np -> LHSProj d (setNamedArg np core) []  -- Prefix projection pattern.
+  LHSProjP _          _ np -> lhsCoreApp core [np]       -- Postfix projection pattern.
+
+-- | Add projection, with, and applicative patterns to the right.
+lhsCoreAddSpine :: IsProjP e => LHSCore' e -> [NamedArg (Pattern' e)] -> LHSCore' e
+lhsCoreAddSpine core ps =
+  -- Recurse on lhsPatternView until no patterns left.
+  case lhsPatternView ps of
+    Nothing       -> core
+    Just (v, ps') -> lhsCoreAddChunk core chunk `lhsCoreAddSpine` ps'
+      where
+      -- Andreas, 2016-06-13
+      -- If the projection was written prefix by the user
+      -- or it is a fully applied operator
+      -- we turn it to prefix projection form.
+      chunk = case v of
+        LHSProjP ProjPrefix _ _
+          -> v
+        LHSProjP _ d np | let nh = C.numHoles d, nh > 0, nh <= 1 + length ps'
+          -> LHSProjP ProjPrefix d np
+        _ -> v
+
+-- | Used for checking pattern linearity.
+lhsCoreAllPatterns :: LHSCore' e -> [Pattern' e]
+lhsCoreAllPatterns = map namedArg . qnamed . lhsCoreToSpine
+
+-- | Used in ''Agda.Syntax.Translation.AbstractToConcrete''.
+--   Returns a 'DefP'.
+lhsCoreToPattern :: LHSCore -> Pattern
+lhsCoreToPattern lc =
+  case lc of
+    LHSHead f aps         -> DefP noInfo (unambiguous f) aps
+    LHSProj d lhscore aps -> DefP noInfo d $
+      fmap (fmap lhsCoreToPattern) lhscore : aps
+    LHSWith h wps aps     -> case lhsCoreToPattern h of
+      DefP r q ps         -> DefP r q $ ps ++ map (\ p -> defaultNamedArg $ WithP (PatRange $ getRange p) p) wps ++ aps
+      _ -> __IMPOSSIBLE__
+  where noInfo = empty -- TODO, preserve range!
+
+mapLHSHead :: (QName -> [NamedArg Pattern] -> LHSCore) -> LHSCore -> LHSCore
+mapLHSHead f = \case
+  LHSHead x ps     -> f x ps
+  LHSProj d h ps   -> LHSProj d (fmap (fmap (mapLHSHead f)) h) ps
+  LHSWith h wps ps -> LHSWith (mapLHSHead f h) wps ps
diff --git a/src/full/Agda/Syntax/Abstract/PatternSynonyms.hs b/src/full/Agda/Syntax/Abstract/PatternSynonyms.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Syntax/Abstract/PatternSynonyms.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE CPP #-}
+
+-- | Pattern synonym utilities: folding pattern synonym definitions for
+--   printing and merging pattern synonym definitions to handle overloaded
+--   pattern synonyms.
+module Agda.Syntax.Abstract.PatternSynonyms
+  ( matchPatternSyn
+  , matchPatternSynP
+  , mergePatternSynDefs
+  ) where
+
+import Control.Applicative ( Alternative(empty) )
+import Control.Monad.Writer hiding (forM)
+import Data.Map (Map)
+import qualified Data.Map as Map
+import Data.Traversable (forM)
+import Data.List
+import Data.Void
+
+import Agda.Syntax.Common
+import Agda.Syntax.Position
+import Agda.Syntax.Literal
+import Agda.Syntax.Abstract
+import Agda.Syntax.Abstract.Views
+import Agda.Utils.Monad
+import Agda.Utils.NonemptyList
+
+import Agda.Utils.Impossible
+#include "undefined.h"
+
+-- | Merge a list of pattern synonym definitions. Fails unless all definitions
+--   have the same shape (i.e. equal up to renaming of variables and constructor
+--   names).
+mergePatternSynDefs :: NonemptyList PatternSynDefn -> Maybe PatternSynDefn
+mergePatternSynDefs (def :! defs) = foldM mergeDef def defs
+
+mergeDef :: PatternSynDefn -> PatternSynDefn -> Maybe PatternSynDefn
+mergeDef (xs, p) (ys, q) = do
+  guard $ map getArgInfo xs == map getArgInfo ys
+  let ren = zip (map unArg xs) (map unArg ys)
+  (xs,) <$> merge ren p q
+  where
+    merge ren p@(VarP x) (VarP y)   = p <$ guard (elem (unBind x, unBind y) ren)
+    merge ren p@(LitP l) (LitP l')  = p <$ guard (l == l')
+    merge ren p@(WildP _) (WildP _) = return p
+    merge ren (ConP i (AmbQ cs) ps) (ConP _ (AmbQ cs') qs) = do
+      guard $ map getArgInfo ps == map getArgInfo qs
+      ConP i (AmbQ $ unionNe cs cs') <$> zipWithM (mergeArg ren) ps qs
+    merge _ _ _ = empty
+
+    mergeArg ren p q = setNamedArg p <$> merge ren (namedArg p) (namedArg q)
+
+-- | Match an expression against a pattern synonym.
+matchPatternSyn :: PatternSynDefn -> Expr -> Maybe [Arg Expr]
+matchPatternSyn = runMatch match
+  where
+    match (VarP x) e = unBind x ==> e
+    match (LitP l) (Lit l') = guard (l == l')
+    match (ConP _ (AmbQ cs) ps) e = do
+      Application (Con (AmbQ cs')) args <- return (appView e)
+      guard $ null (toList cs' \\ toList cs)            -- check all possible constructors appear in the synonym
+      guard $ map getArgInfo ps == map getArgInfo args  -- check that we agree on the hiding (TODO: too strict?)
+      zipWithM_ match (map namedArg ps) (map namedArg args)
+    match _ _ = empty
+
+-- | Match a pattern against a pattern synonym.
+matchPatternSynP :: PatternSynDefn -> Pattern' e -> Maybe [Arg (Pattern' e)]
+matchPatternSynP = runMatch match
+  where
+    match (VarP x) q = unBind x ==> q
+    match (LitP l) (LitP l') = guard (l == l')
+    match (WildP _) (WildP _) = return ()
+    match (ConP _ (AmbQ cs) ps) (ConP _ (AmbQ cs') qs) = do
+      guard $ null (toList cs' \\ toList cs)
+      guard $ map getArgInfo ps == map getArgInfo qs
+      zipWithM_ match (map namedArg ps) (map namedArg qs)
+    match _ _ = empty
+
+type Match e = WriterT (Map Name e) Maybe
+
+(==>) :: Name -> e -> Match e ()
+x ==> e = tell (Map.singleton x e)
+
+runMatch :: (Pattern' Void -> e -> Match e ()) -> PatternSynDefn -> e -> Maybe [Arg e]
+runMatch match (xs, pat) e = do
+  sub <- execWriterT (match pat e)
+  forM xs $ \ x -> (<$ x) <$> Map.lookup (unArg x) sub
diff --git a/src/full/Agda/Syntax/Abstract/Pretty.hs b/src/full/Agda/Syntax/Abstract/Pretty.hs
--- a/src/full/Agda/Syntax/Abstract/Pretty.hs
+++ b/src/full/Agda/Syntax/Abstract/Pretty.hs
@@ -1,8 +1,6 @@
 
 module Agda.Syntax.Abstract.Pretty where
 
-import Control.Applicative
-
 import Agda.Syntax.Concrete.Pretty ()
 import Agda.Syntax.Fixity
 import Agda.Syntax.Translation.AbstractToConcrete
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
@@ -5,7 +5,7 @@
 
 module Agda.Syntax.Abstract.Views where
 
-import Control.Applicative
+import Control.Applicative ( Const(Const), getConst )
 import Control.Arrow (first)
 import Control.Monad.Identity
 
@@ -24,22 +24,28 @@
 import Agda.Utils.Either
 import Agda.Utils.Lens
 
-data AppView = Application Expr [NamedArg Expr]
+data AppView' arg = Application Expr [NamedArg arg]
+  deriving (Functor)
 
+type AppView = AppView' Expr
+
 -- | Gather applications to expose head and spine.
 --
 --   Note: everything is an application, possibly of itself to 0 arguments
 appView :: Expr -> AppView
-appView e =
+appView = fmap snd . appView'
+
+appView' :: Expr -> AppView' (AppInfo, Expr)
+appView' e =
   case e of
-    App _ e1 e2
+    App i e1 e2
       | Dot _ e2' <- unScope $ namedArg e2
       , Just f <- maybeProjTurnPostfix e2'
-                   -> Application f [defaultNamedArg e1]
+                   -> Application f [defaultNamedArg (i, e1)]
     App i e1 arg
-      | Application hd es <- appView e1
-                   -> Application hd $ es ++ [arg]
-    ScopedExpr _ e -> appView e
+      | Application hd es <- appView' e1
+                   -> Application hd $ es ++ [(fmap . fmap) (i,) arg]
+    ScopedExpr _ e -> appView' e
     _              -> Application e []
 
 maybeProjTurnPostfix :: Expr -> Maybe Expr
@@ -51,20 +57,20 @@
 
 unAppView :: AppView -> Expr
 unAppView (Application h es) =
-  foldl (App (ExprRange noRange)) h es
+  foldl (App defaultAppInfo_) h es
 
 -- | Collects plain lambdas.
-data LamView = LamView [(LamInfo, LamBinding)] Expr
+data LamView = LamView [LamBinding] Expr
 
 lamView :: Expr -> LamView
-lamView (Lam i b e) = cons (i, b) $ lamView e
+lamView (Lam i b e) = cons b $ lamView e
   where cons b (LamView bs e) = LamView (b : bs) e
 lamView (ScopedExpr _ e) = lamView e
 lamView e = LamView [] e
 
 -- | Gather top-level 'AsP'atterns to expose underlying pattern.
 asView :: A.Pattern -> ([Name], A.Pattern)
-asView (A.AsP _ x p) = first (x :) $ asView p
+asView (A.AsP _ x p) = first (unBind x :) $ asView p
 asView p             = ([], p)
 
 -- | Check whether we are dealing with a universe.
@@ -113,13 +119,7 @@
   foldExpr :: Monoid m => (Expr -> m) -> a -> m
   foldExpr f = getConst . recurseExpr (\ pre post -> Const (f pre) <* post)
 
-  traverseExpr
-#if __GLASGOW_HASKELL__ <= 708
-    :: (Applicative m, Monad m)
-#else
-    :: Monad m
-#endif
-    => (Expr -> m Expr) -> a -> m a
+  traverseExpr :: (Applicative m, Monad m) => (Expr -> m Expr) -> a -> m a
   traverseExpr f = recurseExpr (\ pre post -> f =<< post)
 
   mapExpr :: (Expr -> Expr) -> (a -> a)
@@ -320,7 +320,7 @@
 instance ExprLike a => ExprLike (Pattern' a) where
 
 instance ExprLike a => ExprLike (Clause' a) where
-  recurseExpr f (Clause lhs dots sdots rhs ds ca) = Clause <$> rec lhs <*> pure dots <*> pure sdots <*> rec rhs <*> rec ds <*> pure ca
+  recurseExpr f (Clause lhs spats rhs ds ca) = Clause <$> rec lhs <*> pure spats <*> rec rhs <*> rec ds <*> pure ca
     where rec = recurseExpr f
 
 instance ExprLike RHS where
@@ -329,9 +329,12 @@
       RHS e c                 -> RHS <$> rec e <*> pure c
       AbsurdRHS{}             -> pure rhs
       WithRHS x es cs         -> WithRHS x <$> rec es <*> rec cs
-      RewriteRHS xes rhs ds   -> RewriteRHS <$> rec xes <*> rec rhs <*> rec ds
+      RewriteRHS xes spats rhs ds -> RewriteRHS <$> rec xes <*> pure spats <*> rec rhs <*> rec ds
     where rec e = recurseExpr f e
 
+instance ExprLike WhereDeclarations where
+  recurseExpr f (WhereDecls a b) = WhereDecls a <$> recurseExpr f b
+
 instance ExprLike ModuleApplication where
   recurseExpr f a =
     case a of
@@ -342,7 +345,7 @@
 instance ExprLike Pragma where
   recurseExpr f p =
     case p of
-      BuiltinPragma s e           -> BuiltinPragma s <$> rec e
+      BuiltinPragma s x           -> pure p
       OptionsPragma{}             -> pure p
       BuiltinNoDefPragma{}        -> pure p
       RewritePragma{}             -> pure p
@@ -362,12 +365,12 @@
     where rec e = recurseExpr f e
 
 instance ExprLike LHS where
-  recurseExpr f (LHS i c ps) = LHS i <$> recurseExpr f c <*> recurseExpr f ps
+  recurseExpr f (LHS i p) = LHS i <$> recurseExpr f p
 
 instance ExprLike a => ExprLike (LHSCore' a) where
 
 instance ExprLike SpineLHS where
-  recurseExpr f (SpineLHS i x ps wps) = SpineLHS i x <$> recurseExpr f ps <*> recurseExpr f wps
+  recurseExpr f (SpineLHS i x ps) = SpineLHS i x <$> recurseExpr f ps
 
 instance ExprLike Declaration where
   recurseExpr f d =
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
@@ -7,7 +7,6 @@
 -}
 module Agda.Syntax.Common where
 
-import Control.Applicative
 import Control.DeepSeq
 
 import Data.ByteString.Char8 (ByteString)
@@ -18,14 +17,18 @@
 import Data.Semigroup hiding (Arg)
 import Data.Traversable
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 import Data.Word
+import Data.IntSet (IntSet)
+import qualified Data.IntSet as IntSet
 
 import GHC.Generics (Generic)
 
 import Agda.Syntax.Position
 
 import Agda.Utils.Functor
+import Agda.Utils.Lens
+import Agda.Utils.PartialOrd
+import Agda.Utils.POMonoid
 import Agda.Utils.Pretty hiding ((<>))
 
 #include "undefined.h"
@@ -37,17 +40,34 @@
 
 -- | Used to specify whether something should be delayed.
 data Delayed = Delayed | NotDelayed
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 instance KillRange Delayed where
   killRange = id
 
 ---------------------------------------------------------------------------
+-- * Eta-equality
+---------------------------------------------------------------------------
+
+data HasEta = NoEta | YesEta
+  deriving (Data, Show, Eq, Ord)
+
+instance HasRange HasEta where
+  getRange _ = noRange
+
+instance KillRange HasEta where
+  killRange = id
+
+instance NFData HasEta where
+  rnf NoEta  = ()
+  rnf YesEta = ()
+
+---------------------------------------------------------------------------
 -- * Induction
 ---------------------------------------------------------------------------
 
 data Induction = Inductive | CoInductive
-  deriving (Typeable, Data, Eq, Ord)
+  deriving (Data, Eq, Ord)
 
 instance Show Induction where
   show Inductive   = "inductive"
@@ -68,10 +88,10 @@
 ---------------------------------------------------------------------------
 
 data Overlappable = YesOverlap | NoOverlap
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 data Hiding  = Hidden | Instance Overlappable | NotHidden
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 -- | Just for the 'Hiding' instance. Should never combine different
 --   overlapping.
@@ -114,7 +134,7 @@
   { whHiding :: !Hiding
   , whThing  :: a
   }
-  deriving (Typeable, Data, Eq, Ord, Show, Functor, Foldable, Traversable)
+  deriving (Data, Eq, Ord, Show, Functor, Foldable, Traversable)
 
 instance Decoration WithHiding where
   traverseF f (WithHiding h a) = WithHiding h <$> f a
@@ -209,29 +229,164 @@
     (hx, hy)                 -> hx == hy
 
 ---------------------------------------------------------------------------
--- * Relevance
+-- * Modalities
 ---------------------------------------------------------------------------
 
--- | An constructor argument is big if the sort of its type is bigger than
---   the sort of the data type.  Only parameters (and maybe forced arguments)
---   are allowed to be big.
---   @
---      List : Set -> Set
---      nil  : (A : Set) -> List A
---   @
---   @A@ is big in constructor @nil@ as the sort @Set1@ of its type @Set@
---   is bigger than the sort @Set@ of the data type @List@.
-data Big = Big | Small
-  deriving (Typeable, Data, Show, Eq, Enum, Bounded)
+-- | We have a tuple of modalities, which might not be fully orthogonal.
+--   For instance, irrelevant stuff is also run-time irrelevant.
+data Modality = Modality
+  { modRelevance :: Relevance
+      -- ^ Legacy irrelevance.
+      --   See Pfenning, LiCS 2001; Abel/Vezzosi/Winterhalter, ICFP 2017.
+  , modQuantity  :: Quantity
+      -- ^ Cardinality / runtime erasure.
+      --   See Conor McBride, I got plenty o' nutting, Wadlerfest 2016.
+  } deriving (Data, Eq, Ord, Show, Generic)
 
-instance Ord Big where
-  Big <= Small = False
-  _   <= _     = True
+defaultModality :: Modality
+defaultModality = Modality defaultRelevance defaultQuantity
 
-instance NFData Big where
-  rnf Big   = ()
-  rnf Small = ()
+-- | Pointwise composition.
+instance Semigroup Modality where
+  Modality r q <> Modality r' q' = Modality (r <> r') (q <> q')
 
+-- | Pointwise unit.
+instance Monoid Modality where
+  mempty = Modality mempty mempty
+  mappend = (<>)
+
+-- | Dominance ordering.
+instance PartialOrd Modality where
+  comparable (Modality r q) (Modality r' q') = comparable (r, q) (r', q')
+
+instance POSemigroup Modality where
+instance POMonoid Modality where
+
+-- boilerplate instances
+
+instance KillRange Modality where
+  killRange = id
+
+instance NFData Modality where
+
+class LensModality a where
+
+  getModality :: a -> Modality
+
+  setModality :: Modality -> a -> a
+  setModality = mapModality . const
+
+  mapModality :: (Modality -> Modality) -> a -> a
+  mapModality f a = setModality (f $ getModality a) a
+
+instance LensModality Modality where
+  getModality = id
+  setModality = const
+  mapModality = id
+
+instance LensRelevance Modality where
+  getRelevance = modRelevance
+  setRelevance h m = m { modRelevance = h }
+  mapRelevance f m = m { modRelevance = f (modRelevance m) }
+
+instance LensQuantity Modality where
+  getQuantity = modQuantity
+  setQuantity h m = m { modQuantity = h }
+  mapQuantity f m = m { modQuantity = f (modQuantity m) }
+
+-- default accessors for Relevance
+
+getRelevanceMod :: LensModality a => LensGet Relevance a
+getRelevanceMod = getRelevance . getModality
+
+setRelevanceMod :: LensModality a => LensSet Relevance a
+setRelevanceMod = mapModality . setRelevance
+
+mapRelevanceMod :: LensModality a => LensMap Relevance a
+mapRelevanceMod = mapModality . mapRelevance
+
+-- default accessors for Quantity
+
+getQuantityMod :: LensModality a => LensGet Quantity a
+getQuantityMod = getQuantity . getModality
+
+setQuantityMod :: LensModality a => LensSet Quantity a
+setQuantityMod = mapModality . setQuantity
+
+mapQuantityMod :: LensModality a => LensMap Quantity a
+mapQuantityMod = mapModality . mapQuantity
+
+---------------------------------------------------------------------------
+-- * Quantities
+---------------------------------------------------------------------------
+
+-- | Quantity for linearity.
+data Quantity
+  = Quantity0  -- ^ Zero uses, erased at runtime.
+  -- TODO: | Quantity1  -- ^ Linear use (could be updated destructively).
+  -- (needs postponable constraints between quantities to compute uses).
+  | Quantityω  -- ^ Unrestricted use.
+  deriving (Data, Show, Generic, Eq, Enum, Bounded)
+
+defaultQuantity :: Quantity
+defaultQuantity = Quantityω
+
+-- | Composition of quantities (multiplication).
+--
+-- 'Quantity0' is dominant.
+instance Semigroup Quantity where
+  Quantity0 <> _ = Quantity0
+  _ <> Quantity0 = Quantity0
+  Quantityω <> _ = Quantityω
+  -- _ <> Quantityω = Quantityω  -- redundant
+
+-- | In the absense of finite quantities besides 0, ω is the unit.
+instance Monoid Quantity where
+  mempty = Quantityω
+  mappend = (<>)
+
+-- | Note that the order is @ω ≤ 0@, more relevant is smaller.
+instance Ord Quantity where
+  compare = curry $ \case
+    (Quantityω, Quantityω) -> EQ
+    (Quantityω, Quantity0) -> LT
+    (Quantity0, Quantityω) -> GT
+    (Quantity0, Quantity0) -> EQ
+
+instance PartialOrd Quantity where
+  comparable = comparableOrd
+
+instance POSemigroup Quantity where
+instance POMonoid Quantity where
+
+-- boilerplate instances
+
+class LensQuantity a where
+
+  getQuantity :: a -> Quantity
+
+  setQuantity :: Quantity -> a -> a
+  setQuantity = mapQuantity . const
+
+  mapQuantity :: (Quantity -> Quantity) -> a -> a
+  mapQuantity f a = setQuantity (f $ getQuantity a) a
+
+instance LensQuantity Quantity where
+  getQuantity = id
+  setQuantity = const
+  mapQuantity = id
+
+instance KillRange Quantity where
+  killRange = id
+
+instance NFData Quantity where
+  rnf Quantity0 = ()
+  rnf Quantityω = ()
+
+---------------------------------------------------------------------------
+-- * Relevance
+---------------------------------------------------------------------------
+
 -- | A function argument can be relevant or irrelevant.
 --   See "Agda.TypeChecking.Irrelevance".
 data Relevance
@@ -240,32 +395,21 @@
                 --   Therefore, it is irrelevant at run-time.
                 --   It is treated relevantly during equality checking.
   | Irrelevant  -- ^ The argument is irrelevant at compile- and runtime.
-  | Forced Big  -- ^ The argument can be skipped during equality checking
-                --   because its value is already determined by the type.
-                --   If a constructor argument is big, it has to be regarded
-                --   absent, otherwise we get into paradoxes.
-    deriving (Typeable, Data, Show, Eq)
+    deriving (Data, Show, Eq, Enum, Bounded, Generic)
 
 allRelevances :: [Relevance]
-allRelevances =
-  [ Relevant
-  , NonStrict
-  , Irrelevant
-  , Forced Small
-  , Forced Big
-  ]
+allRelevances = [minBound..maxBound]
 
+defaultRelevance :: Relevance
+defaultRelevance = Relevant
+
 instance KillRange Relevance where
   killRange rel = rel -- no range to kill
 
-instance Ord Relevance where
-  (<=) = moreRelevant
-
 instance NFData Relevance where
   rnf Relevant   = ()
   rnf NonStrict  = ()
   rnf Irrelevant = ()
-  rnf (Forced a) = rnf a
 
 -- | A lens to access the 'Relevance' attribute in data structures.
 --   Minimal implementation: @getRelevance@ and one of @setRelevance@ or @mapRelevance@.
@@ -290,40 +434,38 @@
 isIrrelevant :: LensRelevance a => a -> Bool
 isIrrelevant a = getRelevance a == Irrelevant
 
+isNonStrict :: LensRelevance a => a -> Bool
+isNonStrict a = getRelevance a == NonStrict
+
 -- | Information ordering.
 -- @Relevant  \`moreRelevant\`
---  Forced    \`moreRelevant\`
 --  NonStrict \`moreRelevant\`
 --  Irrelevant@
 moreRelevant :: Relevance -> Relevance -> Bool
-moreRelevant r r' =
-  case (r, r') of
+moreRelevant = (<=)
+
+-- | More relevant is smaller.
+instance Ord Relevance where
+  compare = curry $ \case
+    (r, r') | r == r' -> EQ
     -- top
-    (_, Irrelevant) -> True
-    (Irrelevant, _) -> False
+    (_, Irrelevant) -> LT
+    (Irrelevant, _) -> GT
     -- bottom
-    (Relevant, _)   -> True
-    (_, Relevant)   -> False
-    -- second bottom
-    (Forced{}, _)   -> True
-    (_, Forced{})   -> False
-    -- remaining case
-    (NonStrict,NonStrict) -> True
+    (Relevant, _) -> LT
+    (_, Relevant) -> GT
+    -- redundant case
+    (NonStrict,NonStrict) -> EQ
 
-irrelevant :: Relevance -> Bool
-irrelevant r =
-  case r of
-    Irrelevant -> True
-    NonStrict  -> False
-    Relevant   -> False
-    Forced{}   -> False
+-- | More relevant is smaller.
+instance PartialOrd Relevance where
+  comparable = comparableOrd
 
 -- | @unusableRelevance rel == True@ iff we cannot use a variable of @rel@.
 unusableRelevance :: LensRelevance a => a -> Bool
 unusableRelevance a = case getRelevance a of
   Irrelevant -> True
   NonStrict  -> True
-  Forced{}   -> False -- @Forced@ has no semantic relevance
   Relevant   -> False
 
 -- | 'Relevance' composition.
@@ -335,9 +477,6 @@
     (_, Irrelevant) -> Irrelevant
     (NonStrict, _)  -> NonStrict
     (_, NonStrict)  -> NonStrict
-    (Forced b, Forced b') -> Forced (max b b')  -- prefer Big over Small
-    (Forced b, _)     -> Forced b
-    (_, Forced b)     -> Forced b
     (Relevant, Relevant) -> Relevant
 
 -- | @inverseComposeRelevance r x@ returns the most irrelevant @y@
@@ -350,19 +489,25 @@
   case (r, x) of
     (Relevant, x)        -> x          -- going to relevant arg.: nothing changes
     _ | r == x           -> Relevant   -- because Relevant is comp.-neutral
-    (Forced{}, Forced{}) -> Relevant   -- same, but (==) does not ignore Big
-    (Forced{}, x)          -> x
     (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@.
-ignoreForced :: Relevance -> Relevance
-ignoreForced Forced{}   = Relevant
-ignoreForced Relevant   = Relevant
-ignoreForced NonStrict  = NonStrict
-ignoreForced Irrelevant = Irrelevant
+-- | 'Relevance' forms a semigroup under composition.
+instance Semigroup Relevance where
+  (<>) = composeRelevance
 
+-- | 'Relevant' is the unit.
+instance Monoid Relevance where
+  mempty  = Relevant
+  mappend = (<>)
+
+instance POSemigroup Relevance where
+instance POMonoid Relevance where
+
+instance LeftClosedPOMonoid Relevance where
+  inverseCompose = inverseComposeRelevance
+
 -- | Irrelevant function arguments may appear non-strictly in the codomain type.
 irrToNonStrict :: Relevance -> Relevance
 irrToNonStrict Irrelevant = NonStrict
@@ -388,7 +533,7 @@
   | Inserted     -- ^ E.g. inserted hidden arguments.
   | Reflected    -- ^ Produced by the reflection machinery.
   | CaseSplit    -- ^ Produced by an interactive case split.
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 instance KillRange Origin where
   killRange = id
@@ -404,7 +549,7 @@
   { woOrigin :: !Origin
   , woThing  :: a
   }
-  deriving (Typeable, Data, Eq, Ord, Show, Functor, Foldable, Traversable)
+  deriving (Data, Eq, Ord, Show, Functor, Foldable, Traversable)
 
 instance Decoration WithOrigin where
   traverseF f (WithOrigin h a) = WithOrigin h <$> f a
@@ -444,6 +589,61 @@
   setOrigin h (WithOrigin _ a) = WithOrigin h a
   mapOrigin f (WithOrigin h a) = WithOrigin (f h) a
 
+-----------------------------------------------------------------------------
+-- * Free variable annotations
+-----------------------------------------------------------------------------
+
+data FreeVariables = UnknownFVs | KnownFVs IntSet
+  deriving (Data, Eq, Ord, Show)
+
+instance Semigroup FreeVariables where
+  UnknownFVs   <> _            = UnknownFVs
+  _            <> UnknownFVs   = UnknownFVs
+  KnownFVs vs1 <> KnownFVs vs2 = KnownFVs (IntSet.union vs1 vs2)
+
+instance Monoid FreeVariables where
+  mempty  = KnownFVs IntSet.empty
+  mappend = (<>)
+
+instance NFData FreeVariables where
+  rnf UnknownFVs    = ()
+  rnf (KnownFVs fv) = rnf fv
+
+unknownFreeVariables :: FreeVariables
+unknownFreeVariables = UnknownFVs
+
+noFreeVariables :: FreeVariables
+noFreeVariables = mempty
+
+oneFreeVariable :: Int -> FreeVariables
+oneFreeVariable = KnownFVs . IntSet.singleton
+
+freeVariablesFromList :: [Int] -> FreeVariables
+freeVariablesFromList = mconcat . map oneFreeVariable
+
+-- | A lens to access the 'FreeVariables' attribute in data structures.
+--   Minimal implementation: @getFreeVariables@ and one of @setFreeVariables@ or @mapFreeVariables@.
+class LensFreeVariables a where
+
+  getFreeVariables :: a -> FreeVariables
+
+  setFreeVariables :: FreeVariables -> a -> a
+  setFreeVariables o = mapFreeVariables (const o)
+
+  mapFreeVariables :: (FreeVariables -> FreeVariables) -> a -> a
+  mapFreeVariables f a = setFreeVariables (f $ getFreeVariables a) a
+
+instance LensFreeVariables FreeVariables where
+  getFreeVariables = id
+  setFreeVariables = const
+  mapFreeVariables = id
+
+hasNoFreeVariables :: LensFreeVariables a => a -> Bool
+hasNoFreeVariables x =
+  case getFreeVariables x of
+    UnknownFVs  -> False
+    KnownFVs fv -> IntSet.null fv
+
 ---------------------------------------------------------------------------
 -- * Argument decoration
 ---------------------------------------------------------------------------
@@ -451,13 +651,14 @@
 -- | A function argument can be hidden and/or irrelevant.
 
 data ArgInfo = ArgInfo
-  { argInfoHiding       :: Hiding
-  , argInfoRelevance    :: Relevance
-  , argInfoOrigin       :: Origin
-  } deriving (Typeable, Data, Eq, Ord, Show)
+  { argInfoHiding        :: Hiding
+  , argInfoModality      :: Modality
+  , argInfoOrigin        :: Origin
+  , argInfoFreeVariables :: FreeVariables
+  } deriving (Data, Eq, Ord, Show)
 
 instance KillRange ArgInfo where
-  killRange (ArgInfo h r o) = killRange3 ArgInfo h r o
+  killRange i = i -- There are no ranges in ArgInfo's
 
 class LensArgInfo a where
   getArgInfo :: a -> ArgInfo
@@ -472,29 +673,95 @@
   mapArgInfo = id
 
 instance NFData ArgInfo where
-  rnf (ArgInfo a b c) = rnf a `seq` rnf b `seq` rnf c
+  rnf (ArgInfo a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d
 
 instance LensHiding ArgInfo where
   getHiding = argInfoHiding
   setHiding h ai = ai { argInfoHiding = h }
   mapHiding f ai = ai { argInfoHiding = f (argInfoHiding ai) }
 
-instance LensRelevance ArgInfo where
-  getRelevance = argInfoRelevance
-  setRelevance h ai = ai { argInfoRelevance = h }
-  mapRelevance f ai = ai { argInfoRelevance = f (argInfoRelevance ai) }
+instance LensModality ArgInfo where
+  getModality = argInfoModality
+  setModality m ai = ai { argInfoModality = m }
+  mapModality f ai = ai { argInfoModality = f (argInfoModality ai) }
 
 instance LensOrigin ArgInfo where
   getOrigin = argInfoOrigin
   setOrigin o ai = ai { argInfoOrigin = o }
   mapOrigin f ai = ai { argInfoOrigin = f (argInfoOrigin ai) }
 
+instance LensFreeVariables ArgInfo where
+  getFreeVariables = argInfoFreeVariables
+  setFreeVariables o ai = ai { argInfoFreeVariables = o }
+  mapFreeVariables f ai = ai { argInfoFreeVariables = f (argInfoFreeVariables ai) }
+
+-- inherited instances
+
+instance LensRelevance ArgInfo where
+  getRelevance = getRelevanceMod
+  setRelevance = setRelevanceMod
+  mapRelevance = mapRelevanceMod
+
+instance LensQuantity ArgInfo where
+  getQuantity = getQuantityMod
+  setQuantity = setQuantityMod
+  mapQuantity = mapQuantityMod
+
 defaultArgInfo :: ArgInfo
-defaultArgInfo =  ArgInfo { argInfoHiding       = NotHidden
-                          , argInfoRelevance    = Relevant
-                          , argInfoOrigin       = UserWritten }
+defaultArgInfo =  ArgInfo
+  { argInfoHiding        = NotHidden
+  , argInfoModality      = defaultModality
+  , argInfoOrigin        = UserWritten
+  , argInfoFreeVariables = UnknownFVs
+  }
 
+-- Accessing through ArgInfo
 
+-- default accessors for Hiding
+
+getHidingArgInfo :: LensArgInfo a => LensGet Hiding a
+getHidingArgInfo = getHiding . getArgInfo
+
+setHidingArgInfo :: LensArgInfo a => LensSet Hiding a
+setHidingArgInfo = mapArgInfo . setHiding
+
+mapHidingArgInfo :: LensArgInfo a => LensMap Hiding a
+mapHidingArgInfo = mapArgInfo . mapHiding
+
+-- default accessors for Modality
+
+getModalityArgInfo :: LensArgInfo a => LensGet Modality a
+getModalityArgInfo = getModality . getArgInfo
+
+setModalityArgInfo :: LensArgInfo a => LensSet Modality a
+setModalityArgInfo = mapArgInfo . setModality
+
+mapModalityArgInfo :: LensArgInfo a => LensMap Modality a
+mapModalityArgInfo = mapArgInfo . mapModality
+
+-- default accessors for Origin
+
+getOriginArgInfo :: LensArgInfo a => LensGet Origin a
+getOriginArgInfo = getOrigin . getArgInfo
+
+setOriginArgInfo :: LensArgInfo a => LensSet Origin a
+setOriginArgInfo = mapArgInfo . setOrigin
+
+mapOriginArgInfo :: LensArgInfo a => LensMap Origin a
+mapOriginArgInfo = mapArgInfo . mapOrigin
+
+-- default accessors for FreeVariables
+
+getFreeVariablesArgInfo :: LensArgInfo a => LensGet FreeVariables a
+getFreeVariablesArgInfo = getFreeVariables . getArgInfo
+
+setFreeVariablesArgInfo :: LensArgInfo a => LensSet FreeVariables a
+setFreeVariablesArgInfo = mapArgInfo . setFreeVariables
+
+mapFreeVariablesArgInfo :: LensArgInfo a => LensMap FreeVariables a
+mapFreeVariablesArgInfo = mapArgInfo . mapFreeVariables
+
+
 ---------------------------------------------------------------------------
 -- * Arguments
 ---------------------------------------------------------------------------
@@ -502,7 +769,7 @@
 data Arg e  = Arg
   { argInfo :: ArgInfo
   , unArg :: e
-  } deriving (Data, Typeable, Ord, Functor, Foldable, Traversable)
+  } deriving (Data, Ord, Functor, Foldable, Traversable)
 
 instance Decoration Arg where
   traverseF f (Arg ai a) = Arg ai <$> f a
@@ -516,11 +783,19 @@
 instance KillRange a => KillRange (Arg a) where
   killRange (Arg info a) = killRange2 Arg info a
 
+-- | Ignores 'Quantity', 'Relevance', 'Origin', and 'FreeVariables'.
+--   Ignores content of argument if 'Irrelevant'.
+--
 instance Eq a => Eq (Arg a) where
-  Arg (ArgInfo h1 _ _) x1 == Arg (ArgInfo h2 _ _) x2 = (h1, x1) == (h2, x2)
+  Arg (ArgInfo h1 m1 _ _) x1 == Arg (ArgInfo h2 m2 _ _) x2 =
+    h1 == h2 && (isIrrelevant m1 || isIrrelevant m2 || x1 == x2)
+    -- Andreas, 2017-10-04, issue #2775, ignore irrelevant arguments during with-abstraction.
+    -- This is a hack, we should not use '(==)' in with-abstraction
+    -- and more generally not use it on Syntax.
+    -- Andrea: except for caching.
 
 instance Show a => Show (Arg a) where
-    show (Arg (ArgInfo h r o) a) = showR r $ showO o $ showH h $ show a
+    show (Arg (ArgInfo h (Modality r q) o fv) a) = showFVs fv $ showQ q $ showR r $ showO o $ showH h $ show a
       where
         showH Hidden       s = "{" ++ s ++ "}"
         showH NotHidden    s = "(" ++ s ++ ")"
@@ -530,34 +805,60 @@
         showR r s = case r of
           Irrelevant   -> "." ++ s
           NonStrict    -> "?" ++ s
-          Forced Big   -> "!b" ++ s
-          Forced Small -> "!" ++ s
           Relevant     -> "r" ++ s -- Andreas: I want to see it explicitly
+        showQ q s = case q of
+          Quantity0   -> "0" ++ s
+          Quantityω   -> "ω" ++ s
         showO o s = case o of
           UserWritten -> "u" ++ s
           Inserted    -> "i" ++ s
           Reflected   -> "g" ++ s -- generated by reflection
           CaseSplit   -> "c" ++ s -- generated by case split
+        showFVs UnknownFVs    s = s
+        showFVs (KnownFVs fv) s = "fv" ++ show (IntSet.toList fv) ++ s
 
 instance NFData e => NFData (Arg e) where
   rnf (Arg a b) = rnf a `seq` rnf b
 
+instance LensArgInfo (Arg a) where
+  getArgInfo        = argInfo
+  setArgInfo ai arg = arg { argInfo = ai }
+  mapArgInfo f arg  = arg { argInfo = f $ argInfo arg }
+
+-- The other lenses are defined through LensArgInfo
+
 instance LensHiding (Arg e) where
-  getHiding = getHiding . argInfo
-  mapHiding = mapArgInfo . mapHiding
+  getHiding = getHidingArgInfo
+  setHiding = setHidingArgInfo
+  mapHiding = mapHidingArgInfo
 
-instance LensRelevance (Arg e) where
-  getRelevance = getRelevance . argInfo
-  mapRelevance = mapArgInfo . mapRelevance
+instance LensModality (Arg e) where
+  getModality = getModalityArgInfo
+  setModality = setModalityArgInfo
+  mapModality = mapModalityArgInfo
 
 instance LensOrigin (Arg e) where
-  getOrigin = getOrigin . argInfo
-  mapOrigin = mapArgInfo . mapOrigin
+  getOrigin = getOriginArgInfo
+  setOrigin = setOriginArgInfo
+  mapOrigin = mapOriginArgInfo
 
-instance LensArgInfo (Arg a) where
-  getArgInfo        = argInfo
-  mapArgInfo f arg  = arg { argInfo = f $ argInfo arg }
+instance LensFreeVariables (Arg e) where
+  getFreeVariables = getFreeVariablesArgInfo
+  setFreeVariables = setFreeVariablesArgInfo
+  mapFreeVariables = mapFreeVariablesArgInfo
 
+-- Since we have LensModality, we get relevance and quantity by default
+
+instance LensRelevance (Arg e) where
+  getRelevance = getRelevanceMod
+  setRelevance = setRelevanceMod
+  mapRelevance = mapRelevanceMod
+
+instance LensQuantity (Arg e) where
+  getQuantity = getQuantityMod
+  setQuantity = setQuantityMod
+  mapQuantity = mapQuantityMod
+
 defaultArg :: a -> Arg a
 defaultArg = Arg defaultArgInfo
 
@@ -607,7 +908,7 @@
 data Dom e = Dom
   { domInfo   :: ArgInfo
   , unDom     :: e
-  } deriving (Typeable, Data, Ord, Functor, Foldable, Traversable)
+  } deriving (Data, Ord, Functor, Foldable, Traversable)
 
 instance Decoration Dom where
   traverseF f (Dom ai a) = Dom ai <$> f a
@@ -618,29 +919,53 @@
 instance KillRange a => KillRange (Dom a) where
   killRange (Dom info a) = killRange2 Dom info a
 
+-- | Ignores 'Origin' and 'FreeVariables'.
 instance Eq a => Eq (Dom a) where
-  Dom (ArgInfo h1 r1 _) x1 == Dom (ArgInfo h2 r2 _) x2 =
-    (h1, ignoreForced r1, x1) == (h2, ignoreForced r2, x2)
+  Dom (ArgInfo h1 m1 _ _) x1 == Dom (ArgInfo h2 m2 _ _) x2 =
+    (h1, m1, x1) == (h2, m2, x2)
 
 instance Show a => Show (Dom a) where
   show = show . argFromDom
 
-instance LensHiding (Dom e) where
-  getHiding = getHiding . domInfo
-  mapHiding = mapArgInfo . mapHiding
+instance LensArgInfo (Dom e) where
+  getArgInfo        = domInfo
+  setArgInfo ai dom = dom { domInfo = ai }
+  mapArgInfo f  dom = dom { domInfo = f $ domInfo dom }
 
-instance LensRelevance (Dom e) where
-  getRelevance = getRelevance . domInfo
-  mapRelevance = mapArgInfo . mapRelevance
+-- The other lenses are defined through LensArgInfo
 
-instance LensArgInfo (Dom e) where
-  getArgInfo = domInfo
-  mapArgInfo f arg = arg { domInfo = f $ domInfo arg }
+instance LensHiding (Dom e) where
+  getHiding = getHidingArgInfo
+  setHiding = setHidingArgInfo
+  mapHiding = mapHidingArgInfo
 
+instance LensModality (Dom e) where
+  getModality = getModalityArgInfo
+  setModality = setModalityArgInfo
+  mapModality = mapModalityArgInfo
+
 instance LensOrigin (Dom e) where
-  getOrigin = getOrigin . getArgInfo
-  mapOrigin = mapArgInfo . mapOrigin
+  getOrigin = getOriginArgInfo
+  setOrigin = setOriginArgInfo
+  mapOrigin = mapOriginArgInfo
 
+instance LensFreeVariables (Dom e) where
+  getFreeVariables = getFreeVariablesArgInfo
+  setFreeVariables = setFreeVariablesArgInfo
+  mapFreeVariables = mapFreeVariablesArgInfo
+
+-- Since we have LensModality, we get relevance and quantity by default
+
+instance LensRelevance (Dom e) where
+  getRelevance = getRelevanceMod
+  setRelevance = setRelevanceMod
+  mapRelevance = mapRelevanceMod
+
+instance LensQuantity (Dom e) where
+  getQuantity = getQuantityMod
+  setQuantity = setQuantityMod
+  mapQuantity = mapQuantityMod
+
 argFromDom :: Dom a -> Arg a
 argFromDom (Dom i a) = Arg i a
 
@@ -659,7 +984,7 @@
     Named { nameOf     :: Maybe name
           , namedThing :: a
           }
-    deriving (Eq, Ord, Typeable, Data, Functor, Foldable, Traversable)
+    deriving (Eq, Ord, Data, Functor, Foldable, Traversable)
 
 -- | Standard naming.
 type Named_ = Named RString
@@ -717,7 +1042,7 @@
   { rangeOf     :: Range
   , rangedThing :: a
   }
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Data, Functor, Foldable, Traversable)
 
 -- | Thing with no range info.
 unranged :: a -> Ranged a
@@ -772,7 +1097,7 @@
   | ConOCon     -- ^ User wrote a constructor (pattern).
   | ConORec     -- ^ User wrote a record (pattern).
   | ConOSplit   -- ^ Generated by interactive case splitting.
-  deriving (Typeable, Data, Show, Eq, Ord, Enum, Bounded)
+  deriving (Data, Show, Eq, Ord, Enum, Bounded)
 
 instance KillRange ConOrigin where
   killRange = id
@@ -787,13 +1112,13 @@
   = ProjPrefix    -- ^ User wrote a prefix projection.
   | ProjPostfix   -- ^ User wrote a postfix projection.
   | ProjSystem    -- ^ Projection was generated by the system.
-  deriving (Typeable, Data, Show, Eq, Ord, Enum, Bounded)
+  deriving (Data, Show, Eq, Ord, Enum, Bounded)
 
 instance KillRange ProjOrigin where
   killRange = id
 
 data DataOrRecord = IsData | IsRecord
-  deriving (Typeable, Data, Eq, Ord, Show)
+  deriving (Data, Eq, Ord, Show)
 
 ---------------------------------------------------------------------------
 -- * Infixity, access, abstract, etc.
@@ -802,7 +1127,7 @@
 -- | 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 (Data, Show, Eq, Ord)
 
 -- | Access modifier.
 data Access
@@ -812,7 +1137,7 @@
   | PublicAccess
   | OnlyQualified  -- ^ Visible from outside, but not exported when opening the module
                              --   Used for qualified constructors.
-    deriving (Typeable, Data, Show, Eq, Ord)
+    deriving (Data, Show, Eq, Ord)
 
 instance Pretty Access where
   pretty = text . \case
@@ -831,14 +1156,14 @@
 
 -- | Abstract or concrete
 data IsAbstract = AbstractDef | ConcreteDef
-    deriving (Typeable, Data, Show, Eq, Ord)
+    deriving (Data, Show, Eq, Ord)
 
 instance KillRange IsAbstract where
   killRange = id
 
 -- | Is this definition eligible for instance search?
 data IsInstance = InstanceDef | NotInstanceDef
-    deriving (Typeable, Data, Show, Eq, Ord)
+    deriving (Data, Show, Eq, Ord)
 
 instance KillRange IsInstance where
   killRange = id
@@ -852,7 +1177,7 @@
 
 -- | Is this a macro definition?
 data IsMacro = MacroDef | NotMacroDef
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 instance KillRange IsMacro where killRange = id
 instance HasRange  IsMacro where getRange _ = noRange
@@ -867,7 +1192,7 @@
 -- | The unique identifier of a name. Second argument is the top-level module
 --   identifier.
 data NameId = NameId {-# UNPACK #-} !Word64 {-# UNPACK #-} !Word64
-    deriving (Eq, Ord, Typeable, Data, Generic)
+    deriving (Eq, Ord, Data, Generic)
 
 instance KillRange NameId where
   killRange = id
@@ -895,7 +1220,7 @@
 -- | A meta variable identifier is just a natural number.
 --
 newtype MetaId = MetaId { metaId :: Nat }
-    deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable, Data)
+    deriving (Eq, Ord, Num, Real, Enum, Integral, Data)
 
 instance Pretty MetaId where
   pretty (MetaId n) = text $ "_" ++ show n
@@ -925,7 +1250,7 @@
     -- @foo_bar@.
   | End
     -- ^ The following underscore is at the end of the name: @foo_@.
-  deriving (Show, Eq, Ord, Typeable, Data)
+  deriving (Show, Eq, Ord, Data)
 
 -- | Placeholders are used to represent the underscores in a section.
 
@@ -934,7 +1259,7 @@
   | NoPlaceholder !(Strict.Maybe PositionInName) e
     -- ^ The second argument is used only (but not always) for name
     -- parts other than underscores.
-  deriving (Typeable, Data, Eq, Ord, Functor, Foldable, Traversable, Show)
+  deriving (Data, Eq, Ord, Functor, Foldable, Traversable, Show)
 
 -- | An abbreviation: @noPlaceholder = 'NoPlaceholder'
 -- 'Strict.Nothing'@.
@@ -966,9 +1291,6 @@
              , Real
              , Enum
              , Data
-#if __GLASGOW_HASKELL__ <= 708
-             , Typeable
-#endif
              )
 
 instance Show InteractionId where
@@ -989,10 +1311,10 @@
   , impRenaming    :: [Renaming' a b]
   , publicOpen     :: Bool -- ^ Only for @open@. Exports the opened names from the current module.
   }
-  deriving (Typeable, Data, Eq)
+  deriving (Data, Eq)
 
 data Using' a b = UseEverything | Using [ImportedName' a b]
-  deriving (Typeable, Data, Eq)
+  deriving (Data, Eq)
 
 instance Semigroup (Using' a b) where
   UseEverything <> u             = u
@@ -1015,7 +1337,7 @@
 data ImportedName' a b
   = ImportedModule  b
   | ImportedName    a
-  deriving (Typeable, Data, Eq, Ord)
+  deriving (Data, Eq, Ord)
 
 setImportedName :: ImportedName' a a -> a -> ImportedName' a a
 setImportedName (ImportedName   x) y = ImportedName   y
@@ -1033,7 +1355,7 @@
   , renToRange :: Range
     -- ^ The range of the \"to\" keyword.  Retained for highlighting purposes.
   }
-  deriving (Typeable, Data, Eq)
+  deriving (Data, Eq)
 
 -- ** HasRange instances
 
@@ -1104,7 +1426,7 @@
     -- ^ Treat as terminating (unsafe).  Same effect as 'NoTerminationCheck'.
   | TerminationMeasure Range m
     -- ^ Skip termination checking but use measure instead.
-    deriving (Typeable, Data, Show, Eq, Functor)
+    deriving (Data, Show, Eq, Functor)
 
 instance KillRange m => KillRange (TerminationCheck m) where
   killRange (TerminationMeasure _ m) = TerminationMeasure noRange (killRange m)
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
@@ -1,5 +1,8 @@
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveFunctor      #-}
+{-# LANGUAGE DeriveFoldable     #-}
+{-# LANGUAGE DeriveTraversable  #-}
 
 {-| The concrete syntax is a raw representation of the program text
     without any desugaring at all.  This is what the parser produces.
@@ -36,16 +39,15 @@
   , AsName(..)
   , OpenShortHand(..), RewriteEqn, WithExpr
   , LHS(..), Pattern(..), LHSCore(..)
+  , LamClause(..)
   , RHS, RHS'(..), WhereClause, WhereClause'(..), ExprWhere(..)
+  , DoStmt(..)
   , Pragma(..)
   , Module
   , ThingWithFixity(..)
+  , HoleContent, HoleContent'(..)
   , topLevelModuleName
   , spanAllowedBeforeModule
-    -- * Pattern tools
-  , patternNames, patternQNames
-    -- * Lenses
-  , mapLhsOriginalPattern
   )
   where
 
@@ -58,7 +60,6 @@
 import Data.Set (Set)
 import Data.Monoid
 
-import Data.Typeable (Typeable)
 import Data.Data (Data)
 
 import Agda.Syntax.Position
@@ -83,14 +84,14 @@
     -- ^ An abstraction inside a special syntax declaration
     --   (see Issue 358 why we introduce this).
   | Ordinary e
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Data, Functor, Foldable, Traversable)
 
 fromOrdinary :: e -> OpApp e -> e
 fromOrdinary d (Ordinary e) = e
 fromOrdinary d _            = d
 
 data FieldAssignment' a = FieldAssignment { _nameFieldA :: Name, _exprFieldA :: a }
-  deriving (Typeable, Data, Functor, Foldable, Traversable, Show, Eq)
+  deriving (Data, Functor, Foldable, Traversable, Show, Eq)
 
 type FieldAssignment = FieldAssignment' Expr
 
@@ -99,7 +100,7 @@
                            , _exprModA      :: [Expr]
                            , _importDirModA :: ImportDirective
                            }
-  deriving (Typeable, Data)
+  deriving Data
 type RecordAssignment  = Either FieldAssignment ModuleAssignment
 type RecordAssignments = [RecordAssignment]
 
@@ -140,7 +141,7 @@
   | InstanceArg Range (Named_ Expr)            -- ^ ex: @{{e}}@ or @{{x=e}}@
   | Lam Range [LamBinding] Expr                -- ^ ex: @\\x {y} -> e@ or @\\(x:A){y:B} -> e@
   | AbsurdLam Range Hiding                     -- ^ ex: @\\ ()@
-  | ExtendedLam Range [(LHS,RHS,WhereClause,Bool)]  -- ^ ex: @\\ { p11 .. p1a -> e1 ; .. ; pn1 .. pnz -> en }@
+  | ExtendedLam Range [LamClause]              -- ^ ex: @\\ { p11 .. p1a -> e1 ; .. ; pn1 .. pnz -> en }@
   | Fun Range Expr Expr                        -- ^ ex: @e -> e@ or @.e -> e@ (NYI: @{e} -> e@)
   | Pi Telescope Expr                          -- ^ ex: @(xs:e) -> e@ or @{xs:e} -> e@
   | Set Range                                  -- ^ ex: @Set@
@@ -148,9 +149,10 @@
   | SetN Range Integer                         -- ^ ex: @Set0, Set1, ..@
   | Rec Range RecordAssignments                -- ^ ex: @record {x = a; y = b}@, or @record { x = a; M1; M2 }@
   | RecUpdate Range Expr [FieldAssignment]     -- ^ ex: @record e {x = a; y = b}@
-  | Let Range [Declaration] Expr               -- ^ ex: @let Ds in e@
+  | Let Range [Declaration] (Maybe Expr)       -- ^ ex: @let Ds in e@, missing body when parsing do-notation let
   | Paren Range Expr                           -- ^ ex: @(e)@
   | IdiomBrackets Range Expr                   -- ^ ex: @(| e |)@
+  | DoBlock Range [DoStmt]                     -- ^ ex: @do x <- m1; m2@
   | Absurd Range                               -- ^ ex: @()@ or @{}@, only in patterns
   | As Range Name Expr                         -- ^ ex: @x\@p@, only in patterns
   | Dot Range Expr                             -- ^ ex: @.p@, only in patterns
@@ -163,7 +165,8 @@
   | Unquote Range                              -- ^ ex: @unquote@, should be applied to a term of type @Term@
   | DontCare Expr                              -- ^ to print irrelevant things
   | Equal Range Expr Expr                      -- ^ ex: @a = b@, used internally in the parser
-  deriving (Typeable, Data)
+  | Ellipsis Range                             -- ^ @...@, used internally to parse patterns.
+  deriving Data
 
 -- | Concrete patterns. No literals in patterns at the moment.
 data Pattern
@@ -183,20 +186,25 @@
   | WildP Range                            -- ^ @_@
   | AbsurdP Range                          -- ^ @()@
   | AsP Range Name Pattern                 -- ^ @x\@p@ unused
-  | DotP Range Origin Expr                 -- ^ @.e@ (the Origin keeps track
-                                           -- whether this dot pattern was
-                                           -- written by the user or inserted
-                                           -- by the system)
+  | DotP Range Expr                        -- ^ @.e@
   | LitP Literal                           -- ^ @0@, @1@, etc.
   | RecP Range [FieldAssignment' Pattern]  -- ^ @record {x = p; y = q}@
-  deriving (Typeable, Data)
+  | EllipsisP Range                        -- ^ @...@, only as left-most pattern.
+  | WithP Range Pattern                    -- ^ @| p@, for with-patterns.
+  deriving Data
 
+data DoStmt
+  = DoBind Range Pattern Expr [LamClause]   -- ^ @p ← e where cs@
+  | DoThen Expr
+  | DoLet Range [Declaration]
+  deriving Data
+
 -- | A lambda binding is either domain free or typed.
 type LamBinding = LamBinding' TypedBindings
 data LamBinding' a
   = DomainFree ArgInfo BoundName  -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@ or @{.x}@
   | DomainFull a                  -- ^ . @(xs : e)@ or @{xs : e}@
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Data, Functor, Foldable, Traversable)
 
 
 -- | A sequence of typed bindings with hiding information. Appears in dependent
@@ -209,14 +217,14 @@
 
 data TypedBindings' a = TypedBindings Range (Arg a)
      -- ^ . @(xs : e)@ or @{xs : e}@ or something like @(x {y} _ : e)@.
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Data, Functor, Foldable, Traversable)
 
 data BoundName = BName
   { boundName   :: Name
   , boundLabel  :: Name    -- ^ for implicit function types the label matters and can't be alpha-renamed
   , bnameFixity :: Fixity'
   }
-  deriving (Typeable, Data, Eq, Show)
+  deriving (Data, Eq, Show)
 
 mkBoundName_ :: Name -> BoundName
 mkBoundName_ x = mkBoundName x noFixity'
@@ -231,7 +239,7 @@
 data TypedBinding' e
   = TBind Range [WithHiding BoundName] e  -- ^ Binding @(x1 ... xn : A)@.
   | TLet  Range [Declaration]  -- ^ Let binding @(let Ds)@ or @(open M args)@.
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Data, Functor, Foldable, Traversable)
 
 -- | A telescope is a sequence of typed bindings. Bound variables are in scope
 --   in later types.
@@ -251,38 +259,37 @@
 
    We use fixity information to see which name is actually defined.
 -}
-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)
+data LHS = LHS
+  { lhsOriginalPattern :: Pattern       -- ^ e.g. @f ps | wps@
+  , lhsRewriteEqn      :: [RewriteEqn]  -- ^ @rewrite e@ (many)
+  , lhsWithExpr        :: [WithExpr]    -- ^ @with e@ (many)
+  } -- ^ Original pattern (including with-patterns), rewrite equations and with-expressions.
+  deriving Data
 
 type RewriteEqn = Expr
 type WithExpr   = Expr
 
--- | Processed (scope-checked) intermediate form of the core @f ps@ of 'LHS'.
+-- | Processed (operator-parsed) intermediate form of the core @f ps@ of 'LHS'.
 --   Corresponds to 'lhsOriginalPattern'.
 data LHSCore
-  = LHSHead  { lhsDefName  :: QName               -- ^ @f@
-             , lhsPats     :: [NamedArg Pattern]  -- ^ @ps@
+  = LHSHead  { lhsDefName      :: QName               -- ^ @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
+  | LHSProj  { lhsDestructor   :: QName               -- ^ Record projection.
+             , lhsPatsLeft     :: [NamedArg Pattern]  -- ^ Patterns for record indices (currently none).
+             , lhsFocus        :: NamedArg LHSCore    -- ^ Main argument.
+             , lhsPats         :: [NamedArg Pattern]  -- ^ More application patterns.
              }
-  deriving (Typeable)
+  | LHSWith  { lhsHead         :: LHSCore
+             , lhsWithPatterns :: [Pattern]          -- ^ Non-empty; at least one @(| p)@.
+             , lhsPats         :: [NamedArg Pattern] -- ^ More application patterns.
+             }
 
 type RHS = RHS' Expr
 data RHS' e
   = AbsurdRHS -- ^ No right hand side because of absurd match.
   | RHS e
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Data, Functor, Foldable, Traversable)
 
 
 type WhereClause = WhereClause' [Declaration]
@@ -293,8 +300,14 @@
     -- ^ Named where: @module M where@.
     --   The 'Access' flag applies to the 'Name' (not the module contents!)
     --   and is propagated from the parent function.
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Data, Functor, Foldable, Traversable)
 
+data LamClause = LamClause { lamLHS      :: LHS
+                           , lamRHS      :: RHS
+                           , lamWhere    :: WhereClause -- ^ always 'NoWhere' (see parser)
+                           , lamCatchAll :: Bool }
+  deriving Data
+
 -- | An expression followed by a where clause.
 --   Currently only used to give better a better error message in interaction.
 data ExprWhere = ExprWhere Expr WhereClause
@@ -314,7 +327,7 @@
   , asRange :: Range
     -- ^ The range of the \"as\" keyword.  Retained for highlighting purposes.
   }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 {--------------------------------------------------------------------------
     Declarations
@@ -338,7 +351,7 @@
   | DataSig     Range Induction Name [LamBinding] Expr -- ^ lone data signature in mutual block
   | Data        Range Induction Name [LamBinding] (Maybe Expr) [TypeSignatureOrInstanceBlock]
   | RecordSig   Range Name [LamBinding] Expr -- ^ lone record signature in mutual block
-  | Record      Range Name (Maybe (Ranged Induction)) (Maybe Bool) (Maybe (Name, IsInstance)) [LamBinding] (Maybe Expr) [Declaration]
+  | Record      Range Name (Maybe (Ranged Induction)) (Maybe HasEta) (Maybe (Name, IsInstance)) [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
@@ -360,23 +373,23 @@
   | UnquoteDecl Range [Name] Expr
   | UnquoteDef  Range [Name] Expr
   | Pragma      Pragma
-  deriving (Typeable, Data)
+  deriving Data
 
 data ModuleApplication
   = SectionApp Range [TypedBindings] Expr
     -- ^ @tel. M args@
   | RecordModuleIFS Range QName
     -- ^ @M {{...}}@
-  deriving (Typeable, Data)
+  deriving Data
 
 data OpenShortHand = DoOpen | DontOpen
-  deriving (Typeable, Data, Eq, Show)
+  deriving (Data, Eq, Show)
 
 -- Pragmas ----------------------------------------------------------------
 
 data Pragma
   = OptionsPragma             Range [String]
-  | BuiltinPragma             Range String Expr
+  | BuiltinPragma             Range String QName
   | RewritePragma             Range [QName]
   | CompiledDataPragma        Range QName String [String]
   | CompiledTypePragma        Range QName String
@@ -390,21 +403,28 @@
   | CompilePragma             Range String QName String -- ^ first string is backend name
   | StaticPragma              Range QName
   | InjectivePragma           Range QName
-  | InlinePragma              Range QName
+  | InlinePragma              Range Bool QName  -- ^ INLINE or NOINLINE
   | ImportPragma              Range String
     -- ^ Invariant: The string must be a valid Haskell module name.
   | ImportUHCPragma           Range String
     -- ^ same as above, but for the UHC backend
   | ImpossiblePragma          Range
+    -- ^ Throws an internal error in the scope checker.
   | EtaPragma                 Range QName
     -- ^ For coinductive records, use pragma instead of regular
     --   @eta-equality@ definition (as it is might make Agda loop).
   | TerminationCheckPragma    Range (TerminationCheck Name)
+    -- ^ Applies to the following function (and all that are mutually recursive with it)
+    --   or to the functions in the following mutual block.
+  | WarningOnUsage            Range QName String
+    -- ^ Applies to the named function
   | CatchallPragma            Range
+    -- ^ Applies to the following function clause.
   | DisplayPragma             Range Pattern Expr
   | NoPositivityCheckPragma   Range
+    -- ^ Applies to the following data/record type or mutual block.
   | PolarityPragma            Range Name [Occurrence]
-  deriving (Typeable, Data)
+  deriving Data
 
 ---------------------------------------------------------------------------
 
@@ -433,6 +453,7 @@
 spanAllowedBeforeModule = span isAllowedBeforeModule
   where
     isAllowedBeforeModule (Pragma OptionsPragma{}) = True
+    isAllowedBeforeModule (Pragma BuiltinPragma{}) = True
     isAllowedBeforeModule (Private _ _ ds) = all isAllowedBeforeModule ds
     isAllowedBeforeModule Import{}       = True
     isAllowedBeforeModule ModuleMacro{}  = True
@@ -440,14 +461,17 @@
     isAllowedBeforeModule _              = False
 
 {--------------------------------------------------------------------------
-    Lenses
+    Things we parse but are not part of the Agda file syntax
  --------------------------------------------------------------------------}
 
-mapLhsOriginalPattern :: (Pattern -> Pattern) -> LHS -> LHS
-mapLhsOriginalPattern f lhs@Ellipsis{}                    = lhs
-mapLhsOriginalPattern f lhs@LHS{ lhsOriginalPattern = p } =
-  lhs { lhsOriginalPattern = f p }
+-- | Extended content of an interaction hole.
+data HoleContent' e
+  = HoleContentExpr    e   -- ^ @e@
+  | HoleContentRewrite [e] -- ^ @rewrite e0 | ... | en@
+  deriving (Functor, Foldable, Traversable)
 
+type HoleContent = HoleContent' Expr
+
 {--------------------------------------------------------------------------
     Views
  --------------------------------------------------------------------------}
@@ -469,33 +493,6 @@
     arg e                 = defaultArg (unnamed e)
 
 {--------------------------------------------------------------------------
-    Patterns
- --------------------------------------------------------------------------}
-
--- | Get all the identifiers in a pattern in left-to-right order.
-patternQNames :: Pattern -> [QName]
-patternQNames p =
-  case p of
-    IdentP x               -> [x]
-    AppP p p'              -> concatMap patternQNames [p, namedArg p']
-    RawAppP _ ps           -> concatMap patternQNames  ps
-    OpAppP _ x _ ps        -> x : concatMap (patternQNames . namedArg) ps
-    HiddenP _ (namedPat)   -> patternQNames (namedThing namedPat)
-    ParenP _ p             -> patternQNames p
-    WildP _                -> []
-    AbsurdP _              -> []
-    AsP _ x p              -> patternQNames p
-    DotP{}                 -> []
-    LitP _                 -> []
-    QuoteP _               -> []
-    InstanceP _ (namedPat) -> patternQNames (namedThing namedPat)
-    RecP _ fs              -> concatMap (patternQNames . (^. exprFieldA)) fs
-
--- | Get all the identifiers in a pattern in left-to-right order.
-patternNames :: Pattern -> [Name]
-patternNames = map unqualify . patternQNames
-
-{--------------------------------------------------------------------------
     Instances
  --------------------------------------------------------------------------}
 
@@ -558,6 +555,7 @@
       Let r _ _          -> r
       Paren r _          -> r
       IdiomBrackets r _  -> r
+      DoBlock r _        -> r
       As r _ _           -> r
       Dot r _            -> r
       Absurd r           -> r
@@ -574,6 +572,7 @@
       Tactic r _ _       -> r
       DontCare{}         -> noRange
       Equal r _ _        -> r
+      Ellipsis r         -> r
 
 -- instance HasRange Telescope where
 --     getRange (TeleBind bs) = getRange bs
@@ -635,17 +634,25 @@
   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
+  getRange (LHS p eqns ws) = fuseRange p (eqns ++ ws)
 
 instance HasRange LHSCore where
   getRange (LHSHead f ps)              = fuseRange f ps
   getRange (LHSProj d ps1 lhscore ps2) = d `fuseRange` ps1 `fuseRange` lhscore `fuseRange` ps2
+  getRange (LHSWith f wps ps)          = f `fuseRange` wps `fuseRange` ps
 
 instance HasRange RHS where
   getRange AbsurdRHS = noRange
   getRange (RHS e)   = getRange e
 
+instance HasRange LamClause where
+  getRange (LamClause lhs rhs wh _) = getRange (lhs, rhs, wh)
+
+instance HasRange DoStmt where
+  getRange (DoBind r _ _ _) = r
+  getRange (DoThen e)       = getRange e
+  getRange (DoLet r _)      = r
+
 instance HasRange Pragma where
   getRange (OptionsPragma r _)               = r
   getRange (BuiltinPragma r _ _)             = r
@@ -662,12 +669,13 @@
   getRange (ForeignPragma r _ _)             = r
   getRange (StaticPragma r _)                = r
   getRange (InjectivePragma r _)             = r
-  getRange (InlinePragma r _)                = r
+  getRange (InlinePragma r _ _)              = r
   getRange (ImportPragma r _)                = r
   getRange (ImportUHCPragma r _)             = r
   getRange (ImpossiblePragma r)              = r
   getRange (EtaPragma r _)                   = r
   getRange (TerminationCheckPragma r _)      = r
+  getRange (WarningOnUsage r _ _)            = r
   getRange (CatchallPragma r)                = r
   getRange (DisplayPragma r _ _)             = r
   getRange (NoPositivityCheckPragma r)       = r
@@ -689,8 +697,10 @@
   getRange (QuoteP r)         = r
   getRange (HiddenP r _)      = r
   getRange (InstanceP r _)    = r
-  getRange (DotP r _ _)       = r
+  getRange (DotP r _)         = r
   getRange (RecP r _)         = r
+  getRange (EllipsisP r)      = r
+  getRange (WithP r _)        = r
 
 -- SetRange instances
 ------------------------------------------------------------------------
@@ -711,8 +721,10 @@
   setRange r (QuoteP _)         = QuoteP r
   setRange r (HiddenP _ p)      = HiddenP r p
   setRange r (InstanceP _ p)    = InstanceP r p
-  setRange r (DotP _ o e)       = DotP r o e
+  setRange r (DotP _ e)         = DotP r e
   setRange r (RecP _ fs)        = RecP r fs
+  setRange r (EllipsisP _)      = EllipsisP r
+  setRange r (WithP _ p)        = WithP r p
 
 -- KillRange instances
 ------------------------------------------------------------------------
@@ -779,6 +791,7 @@
   killRange (Let _ d e)          = killRange2 (Let noRange) d e
   killRange (Paren _ e)          = killRange1 (Paren noRange) e
   killRange (IdiomBrackets _ e)  = killRange1 (IdiomBrackets noRange) e
+  killRange (DoBlock _ ss)       = killRange1 (DoBlock noRange) ss
   killRange (Absurd _)           = Absurd noRange
   killRange (As _ n e)           = killRange2 (As noRange) n e
   killRange (Dot _ e)            = killRange1 (Dot noRange) e
@@ -791,15 +804,23 @@
   killRange (Tactic _ t es)      = killRange2 (Tactic noRange) t es
   killRange (DontCare e)         = killRange1 DontCare e
   killRange (Equal _ x y)        = Equal noRange x y
+  killRange (Ellipsis _)         = Ellipsis noRange
 
 instance KillRange LamBinding where
   killRange (DomainFree i b) = killRange2 DomainFree i 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
+  killRange (LHS p r w)     = killRange3 LHS p r w
 
+instance KillRange LamClause where
+  killRange (LamClause a b c d) = killRange4 LamClause a b c d
+
+instance KillRange DoStmt where
+  killRange (DoBind r p e w) = killRange4 DoBind r p e w
+  killRange (DoThen e)       = killRange1 DoThen e
+  killRange (DoLet r ds)     = killRange2 DoLet r ds
+
 instance KillRange ModuleApplication where
   killRange (SectionApp _ t e)    = killRange2 (SectionApp noRange) t e
   killRange (RecordModuleIFS _ q) = killRange1 (RecordModuleIFS noRange) q
@@ -810,7 +831,7 @@
 
 instance KillRange Pattern where
   killRange (IdentP q)        = killRange1 IdentP q
-  killRange (AppP p n)        = killRange2 AppP p n
+  killRange (AppP p ps)       = killRange2 AppP p ps
   killRange (RawAppP _ p)     = killRange1 (RawAppP noRange) p
   killRange (OpAppP _ n ns p) = killRange3 (OpAppP noRange) n ns p
   killRange (HiddenP _ n)     = killRange1 (HiddenP noRange) n
@@ -819,10 +840,12 @@
   killRange (WildP _)         = WildP noRange
   killRange (AbsurdP _)       = AbsurdP noRange
   killRange (AsP _ n p)       = killRange2 (AsP noRange) n p
-  killRange (DotP _ o e)      = killRange1 (DotP noRange) o e
+  killRange (DotP _ e)        = killRange1 (DotP noRange) e
   killRange (LitP l)          = killRange1 LitP l
   killRange (QuoteP _)        = QuoteP noRange
   killRange (RecP _ fs)       = killRange1 (RecP noRange) fs
+  killRange (EllipsisP _)     = EllipsisP noRange
+  killRange (WithP _ p)       = killRange1 (WithP noRange) p
 
 instance KillRange Pragma where
   killRange (OptionsPragma _ s)               = OptionsPragma noRange s
@@ -838,13 +861,14 @@
   killRange (HaskellCodePragma _ s)           = HaskellCodePragma noRange s
   killRange (StaticPragma _ q)                = killRange1 (StaticPragma noRange) q
   killRange (InjectivePragma _ q)             = killRange1 (InjectivePragma noRange) q
-  killRange (InlinePragma _ q)                = killRange1 (InlinePragma noRange) q
+  killRange (InlinePragma _ b q)              = killRange1 (InlinePragma noRange b) q
   killRange (ImportPragma _ s)                = ImportPragma noRange s
   killRange (ImportUHCPragma _ s)             = ImportUHCPragma noRange s
   killRange (CompilePragma _ b q s)           = killRange1 (\ q -> CompilePragma noRange b q s) q
   killRange (ForeignPragma _ b s)             = ForeignPragma noRange b s
   killRange (ImpossiblePragma _)              = ImpossiblePragma noRange
   killRange (TerminationCheckPragma _ t)      = TerminationCheckPragma noRange (killRange t)
+  killRange (WarningOnUsage _ nm str)         = WarningOnUsage noRange nm str
   killRange (CatchallPragma _)                = CatchallPragma noRange
   killRange (DisplayPragma _ lhs rhs)         = killRange2 (DisplayPragma noRange) lhs rhs
   killRange (EtaPragma _ q)                   = killRange1 (EtaPragma noRange) q
@@ -896,6 +920,7 @@
   rnf (Let _ a b)        = rnf a `seq` rnf b
   rnf (Paren _ a)        = rnf a
   rnf (IdiomBrackets _ a)= rnf a
+  rnf (DoBlock _ a)      = rnf a
   rnf (Absurd _)         = ()
   rnf (As _ a b)         = rnf a `seq` rnf b
   rnf (Dot _ a)          = rnf a
@@ -908,6 +933,7 @@
   rnf (Unquote _)        = ()
   rnf (DontCare a)       = rnf a
   rnf (Equal _ a b)      = rnf a `seq` rnf b
+  rnf (Ellipsis _)       = ()
 
 -- | Ranges are not forced.
 
@@ -923,9 +949,11 @@
   rnf (WildP _) = ()
   rnf (AbsurdP _) = ()
   rnf (AsP _ a b) = rnf a `seq` rnf b
-  rnf (DotP _ a b) = rnf a `seq` rnf b
+  rnf (DotP _ a) = rnf a
   rnf (LitP a) = rnf a
   rnf (RecP _ a) = rnf a
+  rnf (EllipsisP _) = ()
+  rnf (WithP _ a) = rnf a
 
 -- | Ranges are not forced.
 
@@ -973,12 +1001,13 @@
   rnf (ForeignPragma _ b s)             = rnf b `seq` rnf s
   rnf (StaticPragma _ a)                = rnf a
   rnf (InjectivePragma _ a)             = rnf a
-  rnf (InlinePragma _ a)                = rnf a
+  rnf (InlinePragma _ _ a)              = rnf a
   rnf (ImportPragma _ a)                = rnf a
   rnf (ImportUHCPragma _ a)             = rnf a
   rnf (ImpossiblePragma _)              = ()
   rnf (EtaPragma _ a)                   = rnf a
   rnf (TerminationCheckPragma _ a)      = rnf a
+  rnf (WarningOnUsage _ a b)            = rnf a `seq` rnf b
   rnf (CatchallPragma _)                = ()
   rnf (DisplayPragma _ a b)             = rnf a `seq` rnf b
   rnf (NoPositivityCheckPragma _)       = ()
@@ -1015,8 +1044,7 @@
 -- | Ranges are not forced.
 
 instance NFData LHS where
-  rnf (LHS a b c d)      = rnf a `seq` rnf b `seq` rnf c `seq` rnf d
-  rnf (Ellipsis _ a b c) = rnf a `seq` rnf b `seq` rnf c
+  rnf (LHS a b c) = rnf a `seq` rnf b `seq` rnf c
 
 instance NFData a => NFData (FieldAssignment' a) where
   rnf (FieldAssignment a b) = rnf a `seq` rnf b
@@ -1029,6 +1057,9 @@
   rnf (AnyWhere a)    = rnf a
   rnf (SomeWhere a b c) = rnf a `seq` rnf b `seq` rnf c
 
+instance NFData LamClause where
+  rnf (LamClause a b c d) = rnf (a, b, c, d)
+
 instance NFData a => NFData (LamBinding' a) where
   rnf (DomainFree a b) = rnf a `seq` rnf b
   rnf (DomainFull a)   = rnf a
@@ -1039,3 +1070,8 @@
 instance NFData a => NFData (RHS' a) where
   rnf AbsurdRHS = ()
   rnf (RHS a)   = rnf a
+
+instance NFData DoStmt where
+  rnf (DoBind _ p e w) = rnf (p, e, w)
+  rnf (DoThen e)       = rnf e
+  rnf (DoLet _ ds)     = rnf ds
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
@@ -24,7 +24,11 @@
 --
 --   * Report basic well-formedness error,
 --     when one of the above transformation fails.
+--     When possible, errors should be deferred to the scope checking phase
+--     (ConcreteToAbstract), where we are in the TCM and can produce more
+--     informative error messages.
 
+
 module Agda.Syntax.Concrete.Definitions
     ( NiceDeclaration(..)
     , NiceConstructor, NiceTypeSignature
@@ -36,6 +40,7 @@
     , notSoNiceDeclarations
     , niceHasAbstract
     , Measure
+    , declarationWarningName
     ) where
 
 import Prelude hiding (null)
@@ -44,23 +49,20 @@
 import Control.Applicative hiding (empty)
 import Control.Monad.State
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Foldable ( foldMap )
-#endif
-
 import qualified Data.Map as Map
 import Data.Map (Map)
 import Data.Maybe
-import Data.Semigroup ( Semigroup, Monoid, (<>), mempty, mappend )
+import Data.Monoid ( Monoid, mempty, mappend )
+import Data.Semigroup ( Semigroup, (<>) )
 import qualified Data.List as List
 import qualified Data.Set as Set
 import Data.Traversable (Traversable, traverse)
 import qualified Data.Traversable as Trav
 
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import Agda.Syntax.Concrete
+import Agda.Syntax.Concrete.Pattern
 import Agda.Syntax.Common hiding (TerminationCheck())
 import qualified Agda.Syntax.Common as Common
 import Agda.Syntax.Position
@@ -68,8 +70,11 @@
 import Agda.Syntax.Notation
 import Agda.Syntax.Concrete.Pretty ()
 
+import Agda.Interaction.Options.Warnings
+
 import Agda.TypeChecking.Positivity.Occurrence
 
+import Agda.Utils.AffineHole
 import Agda.Utils.Except ( MonadError(throwError,catchError) )
 import Agda.Utils.Function
 import Agda.Utils.Functor
@@ -142,11 +147,11 @@
       --   Andreas, 2017-01-01: Because of issue #2372, we add 'IsInstance' here.
       --   An alias should know that it is an instance.
   | DataDef Range Fixity' IsAbstract PositivityCheck Name [LamBinding] [NiceConstructor]
-  | RecDef Range Fixity' IsAbstract PositivityCheck Name (Maybe (Ranged Induction)) (Maybe Bool) (Maybe (ThingWithFixity Name, IsInstance)) [LamBinding] [NiceDeclaration]
+  | RecDef Range Fixity' IsAbstract PositivityCheck Name (Maybe (Ranged Induction)) (Maybe HasEta) (Maybe (ThingWithFixity Name, IsInstance)) [LamBinding] [NiceDeclaration]
   | NicePatternSyn Range Fixity' Name [Arg Name] Pattern
   | NiceUnquoteDecl Range [Fixity'] Access IsAbstract IsInstance TerminationCheck [Name] Expr
   | NiceUnquoteDef Range [Fixity'] Access IsAbstract TerminationCheck [Name] Expr
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 type TerminationCheck = Common.TerminationCheck Measure
 
@@ -164,18 +169,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 Catchall LHS RHS WhereClause [Clause]
-    deriving (Typeable, Data, Show)
+    deriving (Data, Show)
 
 -- | The exception type.
 data DeclarationException
         = MultipleFixityDecls [(Name, [Fixity'])]
         | MultiplePolarityPragmas [Name]
+        | MultipleEllipses Pattern
         | InvalidName Name
         | DuplicateDefinition Name
         | MissingDefinition Name
         | MissingWithClauses Name
-        | 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 Params Params
           -- ^ 'Name' of symbol, 'Params' of signature, 'Params' of definition.
@@ -184,30 +188,61 @@
         | DeclarationPanic String
         | WrongContentBlock KindOfBlock Range
         | AmbiguousFunClauses LHS [Name] -- ^ in a mutual block, a clause could belong to any of the @[Name]@ type signatures
-        | InvalidTerminationCheckPragma Range
         | InvalidMeasureMutual Range
           -- ^ In a mutual block, all or none need a MEASURE pragma.
           --   Range is of mutual block.
         | PragmaNoTerminationCheck Range
           -- ^ Pragma @{-# NO_TERMINATION_CHECK #-}@ has been replaced
           --   by {-# TERMINATING #-} and {-# NON_TERMINATING #-}.
-        | InvalidCatchallPragma Range
         | UnquoteDefRequiresSignature [Name]
         | BadMacroDef NiceDeclaration
-        | InvalidNoPositivityCheckPragma Range
-
-    deriving (Typeable, Data, Show)
+    deriving (Data, Show)
 
 -- | Non-fatal errors encountered in the Nicifier
 data DeclarationWarning
   = UnknownNamesInFixityDecl [Name]
+  | UnknownFixityInMixfixDecl [Name]
   | UnknownNamesInPolarityPragmas [Name]
   | PolarityPragmasButNotPostulates [Name]
   | UselessPrivate Range
   | UselessAbstract Range
   | UselessInstance Range
-  deriving (Typeable, Data, Show)
+  | EmptyMutual Range     -- ^ Empty @mutual@    block.
+  | EmptyAbstract Range   -- ^ Empty @abstract@  block.
+  | EmptyPrivate Range    -- ^ Empty @private@   block.
+  | EmptyInstance Range   -- ^ Empty @instance@  block
+  | EmptyMacro Range      -- ^ Empty @macro@     block.
+  | EmptyPostulate Range  -- ^ Empty @postulate@ block.
+  | InvalidTerminationCheckPragma Range
+      -- ^ A {-# TERMINATING #-} and {-# NON_TERMINATING #-} pragma
+      --   that does not apply to any function.
+  | InvalidNoPositivityCheckPragma Range
+      -- ^ A {-# NO_POSITIVITY_CHECK #-} pragma
+      --   that does not apply to any data or record type.
+  | InvalidCatchallPragma Range
+      -- ^ A {-# CATCHALL #-} pragma
+      --   that does not precede a function clause.
+  deriving (Data, Show)
 
+declarationWarningName :: DeclarationWarning -> WarningName
+declarationWarningName dw = case dw of
+  UnknownNamesInFixityDecl{}        -> UnknownNamesInFixityDecl_
+  UnknownFixityInMixfixDecl{}       -> UnknownFixityInMixfixDecl_
+  UnknownNamesInPolarityPragmas{}   -> UnknownNamesInPolarityPragmas_
+  PolarityPragmasButNotPostulates{} -> PolarityPragmasButNotPostulates_
+  UselessPrivate{}                  -> UselessPrivate_
+  UselessAbstract{}                 -> UselessAbstract_
+  UselessInstance{}                 -> UselessInstance_
+  EmptyMutual{}                     -> EmptyMutual_
+  EmptyAbstract{}                   -> EmptyAbstract_
+  EmptyPrivate{}                    -> EmptyPrivate_
+  EmptyInstance{}                   -> EmptyInstance_
+  EmptyMacro{}                      -> EmptyMacro_
+  EmptyPostulate{}                  -> EmptyPostulate_
+  InvalidTerminationCheckPragma{}   -> InvalidTerminationCheckPragma_
+  InvalidNoPositivityCheckPragma{}  -> InvalidNoPositivityCheckPragma_
+  InvalidCatchallPragma{}           -> InvalidCatchallPragma_
+
 -- | Several declarations expect only type signatures as sub-declarations.  These are:
 data KindOfBlock
   = PostulateBlock  -- ^ @postulate@
@@ -215,18 +250,17 @@
   | InstanceBlock   -- ^ @instance@.  Actually, here all kinds of sub-declarations are allowed a priori.
   | FieldBlock      -- ^ @field@.  Ensured by parser.
   | DataBlock       -- ^ @data ... where@.  Here we got a bad error message for Agda-2.5 (Issue 1698).
-  deriving (Typeable, Data, Eq, Ord, Show)
+  deriving (Data, Eq, Ord, Show)
 
 
 instance HasRange DeclarationException where
   getRange (MultipleFixityDecls xs)             = getRange (fst $ head xs)
   getRange (MultiplePolarityPragmas xs)         = getRange (head xs)
+  getRange (MultipleEllipses d)                 = getRange d
   getRange (InvalidName x)                      = getRange x
   getRange (DuplicateDefinition x)              = getRange x
   getRange (MissingDefinition x)                = getRange x
   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
@@ -234,21 +268,28 @@
   getRange (Codata r)                           = r
   getRange (DeclarationPanic _)                 = noRange
   getRange (WrongContentBlock _ r)              = r
-  getRange (InvalidTerminationCheckPragma r)    = r
   getRange (InvalidMeasureMutual r)             = r
   getRange (PragmaNoTerminationCheck r)         = r
-  getRange (InvalidCatchallPragma r)            = r
   getRange (UnquoteDefRequiresSignature x)      = getRange x
   getRange (BadMacroDef d)                      = getRange d
-  getRange (InvalidNoPositivityCheckPragma r)   = r
 
 instance HasRange DeclarationWarning where
   getRange (UnknownNamesInFixityDecl xs)        = getRange . head $ xs
+  getRange (UnknownFixityInMixfixDecl xs)       = getRange . head $ xs
   getRange (UnknownNamesInPolarityPragmas xs)   = getRange . head $ xs
   getRange (PolarityPragmasButNotPostulates xs) = getRange . head $ xs
   getRange (UselessPrivate r)                   = r
   getRange (UselessAbstract r)                  = r
   getRange (UselessInstance r)                  = r
+  getRange (EmptyMutual r)                      = r
+  getRange (EmptyAbstract r)                    = r
+  getRange (EmptyPrivate r)                     = r
+  getRange (EmptyInstance r)                    = r
+  getRange (EmptyMacro r)                       = r
+  getRange (EmptyPostulate r)                   = r
+  getRange (InvalidTerminationCheckPragma r)    = r
+  getRange (InvalidNoPositivityCheckPragma r)   = r
+  getRange (InvalidCatchallPragma r)            = r
 
 instance HasRange NiceDeclaration where
   getRange (Axiom r _ _ _ _ _ _ _ _)         = r
@@ -282,6 +323,8 @@
         f (x, fs) = pretty x Pretty.<> text ": " <+> fsep (map pretty fs)
   pretty (MultiplePolarityPragmas xs) = fsep $
     pwords "Multiple polarity pragmas for" ++ map pretty xs
+  pretty (MultipleEllipses p) = fsep $
+    pwords "Multiple ellipses in left-hand side" ++ [pretty p]
   pretty (InvalidName x) = fsep $
     pwords "Invalid name:" ++ [pretty x]
   pretty (DuplicateDefinition x) = fsep $
@@ -290,10 +333,7 @@
     pwords "Missing definition for" ++ [pretty x]
   pretty (MissingWithClauses x) = fsep $
     pwords "Missing with-clauses for function" ++ [pretty x]
-  pretty (MissingTypeSignature x) = fsep $
-    pwords "Missing type signature for left hand side" ++ [pretty x]
-  pretty (MissingDataSignature x) = fsep $
-    pwords "Missing type signature for " ++ [pretty x]
+
   pretty (WrongDefinition x k k') = fsep $ pretty x :
     pwords ("has been declared as a " ++ show k ++
       ", but is being defined as a " ++ show k')
@@ -314,12 +354,8 @@
       _ -> "Unexpected declaration"
   pretty (PragmaNoTerminationCheck _) = fsep $
     pwords "Pragma {-# NO_TERMINATION_CHECK #-} has been removed.  To skip the termination check, label your definitions either as {-# TERMINATING #-} or {-# NON_TERMINATING #-}."
-  pretty (InvalidTerminationCheckPragma _) = fsep $
-    pwords "Termination checking pragmas can only precede a mutual block or a function definition."
   pretty (InvalidMeasureMutual _) = fsep $
     pwords "In a mutual block, either all functions must have the same (or no) termination checking pragma."
-  pretty (InvalidCatchallPragma _) = fsep $
-    pwords "The CATCHALL pragma can only preceed a function clause."
   pretty (UnquoteDefRequiresSignature xs) = fsep $
     pwords "Missing type signatures for unquoteDef" ++ map pretty xs
   pretty (BadMacroDef nd) = fsep $
@@ -330,12 +366,12 @@
     "The codata construction has been removed. " ++
     "Use the INFINITY builtin instead."
   pretty (DeclarationPanic s) = text s
-  pretty (InvalidNoPositivityCheckPragma _) = fsep $
-    pwords "No positivity checking pragmas can only precede a mutual block or a data/record definition."
 
 instance Pretty DeclarationWarning where
   pretty (UnknownNamesInFixityDecl xs) = fsep $
     pwords "The following names are not declared in the same scope as their syntax or fixity declaration (i.e., either not in scope at all, imported from another module, or declared in a super module):" ++ map pretty xs
+  pretty (UnknownFixityInMixfixDecl xs) = fsep $
+    pwords "The following mixfix names do not have an associated fixity declaration:" ++ map pretty xs
   pretty (UnknownNamesInPolarityPragmas xs) = fsep $
     pwords "The following names are not declared in the same scope as their polarity pragmas (they could for instance be out of scope, imported from another module, or declared in a super module):" ++ map pretty xs
   pretty (PolarityPragmasButNotPostulates xs) = fsep $
@@ -346,6 +382,18 @@
     pwords "Using abstract here has no effect. Abstract applies to only definitions like data definitions, record type definitions and function clauses."
   pretty (UselessInstance _)      = fsep $
     pwords "Using instance here has no effect. Instance applies only to declarations that introduce new identifiers into the module, like type signatures and axioms."
+  pretty (EmptyMutual    _) = fsep $ pwords "Empty mutual block."
+  pretty (EmptyAbstract  _) = fsep $ pwords "Empty abstract block."
+  pretty (EmptyPrivate   _) = fsep $ pwords "Empty private block."
+  pretty (EmptyInstance  _) = fsep $ pwords "Empty instance block."
+  pretty (EmptyMacro     _) = fsep $ pwords "Empty macro block."
+  pretty (EmptyPostulate _) = fsep $ pwords "Empty postulate block."
+  pretty (InvalidTerminationCheckPragma _) = fsep $
+    pwords "Termination checking pragmas can only precede a function definition or a mutual block (that contains a function definition)."
+  pretty (InvalidNoPositivityCheckPragma _) = fsep $
+    pwords "No positivity checking pragmas can only precede a data/record definition or a mutual block (that contains a data/record definition)."
+  pretty (InvalidCatchallPragma _) = fsep $
+    pwords "The CATCHALL pragma can only precede a function clause."
 
 declName :: NiceDeclaration -> String
 declName Axiom{}             = "Postulates"
@@ -386,7 +434,7 @@
     -- ^ Name of a record type with parameters.
   | FunName  TerminationCheck
     -- ^ Name of a function.
-  deriving (Typeable, Data)
+  deriving Data
 
 -- Ignore pragmas when checking equality
 instance Eq DataRecOrFun where
@@ -719,6 +767,11 @@
       -- return $ Map.restrictKeys polarities declared
       return $ Map.filterWithKey (\ k _ -> Set.member k declared) polarities
 
+  -- If we have mixfix identifiers without a corresponding fixity
+  -- declaration, we raise a warning
+  ifNull (Set.filter isOpenMixfix declared Set.\\ Map.keysSet fixs) (return ()) $
+    niceWarning . UnknownFixityInMixfixDecl . Set.toList
+
   -- Run the nicifier in an initial environment of fixity decls
   -- and polarities.  But keep the warnings.
   st <- get
@@ -748,7 +801,7 @@
     declaredNames d = case d of
       TypeSig _ x _        -> [x]
       Field _ x _          -> [x]
-      FunClause (LHS p [] [] []) _ _ _
+      FunClause (LHS p [] []) _ _ _
         | IdentP (QName x) <- removeSingletonRawAppP p
                            -> [x]
       FunClause{}          -> []
@@ -779,25 +832,12 @@
     inferMutualBlocks (d : ds) =
       case declKind d of
         OtherDecl    -> (d :) <$> inferMutualBlocks ds
-        LoneDefs _ xs -> __IMPOSSIBLE__
+        LoneDefs{}   -> (d :) <$> inferMutualBlocks ds  -- Andreas, 2017-10-09, issue #2576: report error in ConcreteToAbstract
         LoneSig k x  -> do
           addLoneSig x k
           ((tcs, pcs), (ds0, ds1)) <- untilAllDefined ([terminationCheck k], [positivityCheck k]) ds
           tc <- combineTermChecks (getRange d) tcs
-
-          -- Record modules are, for performance reasons, not always
-          -- placed in mutual blocks.
-
-          -- ASR (01 January 2016): If the record module has a
-          -- NO_POSITIVITY_CHECK pragma, it is placed in a mutual
-          -- block. See Issue 1760.
-          let prefix :: [NiceDeclaration] -> [NiceDeclaration]
-              prefix = case (d, ds0) of
-                (NiceRecSig{}, [r@(RecDef _ _ _ True _ _ _ _ _ _)]) -> ([d, r] ++)
-                _                                                   ->
-                  (NiceMutual (getRange (d : ds0)) tc (and pcs) (d : ds0) :)
-
-          prefix <$> inferMutualBlocks ds1
+          (NiceMutual (getRange (d : ds0)) tc (and pcs) (d : ds0) :) <$> inferMutualBlocks ds1
       where
         untilAllDefined :: ([TerminationCheck], [PositivityCheck])
                         -> [NiceDeclaration]
@@ -808,8 +848,9 @@
             case ds of
               []     -> __IMPOSSIBLE__ <$ (checkLoneSigs . Map.toList =<< use loneSigs)
               d : ds -> case declKind d of
-                LoneSig k x ->
-                  addLoneSig x k >> cons d (untilAllDefined (terminationCheck k : tc, positivityCheck k : pc) ds)
+                LoneSig k x -> do
+                  addLoneSig x k
+                  cons d (untilAllDefined (terminationCheck k : tc, positivityCheck k : pc) ds)
                 LoneDefs k xs -> do
                   mapM_ removeLoneSig xs
                   cons d (untilAllDefined (terminationCheck k : tc, positivityCheck k : pc) ds)
@@ -832,9 +873,12 @@
       (xs ++) <$> nice ys
 
     nice1 :: [Declaration] -> Nice ([NiceDeclaration], [Declaration])
-    nice1 []     = __IMPOSSIBLE__
-    nice1 (d:ds) = case d of
+    nice1 []     = return ([], []) -- Andreas, 2017-09-16, issue #2759: no longer __IMPOSSIBLE__
+    nice1 (d:ds) = do
+      let justWarning w = do niceWarning w; nice1 ds
 
+      case d of
+
         (TypeSig info x t)            -> do
           termCheck <- use terminationCheckPragma
           fx <- getFixity x
@@ -862,7 +906,7 @@
             [] -> case lhs of
               -- Subcase: The lhs is single identifier (potentially anonymous).
               -- Treat it as a function clause without a type signature.
-              LHS p [] [] [] | Just x <- isSingleIdentifierP p -> do
+              LHS p [] [] | Just x <- isSingleIdentifierP p -> do
                 d  <- mkFunDef defaultArgInfo termCheck x Nothing [d] -- fun def without type signature is relevant
                 return (d , ds)
               -- Subcase: The lhs is a proper pattern.
@@ -874,7 +918,8 @@
             -- case: clauses match exactly one of the sigs
             [(x,(fits,rest))] -> do
                removeLoneSig x
-               cs  <- mkClauses x (expandEllipsis fits) False
+               ds  <- expandEllipsis fits
+               cs  <- mkClauses x ds False
                fx  <- getFixity x
                return ([FunDef (getRange fits) fits fx ConcreteDef NotInstanceDef termCheck x cs] , rest)
 
@@ -911,21 +956,27 @@
                     niceDeclarations r x ((tel,) <$> mt) (Just (tel, cs))
               <*> return ds
 
+        Mutual r []  -> justWarning $ EmptyMutual r
         Mutual r ds' ->
           (,ds) <$> (singleton <$> (mkOldMutual r =<< nice ds'))
 
+        Abstract r []  -> justWarning $ EmptyAbstract r
         Abstract r ds' ->
           (,ds) <$> (abstractBlock r =<< nice ds')
 
+        Private r UserWritten []  -> justWarning $ EmptyPrivate r
         Private r o ds' ->
           (,ds) <$> (privateBlock r o =<< nice ds')
 
+        InstanceB r []  -> justWarning $ EmptyInstance r
         InstanceB r ds' ->
           (,ds) <$> (instanceBlock r =<< nice ds')
 
+        Macro r []  -> justWarning $ EmptyMacro r
         Macro r ds' ->
           (,ds) <$> (macroBlock r =<< nice ds')
 
+        Postulate r []  -> justWarning $ EmptyPostulate r
         Postulate _ ds' ->
           (,ds) <$> (mapM setPolarity =<< niceAxioms PostulateBlock ds')
           where
@@ -976,8 +1027,9 @@
     nicePragma (TerminationCheckPragma r (TerminationMeasure _ x)) ds =
       if canHaveTerminationMeasure ds then
         withTerminationCheckPragma (TerminationMeasure r x) $ nice1 ds
-      else
-        throwError $ InvalidTerminationCheckPragma r
+      else do
+        niceWarning $ InvalidTerminationCheckPragma r
+        nice1 ds
 
     nicePragma (TerminationCheckPragma r NoTerminationCheck) ds =
       throwError $ PragmaNoTerminationCheck r
@@ -985,20 +1037,23 @@
     nicePragma (TerminationCheckPragma r tc) ds =
       if canHaveTerminationCheckPragma ds then
         withTerminationCheckPragma tc $ nice1 ds
-      else
-        throwError $ InvalidTerminationCheckPragma r
+      else do
+        niceWarning $ InvalidTerminationCheckPragma r
+        nice1 ds
 
     nicePragma (CatchallPragma r) ds =
       if canHaveCatchallPragma ds then
         withCatchallPragma True $ nice1 ds
-      else
-        throwError $ InvalidCatchallPragma r
+      else do
+        niceWarning $ InvalidCatchallPragma r
+        nice1 ds
 
     nicePragma (NoPositivityCheckPragma r) ds =
       if canHaveNoPositivityCheckPragma ds then
         withPositivityCheckPragma False $ nice1 ds
-      else
-        throwError $ InvalidNoPositivityCheckPragma r
+      else do
+        niceWarning $ InvalidNoPositivityCheckPragma r
+        nice1 ds
 
     nicePragma (PolarityPragma{}) ds = return ([], ds)
 
@@ -1014,7 +1069,7 @@
     canHaveTerminationCheckPragma :: [Declaration] -> Bool
     canHaveTerminationCheckPragma []     = False
     canHaveTerminationCheckPragma (d:ds) = case d of
-      Mutual{}      -> True
+      Mutual _ ds   -> any (canHaveTerminationCheckPragma . singleton) ds
       TypeSig{}     -> True
       FunClause{}   -> True
       UnquoteDecl{} -> True
@@ -1031,7 +1086,7 @@
     canHaveNoPositivityCheckPragma :: [Declaration] -> Bool
     canHaveNoPositivityCheckPragma []     = False
     canHaveNoPositivityCheckPragma (d:ds) = case d of
-      Mutual{}                    -> True
+      Mutual _ ds                 -> any (canHaveNoPositivityCheckPragma . singleton) ds
       (Data _ Inductive _ _ _ _)  -> True
       (DataSig _ Inductive _ _ _) -> True
       Record{}                    -> True
@@ -1039,6 +1094,7 @@
       (Pragma p) | isAttachedPragma p -> canHaveNoPositivityCheckPragma ds
       _                           -> False
 
+    -- Pragma that attaches to the following declaration.
     isAttachedPragma :: Pragma -> Bool
     isAttachedPragma p = case p of
       TerminationCheckPragma{}  -> True
@@ -1051,7 +1107,7 @@
     defaultTypeSig :: DataRecOrFun -> Name -> Maybe Expr -> Nice (Maybe Expr)
     defaultTypeSig k x t@Just{} = return t
     defaultTypeSig k x Nothing  = do
-      caseMaybeM (getSig x) (throwError $ MissingDataSignature x) $ \ k' -> do
+      caseMaybeM (getSig x) (return Nothing) $ \ k' -> do
         unless (sameKind k k') $ throwError $ WrongDefinition x k' k
         unless (k == k') $ matchParameters x k' k
         Nothing <$ removeLoneSig x
@@ -1111,7 +1167,8 @@
 
     -- Create a function definition.
     mkFunDef info termCheck x mt ds0 = do
-      cs <- mkClauses x (expandEllipsis ds0) False
+      ds <- expandEllipsis ds0
+      cs <- mkClauses x ds False
       f  <- getFixity x
       return [ FunSig (fuseRange x t) f PublicAccess ConcreteDef NotInstanceDef NotMacroDef info termCheck x t
              , FunDef (getRange ds0) ds0 f ConcreteDef NotInstanceDef termCheck x cs ]
@@ -1123,93 +1180,81 @@
     underscore r = Underscore r Nothing
 
 
-    expandEllipsis :: [Declaration] -> [Declaration]
-    expandEllipsis [] = []
-    expandEllipsis (d@(FunClause Ellipsis{} _ _ _) : ds) =
-      d : expandEllipsis ds
-    expandEllipsis (d@(FunClause lhs@(LHS p ps _ _) _ _ _) : ds) =
-      d : expand (wipe p) (map wipe ps) ds
+    expandEllipsis :: [Declaration] -> Nice [Declaration]
+    expandEllipsis [] = return []
+    expandEllipsis (d@(FunClause lhs@(LHS p _ _) _ _ _) : ds)
+      | hasEllipsis p = (d :) <$> expandEllipsis ds
+      | otherwise     = (d :) <$> expand (killRange p) ds
       where
-        expand _ _ [] = []
-        expand p ps (d@(Pragma (CatchallPragma r)) : ds) = d : expand p ps ds
-        expand p ps (FunClause (Ellipsis r ps' eqs es) rhs wh ca : ds) =
-          FunClause (LHS (setRange r p) ((setRange r ps) ++ ps') eqs es) rhs wh ca
-            : expand p (applyUnless (null es) (++ (map wipe ps')) ps) ds
-                       -- If we have with-expressions (es /= []) then the following
-                       -- ellipses also get the additional with patterns ps'
-        -- We can have ellipses after a fun clause.
-        -- They refer to the last clause that introduced new with-expressions.
-        expand p ps (d@(FunClause (LHS _ _ _ []) _ _ _) : ds) =
-          d : expand p ps ds
-        -- Same here: If we have new with-expressions, the next ellipses will
-        -- refer to us.
-        expand _ _ (d@(FunClause (LHS p' ps' _ (_ : _)) _ _ _) : ds) =
-          d : expand (wipe p') (map wipe ps') ds
-          -- Andreas, Jesper, 2017-05-13, issue #2578
-          -- Need to update the range also on the next with-patterns.
-        expand _ _ (_ : ds) = __IMPOSSIBLE__
-    expandEllipsis (_ : ds) = __IMPOSSIBLE__
-
-    -- Before copying a pattern, remove traces to its origin.
-    wipe :: Pattern -> Pattern
-    wipe = killRange . setInserted
-
-    setInserted :: Pattern -> Pattern
-    setInserted p = case p of
-      IdentP{} -> p
-      QuoteP{} -> p
-      AppP p q -> AppP (setInserted p) (fmap (fmap setInserted) q)
-      RawAppP r ps -> RawAppP r (map setInserted ps)
-      OpAppP r c ns ps -> OpAppP r c ns (map (fmap $ fmap setInserted) ps)
-      HiddenP r p -> HiddenP r (fmap setInserted p)
-      InstanceP r p -> InstanceP r (fmap setInserted p)
-      ParenP r p -> ParenP r (setInserted p)
-      WildP{} -> p
-      AbsurdP{} -> p
-      AsP r n p -> AsP r n (setInserted p)
-      DotP r _ e -> DotP r Inserted e
-      LitP{} -> p
-      RecP r fs -> RecP r (map (fmap setInserted) fs)
+        expand :: Pattern -> [Declaration] -> Nice [Declaration]
+        expand _ [] = return []
+        expand p (d : ds) = do
+          case d of
+            Pragma (CatchallPragma _) -> do
+                  (d :) <$> expand p ds
+            FunClause (LHS p0 eqs es) rhs wh ca -> do
+              case hasEllipsis' p0 of
+                ManyHoles -> throwError $ MultipleEllipses p0
+                OneHole cxt -> do
+                  -- Replace the ellipsis by @p@.
+                  let p1 = cxt p
+                  let d' = FunClause (LHS p1 eqs es) rhs wh ca
+                  -- If we have with-expressions (es /= []) then the following
+                  -- ellipses also get the additional patterns in p0.
+                  (d' :) <$> expand (if null es then p else killRange p1) ds
+                ZeroHoles _ -> do
+                  -- We can have ellipses after a fun clause without.
+                  -- They refer to the last clause that introduced new with-expressions.
+                  -- Same here: If we have new with-expressions, the next ellipses will
+                  -- refer to us.
+                  -- Andreas, Jesper, 2017-05-13, issue #2578
+                  -- Need to update the range also on the next with-patterns.
+                  (d :) <$> expand (if null es then p else killRange p0) ds
+            _ -> __IMPOSSIBLE__
+    expandEllipsis _ = __IMPOSSIBLE__
 
     -- Turn function clauses into nice function clauses.
     mkClauses :: Name -> [Declaration] -> Catchall -> Nice [Clause]
     mkClauses _ [] _ = return []
-    mkClauses x (Pragma (CatchallPragma r) : cs) True  = throwError $ InvalidCatchallPragma r
+    mkClauses x (Pragma (CatchallPragma r) : cs) True  = do
+      niceWarning $ InvalidCatchallPragma r
+      mkClauses x cs True
     mkClauses x (Pragma (CatchallPragma r) : cs) False = do
-      when (null cs) $ throwError $ InvalidCatchallPragma r
+      when (null cs) $ niceWarning $ InvalidCatchallPragma r
       mkClauses x cs True
-    mkClauses x (FunClause lhs@(LHS _ _ _ []) rhs wh ca : cs) catchall =
-      (Clause x (ca || catchall) lhs rhs wh [] :) <$> mkClauses x cs False
-    mkClauses x (FunClause lhs@(LHS _ ps _ es) rhs wh ca : cs) catchall = do
-      when (null with) $ throwError $ MissingWithClauses x
-      wcs <- mkClauses x with False
+
+    mkClauses x (FunClause lhs rhs wh ca : cs) catchall
+      | null (lhsWithExpr lhs) || hasEllipsis lhs  =
+      (Clause x (ca || catchall) lhs rhs wh [] :) <$> mkClauses x cs False   -- Will result in an error later.
+
+    mkClauses x (FunClause lhs rhs wh ca : cs) catchall = do
+      when (null withClauses) $ throwError $ MissingWithClauses x
+      wcs <- mkClauses x withClauses False
       (Clause x (ca || catchall) lhs rhs wh wcs :) <$> mkClauses x cs' False
       where
-        (with, cs') = subClauses cs
+        (withClauses, cs') = subClauses cs
 
         -- A clause is a subclause if the number of with-patterns is
         -- greater or equal to the current number of with-patterns plus the
         -- number of with arguments.
+        numWith = numberOfWithPatterns p + length es where LHS p _ es = lhs
+
         subClauses :: [Declaration] -> ([Declaration],[Declaration])
-        subClauses (c@(FunClause (LHS _ ps' _ _) _ _ _) : cs)
-         | length ps' >= length ps + length es = mapFst (c:) (subClauses cs)
+        subClauses (c@(FunClause (LHS p0 _ _) _ _ _) : cs)
+         | isEllipsis p0 ||
+           numberOfWithPatterns p0 >= numWith = mapFst (c:) (subClauses cs)
          | otherwise                           = ([], c:cs)
-        subClauses (c@(FunClause (Ellipsis _ ps' _ _) _ _ _) : cs)
-         = mapFst (c:) (subClauses cs)
         subClauses (c@(Pragma (CatchallPragma r)) : cs) = case subClauses cs of
           ([], cs') -> ([], c:cs')
           (cs, cs') -> (c:cs, cs')
         subClauses [] = ([],[])
         subClauses _  = __IMPOSSIBLE__
-    mkClauses x (FunClause lhs@Ellipsis{} rhs wh ca : cs) catchall =
-      (Clause x (ca || catchall) lhs rhs wh [] :) <$> mkClauses x cs False   -- Will result in an error later.
     mkClauses _ _ _ = __IMPOSSIBLE__
 
     -- for finding clauses for a type sig in mutual blocks
     couldBeFunClauseOf :: Maybe Fixity' -> Name -> Declaration -> Bool
     couldBeFunClauseOf mFixity x (Pragma (CatchallPragma{})) = True
-    couldBeFunClauseOf mFixity x (FunClause Ellipsis{} _ _ _) = True
-    couldBeFunClauseOf mFixity x (FunClause (LHS p _ _ _) _ _ _) =
+    couldBeFunClauseOf mFixity x (FunClause (LHS p _ _) _ _ _) = hasEllipsis p ||
       let
       pns        = patternNames p
       xStrings   = nameStringParts x
@@ -1235,20 +1280,6 @@
         _ -> False -- trace ("couldBe not (case default)") $ False
     couldBeFunClauseOf _ _ _ = False -- trace ("couldBe not (fun default)") $ False
 
-    -- ASR (27 May 2014). Commented out unused code.
-    -- @isFunClauseOf@ is for non-mutual blocks where clauses must follow the
-    -- type sig immediately
-    -- isFunClauseOf :: Name -> Declaration -> Bool
-    -- isFunClauseOf x (FunClause Ellipsis{} _ _) = True
-    -- 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  -- 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
-    -- isFunClauseOf _ _ = False
-
     isSingleIdentifierP :: Pattern -> Maybe Name
     isSingleIdentifierP p = case removeSingletonRawAppP p of
       IdentP (QName x) -> Just x
@@ -1266,24 +1297,31 @@
     mkOldMutual r ds = do
         -- Check that there aren't any missing definitions
         checkLoneSigs loneNames
+
         -- Check that there are no declarations that aren't allowed in old style mutual blocks
-        case filter notAllowedInMutual ds of
-          []  -> return ()
-          (NiceFunClause _ _ _ _ s_ (FunClause lhs _ _ _)):_ -> throwError $ MissingTypeSignature lhs
-          d:_ -> throwError $ NotAllowedInMutual d
+        forM_ ds $ \case
+          -- Andreas, 2013-11-23 allow postulates in mutual blocks
+          Axiom{} -> return ()
+          -- Andreas, 2017-10-09, issue #2576, raise error about missing type signature
+          -- in ConcreteToAbstract rather than here.
+          NiceFunClause{} -> return ()
+          -- Andreas, 2018-05-11, issue #3052, allow pat.syn.s in mutual blocks
+          NicePatternSyn{} -> return ()
+          -- Otherwise, only categorized signatures and definitions are allowed (data/record/fun)
+          d -> when (declKind d == OtherDecl) $ throwError $ NotAllowedInMutual d
+
+        -- Compute termination checking flag for mutual block
         tc0 <- use terminationCheckPragma
         let tcs = map termCheck ds
         tc <- combineTermChecks r (tc0:tcs)
 
+        -- Compute positivity checking flag for mutual block
         pc0 <- use positivityCheckPragma
         let pc :: PositivityCheck
             pc = pc0 && all positivityCheckOldMutual ds
 
         return $ NiceMutual r tc pc $ sigs ++ other
       where
-        -- Andreas, 2013-11-23 allow postulates in mutual blocks
-        notAllowedInMutual Axiom{} = False
-        notAllowedInMutual d       = declKind d == OtherDecl
         -- Pull type signatures to the top
         (sigs, other) = List.partition isTypeSig ds
         isTypeSig Axiom{}                     = True
@@ -1363,7 +1401,7 @@
         Axiom r f p a i rel mp x e       -> (\ i -> Axiom r f p a i rel mp x e) <$> setInstance i
         FunSig r f p a i m rel tc x e    -> (\ i -> FunSig r f p a i m rel tc x e) <$> setInstance i
         NiceUnquoteDecl r f p a i tc x e -> (\ i -> NiceUnquoteDecl r f p a i tc x e) <$> setInstance i
-        NiceMutual{}                     -> return d
+        NiceMutual r termCheck pc ds     -> NiceMutual r termCheck pc <$> mapM mkInstance ds
         NiceFunClause{}                  -> return d
         FunDef r ds f a i tc x cs        -> (\ i -> FunDef r ds f a i tc x cs) <$> setInstance i
         NiceField{}                      -> return d  -- Field instance are handled by the parser
@@ -1626,7 +1664,7 @@
 -- | (Approximately) convert a 'NiceDeclaration' back to a list of
 -- 'Declaration's.
 notSoNiceDeclarations :: NiceDeclaration -> [Declaration]
-notSoNiceDeclarations d =
+notSoNiceDeclarations d = fixityDecl d ++
   case d of
     Axiom _ _ _ _ i rel mp x e       -> (case mp of
                                            Nothing   -> []
@@ -1654,6 +1692,32 @@
   where
     inst InstanceDef    ds = [InstanceB (getRange ds) ds]
     inst NotInstanceDef ds = ds
+
+    fixityDecl d = nameAndFixity >>= \ (x, f) -> infixDecl (theFixity f) x ++ syntaxDecl (theNotation f) x
+      where
+        nameAndFixity = case d of
+          Axiom _ f _ _ _ _ _ x _           -> [(x, f)]
+          NiceField _ f _ _ _ x _           -> [(x, f)]
+          PrimitiveFunction _ f _ _ x _     -> [(x, f)]
+          NiceRecSig _ f _ _ _ x _ _        -> [(x, f)]
+          NiceDataSig _ f _ _ _ x _ _       -> [(x, f)]
+          FunSig _ f _ _ _ _ _ _ x _        -> [(x, f)]
+          NicePatternSyn _ f x _ _          -> [(x, f)]
+          NiceUnquoteDecl _ fs _ _ _ _ xs _ -> zip xs fs
+          NiceUnquoteDef _ fs _ _ _ xs _    -> zip xs fs
+          NiceMutual{}      -> []
+          NiceModule{}      -> []
+          NiceModuleMacro{} -> []
+          NiceOpen{}        -> []
+          NiceImport{}      -> []
+          NicePragma{}      -> []
+          NiceFunClause{}   -> []
+          FunDef{}          -> []  -- use the fixity from the FunSig/DataSig/RecSig
+          DataDef{}         -> []
+          RecDef{}          -> []
+
+    infixDecl  f x = [Infix f [x] | notElem f [defaultFixity, noFixity]]
+    syntaxDecl n x = [Syntax x n  | not (null n) ]
 
 -- | Has the 'NiceDeclaration' a field of type 'IsAbstract'?
 niceHasAbstract :: NiceDeclaration -> Maybe IsAbstract
diff --git a/src/full/Agda/Syntax/Concrete/Generic.hs b/src/full/Agda/Syntax/Concrete/Generic.hs
--- a/src/full/Agda/Syntax/Concrete/Generic.hs
+++ b/src/full/Agda/Syntax/Concrete/Generic.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE CPP               #-}
+{-# LANGUAGE CPP #-}
 
 -- | Generic traversal and reduce for concrete syntax,
 --   in the style of "Agda.Syntax.Internal.Generic".
@@ -7,8 +7,6 @@
 
 module Agda.Syntax.Concrete.Generic where
 
-import Control.Applicative
-
 import Data.Traversable
 import Data.Monoid
 import Data.Foldable
@@ -28,13 +26,7 @@
   mapExpr :: (Expr -> Expr) -> a -> a
   -- ^ This corresponds to 'map'.
 
-  traverseExpr
-#if __GLASGOW_HASKELL__ <= 708
-    :: (Applicative m, Monad m)
-#else
-    :: Monad m
-#endif
-    => (Expr -> m Expr) -> a -> m a
+  traverseExpr :: Monad m => (Expr -> m Expr) -> a -> m a
   -- ^ This corresponds to 'mapM'.
 
   foldExpr :: Monoid m => (Expr -> m) -> a -> m
@@ -143,6 +135,7 @@
      Let r ds e         -> f $ Let r       (mapE ds)  $ mapE e
      Paren r e          -> f $ Paren r                $ mapE e
      IdiomBrackets r e  -> f $ IdiomBrackets r        $ mapE e
+     DoBlock r ss       -> f $ DoBlock r              $ mapE ss
      Absurd{}           -> f $ e0
      As r x e           -> f $ As r x                 $ mapE e
      Dot r e            -> f $ Dot r                  $ mapE e
@@ -155,6 +148,7 @@
      Unquote{}          -> f $ e0
      DontCare e         -> f $ DontCare               $ mapE e
      Equal{}            -> f $ e0
+     Ellipsis{}         -> f $ e0
    where mapE e = mapExpr f e
 
 instance ExprLike FieldAssignment where
@@ -186,9 +180,17 @@
 
 instance ExprLike LHS where
   mapExpr f e0 = case e0 of
-     LHS    ps wps res wes -> LHS    ps wps (mapE res) $ mapE wes
-     Ellipsis r ps res wes -> Ellipsis r ps (mapE res) $ mapE wes
+     LHS ps res wes -> LHS ps (mapE res) $ mapE wes
    where mapE e = mapExpr f e
+
+instance ExprLike LamClause where
+  mapExpr f (LamClause lhs rhs wh ca) =
+    LamClause (mapExpr f lhs) (mapExpr f rhs) (mapExpr f wh) (mapExpr f ca)
+
+instance ExprLike DoStmt where
+  mapExpr f (DoBind r p e cs) = DoBind r p (mapExpr f e) (mapExpr f cs)
+  mapExpr f (DoThen e)        = DoThen (mapExpr f e)
+  mapExpr f (DoLet r ds)      = DoLet r (mapExpr f ds)
 
 instance ExprLike ModuleApplication where
   mapExpr f e0 = case e0 of
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
@@ -8,15 +8,17 @@
 -}
 module Agda.Syntax.Concrete.Name where
 
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
 import Control.DeepSeq
-import Control.Applicative
 
 import Data.ByteString.Char8 (ByteString)
 import Data.Function
 import qualified Data.List as List
 
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import GHC.Generics (Generic)
 
@@ -43,8 +45,16 @@
 data Name
   = Name Range [NamePart]  -- ^ A (mixfix) identifier.
   | NoName Range NameId    -- ^ @_@.
-  deriving (Typeable, Data)
+  deriving Data
 
+-- | An open mixfix identifier is either prefix, infix, or suffix.
+--   That is to say: at least one of its extremities is a @Hole@
+
+isOpenMixfix :: Name -> Bool
+isOpenMixfix n = case n of
+  Name _ (x : xs@(_:_)) -> x == Hole || last xs == Hole
+  _                     -> False
+
 instance Underscore Name where
   underscore = NoName noRange __IMPOSSIBLE__
   isUnderscore NoName{}        = True
@@ -56,7 +66,7 @@
 data NamePart
   = Hole       -- ^ @_@ part.
   | Id RawName  -- ^ Identifier part.
-  deriving (Typeable, Data, Generic)
+  deriving (Data, Generic)
 
 -- | Define equality on @Name@ to ignore range so same names in different
 --   locations are equal.
@@ -99,7 +109,7 @@
 data QName
   = Qual  Name QName -- ^ @A.rest@.
   | QName Name       -- ^ @x@.
-  deriving (Typeable, Data, Eq, Ord)
+  deriving (Data, Eq, Ord)
 
 instance Underscore QName where
   underscore = QName underscore
@@ -114,7 +124,7 @@
   { moduleNameRange :: Range
   , moduleNameParts :: [String]
   }
-  deriving (Show, Typeable, Data)
+  deriving (Show, Data)
 
 instance Eq    TopLevelModuleName where (==)    = (==)    `on` moduleNameParts
 instance Ord   TopLevelModuleName where compare = compare `on` moduleNameParts
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
@@ -17,9 +17,9 @@
     , parsePatternSyn
     ) where
 
+import Control.Applicative ( Alternative((<|>)), liftA2 )
 import Control.Arrow ((***), (&&&), first, second)
 import Control.DeepSeq
-import Control.Applicative
 import Control.Monad
 
 import Data.Either (partitionEithers)
@@ -37,8 +37,10 @@
 import Agda.Syntax.Concrete.Pretty ()
 import Agda.Syntax.Common
 import Agda.Syntax.Concrete hiding (appView)
+import qualified Agda.Syntax.Concrete as C
 import Agda.Syntax.Concrete.Operators.Parser
 import Agda.Syntax.Concrete.Operators.Parser.Monad hiding (parse)
+import Agda.Syntax.Concrete.Pattern
 import qualified Agda.Syntax.Abstract.Name as A
 import Agda.Syntax.Position
 import Agda.Syntax.Fixity
@@ -532,7 +534,7 @@
     HiddenP _ _      -> fail "bad hidden argument"
     InstanceP _ _    -> fail "bad instance argument"
     AsP r x p        -> AsP r x <$> parsePat prs p
-    DotP r o e       -> return $ DotP r o e
+    DotP r e         -> return $ DotP r e
     ParenP r p       -> fullParen' <$> parsePat prs p
     WildP _          -> return p
     AbsurdP _        -> return p
@@ -540,6 +542,8 @@
     QuoteP _         -> return p
     IdentP _         -> return p
     RecP r fs        -> RecP r <$> mapM (traverse (parsePat prs)) fs
+    EllipsisP _      -> fail "bad ellipsis"
+    WithP r p        -> WithP r <$> parsePat prs p
 
 
 {- Implement parsing of copattern left hand sides, e.g.
@@ -634,7 +638,7 @@
     -- case @f ps@
     Arg _ (Named _ (IdentP x)) : ps | Just x == topName conf -> do
       guard $ all validPat ps
-      return $ Right (x, LHSHead x ps)
+      return $ Right (x, lhsCoreAddSpine (LHSHead x []) ps)
 
     -- case @d ps@
     Arg _ (Named _ (IdentP x)) : ps | x `elem` fldNames conf -> do
@@ -645,7 +649,7 @@
       guard $ all (isLeft . namedArg) ps3
       let (f, lhs)      = fromR p2
           (ps', _:ps'') = splitAt (length ps1) ps
-      return $ Right (f, LHSProj x ps' lhs ps'')
+      return $ Right (f, lhsCoreAddSpine (LHSProj x ps' lhs []) ps'')
 
     -- case: ordinary pattern
     _ -> do
@@ -689,9 +693,11 @@
 -- | Helper function for 'parseLHS' and 'parsePattern'.
 validConPattern :: [QName] -> Pattern -> Bool
 validConPattern cons p = case appView p of
+    [WithP _ p]   -> validConPattern cons p
     [_]           -> True
     IdentP x : ps -> elem x cons && all (validConPattern cons) ps
     [QuoteP _, _] -> True
+    DotP _ e : ps -> 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
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
@@ -4,7 +4,7 @@
 
 module Agda.Syntax.Concrete.Operators.Parser where
 
-import Control.Applicative
+import Control.Applicative ( Alternative((<|>), many) )
 
 import Data.Either
 import Data.Hashable
diff --git a/src/full/Agda/Syntax/Concrete/Pattern.hs b/src/full/Agda/Syntax/Concrete/Pattern.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Syntax/Concrete/Pattern.hs
@@ -0,0 +1,345 @@
+{-# LANGUAGE CPP          #-}
+{-# LANGUAGE TypeFamilies #-}  -- For type equality.
+
+-- | Tools for patterns in concrete syntax.
+
+module Agda.Syntax.Concrete.Pattern where
+
+import Control.Applicative ( liftA2 )
+import Control.Monad.Identity
+
+import Data.Foldable    (Foldable, foldMap)
+import Data.Traversable (Traversable, traverse)
+import Data.Monoid
+
+import Agda.Syntax.Common
+import Agda.Syntax.Concrete
+
+import Agda.Utils.AffineHole
+import Agda.Utils.Functor
+import Agda.Utils.List
+import Agda.Utils.Maybe
+
+
+-- | Check for ellipsis @...@.
+
+class IsEllipsis a where
+  isEllipsis :: a -> Bool
+
+-- | Is the pattern just @...@?
+instance IsEllipsis Pattern where
+  isEllipsis = \case
+    EllipsisP{}   -> True
+    RawAppP _ [p] -> isEllipsis p
+    ParenP _ p    -> isEllipsis p
+    _ -> False
+
+-- | Has the lhs an occurrence of the ellipsis @...@?
+
+class HasEllipsis a where
+  hasEllipsis :: a -> Bool
+
+instance HasEllipsis Pattern where
+  hasEllipsis p =
+    case hasEllipsis' p of
+      ZeroHoles _ -> False
+      OneHole   _ -> True
+      ManyHoles   -> True
+
+-- | Does the lhs contain an ellipsis?
+instance HasEllipsis LHS where
+  hasEllipsis (LHS p _ _) = hasEllipsis p
+
+
+-- | Check for with-pattern @| p@.
+
+class IsWithP p where
+  isWithP :: p -> Maybe p
+
+  default isWithP :: (IsWithP q, Decoration f, f q ~ p) => p -> Maybe p
+  isWithP = traverseF isWithP
+
+instance IsWithP Pattern where
+  isWithP = \case
+    WithP _ p     -> Just p
+    RawAppP _ [p] -> isWithP p
+    ParenP _ p    -> isWithP p
+    _ -> Nothing
+
+instance IsWithP p => IsWithP (Arg p) where
+instance IsWithP p => IsWithP (Named n p) where
+
+
+-- * LHS manipulation (see also ''Agda.Syntax.Abstract.Pattern'')
+
+-- | The next patterns are ...
+--
+-- (This view discards 'PatInfo'.)
+data LHSPatternView
+  = LHSAppP  [NamedArg Pattern]
+      -- ^ Application patterns (non-empty list).
+  | LHSWithP [Pattern]
+      -- ^ With patterns (non-empty list).
+      --   These patterns are not prefixed with 'WithP'.
+
+-- | Construct the 'LHSPatternView' of the given list (if not empty).
+--
+-- Return the view and the remaining patterns.
+
+lhsPatternView :: [NamedArg Pattern] -> Maybe (LHSPatternView, [NamedArg Pattern])
+lhsPatternView [] = Nothing
+lhsPatternView (p0 : ps) =
+  case namedArg p0 of
+    WithP _i p   -> Just (LHSWithP (p : map namedArg ps1), ps2)
+      where
+      (ps1, ps2) = spanJust isWithP ps
+    -- If the next pattern is an application pattern, collect more of these
+    _ -> Just (LHSAppP (p0 : ps1), ps2)
+      where
+      (ps1, ps2) = span (isNothing . isWithP) ps
+
+-- | Add applicative patterns (non-projection / non-with patterns) to the right.
+lhsCoreApp :: LHSCore -> [NamedArg Pattern] -> LHSCore
+lhsCoreApp core ps = core { lhsPats = lhsPats core ++ ps }
+
+-- | Add with-patterns to the right.
+lhsCoreWith :: LHSCore -> [Pattern] -> LHSCore
+lhsCoreWith (LHSWith core wps []) wps' = LHSWith core (wps ++ wps') []
+lhsCoreWith core                  wps' = LHSWith core wps' []
+
+-- | Append patterns to 'LHSCore', separating with patterns from the rest.
+lhsCoreAddSpine :: LHSCore -> [NamedArg Pattern] -> LHSCore
+lhsCoreAddSpine core ps0 =
+  -- Recurse on lhsPatternView until no patterns left.
+  case lhsPatternView ps0 of
+    Nothing       -> core
+    Just (LHSAppP  ps , ps') -> lhsCoreApp  core ps  `lhsCoreAddSpine` ps'
+    Just (LHSWithP wps, ps') -> lhsCoreWith core wps `lhsCoreAddSpine` ps'
+
+
+-- | Modify the 'Pattern' component in 'LHS'.
+mapLhsOriginalPattern :: (Pattern -> Pattern) -> LHS -> LHS
+mapLhsOriginalPattern f lhs@LHS{ lhsOriginalPattern = p } =
+  lhs { lhsOriginalPattern = f p }
+
+-- | Effectfully modify the 'Pattern' component in 'LHS'.
+mapLhsOriginalPatternM :: (Functor m, Applicative m) => (Pattern -> m Pattern) -> LHS -> m LHS
+mapLhsOriginalPatternM f lhs@LHS{ lhsOriginalPattern = p } = f p <&> \ p' ->
+  lhs { lhsOriginalPattern = p' }
+
+-- | Does the LHS contain projection patterns?
+hasCopatterns :: LHSCore -> Bool
+hasCopatterns = \case
+  LHSHead{}     -> False
+  LHSProj{}     -> True
+  LHSWith h _ _ -> hasCopatterns h
+
+-- * Generic fold
+
+-- | Generic pattern traversal.
+--
+-- See 'Agda.Syntax.Abstract.Pattern.APatternLike'.
+
+class CPatternLike p where
+
+  -- | Fold pattern.
+  foldrCPattern
+    :: Monoid m
+    => (Pattern -> m -> m)
+         -- ^ Combine a pattern and the value computed from its subpatterns.
+    -> p -> m
+
+  default foldrCPattern
+    :: (Monoid m, Foldable f, CPatternLike q, f q ~ p)
+    => (Pattern -> m -> m) -> p -> m
+  foldrCPattern = foldMap . foldrCPattern
+
+  -- | Traverse pattern with option of post-traversal modification.
+  traverseCPatternA :: (Applicative m, Functor m)
+      => (Pattern -> m Pattern -> m Pattern)
+         -- ^ Combine a pattern and the its recursively computed version.
+      -> p -> m p
+
+  default traverseCPatternA :: (Traversable f, CPatternLike q, f q ~ p, Applicative m, Functor m)
+      => (Pattern -> m Pattern -> m Pattern)
+      -> p -> m p
+  traverseCPatternA = traverse . traverseCPatternA
+
+  -- | Traverse pattern.
+  traverseCPatternM
+    :: Monad m => (Pattern -> m Pattern)  -- ^ @pre@: Modification before recursion.
+    -> (Pattern -> m Pattern)  -- ^ @post@: Modification after recursion.
+    -> p -> m p
+
+  default traverseCPatternM
+    :: (Traversable f, CPatternLike q, f q ~ p, Monad m)
+    => (Pattern -> m Pattern)
+    -> (Pattern -> m Pattern)
+    -> p -> m p
+  traverseCPatternM pre post = traverse $ traverseCPatternM pre post
+
+instance CPatternLike Pattern where
+  foldrCPattern f p0 = f p0 $
+    case p0 of
+      -- Recursive cases:
+      AppP p ps       -> foldrCPattern f (p, ps)
+      RawAppP _ ps    -> foldrCPattern f ps
+      OpAppP _ _ _ ps -> foldrCPattern f ps
+      HiddenP _ ps    -> foldrCPattern f ps
+      InstanceP _ ps  -> foldrCPattern f ps
+      ParenP _ p      -> foldrCPattern f p
+      AsP _ _ p       -> foldrCPattern f p
+      WithP _ p       -> foldrCPattern f p
+      RecP _ ps       -> foldrCPattern f ps
+      -- Nonrecursive cases:
+      IdentP _        -> mempty
+      WildP _         -> mempty
+      DotP _ _        -> mempty
+      AbsurdP _       -> mempty
+      LitP _          -> mempty
+      QuoteP _        -> mempty
+      EllipsisP _     -> mempty
+
+  traverseCPatternA f p0 = f p0 $ case p0 of
+      -- Recursive cases:
+      AppP        p ps    -> liftA2 AppP (traverseCPatternA f p) (traverseCPatternA f ps)
+      RawAppP   r ps      -> RawAppP r     <$> traverseCPatternA f ps
+      OpAppP    r x xs ps -> OpAppP r x xs <$> traverseCPatternA f ps
+      HiddenP   r p       -> HiddenP r     <$> traverseCPatternA f p
+      InstanceP r p       -> InstanceP r   <$> traverseCPatternA f p
+      ParenP    r p       -> ParenP r      <$> traverseCPatternA f p
+      AsP       r x p     -> AsP r x       <$> traverseCPatternA f p
+      WithP     r p       -> WithP r       <$> traverseCPatternA f p
+      RecP      r ps      -> RecP r        <$> traverseCPatternA f ps
+      -- Nonrecursive cases:
+      IdentP _        -> pure p0
+      WildP _         -> pure p0
+      DotP _ _        -> pure p0
+      AbsurdP _       -> pure p0
+      LitP _          -> pure p0
+      QuoteP _        -> pure p0
+      EllipsisP _     -> pure p0
+
+  traverseCPatternM pre post = pre >=> recurse >=> post
+    where
+    recurse p0 = case p0 of
+      -- Recursive cases:
+      AppP        p ps    -> uncurry AppP  <$> traverseCPatternM pre post (p, ps)
+      RawAppP   r ps      -> RawAppP r     <$> traverseCPatternM pre post ps
+      OpAppP    r x xs ps -> OpAppP r x xs <$> traverseCPatternM pre post ps
+      HiddenP   r p       -> HiddenP r     <$> traverseCPatternM pre post p
+      InstanceP r p       -> InstanceP r   <$> traverseCPatternM pre post p
+      ParenP    r p       -> ParenP r      <$> traverseCPatternM pre post p
+      AsP       r x p     -> AsP r x       <$> traverseCPatternM pre post p
+      WithP     r p       -> WithP r       <$> traverseCPatternM pre post p
+      RecP      r ps      -> RecP r        <$> traverseCPatternM pre post ps
+      -- Nonrecursive cases:
+      IdentP _        -> return p0
+      WildP _         -> return p0
+      DotP _ _        -> return p0
+      AbsurdP _       -> return p0
+      LitP _          -> return p0
+      QuoteP _        -> return p0
+      EllipsisP _     -> return p0
+
+instance (CPatternLike a, CPatternLike b) => CPatternLike (a,b) where
+  foldrCPattern f (p, p') =
+    foldrCPattern f p `mappend` foldrCPattern f p'
+
+  traverseCPatternA f (p, p') =
+    liftA2 (,)
+      (traverseCPatternA f p)
+      (traverseCPatternA f p')
+
+  traverseCPatternM pre post (p, p') =
+    liftA2 (,)
+      (traverseCPatternM pre post p)
+      (traverseCPatternM pre post p')
+
+instance CPatternLike p => CPatternLike (Arg p)              where
+instance CPatternLike p => CPatternLike (Named n p)          where
+instance CPatternLike p => CPatternLike [p]                  where
+instance CPatternLike p => CPatternLike (Maybe p)            where
+instance CPatternLike p => CPatternLike (FieldAssignment' p) where
+
+-- | Compute a value from each subpattern and collect all values in a monoid.
+
+foldCPattern :: (CPatternLike p, Monoid m) => (Pattern -> m) -> p -> m
+foldCPattern f = foldrCPattern $ \ p m -> f p `mappend` m
+
+-- | Traverse pattern(s) with a modification before the recursive descent.
+
+preTraverseCPatternM
+  :: (CPatternLike p, Monad m)
+  => (Pattern -> m Pattern)  -- ^ @pre@: Modification before recursion.
+  -> p -> m p
+preTraverseCPatternM pre p = traverseCPatternM pre return p
+
+-- | Traverse pattern(s) with a modification after the recursive descent.
+
+postTraverseCPatternM
+  :: (CPatternLike p, Monad m)
+  => (Pattern -> m Pattern)  -- ^ @post@: Modification after recursion.
+  -> p -> m p
+postTraverseCPatternM post p = traverseCPatternM return post p
+
+-- | Map pattern(s) with a modification after the recursive descent.
+
+mapCPattern :: CPatternLike p => (Pattern -> Pattern) -> p -> p
+mapCPattern f = runIdentity . postTraverseCPatternM (Identity . f)
+
+
+-- * Specific folds.
+
+-- | Get all the identifiers in a pattern in left-to-right order.
+--
+-- Implemented using difference lists.
+patternQNames :: CPatternLike p => p -> [QName]
+patternQNames p = foldCPattern f p `appEndo` []
+  where
+  f :: Pattern -> Endo [QName]
+  f = \case
+    IdentP x       -> Endo (x :)
+    OpAppP _ x _ _ -> Endo (x :)
+    AsP _ x _      -> mempty  -- x must be a bound name, can't be a constructor!
+    AppP _ _       -> mempty
+    WithP _ _      -> mempty
+    RawAppP _ _    -> mempty
+    HiddenP _ _    -> mempty
+    ParenP _ _     -> mempty
+    WildP _        -> mempty
+    AbsurdP _      -> mempty
+    DotP _ _       -> mempty
+    LitP _         -> mempty
+    QuoteP _       -> mempty
+    InstanceP _ _  -> mempty
+    RecP _ _       -> mempty
+    EllipsisP _    -> mempty
+
+-- | Get all the identifiers in a pattern in left-to-right order.
+patternNames :: Pattern -> [Name]
+patternNames = map unqualify . patternQNames
+
+-- | Does the pattern contain a with-pattern?
+-- (Shortcutting.)
+hasWithPatterns :: CPatternLike p => p -> Bool
+hasWithPatterns = getAny . foldCPattern (Any . isWithPattern)
+
+-- | Is 'WithP'?
+isWithPattern :: Pattern -> Bool
+isWithPattern = \case
+  WithP{} -> True
+  _ -> False
+
+-- | Count the number of with-subpatterns in a pattern?
+numberOfWithPatterns :: CPatternLike p => p -> Int
+numberOfWithPatterns = getSum . foldCPattern (Sum . f)
+  where f p = if isWithPattern p then 1 else 0
+
+-- | Compute the context in which the ellipsis occurs, if at all.
+--   If there are several occurrences, this is an error.
+hasEllipsis' :: CPatternLike p => p -> AffineHole Pattern p
+hasEllipsis' = traverseCPatternA $ \ p mp ->
+  case p of
+    EllipsisP _ -> OneHole id
+    _           -> mp
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
@@ -6,8 +6,13 @@
 -}
 module Agda.Syntax.Concrete.Pretty where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
+import Data.IORef
 import Data.Functor
 import Data.Maybe
 import qualified Data.Strict.Maybe as Strict
@@ -20,6 +25,8 @@
 
 import Agda.TypeChecking.Positivity.Occurrence
 
+import Agda.Interaction.Options.IORefs (UnicodeOrAscii(..), unicodeOrAscii)
+
 import Agda.Utils.Function
 import Agda.Utils.Functor
 import Agda.Utils.Null
@@ -29,6 +36,28 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
+import qualified System.IO.Unsafe as UNSAFE (unsafePerformIO)
+
+-- Andreas, 2017-10-02, TODO: restore Show to its original purpose
+--
+-- deriving instance Show Expr
+-- deriving instance (Show a) => Show (OpApp a)
+-- deriving instance Show Declaration
+-- deriving instance Show Pattern
+-- deriving instance Show TypedBinding
+-- deriving instance Show TypedBindings
+-- deriving instance Show LamBinding
+-- deriving instance Show ModuleAssignment
+-- deriving instance (Show a, Show b) => Show (ImportDirective' a b)
+-- deriving instance (Show a, Show b) => Show (Using' a b)
+-- deriving instance (Show a, Show b) => Show (Renaming' a b)
+-- deriving instance Show Pragma
+-- deriving instance Show RHS
+-- deriving instance Show LHS
+-- deriving instance Show LHSCore
+-- deriving instance Show WhereClause
+-- deriving instance Show ModuleApplication
+
 instance Show Expr            where show = show . pretty
 instance Show Declaration     where show = show . pretty
 instance Show Pattern         where show = show . pretty
@@ -39,7 +68,39 @@
                               where show = show . pretty
 instance Show Pragma          where show = show . pretty
 instance Show RHS             where show = show . pretty
+instance Show LHS where show = show . pretty
+instance Show LHSCore where show = show . pretty
+instance Show WhereClause where show = show . pretty
+instance Show ModuleApplication where show = show . pretty
 
+
+-- | Picking the appropriate set of special characters depending on
+-- whether we are allowed to use unicode or have to limit ourselves
+-- to ascii.
+
+data SpecialCharacters = SpecialCharacters
+  { _dbraces :: Doc -> Doc
+  , _lambda  :: Doc
+  , _arrow   :: Doc
+  , _forallQ :: Doc
+  }
+
+{-# NOINLINE specialCharacters #-}
+specialCharacters :: SpecialCharacters
+specialCharacters =
+  let opt = UNSAFE.unsafePerformIO (readIORef unicodeOrAscii) in
+  case opt of
+    UnicodeOk -> SpecialCharacters { _dbraces = ((text "\x2983 " <>) . (<> text " \x2984"))
+                                   , _lambda  = text "\x03bb"
+                                   , _arrow   = text "\x2192"
+                                   , _forallQ = text "\x2200"
+                                   }
+    AsciiOnly -> SpecialCharacters { _dbraces = braces . braces'
+                                   , _lambda  = text "\\"
+                                   , _arrow   = text "->"
+                                   , _forallQ = text "forall"
+                                   }
+
 braces' :: Doc -> Doc
 braces' d = case render d of
   -- Add space to avoid starting a comment
@@ -48,8 +109,12 @@
 
 -- double braces...
 dbraces :: Doc -> Doc
-dbraces = braces . braces'
+dbraces = _dbraces specialCharacters
 
+-- forall quantifier
+forallQ :: Doc
+forallQ = _forallQ specialCharacters
+
 -- Lays out a list of documents [d₁, d₂, …] in the following way:
 -- @
 --   { d₁
@@ -65,8 +130,8 @@
   sep ([text "{" <+> d] ++ map (text ";" <+>) ds ++ [text "}"])
 
 arrow, lambda :: Doc
-arrow  = text "\x2192"
-lambda = text "\x03bb"
+arrow  = _arrow specialCharacters
+lambda = _lambda specialCharacters
 
 -- | @prettyHiding info visible doc@ puts the correct braces
 --   around @doc@ according to info @info@ and returns
@@ -92,7 +157,6 @@
   pretty w = prettyHiding w id $ pretty $ dget w
 
 instance Pretty Relevance where
-  pretty Forced{}   = empty
   pretty Relevant   = empty
   pretty Irrelevant = text "."
   pretty NonStrict  = text ".."
@@ -132,20 +196,13 @@
 
             HiddenArg _ e -> braces' $ pretty e
             InstanceArg _ e -> dbraces $ pretty e
+            Lam _ bs (AbsurdLam _ h) -> lambda <+> fsep (map pretty bs) <+> absurd h
             Lam _ bs e ->
                 sep [ lambda <+> fsep (map pretty bs) <+> arrow
                     , nest 2 $ pretty e
                     ]
-            AbsurdLam _ NotHidden  -> lambda <+> text "()"
-            AbsurdLam _ Instance{} -> lambda <+> text "{{}}"
-            AbsurdLam _ Hidden     -> lambda <+> text "{}"
-            ExtendedLam _ pes ->
-              lambda <+> bracesAndSemicolons (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)
-                         pretty' (RHS e)   = arrow <+> pretty e
-                         pretty' AbsurdRHS = empty
+            AbsurdLam _ h -> lambda <+> absurd h
+            ExtendedLam _ pes -> lambda <+> bracesAndSemicolons (map pretty pes)
             Fun _ e1 e2 ->
                 sep [ pretty e1 <+> arrow
                     , pretty e2
@@ -157,12 +214,13 @@
             Set _   -> text "Set"
             Prop _  -> text "Prop"
             SetN _ n    -> text "Set" <> text (showIndex n)
-            Let _ ds e  ->
+            Let _ ds me  ->
                 sep [ text "let" <+> vcat (map pretty ds)
-                    , text "in" <+> pretty e
+                    , maybe empty (\ e -> text "in" <+> pretty e) me
                     ]
             Paren _ e -> parens $ pretty e
             IdiomBrackets _ e -> text "(|" <+> pretty e <+> text "|)"
+            DoBlock _ ss -> text "do" <+> vcat (map pretty ss)
             As _ x e  -> pretty x <> text "@" <> pretty e
             Dot _ e   -> text "." <> pretty e
             Absurd _  -> text "()"
@@ -184,6 +242,11 @@
             -- Andreas, 2011-10-03 print irrelevant things as .(e)
             DontCare e -> text "." <> parens (pretty e)
             Equal _ a b -> pretty a <+> text "=" <+> pretty b
+            Ellipsis _  -> text "..."
+        where
+          absurd NotHidden  = text "()"
+          absurd Instance{} = text "{{}}"
+          absurd Hidden     = text "{}"
 
 instance (Pretty a, Pretty b) => Pretty (Either a b) where
   pretty = either pretty pretty
@@ -194,6 +257,15 @@
 instance Pretty ModuleAssignment where
   pretty (ModuleAssignment m es i) = (fsep $ pretty m : map pretty es) <+> pretty i
 
+instance Pretty LamClause where
+  pretty (LamClause lhs rhs wh _) =
+    sep [ pretty lhs
+        , nest 2 $ pretty' rhs
+        ] $$ nest 2 (pretty wh)
+    where
+      pretty' (RHS e)   = arrow <+> pretty e
+      pretty' AbsurdRHS = empty
+
 instance Pretty BoundName where
   pretty BName{ boundName = x, boundLabel = l }
     | x == l    = pretty x
@@ -218,7 +290,7 @@
 
 instance Pretty Tel where
     pretty (Tel tel)
-      | any isMeta tel = text "∀" <+> fsep (map pretty tel)
+      | any isMeta tel = forallQ <+> fsep (map pretty tel)
       | otherwise      = fsep (map pretty tel)
       where
         isMeta (TypedBindings _ (Arg _ (TBind _ _ (Underscore _ Nothing)))) = True
@@ -250,7 +322,6 @@
     pretty (RHS e)   = text "=" <+> pretty e
     pretty AbsurdRHS = empty
 
-instance Show WhereClause where show = show . pretty
 instance Pretty WhereClause where
   pretty  NoWhere = empty
   pretty (AnyWhere [Module _ x [] ds]) | isNoName (unqualify x)
@@ -262,15 +333,12 @@
          , nest 2 (vcat $ map pretty ds)
          ]
 
-instance Show LHS where show = show . pretty
 instance Pretty LHS where
   pretty lhs = case lhs of
-    LHS p ps eqs es  -> pr (pretty p) ps eqs es
-    Ellipsis _ ps eqs es -> pr (text "...") ps eqs es
+    LHS p eqs es  -> pr (pretty p) eqs es
     where
-      pr d ps eqs es =
+      pr d eqs es =
         sep [ d
-            , nest 2 $ fsep $ map ((text "|" <+>) . pretty) ps
             , nest 2 $ pThing "rewrite" eqs
             , nest 2 $ pThing "with" es
             ]
@@ -278,18 +346,29 @@
       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'
+  pretty (LHSWith h wps ps) = if null ps then doc else
+      sep $ parens doc : map (parens . pretty) ps
+    where
+    doc = sep $ pretty h : map ((text "|" <+>) . pretty) wps
 
-instance Show ModuleApplication where show = show . pretty
 instance Pretty ModuleApplication where
   pretty (SectionApp _ bs e) = fsep (map pretty bs) <+> text "=" <+> pretty e
   pretty (RecordModuleIFS _ rec) = text "=" <+> pretty rec <+> text "{{...}}"
 
+instance Pretty DoStmt where
+  pretty (DoBind _ p e cs) =
+    ((pretty p <+> text "←") <?> pretty e) <?> prCs cs
+    where
+      prCs [] = empty
+      prCs cs = text "where" <?> vcat (map pretty cs)
+  pretty (DoThen e) = pretty e
+  pretty (DoLet _ ds) = text "let" <+> vcat (map pretty ds)
+
 instance Pretty Declaration where
     prettyList = vcat . map pretty
     pretty d =
@@ -302,7 +381,7 @@
                 sep [ text "field"
                     , nest 2 $ mkInst inst $ mkOverlap i $
                       prettyRelevance i $ prettyHiding i id $
-                        pretty $ TypeSig (i {argInfoRelevance = Relevant}) x e
+                        pretty $ TypeSig (setRelevance Relevant i) x e
                     ]
                 where
                   mkInst InstanceDef    d = sep [ text "instance", nest 2 d ]
@@ -370,7 +449,9 @@
                     pType Nothing  =
                               text "where"
                     pInd = maybeToList $ text . show . rangedThing <$> ind
-                    pEta = maybeToList $ (\x -> if x then text "eta-equality" else text "no-eta-equality") <$> eta
+                    pEta = maybeToList $ eta <&> \case
+                      YesEta -> text "eta-equality"
+                      NoEta  -> text "no-eta-equality"
                     pCon = maybeToList $ (text "constructor" <+>) . pretty <$> fst <$> con
             Infix f xs  ->
                 pretty f <+> (fsep $ punctuate comma $ map pretty xs)
@@ -453,8 +534,10 @@
       hsep $ [text "STATIC", pretty i]
     pretty (InjectivePragma _ i) =
       hsep $ [text "INJECTIVE", pretty i]
-    pretty (InlinePragma _ i) =
+    pretty (InlinePragma _ True i) =
       hsep $ [text "INLINE", pretty i]
+    pretty (InlinePragma _ False i) =
+      hsep $ [text "NOINLINE", pretty i]
     pretty (ImportPragma _ i) =
       hsep $ [text "IMPORT", text i]
     pretty (ImportUHCPragma _ i) =
@@ -470,6 +553,7 @@
         NonTerminating         -> text "NON_TERMINATING"
         Terminating            -> text "TERMINATING"
         TerminationMeasure _ x -> hsep $ [text "MEASURE", pretty x]
+    pretty (WarningOnUsage _ nm str) = hsep [ text "WARNING_ON_USAGE", pretty nm, text str ]
     pretty (CatchallPragma _) = text "CATCHALL"
     pretty (DisplayPragma _ lhs rhs) = text "DISPLAY" <+> sep [ pretty lhs <+> text "=", nest 2 $ pretty rhs ]
     pretty (NoPositivityCheckPragma _) = text "NO_POSITIVITY_CHECK"
@@ -511,8 +595,7 @@
 
 instance Pretty Pattern where
     prettyList = fsep . map pretty
-    pretty p =
-        case p of
+    pretty = \case
             IdentP x        -> pretty x
             AppP p1 p2      -> sep [ pretty p1, nest 2 $ pretty p2 ]
             RawAppP _ ps    -> fsep $ map pretty ps
@@ -522,11 +605,13 @@
             ParenP _ p      -> parens $ pretty p
             WildP _         -> underscore
             AsP _ x p       -> pretty x <> text "@" <> pretty p
-            DotP _ _ p      -> text "." <> pretty p
+            DotP _ p        -> text "." <> pretty p
             AbsurdP _       -> text "()"
             LitP l          -> pretty l
             QuoteP _        -> text "quote"
             RecP _ fs       -> sep [ text "record", bracesAndSemicolons (map pretty fs) ]
+            EllipsisP _     -> text "..."
+            WithP _ p       -> text "|" <+> pretty p
 
 prettyOpApp :: forall a .
   Pretty a => QName -> [NamedArg (MaybePlaceholder a)] -> [Doc]
@@ -540,18 +625,21 @@
            NoName{}  -> __IMPOSSIBLE__
 
     prOp :: [Name] -> [NamePart] -> [NamedArg (MaybePlaceholder a)] -> [(Doc, Maybe PositionInName)]
-    prOp ms (Hole : xs) (e : es) = (pretty e, case namedArg e of
-                                                Placeholder p -> Just p
-                                                _             -> Nothing) :
-                                   prOp ms xs es
+    prOp ms (Hole : xs) (e : es) =
+      case namedArg e of
+        Placeholder p   -> (qual ms $ pretty e, Just p) : prOp [] xs es
+        NoPlaceholder{} -> (pretty e, Nothing) : prOp ms xs es
+          -- Module qualifier needs to go on section holes (#3072)
     prOp _  (Hole : _)  []       = __IMPOSSIBLE__
-    prOp ms (Id x : xs) es       = ( pretty (foldr Qual (QName (Name noRange $ [Id x])) ms)
+    prOp ms (Id x : xs) es       = ( qual ms $ pretty $ Name noRange $ [Id x]
                                    , Nothing
                                    ) : prOp [] xs es
       -- Qualify the name part with the module.
       -- We then clear @ms@ such that the following name parts will not be qualified.
 
     prOp _  []       es          = map (\e -> (pretty e, Nothing)) es
+
+    qual ms doc = hcat $ punctuate (text ".") $ map pretty ms ++ [doc]
 
     -- Section underscores should be printed without surrounding
     -- whitespace. This function takes care of that.
diff --git a/src/full/Agda/Syntax/DoNotation.hs b/src/full/Agda/Syntax/DoNotation.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Syntax/DoNotation.hs
@@ -0,0 +1,129 @@
+{-|
+    Desugaring for do-notation. Uses whatever `_>>=_` and `_>>_` happen to be
+    in scope.
+
+    Example:
+
+    ```
+      foo = do
+        x ← m₁
+        m₂
+        just y ← m₃
+          where nothing → m₄
+        let z = t
+        m₅
+    ```
+    desugars to
+    ```
+      foo =
+        m₁ >>= λ x →
+        m₂ >>
+        m₃ >>= λ where
+          just y → let z = t in m₅
+          nothing → m₄
+    ```
+ -}
+module Agda.Syntax.DoNotation (desugarDoNotation) where
+
+import Control.Monad
+
+import Agda.Syntax.Common
+import Agda.Syntax.Position
+import Agda.Syntax.Concrete
+import Agda.Syntax.Concrete.Operators
+
+import Agda.Syntax.Scope.Base
+import Agda.Syntax.Scope.Monad
+import Agda.TypeChecking.Monad
+
+import Agda.Utils.Pretty ( prettyShow )
+
+desugarDoNotation :: Range -> [DoStmt] -> ScopeM Expr
+desugarDoNotation r ss = do
+  let qBind = QName $ Name noRange [Hole, Id ">>=", Hole]
+      qThen = QName $ Name noRange [Hole, Id ">>", Hole]
+      isBind DoBind{} = True
+      isBind _        = False
+      isThen DoThen{} = True
+      isThen _        = False
+  -- Only check the operation we actually need. One could imagine to fall back
+  -- on _>>=_ if _>>_ is not in scope, but if we are desugaring to _>>_ at all
+  -- I think we should throw an error rather than silently switching to _>>=_.
+  -- / Ulf
+  mapM_ ensureInScope $ [qBind | any isBind ss] ++
+                        [qThen | any isThen $ drop 1 $ reverse ss] -- ignore the last 'DoThen'
+  desugarDo qBind qThen ss
+
+desugarDo :: QName -> QName -> [DoStmt] -> ScopeM Expr
+
+-- The parser doesn't generate empty 'do' blocks at the moment, but if that
+-- changes throwing the error is the right thing to do.
+desugarDo qBind qThen [] = genericError "Empty 'do' block"
+
+-- The last statement must be a DoThen
+desugarDo qBind qThen [s]
+  | DoThen e <- s = return e
+  | otherwise     = genericError "The last statement in a 'do' block must be an expression"
+
+-- `DoThen` and `DoLet` are easy
+desugarDo qBind qThen (DoThen e   : ss) = appOp qThen e   <$> desugarDo qBind qThen ss
+desugarDo qBind qThen (DoLet r ds : ss) = Let r ds . Just <$> desugarDo qBind qThen ss
+
+-- `DoBind` requires more work since we want to generate plain lambdas when
+-- possible.
+desugarDo qBind qThen (DoBind r p e [] : ss)
+  | Just x <- singleName p = do
+  -- In this case we have a single name in the bind pattern and no where clauses.
+  -- It could still be a pattern bind though (for instance, `refl ← pure eq`), so
+  -- to figure out which one to use we look up the name in the scope; if it's a
+  -- constructor or pattern synonym we desugar to a pattern lambda.
+  res <- resolveName (QName x)
+  let isMatch = case res of
+        ConstructorName{}   -> True
+        PatternSynResName{} -> True
+        _                   -> False
+  rest <- desugarDo qBind qThen ss
+  if isMatch then return $ matchingBind qBind r p e rest []
+             else return $ nonMatchingBind qBind r x e rest
+desugarDo qBind qThen (DoBind r p e cs : ss) = do
+  -- If there are where clauses we have to desugar to a pattern lambda.
+  rest <- desugarDo qBind qThen ss
+  return $ matchingBind qBind r p e rest cs
+
+singleName :: Pattern -> Maybe Name
+singleName (IdentP (QName x)) = Just x
+singleName (RawAppP _ [p])    = singleName p
+singleName _                  = Nothing
+
+matchingBind :: QName -> Range -> Pattern -> Expr -> Expr -> [LamClause] -> Expr
+matchingBind qBind r p e body cs =
+  appOp (setRange r qBind) e          -- Set the range of the lambda to that of the
+    $ ExtendedLam (getRange cs)       -- where-clauses to make highlighting of overlapping
+    $ map addParens (mainClause : cs) -- patterns not highlight the rest of the do-block.
+  where
+    mainClause = LamClause { lamLHS      = LHS p [] []
+                           , lamRHS      = RHS body
+                           , lamWhere    = NoWhere
+                           , lamCatchAll = False }
+
+    -- Add parens to left-hand sides: there can only be one pattern in these clauses.
+    addParens c = c { lamLHS = addP (lamLHS c) }
+      where addP (LHS p rw we) = LHS (RawAppP noRange [ParenP noRange p]) rw we
+
+nonMatchingBind :: QName -> Range -> Name -> Expr -> Expr -> Expr
+nonMatchingBind qBind r x e body =
+    appOp (setRange r qBind) e $ Lam (getRange (x, body)) [bx] body
+  where bx = DomainFree defaultArgInfo $ mkBoundName_ x
+
+appOp :: QName -> Expr -> Expr -> Expr
+appOp q e1 e2 = app (Ident q) [e1, e2]
+  where
+    app e es = foldl (\ e1 e2 -> App (getRange (e1, e2)) e1 (defaultNamedArg e2)) e es
+
+ensureInScope :: QName -> ScopeM ()
+ensureInScope q = do
+  r <- resolveName q
+  case r of
+    UnknownName -> genericError $
+      prettyShow q ++ " needs to be in scope to desugar 'do' block"
+    _ -> return ()
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
@@ -18,7 +18,6 @@
 import Data.Traversable
 
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import Agda.Syntax.Position
 import Agda.Syntax.Common
@@ -44,14 +43,14 @@
       -- ^ Range of the name in the fixity declaration
       --   (used for correct highlighting, see issue #2140).
     }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 instance Eq Fixity' where
   Fixity' f n _ == Fixity' f' n' _ = f == f' && n == n'
 
 -- | Decorating something with @Fixity'@.
 data ThingWithFixity x = ThingWithFixity x Fixity'
-  deriving (Functor, Foldable, Traversable, Typeable, Data, Show)
+  deriving (Functor, Foldable, Traversable, Data, Show)
 
 -- | All the notation information related to a name.
 data NewNotation = NewNotation
@@ -68,7 +67,7 @@
   , notaIsOperator :: Bool
     -- ^ True if the notation comes from an operator (rather than a
     -- syntax declaration).
-  } deriving (Typeable, Show)
+  } deriving Show
 
 -- | If an operator has no specific notation, then it is computed from
 -- its name.
@@ -218,12 +217,12 @@
     -- ^ No fixity declared.
   | Related !Integer
     -- ^ Fixity level declared as the @Integer@.
-  deriving (Eq, Ord, Show, Typeable, Data)
+  deriving (Eq, Ord, Show, Data)
 
 -- | Associativity.
 
 data Associativity = NonAssoc | LeftAssoc | RightAssoc
-   deriving (Eq, Ord, Show, Typeable, Data)
+   deriving (Eq, Ord, Show, Data)
 
 -- | Fixity of operators.
 
@@ -233,7 +232,7 @@
   , fixityLevel :: !PrecedenceLevel
   , fixityAssoc :: !Associativity
   }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 instance Eq Fixity where
   f1 == f2 = compare f1 f2 == EQ
@@ -249,14 +248,25 @@
 defaultFixity :: Fixity
 defaultFixity = Fixity noRange (Related 20) NonAssoc
 
+-- | Do we prefer parens around arguments like @λ x → x@ or not?
+--   See 'lamBrackets'.
+data ParenPreference = PreferParen | PreferParenless
+  deriving (Eq, Ord, Show, Data)
+
+preferParen :: ParenPreference -> Bool
+preferParen p = PreferParen == p
+
+preferParenless :: ParenPreference -> Bool
+preferParenless p = PreferParenless == p
+
 -- * Precendence
 
 -- | Precedence is associated with a context.
 data Precedence = TopCtx | FunctionSpaceDomainCtx
-                | LeftOperandCtx Fixity | RightOperandCtx Fixity
-                | FunctionCtx | ArgumentCtx | InsideOperandCtx
+                | LeftOperandCtx Fixity | RightOperandCtx Fixity ParenPreference
+                | FunctionCtx | ArgumentCtx ParenPreference | InsideOperandCtx
                 | WithFunCtx | WithArgCtx | DotPatternCtx
-    deriving (Show, Typeable, Data, Eq)
+    deriving (Show, Data, Eq)
 
 instance Pretty Precedence where
   pretty = text . show
@@ -274,11 +284,9 @@
 headPrecedence []      = TopCtx
 headPrecedence (p : _) = p
 
--- | The precedence corresponding to a possibly hidden argument.
-hiddenArgumentCtx :: Hiding -> Precedence
-hiddenArgumentCtx NotHidden  = ArgumentCtx
-hiddenArgumentCtx Hidden     = TopCtx
-hiddenArgumentCtx Instance{} = TopCtx
+-- | Argument context preferring parens.
+argumentCtx_ :: Precedence
+argumentCtx_ = ArgumentCtx PreferParen
 
 -- | Do we need to bracket an operator application of the given fixity
 --   in a context with the given precedence.
@@ -291,15 +299,15 @@
                Fixity -> PrecedenceStack -> Bool
 opBrackets' isLam f ps = brack f (headPrecedence ps)
   where
-    false = isLam && lamBrackets' False ps -- require more parens for `e >>= λ x → e₁` than `e >>= e₁`
+    false = isLam && lamBrackets ps -- require more parens for `e >>= λ x → e₁` than `e >>= e₁`
     brack                        (Fixity _ (Related n1) LeftAssoc)
                (LeftOperandCtx   (Fixity _ (Related n2) LeftAssoc))  | n1 >= n2 = false
     brack                        (Fixity _ (Related n1) RightAssoc)
-               (RightOperandCtx  (Fixity _ (Related n2) RightAssoc)) | n1 >= n2 = false
+               (RightOperandCtx  (Fixity _ (Related n2) RightAssoc) _) | n1 >= n2 = false
     brack f1   (LeftOperandCtx  f2) | Related f1 <- fixityLevel f1
                                     , Related f2 <- fixityLevel f2
                                     , f1 > f2 = false
-    brack f1   (RightOperandCtx f2) | Related f1 <- fixityLevel f1
+    brack f1   (RightOperandCtx f2 _) | Related f1 <- fixityLevel f1
                                     , Related f2 <- fixityLevel f2
                                     , f1 > f2 = false
     brack _ TopCtx                 = false
@@ -314,15 +322,12 @@
 -- need brackets in certain right operand contexts. To decide we need to look
 -- at the stack of precedences and not just the current precedence.
 -- Example: @m₁ >>= (λ x → x) >>= m₂@ (for @_>>=_@ left associative).
--- The first argument is the parenthesis preference. If True, we add
--- parentheses also in right operand contexts where they aren't strictly
--- needed.
-lamBrackets' :: Bool -> PrecedenceStack -> Bool
-lamBrackets' _      []       = False
-lamBrackets' strict (p : ps) = case p of
+lamBrackets :: PrecedenceStack -> Bool
+lamBrackets []       = False
+lamBrackets (p : ps) = case p of
   TopCtx                 -> __IMPOSSIBLE__
-  ArgumentCtx            -> strict || lamBrackets' strict ps
-  RightOperandCtx{}      -> strict || lamBrackets' strict ps
+  ArgumentCtx pref       -> preferParen pref || lamBrackets ps
+  RightOperandCtx _ pref -> preferParen pref || lamBrackets ps
   FunctionSpaceDomainCtx -> True
   LeftOperandCtx{}       -> True
   FunctionCtx            -> True
@@ -331,10 +336,6 @@
   WithArgCtx             -> True
   DotPatternCtx          -> True
 
--- | Preference for adding parentheses.
-lamBrackets :: PrecedenceStack -> Bool
-lamBrackets = lamBrackets' True
-
 -- | Does a function application need brackets?
 appBrackets :: PrecedenceStack -> Bool
 appBrackets = appBrackets' False
@@ -344,9 +345,9 @@
                 PrecedenceStack -> Bool
 appBrackets' isLam ps = brack (headPrecedence ps)
   where
-    brack ArgumentCtx   = True
+    brack ArgumentCtx{} = True
     brack DotPatternCtx = True
-    brack _             = isLam && lamBrackets' False ps -- allow e + e₁ λ x → e₂
+    brack _             = isLam && lamBrackets ps -- allow e + e₁ λ x → e₂
 
 -- | Does a with application need brackets?
 withAppBrackets :: PrecedenceStack -> Bool
diff --git a/src/full/Agda/Syntax/IdiomBrackets.hs b/src/full/Agda/Syntax/IdiomBrackets.hs
--- a/src/full/Agda/Syntax/IdiomBrackets.hs
+++ b/src/full/Agda/Syntax/IdiomBrackets.hs
@@ -1,6 +1,5 @@
 module Agda.Syntax.IdiomBrackets (parseIdiomBrackets) where
 
-import Control.Applicative
 import Control.Monad
 
 import Agda.Syntax.Common
@@ -8,6 +7,7 @@
 import Agda.Syntax.Concrete
 import Agda.Syntax.Concrete.Operators
 
+import Agda.Syntax.Scope.Base
 import Agda.Syntax.Scope.Monad
 import Agda.TypeChecking.Monad
 
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
@@ -12,7 +12,6 @@
 import Prelude hiding (null)
 
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import qualified Agda.Syntax.Concrete.Name as C
 import Agda.Syntax.Common
@@ -34,7 +33,7 @@
   , metaNumber         :: Maybe MetaId
   , metaNameSuggestion :: String
   }
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 emptyMetaInfo :: MetaInfo
 emptyMetaInfo = MetaInfo
@@ -55,7 +54,7 @@
  --------------------------------------------------------------------------}
 
 newtype ExprInfo = ExprRange Range
-  deriving (Typeable, Data, Show, Eq, Null)
+  deriving (Data, Show, Eq, Null)
 
 exprNoRange :: ExprInfo
 exprNoRange = ExprRange noRange
@@ -67,33 +66,33 @@
   killRange (ExprRange r) = exprNoRange
 
 {--------------------------------------------------------------------------
-    Lambda information
+    Application information
  --------------------------------------------------------------------------}
 
--- | Information about lambdas.
-data LamInfo = LamInfo { lamRange  :: Range
-                       , lamOrigin :: Origin
-                       , lamParens :: Bool    -- ^ Do we prefer the lambda with or without parens?
+-- | Information about application
+data AppInfo = AppInfo { appRange  :: Range
+                       , appOrigin :: Origin
+                       , appParens :: ParenPreference -- ^ Do we prefer a appbda argument with or without parens?
                        }
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 -- | Default is system inserted and prefer parens.
-defaultLamInfo :: Range -> LamInfo
-defaultLamInfo r = LamInfo{ lamRange = r, lamOrigin = Inserted, lamParens = True }
+defaultAppInfo :: Range -> AppInfo
+defaultAppInfo r = AppInfo{ appRange = r, appOrigin = Inserted, appParens = PreferParen }
 
--- | `LamInfo` with no range information.
-defaultLamInfo_ :: LamInfo
-defaultLamInfo_ = defaultLamInfo noRange
+-- | `AppInfo` with no range information.
+defaultAppInfo_ :: AppInfo
+defaultAppInfo_ = defaultAppInfo noRange
 
-instance HasRange LamInfo where
-  getRange = lamRange
+instance HasRange AppInfo where
+  getRange = appRange
 
-instance KillRange LamInfo where
-  killRange (LamInfo r o p) = LamInfo (killRange r) o p
+instance KillRange AppInfo where
+  killRange (AppInfo r o p) = AppInfo (killRange r) o p
 
-instance LensOrigin LamInfo where
-  getOrigin = lamOrigin
-  setOrigin o i = i { lamOrigin = o }
+instance LensOrigin AppInfo where
+  getOrigin = appOrigin
+  setOrigin o i = i { appOrigin = o }
 
 {--------------------------------------------------------------------------
     Module information
@@ -110,7 +109,7 @@
   , minfoDirective :: Maybe ImportDirective
     -- ^ Retained for @abstractToConcrete@ of 'ModuleMacro'.
   }
-  deriving (Typeable, Data, Eq)
+  deriving (Data, Eq)
 
 deriving instance Show ModuleInfo
 
@@ -128,7 +127,7 @@
 ---------------------------------------------------------------------------
 
 newtype LetInfo = LetRange Range
-  deriving (Typeable, Data, Show, Eq, Null)
+  deriving (Data, Show, Eq, Null)
 
 instance HasRange LetInfo where
   getRange (LetRange r)   = r
@@ -148,7 +147,7 @@
   , defMacro    :: IsMacro
   , defInfo     :: DeclInfo
   }
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 mkDefInfo :: Name -> Fixity' -> Access -> IsAbstract -> Range -> DefInfo
 mkDefInfo x f a ab r = DefInfo f a ab NotInstanceDef NotMacroDef (DeclInfo x r)
@@ -174,7 +173,7 @@
   { declName  :: Name
   , declRange :: Range
   }
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 instance HasRange DeclInfo where
   getRange = declRange
@@ -194,7 +193,7 @@
   , mutualPositivityCheck :: PositivityCheck
   , mutualRange           :: Range
   }
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 -- | Default value for 'MutualInfo'.
 instance Null MutualInfo where
@@ -211,7 +210,7 @@
  --------------------------------------------------------------------------}
 
 newtype LHSInfo = LHSRange Range
-  deriving (Typeable, Data, Show, Eq, Null)
+  deriving (Data, Show, Eq, Null)
 
 instance HasRange LHSInfo where
   getRange (LHSRange r) = r
@@ -226,7 +225,7 @@
 -- | For a general pattern we remember the source code position.
 newtype PatInfo
   = PatRange Range
-  deriving (Typeable, Data, Eq, Null, Show, HasRange, KillRange)
+  deriving (Data, Eq, Null, Show, SetRange, HasRange, KillRange)
 
 -- | Empty range for patterns.
 patNoRange :: PatInfo
@@ -238,17 +237,20 @@
     -- ^ Does this pattern come form the eta-expansion of an implicit pattern?
     ---  Or from a user written constructor or record pattern?
   , patInfo     :: PatInfo
+  , patLazy     :: Bool
   }
-  deriving (Typeable, Data, Eq)
+  deriving (Data, Eq)
 
 instance Show ConPatInfo where
-  show (ConPatInfo po i) = applyWhen (po == ConOSystem) ("implicit " ++) $ show i
+  show (ConPatInfo po i l) =
+    applyWhen l ("lazy " ++) $
+    applyWhen (po == ConOSystem) ("implicit " ++) $ show i
 
 instance HasRange ConPatInfo where
   getRange = getRange . patInfo
 
 instance KillRange ConPatInfo where
-  killRange (ConPatInfo b i) = ConPatInfo b $ killRange i
+  killRange (ConPatInfo b i l) = ConPatInfo b (killRange i) l
 
 instance SetRange ConPatInfo where
-  setRange r (ConPatInfo b i) = ConPatInfo b $ PatRange r
+  setRange r (ConPatInfo b i l) = ConPatInfo b (PatRange r) l
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
@@ -5,14 +5,9 @@
 {-# LANGUAGE TemplateHaskell            #-}
 {-# LANGUAGE UndecidableInstances       #-}  -- because of shortcomings of FunctionalDependencies
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE OverlappingInstances #-}
-#endif
-
 module Agda.Syntax.Internal
     ( module Agda.Syntax.Internal
     , module Agda.Syntax.Abstract.Name
-    , module Agda.Utils.Pointer
     , MetaId(..)
     ) where
 
@@ -26,11 +21,11 @@
 import Data.Function
 import qualified Data.List as List
 import Data.Maybe
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, Sum(..))
+import Data.Monoid ( Monoid, mempty, mappend )
+import Data.Semigroup ( Semigroup, (<>), Sum(..) )
 
 import Data.Traversable
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import Agda.Syntax.Position
 import Agda.Syntax.Common
@@ -45,9 +40,9 @@
 import Agda.Utils.Lens
 import Agda.Utils.List
 import Agda.Utils.Maybe
+import Agda.Utils.NonemptyList
 import Agda.Utils.Null
 import Agda.Utils.Permutation
-import Agda.Utils.Pointer
 import Agda.Utils.Size
 import qualified Agda.Utils.Pretty as P
 import Agda.Utils.Pretty hiding ((<>))
@@ -71,7 +66,7 @@
                               --   Empty list for data constructors.
                               --   'Arg' is not needed here since it
                               --   is stored in the constructor args.
-  } deriving (Typeable, Data, Show)
+  } deriving (Data, Show)
 
 instance Eq ConHead where
   (==) = (==) `on` conName
@@ -111,7 +106,10 @@
           | Lam ArgInfo (Abs Term)        -- ^ Terms are beta normal. Relevance is ignored
           | Lit Literal
           | Def QName Elims               -- ^ @f es@, possibly a delta/iota-redex
-          | Con ConHead ConInfo Args      -- ^ @c vs@ or @record { fs = vs }@
+          | Con ConHead ConInfo Elims
+          -- ^ @c es@ or @record { fs = es }@
+          --   @es@ allows only Apply and IApply eliminations,
+          --   and IApply only for data constructors.
           | Pi (Dom Type) (Abs Type)      -- ^ dependent or non-dependent function space
           | Sort Sort
           | Level Level
@@ -120,9 +118,7 @@
             -- ^ 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, Data, Show)
+  deriving (Data, Show)
 
 type ConInfo = ConOrigin
 
@@ -131,7 +127,7 @@
 data Elim' a
   = Apply (Arg a)         -- ^ Application.
   | Proj ProjOrigin QName -- ^ Projection.  'QName' is name of a record projection.
-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
+  deriving (Data, Show, Functor, Foldable, Traversable)
 
 type Elim = Elim' Term
 type Elims = [Elim]  -- ^ eliminations ordered left-to-right.
@@ -167,7 +163,7 @@
                -- ^ The body has (at least) one free variable.
                --   Danger: 'unAbs' doesn't shift variables properly
            | NoAbs { absName :: ArgName, unAbs :: a }
-  deriving (Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Data, Functor, Foldable, Traversable)
 
 instance Decoration Abs where
   traverseF f (Abs   x a) = Abs   x <$> f a
@@ -176,7 +172,7 @@
 -- | Types are terms with a sort annotation.
 --
 data Type' a = El { _getSort :: Sort, unEl :: a }
-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
+  deriving (Data, Show, Functor, Foldable, Traversable)
 
 type Type = Type' Term
 
@@ -203,7 +199,7 @@
 --   and so on.
 data Tele a = EmptyTel
             | ExtendTel a (Abs (Tele a))  -- ^ 'Abs' is never 'NoAbs'.
-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
+  deriving (Data, Show, Functor, Foldable, Traversable)
 
 type Telescope = Tele (Dom Type)
 
@@ -214,24 +210,22 @@
   | Prop        -- ^ Dummy sort.
   | Inf         -- ^ @Setω@.
   | SizeUniv    -- ^ @SizeUniv@, a sort inhabited by type @Size@.
-  | DLub Sort (Abs Sort)
-    -- ^ Dependent least upper bound.
-    --   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)
+  | PiSort Sort (Abs Sort) -- ^ Sort of the pi type.
+  | UnivSort Sort -- ^ Sort of another sort.
+  | MetaS {-# UNPACK #-} !MetaId Elims
+  deriving (Data, Show)
 
 -- | A level is a maximum expression of 0..n 'PlusLevel' expressions
 --   each of which is a number or an atom plus a number.
 --
 --   The empty maximum is the canonical representation for level 0.
 newtype Level = Max [PlusLevel]
-  deriving (Show, Typeable, Data)
+  deriving (Show, Data)
 
 data PlusLevel
   = ClosedLevel Integer     -- ^ @n@, to represent @Setₙ@.
   | Plus Integer LevelAtom  -- ^ @n + ℓ@.
-  deriving (Show, Typeable, Data)
+  deriving (Show, Data)
 
 -- | An atomic term of type @Level@.
 data LevelAtom
@@ -243,7 +237,7 @@
     -- ^ A neutral term of type @Level@.
   | UnreducedLevel Term
     -- ^ Introduced by 'instantiate', removed by 'reduce'.
-  deriving (Show, Typeable, Data)
+  deriving (Show, Data)
 
 ---------------------------------------------------------------------------
 -- * Blocked Terms
@@ -268,7 +262,7 @@
   | ReallyNotBlocked
     -- ^ Reduction was not blocked, we reached a whnf
     --   which can be anything but a stuck @'Def'@.
-  deriving (Show, Typeable, Data)
+  deriving (Show, Data)
 
 -- | 'ReallyNotBlocked' is the unit.
 --   'MissingClauses' is dominant.
@@ -292,8 +286,8 @@
 data Blocked t
   = Blocked    { theBlockingMeta :: MetaId    , ignoreBlocking :: t }
   | NotBlocked { blockingStatus  :: NotBlocked, ignoreBlocking :: t }
-  deriving (Typeable, Show, Functor, Foldable, Traversable)
-  -- deriving (Typeable, Eq, Ord, Functor, Foldable, Traversable)
+  deriving (Show, Functor, Foldable, Traversable)
+  -- deriving (Eq, Ord, Functor, Foldable, Traversable)
 
 -- | Blocking by a meta is dominant.
 instance Applicative Blocked where
@@ -393,7 +387,7 @@
       --   @Just False@ means clause is not unreachable.
       --   @Just True@ means clause is unreachable.
     }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 clausePats :: Clause -> [Arg DeBruijnPattern]
 clausePats = map (fmap namedThing) . namedClausePats
@@ -410,6 +404,19 @@
 nameToPatVarName :: Name -> PatVarName
 nameToPatVarName = nameToArgName
 
+-- | Origin of the pattern: what did the user write in this position?
+data PatOrigin
+  = PatOSystem         -- ^ Pattern inserted by the system
+  | PatOSplit          -- ^ Pattern generated by case split
+  | PatOVar Name       -- ^ User wrote a variable pattern
+  | PatODot            -- ^ User wrote a dot pattern
+  | PatOWild           -- ^ User wrote a wildcard pattern
+  | PatOCon            -- ^ User wrote a constructor pattern
+  | PatORec            -- ^ User wrote a record pattern
+  | PatOLit            -- ^ User wrote a literal pattern
+  | PatOAbsurd         -- ^ User wrote an absurd pattern
+  deriving (Data, Show, Eq)
+
 -- | Patterns are variables, constructors, or wildcards.
 --   @QName@ is used in @ConP@ rather than @Name@ since
 --     a constructor might come from a particular namespace.
@@ -417,34 +424,33 @@
 --     the arguments we are matching with) use @QName@.
 --
 data Pattern' x
-  = VarP x
+  = VarP PatOrigin x
     -- ^ @x@
-  | DotP Term
+  | DotP PatOrigin Term
     -- ^ @.t@
   | ConP ConHead ConPatternInfo [NamedArg (Pattern' x)]
     -- ^ @c ps@
     --   The subpatterns do not contain any projection copatterns.
-  | AbsurdP (Pattern' x)
-    -- ^ @()@
-    --   The argument is to keep track of the original pattern
-    --   (before the absurd match).
   | LitP Literal
     -- ^ E.g. @5@, @"hello"@.
   | ProjP ProjOrigin QName
     -- ^ Projection copattern.  Can only appear by itself.
-  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
+  deriving (Data, Show, Functor, Foldable, Traversable)
 
 type Pattern = Pattern' PatVarName
     -- ^ The @PatVarName@ is a name suggestion.
 
-varP :: ArgName -> Pattern
-varP = VarP
+varP :: a -> Pattern' a
+varP = VarP PatOSystem
 
+dotP :: Term -> Pattern' a
+dotP = DotP PatOSystem
+
 -- | Type used when numbering pattern variables.
 data DBPatVar = DBPatVar
   { dbPatVarName  :: PatVarName
   , dbPatVarIndex :: Int
-  } deriving (Typeable, Data, Show)
+  } deriving (Data, Show, Eq)
 
 type DeBruijnPattern = Pattern' DBPatVar
 
@@ -457,13 +463,13 @@
 
 -- | The @ConPatternInfo@ states whether the constructor belongs to
 --   a record type (@Just@) or data type (@Nothing@).
---   In the former case, the @Bool@ says whether the record pattern
+--   In the former case, the @PatOrigin@ says whether the record pattern
 --   orginates from the expansion of an implicit pattern.
 --   The @Type@ is the type of the whole record pattern.
 --   The scope used for the type is given by any outer scope
 --   plus the clause's telescope ('clauseTel').
 data ConPatternInfo = ConPatternInfo
-  { conPRecord :: Maybe ConOrigin
+  { conPRecord :: Maybe PatOrigin
     -- ^ @Nothing@ if data constructor.
     --   @Just@ if record constructor.
   , conPType   :: Maybe (Arg Type)
@@ -473,20 +479,39 @@
     --   Could be absent (@Nothing@) if pattern comes from some
     --   plugin (like Agsy).
     --   Needed e.g. for with-clause stripping.
+  , conPLazy :: Bool
+    -- ^ Lazy patterns are generated by the forcing translation
+    --   ('Agda.TypeChecking.Forcing.forcingTranslation') and are dropped by
+    --   the clause compiler (TODO: not yet)
+    --   ('Agda.TypeChecking.CompiledClause.Compile.compileClauses') when the
+    --   variables they bind are unused. The GHC backend compiles lazy matches
+    --   to lazy patterns in Haskell (TODO: not yet).
   }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 noConPatternInfo :: ConPatternInfo
-noConPatternInfo = ConPatternInfo Nothing Nothing
+noConPatternInfo = ConPatternInfo Nothing Nothing False
 
 -- | Build partial 'ConPatternInfo' from 'ConInfo'
 toConPatternInfo :: ConInfo -> ConPatternInfo
-toConPatternInfo ConORec = ConPatternInfo (Just ConORec) Nothing
+toConPatternInfo ConORec = noConPatternInfo{ conPRecord = Just PatORec }
 toConPatternInfo _ = noConPatternInfo
 
 -- | Build 'ConInfo' from 'ConPatternInfo'.
 fromConPatternInfo :: ConPatternInfo -> ConInfo
-fromConPatternInfo = fromMaybe ConOSystem . conPRecord
+fromConPatternInfo = fromMaybe ConOCon . fmap patToConO . conPRecord
+  where
+    patToConO :: PatOrigin -> ConOrigin
+    patToConO = \case
+      PatOSystem -> ConOSystem
+      PatOSplit  -> ConOSplit
+      PatOVar{}  -> ConOSystem
+      PatODot    -> ConOSystem
+      PatOWild   -> ConOSystem
+      PatOCon    -> ConOCon
+      PatORec    -> ConORec
+      PatOLit    -> __IMPOSSIBLE__
+      PatOAbsurd -> ConOSystem
 
 -- | Extract pattern variables in left-to-right order.
 --   A 'DotP' is also treated as variable (see docu for 'Clause').
@@ -495,9 +520,8 @@
 
 instance PatternVars a (Arg (Pattern' a)) where
   -- patternVars :: Arg (Pattern' a) -> [Arg (Either a Term)]
-  patternVars (Arg i (VarP x)     ) = [Arg i $ Left x]
-  patternVars (Arg i (DotP t)     ) = [Arg i $ Right t]
-  patternVars (Arg i (AbsurdP p)  ) = patternVars (Arg i p)
+  patternVars (Arg i (VarP _ x)   ) = [Arg i $ Left x]
+  patternVars (Arg i (DotP _ t)   ) = [Arg i $ Right t]
   patternVars (Arg _ (ConP _ _ ps)) = patternVars ps
   patternVars (Arg _ (LitP _)     ) = []
   patternVars (Arg _ ProjP{}      ) = []
@@ -508,18 +532,28 @@
 instance PatternVars a b => PatternVars a [b] where
   patternVars = concatMap patternVars
 
+
+-- | Retrieve the origin of a pattern
+patternOrigin :: Pattern' x -> Maybe PatOrigin
+patternOrigin (VarP o _) = Just o
+patternOrigin (DotP o _) = Just o
+patternOrigin LitP{}     = Nothing
+patternOrigin (ConP _ ci _) = conPRecord ci
+patternOrigin ProjP{}    = Nothing
+
 -- | Does the pattern perform a match that could fail?
 properlyMatching :: DeBruijnPattern -> Bool
-properlyMatching (VarP x) = False
+properlyMatching p
+  | patternOrigin p == Just PatOAbsurd = True
+properlyMatching VarP{} = False
 properlyMatching DotP{} = False
-properlyMatching AbsurdP{} = True
 properlyMatching LitP{} = True
 properlyMatching (ConP _ ci ps) = isNothing (conPRecord ci) || -- not a record cons
   List.any (properlyMatching . namedArg) ps  -- or one of subpatterns is a proper m
 properlyMatching ProjP{} = True
 
 instance IsProjP (Pattern' a) where
-  isProjP (ProjP o d) = Just (o, AmbQ [d])
+  isProjP (ProjP o d) = Just (o, unambiguous d)
   isProjP _ = Nothing
 
 -----------------------------------------------------------------------------
@@ -580,9 +614,6 @@
            , Foldable
            , Traversable
            , Data
-#if __GLASGOW_HASKELL__ <= 708
-           , Typeable
-#endif
            )
 
 type Substitution = Substitution' Term
@@ -637,75 +668,6 @@
 isAbsurdPatternName x = x == absurdPatternName
 
 ---------------------------------------------------------------------------
--- * Pointers and Sharing
----------------------------------------------------------------------------
-
--- | Remove top-level @Shared@ data 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
-
--- | Introduce sharing.
-shared_ :: Term -> Term
-shared_ v@Shared{}   = v
-shared_ v@(Var _ []) = v
-shared_ v@(Con _ _ []) = v -- Issue 1691: sharing (zero : Nat) destroys constructorForm
-shared_ v            = Shared (newPtr v)
-
--- | Typically m would be TCM and f would be Blocked.
-updateSharedFM
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Applicative m, Monad m, Traversable f)
-#else
-  :: (Monad m, Traversable f)
-#endif
-  => (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
-      _        -> return $! compressPointerChain 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
-    _        -> return $! compressPointerChain 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
-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. Then return the
--- inner-most pointer so we have only one pointer for the result.
-compressPointerChain :: Term -> Term
-compressPointerChain v =
-  case reverse $ pointerChain v of
-    p:_:ps@(_:_) -> setPointers (Shared p) ps
-    p:_:_        -> (Shared p)
-    _            -> v
-  where
-    setPointers u [] = u
-    setPointers u (p : ps) =
-      setPtr u p `seq` setPointers u ps
-
----------------------------------------------------------------------------
 -- * Smart constructors
 ---------------------------------------------------------------------------
 
@@ -717,32 +679,24 @@
 -- | Add 'DontCare' is it is not already a @DontCare@.
 dontCare :: Term -> Term
 dontCare v =
-  case ignoreSharing v of
+  case v of
     DontCare{} -> v
     _          -> DontCare v
 
 -- | A dummy type.
 typeDontCare :: Type
-typeDontCare = El Prop (Sort Prop)
+typeDontCare = sort Prop
 
 -- | Top sort (Set\omega).
 topSort :: Type
-topSort = El Inf (Sort Inf)
+topSort = sort Inf
 
 sort :: Sort -> Type
-sort s = El (sSuc s) $ Sort s
+sort s = El (UnivSort s) $ Sort s
 
 varSort :: Int -> Sort
 varSort n = Type $ Max [Plus 0 $ NeutralLevel mempty $ var n]
 
--- | Get the next higher sort.
-sSuc :: Sort -> Sort
-sSuc Prop            = mkType 1
-sSuc Inf             = Inf
-sSuc SizeUniv        = SizeUniv
-sSuc (DLub a b)      = DLub (sSuc a) (fmap sSuc b)
-sSuc (Type l)        = Type $ levelSuc l
-
 levelSuc :: Level -> Level
 levelSuc (Max []) = Max [ClosedLevel 1]
 levelSuc (Max as) = Max $ map inc as
@@ -753,7 +707,7 @@
 mkType n = Type $ Max [ClosedLevel n | n > 0]
 
 isSort :: Term -> Maybe Sort
-isSort v = case ignoreSharing v of
+isSort v = case v of
   Sort s -> Just s
   _      -> Nothing
 
@@ -858,13 +812,13 @@
 
 -- | Removing a topmost 'DontCare' constructor.
 stripDontCare :: Term -> Term
-stripDontCare v = case ignoreSharing v of
+stripDontCare v = case v of
   DontCare v -> v
   _          -> v
 
 -- | Doesn't do any reduction.
 arity :: Type -> Nat
-arity t = case ignoreSharing $ unEl t of
+arity t = case unEl t of
   Pi  _ b -> 1 + arity (unAbs b)
   _       -> 0
 
@@ -872,6 +826,13 @@
 notInScopeName :: ArgName -> ArgName
 notInScopeName = stringToArgName . ("." ++) . argNameToString
 
+-- | Remove the dot from a notInScopeName. This is used when printing function
+--   types that have abstracted over not-in-scope names.
+unNotInScopeName :: ArgName -> ArgName
+unNotInScopeName = stringToArgName . undot . argNameToString
+  where undot ('.':s) = s
+        undot s       = s
+
 -- | Pick the better name suggestion, i.e., the one that is not just underscore.
 class Suggest a b where
   suggest :: a -> b -> String
@@ -918,14 +879,14 @@
 --   can be projected.
 hasElims :: Term -> Maybe (Elims -> Term, Elims)
 hasElims v =
-  case ignoreSharing v of
+  case v of
     Var   i es -> Just (Var   i, es)
     Def   f es -> Just (Def   f, es)
     MetaV x es -> Just (MetaV x, es)
     Con{}      -> Nothing
     Lit{}      -> Nothing
     -- Andreas, 2016-04-13, Issue 1932: We convert λ x → x .f  into f
-    Lam _ (Abs _ v)  -> case ignoreSharing v of
+    Lam _ (Abs _ v)  -> case v of
       Var 0 [Proj _o f] -> Just (Def f, [])
       _ -> Nothing
     Lam{}      -> Nothing
@@ -933,7 +894,6 @@
     Sort{}     -> Nothing
     Level{}    -> Nothing
     DontCare{} -> Nothing
-    Shared{}   -> __IMPOSSIBLE__
 
 -- | Drop 'Apply' constructor. (Unsafe!)
 argFromElim :: Elim' a -> Arg a
@@ -945,6 +905,9 @@
 isApplyElim (Apply u) = Just u
 isApplyElim Proj{}    = Nothing
 
+isApplyElim' :: Empty -> Elim' a -> Arg a
+isApplyElim' e = fromMaybe (absurd e) . isApplyElim
+
 -- | Drop 'Apply' constructors. (Safe)
 allApplyElims :: [Elim' a] -> Maybe [Arg a]
 allApplyElims = mapM isApplyElim
@@ -1035,11 +998,7 @@
 
   tsize :: a -> Sum Int
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} (Foldable t, TermSize a) => TermSize (t a) where
-#else
-instance (Foldable t, TermSize a) => TermSize (t a) where
-#endif
   tsize = foldMap tsize
 
 instance TermSize Term where
@@ -1054,7 +1013,6 @@
     Pi a b      -> 1 + tsize a + tsize b
     Sort s      -> tsize s
     DontCare mv -> tsize mv
-    Shared p    -> tsize (derefPtr p)
 
 instance TermSize Sort where
   tsize s = case s of
@@ -1062,7 +1020,9 @@
     Prop      -> 1
     Inf       -> 1
     SizeUniv  -> 1
-    DLub s s' -> 1 + tsize s + tsize s'
+    PiSort s s' -> 1 + tsize s + tsize s'
+    UnivSort s -> 1 + tsize s
+    MetaS _ es -> 1 + tsize es
 
 instance TermSize Level where
   tsize (Max as) = 1 + tsize as
@@ -1104,7 +1064,6 @@
     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
@@ -1128,7 +1087,9 @@
     Inf        -> Inf
     SizeUniv   -> SizeUniv
     Type a     -> killRange1 Type a
-    DLub s1 s2 -> killRange2 DLub s1 s2
+    PiSort s1 s2 -> killRange2 PiSort s1 s2
+    UnivSort s -> killRange1 UnivSort s
+    MetaS x es -> killRange1 (MetaS x) es
 
 instance KillRange Substitution where
   killRange IdS                  = IdS
@@ -1138,8 +1099,11 @@
   killRange (Strengthen err rho) = killRange1 (Strengthen err) rho
   killRange (Lift n rho)         = killRange1 (Lift n) rho
 
+instance KillRange PatOrigin where
+  killRange = id
+
 instance KillRange ConPatternInfo where
-  killRange (ConPatternInfo mr mt) = killRange1 (ConPatternInfo mr) mt
+  killRange (ConPatternInfo mr mt lz) = killRange1 (ConPatternInfo mr) mt lz
 
 instance KillRange DBPatVar where
   killRange (DBPatVar x i) = killRange2 DBPatVar x i
@@ -1147,9 +1111,8 @@
 instance KillRange a => KillRange (Pattern' a) where
   killRange p =
     case p of
-      VarP x           -> killRange1 VarP x
-      DotP v           -> killRange1 DotP v
-      AbsurdP p        -> killRange1 AbsurdP p
+      VarP o x         -> killRange2 VarP o x
+      DotP o v         -> killRange2 DotP o v
       ConP con info ps -> killRange3 ConP con info ps
       LitP l           -> killRange1 LitP l
       ProjP o q        -> killRange1 (ProjP o) q
@@ -1199,7 +1162,7 @@
 
 instance Pretty Term where
   prettyPrec p v =
-    case ignoreSharing v of
+    case v of
       Var x els -> text ("@" ++ show x) `pApp` els
       Lam ai b   ->
         mparens (p > 0) $
@@ -1207,7 +1170,7 @@
             , nest 2 $ pretty (unAbs b) ]
       Lit l                -> pretty l
       Def q els            -> pretty q `pApp` els
-      Con c ci vs          -> pretty (conName c) `pApp` map Apply vs
+      Con c ci vs          -> pretty (conName c) `pApp` vs
       Pi a (NoAbs _ b)     -> mparens (p > 0) $
         sep [ prettyPrec 1 (unDom a) <+> text "->"
             , nest 2 $ pretty b ]
@@ -1218,7 +1181,6 @@
       Level l     -> prettyPrec p l
       MetaV x els -> pretty x `pApp` els
       DontCare v  -> prettyPrec p v
-      Shared{}    -> __IMPOSSIBLE__
     where
       pApp d els = mparens (not (null els) && p > 9) $
                    sep [d, nest 2 $ fsep (map (prettyPrec 10) els)]
@@ -1279,10 +1241,12 @@
       Prop -> text "Prop"
       Inf -> text "Setω"
       SizeUniv -> text "SizeUniv"
-      DLub s b -> mparens (p > 9) $
-        text "dlub" <+> prettyPrec 10 s
-                    <+> parens (sep [ text ("λ " ++ absName b ++ " ->")
-                                    , nest 2 $ pretty (unAbs b) ])
+      PiSort s b -> mparens (p > 9) $
+        text "piSort" <+> prettyPrec 10 s
+                      <+> parens (sep [ text ("λ " ++ absName b ++ " ->")
+                                      , nest 2 $ pretty (unAbs b) ])
+      UnivSort s -> mparens (p > 9) $ text "univSort" <+> prettyPrec 10 s
+      MetaS x es -> prettyPrec p $ MetaV x es
 
 instance Pretty Type where
   prettyPrec p (El _ a) = prettyPrec p a
@@ -1295,11 +1259,10 @@
   prettyPrec _ x = text $ patVarNameToString (dbPatVarName x) ++ "@" ++ show (dbPatVarIndex x)
 
 instance Pretty a => Pretty (Pattern' a) where
-  prettyPrec n (VarP x)      = prettyPrec n x
-  prettyPrec _ (DotP t)      = text "." P.<> prettyPrec 10 t
-  prettyPrec _ (AbsurdP _)   = text "()"
-  prettyPrec n (ConP c i nps)= mparens (n > 0) $
-    pretty (conName c) <+> fsep (map pretty ps)
+  prettyPrec n (VarP _o x)   = prettyPrec n x
+  prettyPrec _ (DotP _o t)   = text "." P.<> prettyPrec 10 t
+  prettyPrec n (ConP c i nps)= mparens (n > 0 && not (null nps)) $
+    pretty (conName c) <+> fsep (map (prettyPrec 10) ps)
     where ps = map (fmap namedThing) nps
   -- -- Version with printing record type:
   -- prettyPrec _ (ConP c i ps) = (if b then braces else parens) $ prTy $
@@ -1328,7 +1291,6 @@
     Level l    -> rnf l
     MetaV _ es -> rnf es
     DontCare v -> rnf v
-    Shared{}   -> ()
 
 instance NFData Type where
   rnf (El s v) = rnf (s, v)
@@ -1339,7 +1301,9 @@
     Prop     -> ()
     Inf      -> ()
     SizeUniv -> ()
-    DLub a b -> rnf (a, unAbs b)
+    PiSort a b -> rnf (a, unAbs b)
+    UnivSort a -> rnf a
+    MetaS _ es -> rnf es
 
 instance NFData Level where
   rnf (Max as) = rnf as
diff --git a/src/full/Agda/Syntax/Internal/Defs.hs b/src/full/Agda/Syntax/Internal/Defs.hs
--- a/src/full/Agda/Syntax/Internal/Defs.hs
+++ b/src/full/Agda/Syntax/Internal/Defs.hs
@@ -67,7 +67,6 @@
     Level l    -> getDefs l
     MetaV x vs -> getDefs x >> getDefs vs
     DontCare v -> getDefs v
-    Shared p   -> getDefs $ derefPtr p  -- TODO: exploit sharing!
 
 instance GetDefs MetaId where
   getDefs x = doMeta x
@@ -81,7 +80,9 @@
     Prop      -> return ()
     Inf       -> return ()
     SizeUniv  -> return ()
-    DLub s s' -> getDefs s >> getDefs s'
+    PiSort s s' -> getDefs s >> getDefs s'
+    UnivSort s  -> getDefs s
+    MetaS x es  -> getDefs x >> getDefs es
 
 instance GetDefs Level where
   getDefs (Max ls) = getDefs ls
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
@@ -5,7 +5,6 @@
 
 module Agda.Syntax.Internal.Generic where
 
-import Control.Applicative
 import Data.Traversable
 import Data.Monoid
 import Data.Foldable
@@ -21,17 +20,11 @@
 
   -- | Generic traversal with post-traversal action.
   --   Ignores sorts.
-  traverseTermM :: (Monad m
-#if __GLASGOW_HASKELL__ <= 708
-    , Applicative m
-#endif
-    ) => (Term -> m Term) -> a -> m a
+  traverseTermM :: Monad m => (Term -> m Term) -> a -> m a
 
-  default traverseTermM :: (Monad m, Traversable f, TermLike b, f b ~ a
-#if __GLASGOW_HASKELL__ <= 708
-    , Applicative m
-#endif
-    ) => (Term -> m Term) -> a -> m a
+  default traverseTermM :: (Monad m, Traversable f, TermLike b, f b ~ a)
+                        => (Term -> m Term) -> a -> m a
+
   traverseTermM = traverse . traverseTermM
 
   -- | Generic fold, ignoring sorts.
@@ -71,7 +64,6 @@
 instance TermLike a => TermLike [a]         where
 instance TermLike a => TermLike (Maybe a)   where
 instance TermLike a => TermLike (Abs a)     where
-instance TermLike a => TermLike (Ptr a)     where
 instance TermLike a => TermLike (Blocked a) where
 
 -- Tuples
@@ -103,7 +95,6 @@
     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
@@ -116,7 +107,6 @@
     Lit _       -> mempty
     Sort _      -> mempty
     DontCare mv -> foldTerm f mv
-    Shared p    -> foldTerm f p
 
 instance TermLike Level where
   traverseTermM f (Max as) = Max <$> traverseTermM f as
@@ -161,9 +151,5 @@
     EqualityType s eq l t a b -> foldTerm f (l ++ [t, a, b])
 
 -- | Put it in a monad to make it possible to do strictly.
-copyTerm :: (TermLike a, Monad m
-#if __GLASGOW_HASKELL__ <= 708
-  , Applicative m
-#endif
-  ) => a -> m a
+copyTerm :: (TermLike a, Monad m) => a -> m a
 copyTerm = traverseTermM return
diff --git a/src/full/Agda/Syntax/Internal/Names.hs b/src/full/Agda/Syntax/Internal/Names.hs
--- a/src/full/Agda/Syntax/Internal/Names.hs
+++ b/src/full/Agda/Syntax/Internal/Names.hs
@@ -11,8 +11,6 @@
 import Data.Set (Set)
 import qualified Data.Set as Set
 
-import Control.Applicative
-
 import Agda.Syntax.Common
 import Agda.Syntax.Literal
 import Agda.Syntax.Internal
@@ -23,6 +21,8 @@
 import Agda.TypeChecking.CompiledClause
 
 import Agda.Utils.Functor
+import Agda.Utils.NonemptyList
+
 import Agda.Utils.Impossible
 #include "undefined.h"
 
@@ -34,6 +34,7 @@
 
 instance NamesIn a => NamesIn (Maybe a)              where
 instance NamesIn a => NamesIn [a]                    where
+instance NamesIn a => NamesIn (NonemptyList a)       where
 instance NamesIn a => NamesIn (Arg a)                where
 instance NamesIn a => NamesIn (Dom a)                where
 instance NamesIn a => NamesIn (Named n a)            where
@@ -57,7 +58,7 @@
 -- If someone adds a field containing names, this would go unnoticed.
 
 instance NamesIn Definition where
-  namesIn def = namesIn (defType def, theDef def)
+  namesIn def = namesIn (defType def, theDef def, defDisplay def)
 
 instance NamesIn Defn where
   namesIn def = case def of
@@ -90,8 +91,7 @@
   namesIn p = case p of
     VarP{}        -> Set.empty
     LitP l        -> namesIn l
-    DotP v        -> namesIn v
-    AbsurdP p     -> namesIn p
+    DotP _ v      -> namesIn v
     ConP c _ args -> namesIn (c, args)
     ProjP _ f     -> namesIn f
 
@@ -104,10 +104,12 @@
     Prop     -> Set.empty
     Inf      -> Set.empty
     SizeUniv -> Set.empty
-    DLub a b -> namesIn (a, b)
+    PiSort a b -> namesIn (a, b)
+    UnivSort a -> namesIn a
+    MetaS _ es -> namesIn es
 
 instance NamesIn Term where
-  namesIn v = case ignoreSharing v of
+  namesIn v = case v of
     Var _ args   -> namesIn args
     Lam _ b      -> namesIn b
     Lit l        -> namesIn l
@@ -118,7 +120,6 @@
     Level l      -> namesIn l
     MetaV _ args -> namesIn args
     DontCare v   -> namesIn v
-    Shared{}     -> __IMPOSSIBLE__
 
 instance NamesIn Level where
   namesIn (Max ls) = namesIn ls
@@ -138,6 +139,7 @@
 instance NamesIn Literal where
   namesIn l = case l of
     LitNat{}      -> Set.empty
+    LitWord64{}   -> Set.empty
     LitString{}   -> Set.empty
     LitChar{}     -> Set.empty
     LitFloat{}    -> Set.empty
@@ -152,7 +154,6 @@
 instance NamesIn ConHead where namesIn h = namesIn (conName h)
 
 instance NamesIn a => NamesIn (Open a)  where
-instance NamesIn a => NamesIn (Local a) where
 
 instance NamesIn DisplayForm where
   namesIn (Display _ ps v) = namesIn (ps, v)
@@ -184,6 +185,7 @@
     A.PatternSynP _ c args -> namesIn (c, args)
     A.RecP _ fs            -> namesIn fs
     A.DotP{}               -> __IMPOSSIBLE__    -- Dot patterns are not allowed in pattern synonyms
+    A.WithP _ p            -> namesIn p
 
 instance NamesIn AmbiguousQName where
   namesIn (AmbQ cs) = namesIn cs
diff --git a/src/full/Agda/Syntax/Internal/Pattern.hs b/src/full/Agda/Syntax/Internal/Pattern.hs
--- a/src/full/Agda/Syntax/Internal/Pattern.hs
+++ b/src/full/Agda/Syntax/Internal/Pattern.hs
@@ -2,20 +2,16 @@
 {-# LANGUAGE TypeFamilies           #-}  -- because of type equality ~
 {-# LANGUAGE UndecidableInstances   #-}  -- because of func. deps.
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE OverlappingInstances #-}
-#endif
-
 module Agda.Syntax.Internal.Pattern where
 
-import Control.Applicative
+import Control.Arrow (first, second)
 import Control.Monad.State
 
 import Data.Maybe
 import Data.Monoid
 import qualified Data.List as List
-import Data.Foldable (Foldable, foldMap)
-import Data.Traversable (Traversable, traverse)
+import Data.Foldable
+import Data.Traversable
 
 import Agda.Syntax.Common
 import Agda.Syntax.Abstract (IsProjP(..))
@@ -52,11 +48,7 @@
 
 -- | Get the number of initial 'Apply' patterns.
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} IsProjP p => FunArity [p] where
-#else
-instance IsProjP p => FunArity [p] where
-#endif
   funArity = length . takeWhile (isNothing . isProjP)
 
 -- | Get the number of initial 'Apply' patterns in a clause.
@@ -64,11 +56,7 @@
   funArity = funArity . namedClausePats
 
 -- | Get the number of common initial 'Apply' patterns in a list of clauses.
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} FunArity [Clause] where
-#else
-instance FunArity [Clause] where
-#endif
   funArity []  = 0
   funArity cls = minimum $ map funArity cls
 
@@ -99,10 +87,9 @@
 instance LabelPatVars Pattern DeBruijnPattern Int where
   labelPatVars p =
     case p of
-      VarP x       -> do i <- next
-                         return $ VarP (DBPatVar x i)
-      DotP t       -> DotP t <$ next
-      AbsurdP p    -> AbsurdP <$> labelPatVars p
+      VarP o x     -> do i <- next
+                         return $ VarP o (DBPatVar x i)
+      DotP o t     -> DotP o t <$ next
       ConP c mt ps -> ConP c mt <$> labelPatVars ps
       LitP l       -> return $ LitP l
       ProjP o q    -> return $ ProjP o q
@@ -151,10 +138,9 @@
     picks = forM (downFrom n) $ \ i -> List.findIndex (Just i ==) ixs
 
     getIndices :: DeBruijnPattern -> [Maybe Int]
-    getIndices (VarP x)      = [Just $ dbPatVarIndex x]
+    getIndices (VarP _ x)    = [Just $ dbPatVarIndex x]
     getIndices (ConP c _ ps) = concatMap (getIndices . namedThing . unArg) ps
-    getIndices (DotP _)      = [Nothing | countDots]
-    getIndices (AbsurdP p)   = getIndices p
+    getIndices (DotP _ _)    = [Nothing | countDots]
     getIndices (LitP _)      = []
     getIndices ProjP{}       = []
 
@@ -171,12 +157,11 @@
 --   Projection patterns are turned into projection eliminations,
 --   other patterns into apply elimination.
 patternToElim :: Arg DeBruijnPattern -> Elim
-patternToElim (Arg ai (VarP x)) = Apply $ Arg ai $ var $ dbPatVarIndex x
+patternToElim (Arg ai (VarP o x)) = Apply $ Arg ai $ var $ dbPatVarIndex x
 patternToElim (Arg ai (ConP c cpi ps)) = Apply $ Arg ai $ Con c ci $
-      map (argFromElim . patternToElim . fmap namedThing) ps
+      map (patternToElim . fmap namedThing) ps
   where ci = fromConPatternInfo cpi
-patternToElim (Arg ai (DotP t)     ) = Apply $ Arg ai t
-patternToElim (Arg ai (AbsurdP p))   = patternToElim $ Arg ai p
+patternToElim (Arg ai (DotP o t)   ) = Apply $ Arg ai t
 patternToElim (Arg ai (LitP l)     ) = Apply $ Arg ai $ Lit l
 patternToElim (Arg ai (ProjP o dest)) = Proj o dest
 
@@ -192,26 +177,32 @@
   Proj{}  -> __IMPOSSIBLE__
 
 
-class MapNamedArg f where
-  mapNamedArg :: (NamedArg a -> NamedArg b) -> NamedArg (f a) -> NamedArg (f b)
+class MapNamedArgPattern a p where
+  mapNamedArgPattern :: (NamedArg (Pattern' a) -> NamedArg (Pattern' a)) -> p -> p
 
+  default mapNamedArgPattern
+    :: (Functor f, MapNamedArgPattern a p', p ~ f p')
+    => (NamedArg (Pattern' a) -> NamedArg (Pattern' a)) -> p -> p
+  mapNamedArgPattern = fmap . mapNamedArgPattern
+
 -- | Modify the content of @VarP@, and the closest surrounding @NamedArg@.
 --
 --   Note: the @mapNamedArg@ for @Pattern'@ is not expressible simply
 --   by @fmap@ or @traverse@ etc., since @ConP@ has @NamedArg@ subpatterns,
 --   which are taken into account by @mapNamedArg@.
 
-instance MapNamedArg Pattern' where
-  mapNamedArg f np =
+instance MapNamedArgPattern a (NamedArg (Pattern' a)) where
+  mapNamedArgPattern f np =
     case namedArg np of
-      VarP  x     -> updateNamedArg VarP $ f $ setNamedArg np x
-      AbsurdP p   -> updateNamedArg AbsurdP $ mapNamedArg f $ setNamedArg np p
-      DotP  t     -> setNamedArg np $ DotP t     -- just Haskell type conversion
-      LitP  l     -> setNamedArg np $ LitP l     -- ditto
-      ProjP o q   -> setNamedArg np $ ProjP o q  -- ditto
-      ConP c i ps -> setNamedArg np $ ConP c i $ map (mapNamedArg f) ps
+      VarP o x    -> f np
+      DotP  o t   -> f np
+      LitP  l     -> f np
+      ProjP o q   -> f np
+      ConP c i ps -> f $ setNamedArg np $ ConP c i $ mapNamedArgPattern f ps
 
+instance MapNamedArgPattern a p => MapNamedArgPattern a [p] where
 
+
 -- | Generic pattern traversal.
 --
 --   Pre-applies a pattern modification, recurses, and post-applies another one.
@@ -231,21 +222,18 @@
   foldrPattern = foldMap . foldrPattern
 
   -- | Traverse pattern.
-  traversePatternM :: (Monad m
-#if __GLASGOW_HASKELL__ <= 708
-    , Applicative m, Functor m
-#endif
-    ) => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.
-      -> (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.
-      -> b -> m b
+  traversePatternM
+    :: Monad m
+    => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.
+    -> (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.
+    -> b -> m b
 
-  default traversePatternM :: (Traversable f, PatternLike a p, f p ~ b, Monad m
-#if __GLASGOW_HASKELL__ <= 708
-    , Applicative m, Functor m
-#endif
-    ) => (Pattern' a -> m (Pattern' a))
-      -> (Pattern' a -> m (Pattern' a))
-      -> b -> m b
+  default traversePatternM
+    :: (Traversable f, PatternLike a p, f p ~ b, Monad m)
+    => (Pattern' a -> m (Pattern' a))
+    -> (Pattern' a -> m (Pattern' a))
+    -> b -> m b
+
   traversePatternM pre post = traverse $ traversePatternM pre post
 
 -- | Compute from each subpattern a value and collect them all in a monoid.
@@ -255,22 +243,17 @@
 
 -- | Traverse pattern(s) with a modification before the recursive descent.
 
-preTraversePatternM :: (PatternLike a b, Monad m
-#if __GLASGOW_HASKELL__ <= 708
-  , Applicative m, Functor m
-#endif
-  ) => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.
-    -> b -> m b
+preTraversePatternM
+  :: (PatternLike a b, Monad m)
+  => (Pattern' a -> m (Pattern' a))  -- ^ @pre@: Modification before recursion.
+  -> b -> m b
 preTraversePatternM pre = traversePatternM pre return
 
 -- | Traverse pattern(s) with a modification after the recursive descent.
 
-postTraversePatternM :: (PatternLike a b, Monad m
-#if __GLASGOW_HASKELL__ <= 708
-  , Applicative m, Functor m
-#endif
-  ) => (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.
-    -> b -> m b
+postTraversePatternM :: (PatternLike a b, Monad m)
+                     => (Pattern' a -> m (Pattern' a))  -- ^ @post@: Modification after recursion.
+                     -> b -> m b
 postTraversePatternM = traversePatternM return
 
 -- This is where the action is:
@@ -279,20 +262,18 @@
 
   foldrPattern f p = f p $ case p of
     ConP _ _ ps -> foldrPattern f ps
-    VarP _      -> mempty
-    AbsurdP _   -> mempty
+    VarP _ _    -> mempty
     LitP _      -> mempty
-    DotP _      -> mempty
+    DotP _ _    -> mempty
     ProjP _ _   -> mempty
 
   traversePatternM pre post = pre >=> recurse >=> post
     where
     recurse p = case p of
       ConP c ci ps -> ConP c ci <$> traversePatternM pre post ps
-      VarP  _      -> return p
+      VarP  _ _    -> return p
       LitP  _      -> return p
-      DotP  _      -> return p
-      AbsurdP _    -> return p
+      DotP  _ _    -> return p
       ProjP _ _    -> return p
 
 -- Boilerplate instances:
@@ -300,3 +281,53 @@
 instance PatternLike a b => PatternLike a [b]         where
 instance PatternLike a b => PatternLike a (Arg b)     where
 instance PatternLike a b => PatternLike a (Named x b) where
+
+-- Counting pattern variables ---------------------------------------------
+
+class CountPatternVars a where
+  countPatternVars :: a -> Int
+
+  default countPatternVars :: (Foldable f, CountPatternVars b, f b ~ a) =>
+                              a -> Int
+  countPatternVars = getSum . foldMap (Sum . countPatternVars)
+
+instance CountPatternVars a => CountPatternVars [a] where
+instance CountPatternVars a => CountPatternVars (Arg a) where
+instance CountPatternVars a => CountPatternVars (Named x a) where
+
+instance CountPatternVars (Pattern' x) where
+  countPatternVars p =
+    case p of
+      VarP{}      -> 1
+      ConP _ _ ps -> countPatternVars ps
+      DotP{}      -> 1   -- dot patterns are treated as variables in the clauses
+      _           -> 0
+
+-- Computing modalities of pattern variables ------------------------------
+
+class PatternVarModalities p x | p -> x where
+  -- | Get the list of pattern variables annotated with modalities.
+  patternVarModalities :: p -> [(x, Modality)]
+
+instance PatternVarModalities a x => PatternVarModalities [a] x where
+  patternVarModalities = foldMap patternVarModalities
+
+instance PatternVarModalities a x => PatternVarModalities (Named s a) x where
+  patternVarModalities = foldMap patternVarModalities
+
+instance PatternVarModalities a x => PatternVarModalities (Arg a) x where
+  patternVarModalities arg = map (second (m <>)) (patternVarModalities $ unArg arg)
+    where m = getModality arg
+
+instance PatternVarModalities a x => PatternVarModalities (Elim' a) x where
+  patternVarModalities (Apply x) = patternVarModalities x -- Note: x :: Arg a
+  patternVarModalities Proj{}    = []
+
+instance PatternVarModalities (Pattern' x) x where
+  patternVarModalities p =
+    case p of
+      VarP _ x    -> [(x, defaultModality)]
+      ConP _ _ ps -> patternVarModalities ps
+      DotP{}      -> []
+      LitP{}      -> []
+      ProjP{}     -> []
diff --git a/src/full/Agda/Syntax/Internal/SanityCheck.hs b/src/full/Agda/Syntax/Internal/SanityCheck.hs
--- a/src/full/Agda/Syntax/Internal/SanityCheck.hs
+++ b/src/full/Agda/Syntax/Internal/SanityCheck.hs
@@ -2,6 +2,10 @@
 -- | Sanity checking for internal syntax. Mostly checking variable scoping.
 module Agda.Syntax.Internal.SanityCheck where
 
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
 import Control.Monad
 import qualified Data.IntSet as Set
 
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
@@ -4,8 +4,8 @@
 
 import Control.DeepSeq
 import Data.Char
+import Data.Word
 
-import Data.Typeable (Typeable)
 import Data.Data (Data)
 
 import Numeric.IEEE ( IEEE(identicalIEEE) )
@@ -17,16 +17,18 @@
 import Agda.Utils.FileName
 
 data Literal = LitNat    Range !Integer
+             | LitWord64 Range !Word64
              | LitFloat  Range !Double
              | LitString Range String
              | LitChar   Range !Char
              | LitQName  Range QName
              | LitMeta   Range AbsolutePath MetaId
-  deriving (Typeable, Data)
+  deriving Data
 
 instance Show Literal where
   showsPrec p l = showParen (p > 9) $ case l of
     LitNat _ n    -> sh "LitNat _" n
+    LitWord64 _ n -> sh "LitWord64 _" n
     LitFloat _ x  -> sh "LitFloat _" x
     LitString _ s -> sh "LitString _" s
     LitChar _ c   -> sh "LitChar _" c
@@ -38,6 +40,7 @@
 
 instance Pretty Literal where
     pretty (LitNat _ n)     = text $ show n
+    pretty (LitWord64 _ n)  = text $ show n
     pretty (LitFloat _ d)   = text $ show d
     pretty (LitString _ s)  = text $ showString' s ""
     pretty (LitChar _ c)    = text $ "'" ++ showChar' c "" ++ "'"
@@ -61,6 +64,7 @@
   -- ASR (2016-09-29). We use bitwise equality for comparing Double
   -- because Haskell's Eq, which equates 0.0 and -0.0, allows to prove
   -- a contradiction (see Issue #2169).
+  LitWord64 _ n == LitWord64 _ m = n == m
   LitFloat _ x  == LitFloat _ y  = identicalIEEE x y || (isNaN x && isNaN y)
   LitString _ s == LitString _ t = s == t
   LitChar _ c   == LitChar _ d   = c == d
@@ -70,6 +74,7 @@
 
 instance Ord Literal where
   LitNat _ n    `compare` LitNat _ m    = n `compare` m
+  LitWord64 _ n `compare` LitWord64 _ m = n `compare` m
   LitFloat _ x  `compare` LitFloat _ y  = compareFloat x y
   LitString _ s `compare` LitString _ t = s `compare` t
   LitChar _ c   `compare` LitChar _ d   = c `compare` d
@@ -77,6 +82,8 @@
   LitMeta _ f x `compare` LitMeta _ g y = (f, x) `compare` (g, y)
   compare LitNat{}    _ = LT
   compare _ LitNat{}    = GT
+  compare LitWord64{} _ = LT
+  compare _ LitWord64{} = GT
   compare LitFloat{}  _ = LT
   compare _ LitFloat{}  = GT
   compare LitString{} _ = LT
@@ -107,6 +114,7 @@
 
 instance HasRange Literal where
   getRange (LitNat    r _) = r
+  getRange (LitWord64 r _) = r
   getRange (LitFloat  r _) = r
   getRange (LitString r _) = r
   getRange (LitChar   r _) = r
@@ -115,6 +123,7 @@
 
 instance SetRange Literal where
   setRange r (LitNat    _ x) = LitNat    r x
+  setRange r (LitWord64 _ x) = LitWord64 r x
   setRange r (LitFloat  _ x) = LitFloat  r x
   setRange r (LitString _ x) = LitString r x
   setRange r (LitChar   _ x) = LitChar   r x
@@ -123,6 +132,7 @@
 
 instance KillRange Literal where
   killRange (LitNat    r x) = LitNat    (killRange r) x
+  killRange (LitWord64 r x) = LitWord64 (killRange r) x
   killRange (LitFloat  r x) = LitFloat  (killRange r) x
   killRange (LitString r x) = LitString (killRange r) x
   killRange (LitChar   r x) = LitChar   (killRange r) x
@@ -133,6 +143,7 @@
 
 instance NFData Literal where
   rnf (LitNat _ _)    = ()
+  rnf (LitWord64 _ _) = ()
   rnf (LitFloat _ _)  = ()
   rnf (LitString _ a) = rnf a
   rnf (LitChar _ _)   = ()
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
@@ -14,7 +14,6 @@
 
 module Agda.Syntax.Notation where
 
-import Control.Applicative
 import Control.DeepSeq
 import Control.Monad
 
@@ -22,7 +21,6 @@
 import Data.Maybe
 
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import Agda.Syntax.Common
 import Agda.Syntax.Position
@@ -59,7 +57,7 @@
   | WildHole !Int
     -- ^ An underscore in binding position.
   | IdPart RawName
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 instance KillRange GenPart where
   killRange p = case p of
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
@@ -14,6 +14,7 @@
     , moduleNameParser
     , exprParser
     , exprWhereParser
+    , holeContentParser
     , tokensParser
       -- * Parse errors
     , ParseError(..)
@@ -30,7 +31,6 @@
 import Control.Monad.Writer hiding ((<>))
 
 import qualified Data.List as List
-import Data.Typeable ( Typeable )
 
 import Agda.Syntax.Position
 import Agda.Syntax.Parser.Monad as M hiding (Parser, parseFlags)
@@ -52,13 +52,6 @@
 import qualified Agda.Utils.Maybe.Strict as Strict
 import Agda.Utils.Pretty
 
-
-
-
-#if __GLASGOW_HASKELL__ <= 708
-import Control.Applicative ((<$>), Applicative)
-#endif
-
 #include "undefined.h"
 import Agda.Utils.Impossible
 
@@ -193,6 +186,15 @@
 exprWhereParser = Parser
   { parser     = P.exprWhereParser
   , parseFlags = withoutComments
+  , parseLiterate = parseLiterateWithoutComments
+  }
+
+-- | Parses an expression or some other content of an interaction hole.
+
+holeContentParser :: Parser HoleContent
+holeContentParser = Parser
+  { parser        = P.holeContentParser
+  , parseFlags    = withoutComments
   , parseLiterate = parseLiterateWithoutComments
   }
 
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
@@ -60,11 +60,14 @@
             AlexEOF                     -> returnEOF inp
             AlexSkip inp' len           -> skipTo (newInput inp inp' len)
             AlexToken inp' len action   -> fmap postToken $ action inp (newInput inp inp' len) len
-            AlexError i                 -> parseError $ "Lexical error" ++
-              (case lexInput i of
-                 '\t' : _ -> " (you may want to replace tabs with spaces)"
-                 _        -> "") ++
-              ":"
+            AlexError i                 -> parseError $ concat
+              [ "Lexical error"
+              , case headMaybe $ lexInput i of
+                  Just '\t'                -> " (you may want to replace tabs with spaces)"
+                  Just c | not (isPrint c) -> " (unprintable character)"
+                  _ -> ""
+              , ":"
+              ]
 
 postToken :: Token -> Token
 postToken (TokId (r, "\x03bb")) = TokSymbol SymLambda r
@@ -79,7 +82,7 @@
   | set == "Set" && all isSub n = TokSetN (r, readSubscript n)
   where
     (set, n)      = splitAt 3 s
-    isSub c       = c `elem` ['\x2080'..'\x2089']
+    isSub c       = '\x2080' <= c && c <= '\x2089'
     readSubscript = read . map (\c -> toEnum (fromEnum c - 0x2080 + fromEnum '0'))
 postToken t = t
 
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
@@ -67,11 +67,12 @@
 <0,code,bol_,layout_,empty_layout_,imp_dir_>
     $white_nonl+    ;
 
-<pragma_> $white_notab ;
+<pragma_,fpragma_> $white_notab ;
 
 -- Pragmas
-<0,code,pragma_> "{-#"                 { beginWith pragma $ symbol SymOpenPragma }
-<pragma_>   "#-}"                      { endWith $ symbol SymClosePragma }
+<0,code,pragma_>   "{-#"               { beginWith pragma  $ symbol SymOpenPragma }
+<fpragma_>         "{-#"               { beginWith fpragma $ symbol SymOpenPragma }
+<pragma_,fpragma_> "#-}"               { endWith $ symbol SymClosePragma }
 <pragma_>   "BUILTIN"                  { keyword KwBUILTIN }
 <pragma_>   "CATCHALL"                 { keyword KwCATCHALL }
 <pragma_>   "COMPILED"                 { keyword KwCOMPILED }
@@ -81,16 +82,17 @@
 <pragma_>   "COMPILED_JS"              { keyword KwCOMPILED_JS }
 <pragma_>   "COMPILED_TYPE"            { keyword KwCOMPILED_TYPE }
 <pragma_>   "COMPILED_UHC"             { keyword KwCOMPILED_UHC }
-<pragma_>   "COMPILE"                  { keyword KwCOMPILE }
-<pragma_>   "FOREIGN"                  { keyword KwFOREIGN }
+<pragma_>   "COMPILE"                  { endWith $ beginWith fpragma $ keyword KwCOMPILE }
+<pragma_>   "FOREIGN"                  { endWith $ beginWith fpragma $ keyword KwFOREIGN }
 <pragma_>   "DISPLAY"                  { keyword KwDISPLAY }
 <pragma_>   "ETA"                      { keyword KwETA }
-<pragma_>   "HASKELL"                  { keyword KwHASKELL }
+<pragma_>   "HASKELL"                  { endWith $ beginWith fpragma $ keyword KwHASKELL }
 <pragma_>   "IMPORT"                   { keyword KwIMPORT }
 <pragma_>   "IMPORT_UHC"               { keyword KwIMPORT_UHC }
 <pragma_>   "IMPOSSIBLE"               { keyword KwIMPOSSIBLE }
 <pragma_>   "INJECTIVE"                { keyword KwINJECTIVE }
 <pragma_>   "INLINE"                   { keyword KwINLINE }
+<pragma_>   "NOINLINE"                 { keyword KwNOINLINE }
 <pragma_>   "LINE"                     { keyword KwLINE }
 <pragma_>   "MEASURE"                  { keyword KwMEASURE }
 <pragma_>   "NO_POSITIVITY_CHECK"      { keyword KwNO_POSITIVITY_CHECK }
@@ -101,7 +103,9 @@
 <pragma_>   "REWRITE"                  { keyword KwREWRITE }
 <pragma_>   "STATIC"                   { keyword KwSTATIC }
 <pragma_>   "TERMINATING"              { keyword KwTERMINATING }
-<pragma_>   . # [ $white ] +           { withInterval $ TokString }
+<pragma_>   "WARNING_ON_USAGE"         { keyword KwWARNING_ON_USAGE }
+<pragma_>   . # [ $white \" ] +        { withInterval $ TokString } -- we recognise string literals in pragmas
+<fpragma_>  . # [ $white ] +           { withInterval $ TokString }
 
 -- Comments
     -- We need to rule out pragmas here. Usually longest match would take
@@ -145,6 +149,7 @@
 <0,code> let            { keyword KwLet }
 <0,code> in             { keyword KwIn }
 <0,code> where          { keyword KwWhere }
+<0,code> do             { keyword KwDo }
 <0,code> field          { keyword KwField }
 <0,code> with           { keyword KwWith }
 <0,code> rewrite        { keyword KwRewrite }
@@ -226,7 +231,7 @@
 
 -- Literals
 <0,code> \'             { litChar }
-<0,code> \"             { litString }
+<0,code,pragma_> \"     { litString }
 <0,code> @integer       { literal LitNat }
 <0,code> @float         { literal LitFloat }
 
@@ -259,6 +264,11 @@
 -}
 pragma :: LexState
 pragma = pragma_
+
+-- | The state inside a FOREIGN pragma. This needs to be different so that we don't
+--   lex further strings as pragma keywords.
+fpragma :: LexState
+fpragma = fpragma_
 
 {-| We enter this state from 'newLayoutContext' when the token following a
     layout keyword is to the left of (or at the same column as) the current
diff --git a/src/full/Agda/Syntax/Parser/Literate.hs b/src/full/Agda/Syntax/Parser/Literate.hs
--- a/src/full/Agda/Syntax/Parser/Literate.hs
+++ b/src/full/Agda/Syntax/Parser/Literate.hs
@@ -26,10 +26,6 @@
 import Agda.Syntax.Position
 import Text.Regex.TDFA
 
-#if __GLASGOW_HASKELL__ <= 708
-import Control.Applicative ((<$>),(<*>))
-#endif
-
 #include "undefined.h"
 import Agda.Utils.Impossible
 
@@ -163,12 +159,12 @@
   tex [] = []
   tex s  = let (line, rest) = getLine s in
     case r_begin `matchM` line of
-      Just (getAllTextSubmatches -> [_, pre, _, markup, blanks]) ->
-        (Comment, pre):(Markup, markup):(Code, blanks):code rest
+      Just (getAllTextSubmatches -> [_, pre, _, markup, whitespace]) ->
+        (Comment, pre):(Markup, markup):(Code, whitespace):code rest
       Just _                 -> __IMPOSSIBLE__
       Nothing                -> (Comment, line):tex rest
 
-  r_begin = rex "(([^\\%]|\\\\.)*)(\\\\begin\\{code\\})([[:space:]]*)"
+  r_begin = rex "(([^\\%]|\\\\.)*)(\\\\begin\\{code\\}[^\n]*)(\n)?"
 
 
   code :: String -> [(LayerRole, String)]
diff --git a/src/full/Agda/Syntax/Parser/LookAhead.hs b/src/full/Agda/Syntax/Parser/LookAhead.hs
--- a/src/full/Agda/Syntax/Parser/LookAhead.hs
+++ b/src/full/Agda/Syntax/Parser/LookAhead.hs
@@ -18,7 +18,6 @@
     )
     where
 
-import Control.Applicative
 import Control.Monad.Reader
 import Control.Monad.State
 
diff --git a/src/full/Agda/Syntax/Parser/Monad.hs b/src/full/Agda/Syntax/Parser/Monad.hs
--- a/src/full/Agda/Syntax/Parser/Monad.hs
+++ b/src/full/Agda/Syntax/Parser/Monad.hs
@@ -26,20 +26,25 @@
     , topContext, popContext, pushContext
     , pushCurrentContext
       -- ** Errors
+    , parseWarningName
     , parseError, parseErrorAt, parseError'
     , lexError
     )
     where
 
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
 import Control.Exception (catch)
 import Data.Int
 
-import Data.Typeable ( Typeable )
 import Data.Data (Data)
 
 import Control.Monad.State
-import Control.Applicative
 
+import Agda.Interaction.Options.Warnings
+
 import Agda.Syntax.Position
 
 import Agda.Utils.Except ( MonadError(catchError, throwError) )
@@ -127,7 +132,6 @@
   { errPath      :: !AbsolutePath
   , errIOError   :: IOError
   }
-  deriving (Typeable)
 
 -- | Warnings for parsing
 data ParseWarning =
@@ -135,11 +139,17 @@
   OverlappingTokensWarning
   { warnRange    :: !(Range' SrcFile)
                     -- ^ The range of the bigger overlapping token
-  } deriving (Typeable, Data)
+  } deriving Data
 
+parseWarningName :: ParseWarning -> WarningName
+parseWarningName pw = case pw of
+  OverlappingTokensWarning{} -> OverlappingTokensWarning_
+
 -- | The result of parsing something.
-data ParseResult a  = ParseOk ParseState a
-                    | ParseFailed ParseError
+data ParseResult a
+  = ParseOk ParseState a
+  | ParseFailed ParseError
+  deriving Show
 
 {--------------------------------------------------------------------------
     Instances
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
@@ -20,6 +20,7 @@
     , exprParser
     , exprWhereParser
     , tokensParser
+    , holeContentParser
     , splitOnDots  -- only used by the internal test-suite
     ) where
 
@@ -39,6 +40,7 @@
 import Agda.Syntax.Parser.Lexer
 import Agda.Syntax.Parser.Tokens
 import Agda.Syntax.Concrete as C
+import Agda.Syntax.Concrete.Pattern
 import Agda.Syntax.Concrete.Pretty ()
 import Agda.Syntax.Common
 import Agda.Syntax.Fixity
@@ -48,6 +50,7 @@
 import Agda.TypeChecking.Positivity.Occurrence hiding (tests)
 
 import Agda.Utils.Either hiding (tests)
+import Agda.Utils.Functor
 import Agda.Utils.Hash
 import Agda.Utils.List ( spanJust, chopWhen )
 import Agda.Utils.Monad
@@ -66,13 +69,24 @@
 %name moduleParser File
 %name moduleNameParser ModuleName
 %name funclauseParser FunClause
+%name holeContentParser HoleContent
+
 %tokentype { Token }
 %monad { Parser }
 %lexer { lexer } { TokEOF }
 
-%expect 1   -- shift/reduce for \ x y z -> foo = bar
-            -- shifting means it'll parse as \ x y z -> (foo = bar) rather than
-            -- (\ x y z -> foo) = bar
+%expect 6
+-- * shift/reduce for \ x y z -> foo = bar
+--   shifting means it'll parse as \ x y z -> (foo = bar) rather than
+--   (\ x y z -> foo) = bar
+--
+-- * Telescope let and do-notation let.
+--      Expr2 -> 'let' Declarations . LetBody
+--      TypedBindings -> '(' 'let' Declarations . ')'
+--        ')'   shift, and enter state 486
+--              (reduce using rule 189)
+--   A do-block cannot end in a 'let' so committing to TypedBindings with a
+--   shift is the right thing to do here.
 
 -- This is a trick to get rid of shift/reduce conflicts arising because we want
 -- to parse things like "m >>= \x -> k x". See the Expr rule for more
@@ -126,6 +140,7 @@
     'unquoteDef'              { TokKeyword KwUnquoteDef $$ }
     'using'                   { TokKeyword KwUsing $$ }
     'where'                   { TokKeyword KwWhere $$ }
+    'do'                      { TokKeyword KwDo $$ }
     'with'                    { TokKeyword KwWith $$ }
 
     'BUILTIN'                 { TokKeyword KwBUILTIN $$ }
@@ -147,12 +162,14 @@
     'IMPOSSIBLE'              { TokKeyword KwIMPOSSIBLE $$ }
     'INJECTIVE'               { TokKeyword KwINJECTIVE $$ }
     'INLINE'                  { TokKeyword KwINLINE $$ }
+    'NOINLINE'                { TokKeyword KwNOINLINE $$ }
     'MEASURE'                 { TokKeyword KwMEASURE $$ }
     'NO_TERMINATION_CHECK'    { TokKeyword KwNO_TERMINATION_CHECK $$ }
     'NO_POSITIVITY_CHECK'     { TokKeyword KwNO_POSITIVITY_CHECK $$ }
     'NON_TERMINATING'         { TokKeyword KwNON_TERMINATING $$ }
     'OPTIONS'                 { TokKeyword KwOPTIONS $$ }
     'POLARITY'                { TokKeyword KwPOLARITY $$ }
+    'WARNING_ON_USAGE'        { TokKeyword KwWARNING_ON_USAGE $$ }
     'REWRITE'                 { TokKeyword KwREWRITE $$ }
     'STATIC'                  { TokKeyword KwSTATIC $$ }
     'TERMINATING'             { TokKeyword KwTERMINATING $$ }
@@ -258,6 +275,7 @@
     | 'unquoteDef'              { TokKeyword KwUnquoteDef $1 }
     | 'using'                   { TokKeyword KwUsing $1 }
     | 'where'                   { TokKeyword KwWhere $1 }
+    | 'do'                      { TokKeyword KwDo $1 }
     | 'with'                    { TokKeyword KwWith $1 }
 
     | 'BUILTIN'                 { TokKeyword KwBUILTIN $1 }
@@ -279,6 +297,7 @@
     | 'IMPOSSIBLE'              { TokKeyword KwIMPOSSIBLE $1 }
     | 'INJECTIVE'               { TokKeyword KwINJECTIVE $1 }
     | 'INLINE'                  { TokKeyword KwINLINE $1 }
+    | 'NOINLINE'                { TokKeyword KwNOINLINE $1 }
     | 'MEASURE'                 { TokKeyword KwMEASURE $1 }
     | 'NO_TERMINATION_CHECK'    { TokKeyword KwNO_TERMINATION_CHECK $1 }
     | 'NO_POSITIVITY_CHECK'     { TokKeyword KwNO_POSITIVITY_CHECK $1 }
@@ -288,6 +307,7 @@
     | 'REWRITE'                 { TokKeyword KwREWRITE $1 }
     | 'STATIC'                  { TokKeyword KwSTATIC $1 }
     | 'TERMINATING'             { TokKeyword KwTERMINATING $1 }
+    | 'WARNING_ON_USAGE'        { TokKeyword KwWARNING_ON_USAGE $1 }
 
     | setN                      { TokSetN $1 }
     | tex                       { TokTeX $1 }
@@ -644,12 +664,17 @@
     : '\\' LamBindings Expr        { Lam (getRange ($1,$2,$3)) $2 $3 }
     | ExtendedOrAbsurdLam          { $1 }
     | 'forall' ForallBindings Expr        { forallPi $2 $3 }
-    | 'let' Declarations 'in' Expr { Let (getRange ($1,$2,$3,$4)) $2 $4 }
+    | 'let' Declarations LetBody   { Let (getRange ($1,$2,$3)) $2 $3 }
+    | 'do' vopen DoStmts close     { DoBlock (getRange ($1, $3)) $3 }
     | Expr3                        { $1 }
     | 'quoteGoal' Id 'in' Expr     { QuoteGoal (getRange ($1,$2,$3,$4)) $2 $4 }
     | 'tactic' Application3               { Tactic (getRange ($1, $2)) (RawApp (getRange $2) $2) [] }
     | 'tactic' Application3 '|' WithExprs { Tactic (getRange ($1, $2, $3, $4)) (RawApp (getRange $2) $2) $4 }
 
+LetBody :: { Maybe Expr }
+LetBody : 'in' Expr   { Just $2 }
+        | {- empty -} { Nothing }
+
 ExtendedOrAbsurdLam :: { Expr }
 ExtendedOrAbsurdLam
     : '\\'  '{' LamClauses '}'     { ExtendedLam (getRange ($1,$2,$3,$4)) (reverse $3) }
@@ -661,7 +686,7 @@
                                        Right es -> do -- it is of the form @\ { p1 ... () }@
                                                      p <- exprToLHS (RawApp (getRange es) es);
                                                      return $ ExtendedLam (fuseRange $1 es)
-                                                                     [(p [] [], AbsurdRHS, NoWhere, False)]
+                                                                     [LamClause (p [] []) AbsurdRHS NoWhere False]
                                    }
 
 Application3 :: { [Expr] }
@@ -707,6 +732,7 @@
     | '.' Expr3                         { Dot (fuseRange $1 $2) $2 }
     | 'record' '{' RecordAssignments '}' { Rec (getRange ($1,$2,$3,$4)) $3 }
     | 'record' Expr3NoCurly '{' FieldAssignments '}' { RecUpdate (getRange ($1,$2,$3,$4,$5)) $2 $4 }
+    | '...'                             { Ellipsis (getRange $1) }
 
 Expr3 :: { Expr }
 Expr3
@@ -865,38 +891,50 @@
   | '{{' DoubleCloseBrace       { Left [Left (Instance NoOverlap)] }
 
 -- FNF, 2011-05-05: No where clauses in extended lambdas for now
-NonAbsurdLamClause :: { (LHS,RHS,WhereClause,Bool) }
+NonAbsurdLamClause :: { LamClause }
 NonAbsurdLamClause
   : Application3PossiblyEmpty '->' Expr {% do
       p <- exprToLHS (RawApp (getRange $1) $1) ;
-      return (p [] [], RHS $3, NoWhere, False)
+      return LamClause{ lamLHS      = p [] []
+                      , lamRHS      = RHS $3
+                      , lamWhere    = NoWhere
+                      , lamCatchAll = False }
         }
   | CatchallPragma Application3PossiblyEmpty '->' Expr {% do
       p <- exprToLHS (RawApp (getRange $2) $2) ;
-      return (p [] [], RHS $4, NoWhere, True)
+      return LamClause{ lamLHS      = p [] []
+                      , lamRHS      = RHS $4
+                      , lamWhere    = NoWhere
+                      , lamCatchAll = True }
         }
 
-AbsurdLamClause :: { (LHS,RHS,WhereClause,Bool) }
+AbsurdLamClause :: { LamClause }
 AbsurdLamClause
 -- FNF, 2011-05-09: By being more liberal here, we avoid shift/reduce and reduce/reduce errors.
 -- Later stages such as scope checking will complain if we let something through which we should not
   : Application {% do
       p <- exprToLHS (RawApp (getRange $1) $1);
-      return (p [] [], AbsurdRHS, NoWhere, False)
+      return LamClause{ lamLHS      = p [] []
+                      , lamRHS      = AbsurdRHS
+                      , lamWhere    = NoWhere
+                      , lamCatchAll = False }
         }
   | CatchallPragma Application {% do
       p <- exprToLHS (RawApp (getRange $2) $2);
-      return (p [] [], AbsurdRHS, NoWhere, True)
+      return LamClause{ lamLHS      = p [] []
+                      , lamRHS      = AbsurdRHS
+                      , lamWhere    = NoWhere
+                      , lamCatchAll = True }
         }
 
-LamClause :: { (LHS,RHS,WhereClause,Bool) }
+LamClause :: { LamClause }
 LamClause
   : NonAbsurdLamClause { $1 }
   | AbsurdLamClause { $1 }
 
 -- Parses all extended lambda clauses except for a single absurd clause, which is taken care of
 -- in AbsurdLambda
-LamClauses :: { [(LHS,RHS,WhereClause,Bool)] }
+LamClauses :: { [LamClause] }
 LamClauses
    : LamClauses semi LamClause { $3 : $1 }
    | AbsurdLamClause semi LamClause { [$3, $1] }
@@ -905,7 +943,7 @@
 
 -- Parses all extended lambda clauses including a single absurd clause. For λ
 -- where this is not taken care of in AbsurdLambda
-LamWhereClauses :: { [(LHS,RHS,WhereClause,Bool)] }
+LamWhereClauses :: { [LamClause] }
 LamWhereClauses
    : LamWhereClauses semi LamClause { $3 : $1 }
    | LamClause { [$1] }
@@ -954,6 +992,23 @@
 
 
 {--------------------------------------------------------------------------
+    Do-notation
+ --------------------------------------------------------------------------}
+
+DoStmts :: { [DoStmt] }
+DoStmts : DoStmt              { [$1] }
+        | DoStmt vsemi        { [$1] }    -- #3046
+        | DoStmt semi DoStmts { $1 : $3 }
+
+DoStmt :: { DoStmt }
+DoStmt : Expr DoWhere {% buildDoStmt $1 $2 }
+
+DoWhere :: { [LamClause] }
+DoWhere
+  : {- empty -} { [] }
+  | 'where' vopen LamWhereClauses close { reverse $3 }
+
+{--------------------------------------------------------------------------
     Modules and imports
  --------------------------------------------------------------------------}
 
@@ -1028,16 +1083,7 @@
 LHS :: { LHS }
 LHS : Expr1 RewriteEquations WithExpressions
         {% exprToLHS $1 >>= \p -> return (p $2 $3) }
-    | '...' WithPats RewriteEquations WithExpressions
-        { Ellipsis (getRange ($1,$2,$3,$4)) $2 $3 $4 }
 
-WithPats :: { [Pattern] }
-WithPats : {- empty -}  { [] }
-         | '|' Application3 WithPats
-                {% exprToPattern (RawApp (getRange $2) $2) >>= \p ->
-                   return (p : $3)
-                }
-
 WithExpressions :: { [Expr] }
 WithExpressions
   : {- empty -} { [] }
@@ -1050,6 +1096,12 @@
   | 'rewrite' Expr1
       { case $2 of { WithApp _ e es -> e : es; e -> [e] } }
 
+-- Parsing either an expression @e@ or a @rewrite e1 | ... | en@.
+HoleContent :: { HoleContent }
+HoleContent
+  : Expr             { HoleContentExpr    $1 }
+  | RewriteEquations { HoleContentRewrite $1 }
+
 -- Where clauses are optional.
 WhereClause :: { WhereClause }
 WhereClause
@@ -1191,32 +1243,32 @@
 
 -- Mutually recursive declarations.
 Mutual :: { Declaration }
-Mutual : 'mutual' Declarations  { Mutual (fuseRange $1 $2) $2 }
+Mutual : 'mutual' Declarations0  { Mutual (fuseRange $1 $2) $2 }
 
 
 -- Abstract declarations.
 Abstract :: { Declaration }
-Abstract : 'abstract' Declarations  { Abstract (fuseRange $1 $2) $2 }
+Abstract : 'abstract' Declarations0  { Abstract (fuseRange $1 $2) $2 }
 
 
 -- Private can only appear on the top-level (or rather the module level).
 Private :: { Declaration }
-Private : 'private' Declarations        { Private (fuseRange $1 $2) UserWritten $2 }
+Private : 'private' Declarations0        { Private (fuseRange $1 $2) UserWritten $2 }
 
 
 -- Instance declarations.
 Instance :: { Declaration }
-Instance : 'instance' Declarations  { InstanceB (fuseRange $1 $2) $2 }
+Instance : 'instance' Declarations0  { InstanceB (fuseRange $1 $2) $2 }
 
 
 -- Macro declarations.
 Macro :: { Declaration }
-Macro : 'macro' Declarations { Macro (fuseRange $1 $2) $2 }
+Macro : 'macro' Declarations0 { Macro (fuseRange $1 $2) $2 }
 
 
 -- Postulates.
 Postulate :: { Declaration }
-Postulate : 'postulate' Declarations { Postulate (fuseRange $1 $2) $2 }
+Postulate : 'postulate' Declarations0 { Postulate (fuseRange $1 $2) $2 }
 
 -- Primitives. Can only contain type signatures.
 Primitive :: { Declaration }
@@ -1419,12 +1471,14 @@
   | StaticPragma             { $1 }
   | InjectivePragma          { $1 }
   | InlinePragma             { $1 }
+  | NoInlinePragma           { $1 }
   | ImportPragma             { $1 }
   | ImportUHCPragma          { $1 }
   | ImpossiblePragma         { $1 }
   | TerminatingPragma        { $1 }
   | NonTerminatingPragma     { $1 }
   | NoTerminationCheckPragma { $1 }
+  | WarningOnUsagePragma     { $1 }
   | MeasurePragma            { $1 }
   | CatchallPragma           { $1 }
   | DisplayPragma            { $1 }
@@ -1442,10 +1496,10 @@
 BuiltinPragma :: { Pragma }
 BuiltinPragma
     : '{-#' 'BUILTIN' string PragmaQName '#-}'
-      { BuiltinPragma (getRange ($1,$2,fst $3,$4,$5)) (snd $3) (Ident $4) }
+      { BuiltinPragma (getRange ($1,$2,fst $3,$4,$5)) (snd $3) $4 }
     -- Extra rule to accept keword REWRITE also as built-in:
     | '{-#' 'BUILTIN' 'REWRITE' PragmaQName '#-}'
-      { BuiltinPragma (getRange ($1,$2,$3,$4,$5)) "REWRITE" (Ident $4) }
+      { BuiltinPragma (getRange ($1,$2,$3,$4,$5)) "REWRITE" $4 }
 
 RewritePragma :: { Pragma }
 RewritePragma
@@ -1508,8 +1562,13 @@
 InlinePragma :: { Pragma }
 InlinePragma
   : '{-#' 'INLINE' PragmaQName '#-}'
-    { InlinePragma (getRange ($1,$2,$3,$4)) $3 }
+    { InlinePragma (getRange ($1,$2,$3,$4)) True $3 }
 
+NoInlinePragma :: { Pragma }
+NoInlinePragma
+  : '{-#' 'NOINLINE' PragmaQName '#-}'
+    { InlinePragma (getRange ($1,$2,$3,$4)) False $3 }
+
 InjectivePragma :: { Pragma }
 InjectivePragma
   : '{-#' 'INJECTIVE' PragmaQName '#-}'
@@ -1586,6 +1645,15 @@
     { let (rs, occs) = unzip (reverse $4) in
       PolarityPragma (getRange ($1,$2,$3,rs,$5)) $3 occs }
 
+WarningOnUsagePragma :: { Pragma }
+WarningOnUsagePragma
+  : '{-#' 'WARNING_ON_USAGE' PragmaQName literal '#-}'
+  {%  case $4 of
+        { LitString r str -> return $ WarningOnUsage (getRange ($1,$2,$3,r,$5)) $3 str
+        ; _ -> parseError "Expected string literal"
+        }
+  }
+
 -- Possibly empty list of polarities. Reversed.
 Polarities :: { [(Range, Occurrence)] }
 Polarities : {- empty -}          { [] }
@@ -1623,7 +1691,7 @@
     | ArgTypeSigs                         { reverse $1 }
 
 -- Record declarations, including an optional record constructor name.
-RecordDeclarations :: { ((Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance)), [Declaration]) }
+RecordDeclarations :: { ((Maybe (Ranged Induction), Maybe HasEta, Maybe (Name, IsInstance)), [Declaration]) }
 RecordDeclarations
                                   : vopen RecordDirectives close {% ((,) `fmap` verifyRecordDirectives $2 <*> pure []) }
                                   | vopen RecordDirectives semi Declarations1 close {% ((,) `fmap` verifyRecordDirectives $2 <*> pure $4) }
@@ -1642,10 +1710,10 @@
                                   | RecordInduction       { Induction $1 }
                                   | RecordEta             { Eta $1 }
 
-RecordEta :: { Ranged Bool }
+RecordEta :: { Ranged HasEta }
 RecordEta
-                                  : 'eta-equality' { Ranged (getRange $1) True }
-                                  | 'no-eta-equality' { Ranged (getRange $1) False }
+                                  : 'eta-equality' { Ranged (getRange $1) YesEta }
+                                  | 'no-eta-equality' { Ranged (getRange $1) NoEta }
 
 -- Declaration of record as 'inductive' or 'coinductive'.
 RecordInduction :: { Ranged Induction }
@@ -1667,6 +1735,7 @@
 Declarations1 :: { [Declaration] }
 Declarations1
     : Declaration semi Declarations1 { $1 ++ $3 }
+    | Declaration vsemi              { $1 } -- #3046
     | Declaration                    { $1 }
 
 TopDeclarations :: { [Declaration] }
@@ -1761,9 +1830,49 @@
         isValidId Hole   = return ()
         isValidId (Id y) = do
           let x = rawNameToString y
+              err = "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"
           case parse defaultParseFlags [0] (lexer return) x of
-            ParseOk _ (TokId _) -> return ()
-            _                   -> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"
+            ParseOk _ TokId{}  -> return ()
+            ParseFailed{}      -> fail err
+            ParseOk _ TokEOF{} -> fail err
+            ParseOk _ t   -> fail . ((err ++ " because it is ") ++) $ case t of
+              TokId{}       -> __IMPOSSIBLE__
+              TokQId{}      -> __IMPOSSIBLE__ -- "qualified"
+              TokKeyword{}  -> "a keyword"
+              TokLiteral{}  -> "a literal"
+              TokSymbol s _ -> case s of
+                SymDot               -> __IMPOSSIBLE__ -- "reserved"
+                SymSemi              -> "used to separate declarations"
+                SymVirtualSemi       -> __IMPOSSIBLE__
+                SymBar               -> "used for with-arguments"
+                SymColon             -> "part of declaration syntax"
+                SymArrow             -> "the function arrow"
+                SymEqual             -> "part of declaration syntax"
+                SymLambda            -> "used for lambda-abstraction"
+                SymUnderscore        -> "used for anonymous identifiers"
+                SymQuestionMark      -> "a meta variable"
+                SymAs                -> "used for as-patterns"
+                SymOpenParen         -> "used to parenthesize expressions"
+                SymCloseParen        -> "used to parenthesize expressions"
+                SymOpenIdiomBracket  -> "an idiom bracket"
+                SymCloseIdiomBracket -> "an idiom bracket"
+                SymDoubleOpenBrace   -> "used for instance arguments"
+                SymDoubleCloseBrace  -> "used for instance arguments"
+                SymOpenBrace         -> "used for hidden arguments"
+                SymCloseBrace        -> "used for hidden arguments"
+                SymOpenVirtualBrace  -> __IMPOSSIBLE__
+                SymCloseVirtualBrace -> __IMPOSSIBLE__
+                SymOpenPragma        -> __IMPOSSIBLE__ -- "used for pragmas"
+                SymClosePragma       -> __IMPOSSIBLE__ -- "used for pragmas"
+                SymEllipsis          -> __IMPOSSIBLE__ -- "used for function clauses"
+                SymDotDot            -> __IMPOSSIBLE__ -- "a modality"
+                SymEndComment        -> "the end-of-comment brace"
+              TokString{}   -> __IMPOSSIBLE__
+              TokSetN{}     -> "a type universe"
+              TokTeX{}      -> __IMPOSSIBLE__  -- used by the LaTeX backend only
+              TokComment{}  -> __IMPOSSIBLE__
+              TokDummy{}    -> __IMPOSSIBLE__
+              TokEOF{}      -> __IMPOSSIBLE__
 
         -- we know that there are no two Ids in a row
         alternating (Hole : Hole : _) = False
@@ -1836,6 +1945,24 @@
 addType (DomainFree info x) = TypedBindings r $ Arg info $ TBind r [pure x] $ Underscore r Nothing
   where r = getRange x
 
+-- | Build a do-statement
+buildDoStmt :: Expr -> [LamClause] -> Parser DoStmt
+buildDoStmt (RawApp r [e]) cs = buildDoStmt e cs
+buildDoStmt (Let r ds Nothing) [] = return $ DoLet r ds
+buildDoStmt (RawApp r es) cs
+  | (es1, arr : es2) <- break isLeftArrow es =
+    case filter isLeftArrow es2 of
+      arr : _ -> parseError' (rStart' $ getRange arr) $ "Unexpected " ++ prettyShow arr
+      [] -> DoBind (getRange arr)
+              <$> exprToPattern (RawApp (getRange es1) es1)
+              <*> pure (RawApp (getRange es2) es2)
+              <*> pure cs
+  where
+    isLeftArrow (Ident (QName (Name _ [Id arr]))) = elem arr ["<-", "←"]
+    isLeftArrow _ = False
+buildDoStmt e (_ : _) = parseError' (rStart' $ getRange e) "Only pattern matching do-statements can have where clauses."
+buildDoStmt e [] = return $ DoThen e
+
 mergeImportDirectives :: [ImportDirective] -> Parser ImportDirective
 mergeImportDirectives is = do
   i <- foldl merge (return defaultImportDir) is
@@ -1875,10 +2002,10 @@
 data RecordDirective
    = Induction (Ranged Induction)
    | Constructor (Name, IsInstance)
-   | Eta         (Ranged Bool)
+   | Eta         (Ranged HasEta)
    deriving (Eq,Show)
 
-verifyRecordDirectives :: [RecordDirective] -> Parser (Maybe (Ranged Induction), Maybe Bool, Maybe (Name, IsInstance))
+verifyRecordDirectives :: [RecordDirective] -> Parser (Maybe (Ranged Induction), Maybe HasEta, Maybe (Name, IsInstance))
 verifyRecordDirectives xs | null rs = return (ltm is, ltm es, ltm cs)
                           | otherwise = let Just pos = rStart' $ (head rs) in
                                           parseErrorAt pos $ "Repeated record directives at: \n" ++ intercalate "\n" (map show rs)
@@ -1934,9 +2061,7 @@
 
 -- | 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 []
+exprToLHS e = LHS <$> exprToPattern e
 
 -- | Turn an expression into a pattern. Fails if the expression is not a
 --   valid pattern.
@@ -1953,8 +2078,8 @@
         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 UserWritten) e
-        Dot r e                 -> return $ DotP r UserWritten 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
@@ -1962,7 +2087,13 @@
         Quote r                 -> return $ QuoteP r
         Rec r es | Just fs <- mapM maybeLeft es -> do
           RecP r <$> T.mapM (T.mapM exprToPattern) fs
-        _                       -> failure
+        Ellipsis r              -> return $ EllipsisP r
+        -- WithApp has already lost the range information of the bars '|'
+        WithApp r e es          -> do
+          p  <- exprToPattern e
+          ps <- forM es $ \ e -> defaultNamedArg . WithP (getRange e) <$> exprToPattern e  -- TODO #2822: Range!
+          return $ foldl AppP p ps
+        _ -> failure
 
 opAppExprToPattern :: OpApp Expr -> Parser Pattern
 opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "Syntax binding lambda cannot appear in a pattern"
@@ -2016,7 +2147,7 @@
   case p of
     IdentP (QName i)         -> return [(defaultArgInfo, i)]
     WildP r                  -> return [(defaultArgInfo, C.noName r)]
-    DotP _ _ (Ident (QName i)) -> return [(setRelevance Irrelevant defaultArgInfo, i)]
+    DotP _ (Ident (QName i)) -> return [(setRelevance Irrelevant defaultArgInfo, i)]
     RawAppP _ ps             -> concat <$> mapM patternToNames ps
     _                        -> parseError $
       "Illegal name in type signature: " ++ prettyShow p
@@ -2028,17 +2159,17 @@
     JustRHS rhs   -> return [FunClause lhs rhs wh False]
     TypeSigsRHS e -> case wh of
       NoWhere -> case lhs of
-        Ellipsis{}      -> parseError "The ellipsis ... cannot have a type signature"
-        LHS _ _ _ (_:_) -> parseError "Illegal: with in type signature"
-        LHS _ _ (_:_) _ -> parseError "Illegal: rewrite in type signature"
-        LHS _ (_:_) _ _ -> parseError "Illegal: with patterns in type signature"
-        LHS p [] [] []  -> map (\ (x, y) -> TypeSig x y e) <$> patternToNames p
+        LHS p _ _ | hasEllipsis p -> parseError "The ellipsis ... cannot have a type signature"
+        LHS _ _ (_:_) -> parseError "Illegal: with in type signature"
+        LHS _ (_:_) _ -> parseError "Illegal: rewrite in type signature"
+        LHS p _ _ | hasWithPatterns p -> parseError "Illegal: with patterns in type signature"
+        LHS p [] []  -> map (\ (x, y) -> TypeSig x y e) <$> patternToNames p
       _ -> parseError "A type signature cannot have a where clause"
 
 parseDisplayPragma :: Range -> Position -> String -> Parser Pragma
 parseDisplayPragma r pos s =
   case parsePosString pos defaultParseFlags [normal] funclauseParser s of
-    ParseOk s [FunClause (LHS lhs [] [] []) (RHS rhs) NoWhere ca] | null (parseInp s) ->
+    ParseOk s [FunClause (LHS lhs [] []) (RHS rhs) NoWhere ca] | null (parseInp s) ->
       return $ DisplayPragma r lhs rhs
     _ -> parseError "Invalid DISPLAY pragma. Should have form {-# DISPLAY LHS = RHS #-}."
 
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
@@ -9,7 +9,7 @@
 import Agda.Syntax.Position
 
 data Keyword
-        = KwLet | KwIn | KwWhere | KwData | KwCoData
+        = KwLet | KwIn | KwWhere | KwData | KwCoData | KwDo
         | KwPostulate | KwMutual | KwAbstract | KwPrivate | KwInstance
         | KwOverlap
         | KwOpen | KwImport | KwModule | KwPrimitive | KwMacro
@@ -22,9 +22,10 @@
         | KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EXPORT
         | KwHASKELL | KwFOREIGN | KwCOMPILE
         | KwCOMPILED_JS | KwCOMPILED_UHC | KwCOMPILED_DATA_UHC
-        | KwIMPORT | KwIMPORT_UHC | KwIMPOSSIBLE | KwSTATIC | KwINJECTIVE | KwINLINE
+        | KwIMPORT | KwIMPORT_UHC | KwIMPOSSIBLE | KwSTATIC | KwINJECTIVE | KwINLINE | KwNOINLINE
         | KwETA
         | KwNO_TERMINATION_CHECK | KwTERMINATING | KwNON_TERMINATING
+        | KwWARNING_ON_USAGE
         | KwMEASURE | KwDISPLAY
         | KwREWRITE
         | KwQuoteGoal | KwQuoteContext | KwQuote | KwQuoteTerm
@@ -36,7 +37,7 @@
 
 layoutKeywords :: [Keyword]
 layoutKeywords =
-    [ KwLet, KwWhere, KwPostulate, KwMutual, KwAbstract, KwPrivate, KwInstance, KwMacro, KwPrimitive, KwField ]
+    [ KwLet, KwWhere, KwDo, KwPostulate, KwMutual, KwAbstract, KwPrivate, KwInstance, KwMacro, KwPrimitive, KwField ]
 
 data Symbol
         = SymDot | SymSemi | SymVirtualSemi | SymBar
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
@@ -4,10 +4,6 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE NoMonomorphismRestriction  #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE OverlappingInstances #-}
-#endif
-
 {-| Position information for syntax. Crucial for giving good error messages.
 -}
 
@@ -72,7 +68,11 @@
   , interleaveRanges
   ) where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
 import Control.Applicative hiding (empty)
 import Control.Monad
@@ -89,7 +89,6 @@
 import qualified Data.Set as Set
 import Data.Traversable (Traversable)
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 import Data.Sequence (Seq)
 import qualified Data.Sequence as Seq
 import Data.Void
@@ -99,6 +98,7 @@
 import Agda.Utils.FileName
 import Agda.Utils.List
 import qualified Agda.Utils.Maybe.Strict as Strict
+import Agda.Utils.NonemptyList
 import Agda.Utils.Null
 import Agda.Utils.Pretty
 
@@ -128,7 +128,7 @@
   , posCol  :: !Int32
     -- ^ Column number, counting from 1.
   }
-  deriving (Data, Typeable, Functor, Foldable, Traversable, Generic)
+  deriving (Data, Functor, Foldable, Traversable, Generic)
 
 positionInvariant :: Position' a -> Bool
 positionInvariant p =
@@ -152,7 +152,7 @@
 --
 -- Note the invariant which intervals have to satisfy: 'intervalInvariant'.
 data Interval' a = Interval { iStart, iEnd :: !(Position' a) }
-  deriving (Data, Typeable, Eq, Ord, Functor, Foldable, Traversable, Generic)
+  deriving (Data, Eq, Ord, Functor, Foldable, Traversable, Generic)
 
 type Interval            = Interval' SrcFile
 type IntervalWithoutFile = Interval' ()
@@ -197,7 +197,7 @@
   = NoRange
   | Range !a (Seq IntervalWithoutFile)
   deriving
-    (Typeable, Data, Eq, Ord, Functor, Foldable, Traversable, Generic)
+    (Data, Eq, Ord, Functor, Foldable, Traversable, Generic)
 
 type Range = Range' SrcFile
 
@@ -278,6 +278,11 @@
 instance HasRange a => HasRange [a] where
     getRange = foldr fuseRange noRange
 
+-- | Precondition: The ranges of the list elements must point to the
+-- same file (or be empty).
+instance HasRange a => HasRange (NonemptyList a) where
+    getRange = Fold.foldr fuseRange noRange
+
 -- | Precondition: The ranges of the tuple elements must point to the
 -- same file (or be empty).
 instance (HasRange a, HasRange b) => HasRange (a,b) where
@@ -478,33 +483,20 @@
 instance KillRange Integer where
   killRange = id
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} KillRange a => KillRange [a] where
-#else
-instance KillRange a => KillRange [a] where
-#endif
   killRange = map killRange
 
+instance KillRange a => KillRange (NonemptyList a) where
+  killRange = fmap killRange
+
 -- | Overlaps with @KillRange [a]@.
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} KillRange String where
-#else
-instance KillRange String where
-#endif
   killRange = id
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} KillRange a => KillRange (Map k a) where
-#else
-instance KillRange a => KillRange (Map k a) where
-#endif
   killRange = fmap killRange
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} (Ord a, KillRange a) => KillRange (Set a) where
-#else
-instance (Ord a, KillRange a) => KillRange (Set a) where
-#endif
   killRange = Set.map killRange
 
 instance (KillRange a, KillRange b) => KillRange (a, b) where
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
@@ -6,7 +6,11 @@
 -}
 module Agda.Syntax.Scope.Base where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
 import Control.Arrow (first, second, (***))
 import Control.Applicative hiding (empty)
@@ -22,7 +26,6 @@
 import qualified Data.Set as Set
 import Data.Maybe
 
-import Data.Typeable (Typeable)
 import Data.Data (Data)
 
 import Agda.Benchmarking
@@ -39,6 +42,7 @@
 import Agda.Utils.Functor
 import Agda.Utils.Lens
 import Agda.Utils.List
+import Agda.Utils.NonemptyList
 import Agda.Utils.Null
 import Agda.Utils.Pretty
 import qualified Agda.Utils.Map as Map
@@ -57,7 +61,7 @@
       , scopeImports        :: Map C.QName A.ModuleName
       , scopeDatatypeModule :: Maybe DataOrRecord
       }
-  deriving (Typeable, Data, Eq, Show)
+  deriving (Data, Eq, Show)
 
 -- | See 'Agda.Syntax.Common.Access'.
 data NameSpaceId
@@ -67,7 +71,7 @@
   | OnlyQualifiedNS  -- ^ Visible (as qualified) from outside,
                      --   but not exported when opening the module.
                      --   Used for qualified constructors.
-  deriving (Typeable, Data, Eq, Bounded, Enum, Show)
+  deriving (Data, Eq, Bounded, Enum, Show)
 
 type ScopeNameSpaces = [(NameSpaceId, NameSpace)]
 
@@ -99,34 +103,43 @@
 data ScopeInfo = ScopeInfo
       { scopeCurrent       :: A.ModuleName
       , scopeModules       :: Map A.ModuleName Scope
+      , scopeVarsToBind    :: LocalVars
       , scopeLocals        :: LocalVars
       , scopePrecedence    :: PrecedenceStack
       , scopeInverseName   :: Map A.QName [C.QName]
       , scopeInverseModule :: Map A.ModuleName [C.QName]
       , scopeInScope       :: InScopeSet
       }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 instance Eq ScopeInfo where
-  ScopeInfo c1 m1 l1 p1 _ _ _ == ScopeInfo c2 m2 l2 p2 _ _ _ =
-    c1 == c2 && m1 == m2 && l1 == l2 && p1 == p2
+  ScopeInfo c1 m1 v1 l1 p1 _ _ _ == ScopeInfo c2 m2 v2 l2 p2 _ _ _ =
+    c1 == c2 && m1 == m2 && v1 == v2 && l1 == l2 && p1 == p2
 
 -- | Local variables.
 type LocalVars = AssocList C.Name LocalVar
 
+-- | For each bound variable, we want to know whether it was bound by a
+--   λ, Π, module telescope, pattern, or @let@.
+data Binder
+  = LambdaBound  -- ^ @λ@ (currently also used for @Π@ and module parameters)
+  | PatternBound -- ^ @f ... =@
+  | LetBound     -- ^ @let ... in@
+  deriving (Data, Show, Eq)
+
 -- | A local variable can be shadowed by an import.
 --   In case of reference to a shadowed variable, we want to report
 --   a scope error.
 data LocalVar = LocalVar
   { localVar        :: A.Name
     -- ^ Unique ID of local variable.
-  , localLetBound   :: Bool
-    -- ^ Flag whether the variable is introduced by a @let@.
+  , localBinder     :: Binder
+    -- ^ Kind of binder used to introduce the variable (@λ@, @let@, ...).
   , localShadowedBy :: [AbstractName]
      -- ^ If this list is not empty, the local variable is
      --   shadowed by one or more imports.
   }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 instance Eq LocalVar where
   (==) = (==) `on` localVar
@@ -153,6 +166,13 @@
 notShadowedLocals :: LocalVars -> AssocList C.Name A.Name
 notShadowedLocals = mapMaybe $ \ (c,x) -> (c,) <$> notShadowedLocal x
 
+-- | Lens for 'scopeVarsToBind'.
+updateVarsToBind :: (LocalVars -> LocalVars) -> ScopeInfo -> ScopeInfo
+updateVarsToBind f sc = sc { scopeVarsToBind = f (scopeVarsToBind sc) }
+
+setVarsToBind :: LocalVars -> ScopeInfo -> ScopeInfo
+setVarsToBind vars = updateVarsToBind (const vars)
+
 -- | Lens for 'scopeLocals'.
 updateScopeLocals :: (LocalVars -> LocalVars) -> ScopeInfo -> ScopeInfo
 updateScopeLocals f sc = sc { scopeLocals = f (scopeLocals sc) }
@@ -179,7 +199,7 @@
         -- ^ Maps concrete module names to a list of abstract module names.
       , nsInScope :: InScopeSet
       }
-  deriving (Typeable, Data, Eq, Show)
+  deriving (Data, Eq, Show)
 
 type ThingsInScope a = Map C.Name [a]
 type NamesInScope    = ThingsInScope AbstractName
@@ -227,7 +247,7 @@
   | PatternSynName -- ^ Name of a pattern synonym.
   | MacroName      -- ^ Name of a macro
   | QuotableName   -- ^ A name that can only be quoted.
-  deriving (Eq, Show, Typeable, Data, Enum, Bounded)
+  deriving (Eq, Show, Data, Enum, Bounded)
 
 -- | A list containing all name kinds.
 allKindsOfNames :: [KindOfName]
@@ -244,7 +264,7 @@
     -- ^ Imported from another module.
   | Applied C.QName WhyInScope
     -- ^ Imported by a module application.
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 -- | A decoration of 'Agda.Syntax.Abstract.Name.QName'.
 data AbstractName = AbsName
@@ -255,7 +275,7 @@
   , anameLineage :: WhyInScope
     -- ^ Explanation where this name came from.
   }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 -- | A decoration of abstract syntax module names.
 data AbstractModule = AbsModule
@@ -264,7 +284,7 @@
   , amodLineage :: WhyInScope
     -- ^ Explanation where this name came from.
   }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 instance Eq AbstractName where
   (==) = (==) `on` anameName
@@ -286,6 +306,39 @@
 lensAmodName :: Functor m => (A.ModuleName -> m A.ModuleName) -> AbstractModule -> m AbstractModule
 lensAmodName f am = f (amodName am) <&> \ m -> am { amodName = m }
 
+
+data ResolvedName
+  = -- | Local variable bound by λ, Π, module telescope, pattern, @let@.
+    VarName
+    { resolvedVar      :: A.Name
+    , resolvedBinder   :: Binder    -- ^ What kind of binder?
+    }
+
+  | -- | Function, data/record type, postulate.
+    DefinedName Access AbstractName -- ^ 'anameKind' can be 'DefName', 'MacroName', 'QuotableName'.
+
+  | -- | Record field name.  Needs to be distinguished to parse copatterns.
+    FieldName (NonemptyList AbstractName)       -- ^ @('FldName' ==) . 'anameKind'@ for all names.
+
+  | -- | Data or record constructor name.
+    ConstructorName (NonemptyList AbstractName) -- ^ @('ConName' ==) . 'anameKind'@ for all names.
+
+  | -- | Name of pattern synonym.
+    PatternSynResName (NonemptyList AbstractName) -- ^ @('PatternSynName' ==) . 'anameKind'@ for all names.
+
+  | -- | Unbound name.
+    UnknownName
+  deriving (Data, Show, Eq)
+
+instance Pretty ResolvedName where
+  pretty = \case
+    VarName x _         -> text "variable"    <+> pretty x
+    DefinedName a x     -> pretty a           <+> pretty x
+    FieldName xs        -> text "field"       <+> pretty xs
+    ConstructorName xs  -> text "constructor" <+> pretty xs
+    PatternSynResName x -> text "pattern"     <+> pretty x
+    UnknownName         -> text "<unknown name>"
+
 -- * Operations on name and module maps.
 
 mergeNames :: Eq a => ThingsInScope a -> ThingsInScope a -> ThingsInScope a
@@ -351,6 +404,7 @@
 emptyScopeInfo = ScopeInfo
   { scopeCurrent       = noModuleName
   , scopeModules       = Map.singleton noModuleName emptyScope
+  , scopeVarsToBind    = []
   , scopeLocals        = []
   , scopePrecedence    = []
   , scopeInverseName   = Map.empty
@@ -416,7 +470,7 @@
                zipWith' (,) (scopeNameSpaces s1) (scopeNameSpaces s2)
          , assert (nsid == nsid')
          ]
-     , scopeImports = Map.union (scopeImports s1) (scopeImports s2)
+     , scopeImports  = (Map.union `on` scopeImports)  s1 s2
      }
   where
     assert True  = True
@@ -802,7 +856,7 @@
       -- ^ Used for instance arguments to check whether a name is in scope,
       --   but we do not care whether is is ambiguous
   | AmbiguousConProjs
-      -- ^ Ambiguous constructors or projections.
+      -- ^ Ambiguous constructors, projections, or pattern synonyms.
   | AmbiguousNothing
   deriving (Eq)
 
@@ -819,8 +873,6 @@
 
 inverseScopeLookup' :: AllowAmbiguousNames -> Either A.ModuleName A.QName -> ScopeInfo -> [C.QName]
 inverseScopeLookup' amb name scope = billToPure [ Scoping , InverseScopeLookup ] $
-  -- trace ("importMap = " ++ show importMap) $
-  -- trace ("moduleMap = " ++ show moduleMap) $
   case name of
     Left  m -> best $ filter unambiguousModule $ findModule m
     Right q -> best $ filter unambiguousName   $ findName q
@@ -844,8 +896,7 @@
     unambiguousName   q = amb == AmbiguousAnything
         || unique xs
         || amb == AmbiguousConProjs
-           && (all ((ConName ==) . anameKind) xs
-            || all ((FldName ==) . anameKind) xs)
+           && or [ all ((kind ==) . anameKind) xs | kind <- [ConName, FldName, PatternSynName] ]
       where xs = scopeLookup q scope
 
 recomputeInverseScopeMaps :: ScopeInfo -> ScopeInfo
@@ -972,10 +1023,11 @@
 blockOfLines hd ss = hd : map (nest 2) ss
 
 instance Pretty ScopeInfo where
-  pretty (ScopeInfo this mods locals ctx _ _ _) = vcat $
+  pretty (ScopeInfo this mods toBind locals ctx _ _ _) = vcat $
     [ text "ScopeInfo"
     , text "  current = " <> pretty this
     ] ++
+    (if null toBind then [] else [ text "  toBind  = " <> pretty locals ]) ++
     (if null locals then [] else [ text "  locals  = " <> pretty locals ]) ++
     [ text "  context = " <> pretty ctx
     , text "  modules"
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
@@ -6,9 +6,8 @@
 
 module Agda.Syntax.Scope.Monad where
 
-import Prelude hiding (mapM)
+import Prelude hiding (mapM, any, all)
 import Control.Arrow (first, second, (***))
-import Control.Applicative
 import Control.Monad hiding (mapM, forM)
 import Control.Monad.Writer hiding (mapM, forM)
 import Control.Monad.State hiding (mapM, forM)
@@ -19,6 +18,7 @@
 import Data.Maybe
 import Data.Set (Set)
 import qualified Data.Set as Set
+import Data.Foldable (any, all)
 import Data.Traversable hiding (for)
 
 import Agda.Syntax.Common
@@ -40,7 +40,9 @@
 import Agda.Utils.Functor
 import Agda.Utils.List
 import Agda.Utils.Maybe
+import Agda.Utils.Monad
 import Agda.Utils.Null (unlessNull)
+import Agda.Utils.NonemptyList
 import Agda.Utils.Pretty
 import Agda.Utils.Size
 import Agda.Utils.Tuple
@@ -60,6 +62,15 @@
 isDatatypeModule m = do
    scopeDatatypeModule . Map.findWithDefault __IMPOSSIBLE__ m . scopeModules <$> getScope
 
+
+-- Debugging
+
+printLocals :: Int -> String -> ScopeM ()
+printLocals v s = verboseS "scope.top" v $ do
+  locals <- getLocalVars
+  reportSLn "scope.top" v $ s ++ " " ++ prettyShow locals
+
+
 -- * General operations
 
 getCurrentModule :: ScopeM A.ModuleName
@@ -140,18 +151,17 @@
 modifyCurrentNameSpace acc f = modifyCurrentScope $ updateScopeNameSpaces $
   AssocList.updateAt acc f
 
-pushContextPrecedence :: Precedence -> ScopeM ()
-pushContextPrecedence p = modifyScope_ $ \ s -> s { scopePrecedence = pushPrecedence p $ scopePrecedence s }
+pushContextPrecedence :: Precedence -> ScopeM PrecedenceStack
+pushContextPrecedence p = do
+  old <- scopePrecedence <$> getScope
+  modifyScope_ $ \ s -> s { scopePrecedence = pushPrecedence p $ scopePrecedence s }
+  return old
 
-popContextPrecedence :: ScopeM ()
-popContextPrecedence = modifyScope_ $ \ s -> s { scopePrecedence = drop 1 $ scopePrecedence s }
+setContextPrecedence :: PrecedenceStack -> ScopeM ()
+setContextPrecedence ps = modifyScope_ $ \ s -> s { scopePrecedence = ps }
 
 withContextPrecedence :: Precedence -> ScopeM a -> ScopeM a
-withContextPrecedence p m = do
-  pushContextPrecedence p
-  x <- m
-  popContextPrecedence
-  return x
+withContextPrecedence p = bracket_ (pushContextPrecedence p) setContextPrecedence
 
 getLocalVars :: ScopeM LocalVars
 getLocalVars = scopeLocals <$> getScope
@@ -164,12 +174,23 @@
 
 -- | Run a computation without changing the local variables.
 withLocalVars :: ScopeM a -> ScopeM a
-withLocalVars m = do
-  vars <- getLocalVars
-  x    <- m
-  setLocalVars vars
-  return x
+withLocalVars = bracket_ getLocalVars setLocalVars
 
+getVarsToBind :: ScopeM LocalVars
+getVarsToBind = scopeVarsToBind <$> getScope
+
+addVarToBind :: C.Name -> LocalVar -> ScopeM ()
+addVarToBind x y = modifyScope_ $ updateVarsToBind $ AssocList.insert x y
+
+-- | After collecting some variable names in the scopeVarsToBind,
+--   bind them all simultaneously.
+bindVarsToBind :: ScopeM ()
+bindVarsToBind = do
+  vars <- getVarsToBind
+  modifyLocalVars (vars++)
+  printLocals 10 "bound variables:"
+  modifyScope_ $ setVarsToBind []
+
 -- * Names
 
 -- | Create a fresh abstract name from a concrete name.
@@ -200,38 +221,6 @@
 
 -- * Resolving names
 
-data ResolvedName
-  =   -- | Local variable bound by λ, Π, module telescope, pattern, @let@.
-    VarName
-    { resolvedVar      :: A.Name
-    , resolvedLetBound :: Bool    -- ^ Variable bound by @let@?
-    }
-
-  |   -- | Function, data/record type, postulate.
-    DefinedName Access AbstractName
-
-  |   -- | Record field name.  Needs to be distinguished to parse copatterns.
-    FieldName [AbstractName]
-
-  |   -- | Data or record constructor name.
-    ConstructorName [AbstractName]
-
-  |   -- | Name of pattern synonym.
-    PatternSynResName AbstractName
-
-  |   -- | Unbound name.
-    UnknownName
-  deriving (Show, Eq)
-
-instance Pretty ResolvedName where
-  pretty = \case
-    VarName x _         -> text "variable"    <+> pretty x
-    DefinedName a x     -> pretty a           <+> pretty x
-    FieldName xs        -> text "field"       <+> pretty xs
-    ConstructorName xs  -> text "constructor" <+> pretty xs
-    PatternSynResName x -> text "pattern"     <+> pretty x
-    UnknownName         -> text "<unknown name>"
-
 -- | Look up the abstract name referred to by a given concrete name.
 resolveName :: C.QName -> ScopeM ResolvedName
 resolveName = resolveName' allKindsOfNames Nothing
@@ -260,29 +249,27 @@
         ys -> shadowed ys
       where
       shadowed ys =
-        typeError $ AmbiguousName x $ A.qualify_ y : map anameName ys
+        typeError $ AmbiguousName x $ A.qualify_ y :! map anameName ys
     -- Case: we do not have a local variable x.
     Nothing -> do
       -- Consider only names of one of the given kinds
       let filtKind = filter $ \ y -> anameKind (fst y) `elem` kinds
       -- Consider only names in the given set of names
           filtName = filter $ \ y -> maybe True (Set.member (aName (fst y))) names
-      case filtKind $ filtName $ scopeLookup' x scope of
-        [] -> return UnknownName
-
-        ds       | all ((==ConName) . anameKind . fst) ds ->
-          return $ ConstructorName $ map (upd . fst) ds
+      caseListNe (filtKind $ filtName $ scopeLookup' x scope) (return UnknownName) $ \ case
+        ds       | all ((ConName ==) . anameKind . fst) ds ->
+          return $ ConstructorName $ fmap (upd . fst) ds
 
-        ds       | all ((==FldName) . anameKind . fst) ds ->
-          return $ FieldName $ map (upd . fst) ds
+        ds       | all ((FldName ==) . anameKind . fst) ds ->
+          return $ FieldName $ fmap (upd . fst) ds
 
-        [(d, a)] | anameKind d == PatternSynName ->
-          return $ PatternSynResName $ upd d
+        ds       | all ((PatternSynName ==) . anameKind . fst) ds ->
+          return $ PatternSynResName $ fmap (upd . fst) ds
 
-        [(d, a)] ->
+        (d, a) :! [] ->
           return $ DefinedName a $ upd d
 
-        ds -> typeError $ AmbiguousName x (map (anameName . fst) ds)
+        ds -> typeError $ AmbiguousName x (fmap (anameName . fst) ds)
   where
   upd d = updateConcreteName d $ unqualify x
   updateConcreteName :: AbstractName -> C.Name -> AbstractName
@@ -293,10 +280,9 @@
 resolveModule :: C.QName -> ScopeM AbstractModule
 resolveModule x = do
   ms <- scopeLookup x <$> getScope
-  case ms of
-    [AbsModule m why] -> return $ AbsModule (m `withRangeOf` x) why
-    []                -> typeError $ NoSuchModule x
-    ms                -> typeError $ AmbiguousModule x (map amodName ms)
+  caseListNe ms (typeError $ NoSuchModule x) $ \ case
+    AbsModule m why :! [] -> return $ AbsModule (m `withRangeOf` x) why
+    ms                    -> typeError $ AmbiguousModule x (fmap amodName ms)
 
 -- | Get the notation of a name. The name is assumed to be in scope.
 getNotation
@@ -311,12 +297,12 @@
     DefinedName _ d     -> return $ notation d
     FieldName ds        -> return $ oneNotation ds
     ConstructorName ds  -> return $ oneNotation ds
-    PatternSynResName n -> return $ notation n
+    PatternSynResName n -> return $ oneNotation n
     UnknownName         -> __IMPOSSIBLE__
   where
     notation = namesToNotation x . qnameName . anameName
     oneNotation ds =
-      case mergeNotations $ map notation ds of
+      case mergeNotations $ map notation $ toList ds of
         [n] -> n
         _   -> __IMPOSSIBLE__
 
@@ -324,12 +310,16 @@
 
 -- | Bind a variable.
 bindVariable
-  :: Bool    -- ^ Let-bound variable?
+  :: Binder  -- ^ @λ@, @Π@, @let@, ...?
   -> C.Name  -- ^ Concrete name.
   -> A.Name  -- ^ Abstract name.
   -> ScopeM ()
-bindVariable b x y = modifyScope_ $ updateScopeLocals $ AssocList.insert x $ LocalVar y b []
+bindVariable b x y = modifyLocalVars $ AssocList.insert x $ LocalVar y b []
 
+-- | Temporarily unbind a variable. Used for non-recursive lets.
+unbindVariable :: C.Name -> ScopeM a -> ScopeM a
+unbindVariable x = bracket_ (getLocalVars <* modifyLocalVars (AssocList.delete x)) (modifyLocalVars . const)
+
 -- | Bind a defined name. Must not shadow anything.
 bindName :: Access -> KindOfName -> C.Name -> A.QName -> ScopeM ()
 bindName acc kind x y = do
@@ -343,7 +333,7 @@
     VarName z _         -> clash $ A.qualify (mnameFromList []) z
     FieldName       ds  -> ambiguous FldName ds
     ConstructorName ds  -> ambiguous ConName ds
-    PatternSynResName n -> clash $ anameName n
+    PatternSynResName n -> ambiguous PatternSynName n
     UnknownName         -> success
   let ns = if isNoName x then PrivateNS else localNameSpace acc
   modifyCurrentScope $ addNamesToScope ns x ys
@@ -351,10 +341,9 @@
     success = return [ AbsName y kind Defined ]
     clash   = typeError . ClashingDefinition (C.QName x)
 
-    ambiguous k ds@(d:_) =
-      if kind == k && all ((==k) . anameKind) ds
-      then success else clash $ anameName d
-    ambiguous k [] = __IMPOSSIBLE__
+    ambiguous k ds =
+      if kind == k && all ((== k) . anameKind) ds
+      then success else clash $ anameName (headNe ds)
 
 -- | Rebind a name. Use with care!
 --   Ulf, 2014-06-29: Currently used to rebind the name defined by an
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
@@ -13,12 +13,13 @@
     ( ToConcrete(..)
     , toConcreteCtx
     , abstractToConcrete_
-    , abstractToConcreteEnv
+    , abstractToConcreteScope
+    , abstractToConcreteHiding
     , runAbsToCon
     , RangeAndPragma(..)
     , abstractToConcreteCtx
     , withScope
-    , makeEnv
+    , preserveInteractionIds
     , AbsToCon, DontTouchMe, Env
     , noTakenNames
     ) where
@@ -34,8 +35,11 @@
 import Data.Monoid
 import Data.Set (Set)
 import qualified Data.Set as Set
+import Data.Map (Map)
+import qualified Data.Map as Map
 import Data.Traversable (traverse)
 import Data.Void
+import Data.List (sortBy)
 
 import Agda.Syntax.Common
 import Agda.Syntax.Position
@@ -46,21 +50,27 @@
 import Agda.Syntax.Fixity
 import Agda.Syntax.Concrete as C
 import Agda.Syntax.Abstract as A
-import Agda.Syntax.Abstract.Views as AV
+import Agda.Syntax.Abstract.Views as A
+import Agda.Syntax.Abstract.Pattern as A
+import Agda.Syntax.Abstract.PatternSynonyms
 import Agda.Syntax.Scope.Base
 
-import Agda.TypeChecking.Monad.State (getScope)
-import Agda.TypeChecking.Monad.Base  (TCM, NamedMeta(..), stBuiltinThings, BuiltinThings, Builtin(..))
+import Agda.TypeChecking.Monad.State (getScope, getAllPatternSyns)
+import Agda.TypeChecking.Monad.Base  (TCM, NamedMeta(..), stBuiltinThings, BuiltinThings, Builtin(..), pragmaOptions)
 import Agda.TypeChecking.Monad.Debug
 import Agda.TypeChecking.Monad.Options
+import Agda.TypeChecking.Monad.Builtin
+import Agda.Interaction.Options
 
 import qualified Agda.Utils.AssocList as AssocList
 import Agda.Utils.Either
 import Agda.Utils.Function
 import Agda.Utils.Functor
+import Agda.Utils.List
 import Agda.Utils.Maybe
 import Agda.Utils.Monad
 import Agda.Utils.Null
+import Agda.Utils.NonemptyList
 import Agda.Utils.Singleton
 import Agda.Utils.Tuple
 import Agda.Utils.Pretty (prettyShow)
@@ -72,18 +82,33 @@
 
 data Env = Env { takenNames   :: Set C.Name
                , currentScope :: ScopeInfo
+               , builtins     :: Map String A.QName
+                  -- ^ Certain builtins (like `fromNat`) have special printing
+               , preserveIIds :: Bool
+                  -- ^ Preserve interaction point ids
+               , foldPatternSynonyms :: Bool
                }
 
--- -- UNUSED
--- defaultEnv :: Env
--- defaultEnv = Env { takenNames   = Set.empty
---                  , currentScope = emptyScopeInfo
---                  }
-
-makeEnv :: ScopeInfo -> Env
-makeEnv scope = Env { takenNames   = Set.union vars defs
-                    , currentScope = scope
-                    }
+makeEnv :: ScopeInfo -> TCM Env
+makeEnv scope = do
+      -- zero and suc doesn't have to be in scope for natural number literals to work
+  let noScopeCheck b = elem b [builtinZero, builtinSuc]
+      name (I.Def q _)   = Just q
+      name (I.Con q _ _) = Just (I.conName q)
+      name _             = Nothing
+      builtin b = getBuiltin' b >>= \ case
+        Just v | Just q <- name v,
+                 noScopeCheck b || isNameInScope q scope -> return [(b, q)]
+        _                                                -> return []
+  builtinList <- concat <$> mapM builtin [ builtinFromNat, builtinFromString, builtinFromNeg, builtinZero, builtinSuc ]
+  foldPatSyns <- optPrintPatternSynonyms <$> pragmaOptions
+  return $
+    Env { takenNames   = Set.union vars defs
+        , currentScope = scope
+        , builtins     = Map.fromList builtinList
+        , preserveIIds = False
+        , foldPatternSynonyms = foldPatSyns
+        }
   where
     vars  = Set.fromList $ map fst $ scopeLocals scope
     defs  = Map.keysSet $ nsNames $ everythingInScope scope
@@ -91,6 +116,9 @@
 currentPrecedence :: AbsToCon PrecedenceStack
 currentPrecedence = asks $ scopePrecedence . currentScope
 
+preserveInteractionIds :: AbsToCon a -> AbsToCon a
+preserveInteractionIds = local $ \ e -> e { preserveIIds = True }
+
 withPrecedence' :: PrecedenceStack -> AbsToCon a -> AbsToCon a
 withPrecedence' ps = local $ \e ->
   e { currentScope = (currentScope e) { scopePrecedence = ps } }
@@ -106,6 +134,9 @@
 noTakenNames :: AbsToCon a -> AbsToCon a
 noTakenNames = local $ \e -> e { takenNames = Set.empty }
 
+dontFoldPatternSynonyms :: AbsToCon a -> AbsToCon a
+dontFoldPatternSynonyms = local $ \ e -> e { foldPatternSynonyms = False }
+
 -- | Bind a concrete name to an abstract in the translation environment.
 addBinding :: C.Name -> A.Name -> Env -> Env
 addBinding y x e =
@@ -114,6 +145,11 @@
         AssocList.insert y (LocalVar x __IMPOSSIBLE__ [])
     }
 
+-- | Get a function to check if a name refers to a particular builtin function.
+isBuiltinFun :: AbsToCon (A.QName -> String -> Bool)
+isBuiltinFun = asks $ is . builtins
+  where is m q b = Just q == Map.lookup b m
+
 -- The Monad --------------------------------------------------------------
 
 -- | We put the translation into TCM in order to print debug messages.
@@ -122,10 +158,10 @@
 runAbsToCon :: AbsToCon c -> TCM c
 runAbsToCon m = do
   scope <- getScope
-  runReaderT m (makeEnv scope)
+  runReaderT m =<< makeEnv scope
 
-abstractToConcreteEnv :: ToConcrete a c => Env -> a -> TCM c
-abstractToConcreteEnv flags a = runReaderT (toConcrete a) flags
+abstractToConcreteScope :: ToConcrete a c => ScopeInfo -> a -> TCM c
+abstractToConcreteScope scope a = runReaderT (toConcrete a) =<< makeEnv scope
 
 abstractToConcreteCtx :: ToConcrete a c => Precedence -> a -> TCM c
 abstractToConcreteCtx ctx x = runAbsToCon $ withPrecedence ctx (toConcrete x)
@@ -133,6 +169,9 @@
 abstractToConcrete_ :: ToConcrete a c => a -> TCM c
 abstractToConcrete_ = runAbsToCon . toConcrete
 
+abstractToConcreteHiding :: (LensHiding i, ToConcrete a c) => i -> a -> TCM c
+abstractToConcreteHiding i = runAbsToCon . toConcreteHiding i
+
 -- Dealing with names -----------------------------------------------------
 
 -- | Names in abstract syntax are fully qualified, but the concrete syntax
@@ -235,14 +274,14 @@
 
 -- | Applications where the argument is a lambda without parentheses need
 --   parens more often than other applications.
-isParenlessLambda :: NamedArg A.Expr -> Bool
-isParenlessLambda e | notVisible e = False
-isParenlessLambda e =
+isLambda :: NamedArg A.Expr -> Bool
+isLambda e | notVisible e = False
+isLambda e =
   case unScope $ namedArg e of
-    A.Lam i _ _           -> not $ lamParens i
-    A.AbsurdLam i _       -> not $ lamParens i
-    A.ExtendedLam i _ _ _ -> not $ lamParens i
-    _                     -> False
+    A.Lam{}         -> True
+    A.AbsurdLam{}   -> True
+    A.ExtendedLam{} -> True
+    _               -> False
 
 -- Dealing with infix declarations ----------------------------------------
 
@@ -370,8 +409,7 @@
     toConcrete (Arg i a) = Arg i <$> toConcreteHiding i a
 
     bindToConcrete (Arg info x) ret =
-      bindToConcreteCtx (hiddenArgumentCtx $ getHiding info) x $
-        ret . Arg info
+      bindToConcreteHiding info x $ ret . Arg info
 
 instance ToConcrete a c => ToConcrete (WithHiding a) (WithHiding c) where
   toConcrete     (WithHiding h a) = WithHiding h <$> toConcreteHiding h a
@@ -393,38 +431,54 @@
   toConcrete       = lookupName
   bindToConcrete x = bindName x
 
+instance ToConcrete BindName C.Name where
+  toConcrete       = lookupName . unBind
+  bindToConcrete x = bindName (unBind x)
+
 instance ToConcrete A.QName C.QName where
   toConcrete = lookupQName AmbiguousConProjs
 
 instance ToConcrete A.ModuleName C.QName where
   toConcrete = lookupModule
 
+instance ToConcrete AbstractName C.QName where
+  toConcrete = toConcrete . anameName
+
+-- | Assumes name is not 'UnknownName'.
+instance ToConcrete ResolvedName C.QName where
+  toConcrete = \case
+    VarName x _          -> C.QName <$> lookupName x
+    DefinedName _ x      -> toConcrete x
+    FieldName xs         -> toConcrete (headNe xs)
+    ConstructorName xs   -> toConcrete (headNe xs)
+    PatternSynResName xs -> toConcrete (headNe xs)
+    UnknownName          -> __IMPOSSIBLE__
+
 -- Expression instance ----------------------------------------------------
 
 instance ToConcrete A.Expr C.Expr where
-    toConcrete (Var x)            = Ident . C.QName <$> toConcrete x
-    toConcrete (Def x)            = Ident <$> toConcrete x
-    toConcrete (Proj ProjPrefix (AmbQ (x:_))) = Ident <$> toConcrete x
-    toConcrete (Proj _          (AmbQ (x:_))) =
-      C.Dot (getRange x) . Ident <$> toConcrete x
-    toConcrete Proj{}             = __IMPOSSIBLE__
-    toConcrete (A.Macro x)        = Ident <$> toConcrete x
-    toConcrete (Con (AmbQ (x:_))) = Ident <$> toConcrete x
-    toConcrete (Con (AmbQ []))    = __IMPOSSIBLE__
+    toConcrete (Var x)             = Ident . C.QName <$> toConcrete x
+    toConcrete (Def x)             = Ident <$> toConcrete x
+    toConcrete (Proj ProjPrefix p) = Ident <$> toConcrete (headAmbQ p)
+    toConcrete (Proj _          p) = C.Dot noRange . Ident <$> toConcrete (headAmbQ p)
+    toConcrete (A.Macro x)         = Ident <$> toConcrete x
+    toConcrete e@(Con c)           = tryToRecoverPatternSyn e $ Ident <$> toConcrete (headAmbQ c)
         -- for names we have to use the name from the info, since the abstract
         -- name has been resolved to a fully qualified name (except for
         -- variables)
-    toConcrete (A.Lit (LitQName r x)) = do
+    toConcrete e@(A.Lit (LitQName r x)) = tryToRecoverPatternSyn e $ do
       x <- lookupQName AmbiguousNothing x
       bracket appBrackets $ return $
         C.App r (C.Quote r) (defaultNamedArg $ C.Ident x)
-    toConcrete (A.Lit l)            = return $ C.Lit l
+    toConcrete e@(A.Lit l) = tryToRecoverPatternSyn e $ return $ C.Lit l
 
     -- Andreas, 2014-05-17  We print question marks with their
     -- interaction id, in case @metaNumber /= Nothing@
-    toConcrete (A.QuestionMark i ii)= return $
-      C.QuestionMark (getRange i) $
-        interactionId ii <$ metaNumber i
+    -- Ulf, 2017-09-20  ... or @preserveIIds == True@.
+    toConcrete (A.QuestionMark i ii) = do
+      preserve <- asks preserveIIds
+      return $ C.QuestionMark (getRange i) $
+                 interactionId ii <$ guard (preserve || isJust (metaNumber i))
 
     toConcrete (A.Underscore i)     = return $
       C.Underscore (getRange i) $
@@ -433,14 +487,30 @@
     toConcrete (A.Dot i e) =
       C.Dot (getRange i) <$> toConcrete e
 
-    toConcrete e@(A.App i e1 e2)    =
-        tryToRecoverOpApp e
-        $ tryToRecoverNatural e
-        -- or fallback to App
-        $ bracket (appBrackets' $ isParenlessLambda e2)
-        $ do e1' <- toConcreteCtx FunctionCtx e1
-             e2' <- toConcreteCtx ArgumentCtx e2
-             return $ C.App (getRange i) e1' e2'
+    toConcrete e@(A.App i e1 e2) = do
+      is <- isBuiltinFun
+      -- Special printing of desugared overloaded literals:
+      --  fromNat 4        --> 4
+      --  fromNeg 4        --> -4
+      --  fromString "foo" --> "foo"
+      -- Only when the corresponding conversion function is in scope and was
+      -- inserted by the system.
+      case (e1, namedArg e2) of
+        (A.Def q, l@A.Lit{})
+          | any (is q) [builtinFromNat, builtinFromString], visible e2,
+            getOrigin i == Inserted -> toConcrete l
+        (A.Def q, A.Lit (LitNat r n))
+          | q `is` builtinFromNeg, visible e2,
+            getOrigin i == Inserted -> toConcrete (A.Lit (LitNat r (-n)))
+        _ ->
+          tryToRecoverPatternSyn e
+          $ tryToRecoverOpApp e
+          $ tryToRecoverNatural e
+          -- or fallback to App
+          $ bracket (appBrackets' $ preferParenless (appParens i) && isLambda e2)
+          $ do e1' <- toConcreteCtx FunctionCtx e1
+               e2' <- toConcreteCtx (ArgumentCtx $ appParens i) e2
+               return $ C.App (getRange i) e1' e2'
 
     toConcrete (A.WithApp i e es) =
       bracket withAppBrackets $ do
@@ -449,10 +519,10 @@
         return $ C.WithApp (getRange i) e es
 
     toConcrete (A.AbsurdLam i h) =
-      bracket (lamBrackets' $ lamParens i) $ return $ C.AbsurdLam (getRange i) h
+      bracket lamBrackets $ return $ C.AbsurdLam (getRange i) h
     toConcrete e@(A.Lam i _ _)      =
         tryToRecoverOpApp e   -- recover sections
-        $ bracket (lamBrackets' $ lamParens i)
+        $ bracket lamBrackets
         $ case lamView e of
             (bs, e) ->
                 bindToConcrete (map makeDomainFree bs) $ \bs -> do
@@ -471,7 +541,7 @@
                     _                              -> ([b], e)
             lamView e = ([], e)
     toConcrete (A.ExtendedLam i di qname cs) =
-        bracket (lamBrackets' $ lamParens i) $ do
+        bracket lamBrackets $ do
           decls <- concat <$> toConcrete cs
           let namedPat np = case getHiding np of
                  NotHidden  -> namedArg np
@@ -492,7 +562,7 @@
                 lift $ reportSLn "extendedlambda" 50 $ "abstractToConcrete extended lambda pattern p = " ++ show p
                 p' <- removeApp p
                 lift $ reportSLn "extendedlambda" 50 $ "abstractToConcrete extended lambda pattern p' = " ++ show p'
-                return (lhs{ lhsOriginalPattern = p' }, rhs, wh, ca)
+                return $ LamClause lhs{ lhsOriginalPattern = p' } rhs wh ca
               decl2clause _ = __IMPOSSIBLE__
           C.ExtendedLam (getRange i) <$> mapM decl2clause decls
     toConcrete (A.Pi _ [] e) = toConcrete e
@@ -531,7 +601,7 @@
         bracket lamBrackets
         $ bindToConcrete ds $ \ds' -> do
              e'  <- toConcreteTop e
-             return $ C.Let (getRange i) (concat ds') e'
+             return $ C.Let (getRange i) (concat ds') (Just e')
 
     toConcrete (A.Rec i fs) =
       bracket appBrackets $ do
@@ -568,7 +638,7 @@
     -- Andreas, 2010-10-05 print irrelevant things as ordinary things
     toConcrete (A.DontCare e) = C.Dot r . C.Paren r  <$> toConcrete e
        where r = getRange e
-    toConcrete (A.PatternSyn n) = C.Ident <$> toConcrete n
+    toConcrete (A.PatternSyn n) = C.Ident <$> toConcrete (headAmbQ n)
 
 makeDomainFree :: A.LamBinding -> A.LamBinding
 makeDomainFree b@(A.DomainFull (A.TypedBindings r (Arg info (A.TBind _ [WithHiding h x] t)))) =
@@ -592,7 +662,7 @@
 -- Binder instances -------------------------------------------------------
 
 instance ToConcrete A.LamBinding [C.LamBinding] where
-    bindToConcrete (A.DomainFree info x) ret = bindToConcrete x $ ret . (:[]) . C.DomainFree info . mkBoundName_
+    bindToConcrete (A.DomainFree info x) ret = bindToConcrete (unBind x) $ ret . (:[]) . C.DomainFree info . mkBoundName_
     bindToConcrete (A.DomainFull b)      ret = bindToConcrete b $ ret . map C.DomainFull
 
 instance ToConcrete A.TypedBindings [C.TypedBindings] where
@@ -605,7 +675,7 @@
         | visible b = [cb]   -- We don't care about labels for explicit args
         | otherwise = traverse (recover (unArg b)) cb
 
-      recover (A.TBind _ xs _) (C.TBind r ys e) = tbind r e (zipWith label xs ys)
+      recover (A.TBind _ xs _) (C.TBind r ys e) = tbind r e (zipWith label (map (fmap unBind) xs) ys)
       recover A.TLet{}         c@C.TLet{}       = [c]
       recover _ _ = __IMPOSSIBLE__
 
@@ -634,14 +704,14 @@
         do (t,(e, [], [], [])) <- toConcrete (t, A.RHS e Nothing)
            ret $ addInstanceB (isInstance info) $
                [ C.TypeSig info x t
-               , C.FunClause (C.LHS (C.IdentP $ C.QName x) [] [] [])
+               , C.FunClause (C.LHS (C.IdentP $ C.QName x) [] [])
                              e C.NoWhere False
                ]
     -- 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 False ]
+        ret [ C.FunClause (C.LHS p [] []) (C.RHS e) NoWhere False ]
     bindToConcrete (LetApply i x modapp _ _) ret = do
       x' <- unqualify <$> toConcrete x
       modapp <- toConcrete modapp
@@ -660,18 +730,16 @@
       -- Note that the range of the declaration site is dropped.
       ret []
 
-data AsWhereDecls = AsWhereDecls [A.Declaration]
-
-instance ToConcrete AsWhereDecls WhereClause where
-  bindToConcrete (AsWhereDecls []) ret = ret C.NoWhere
-  bindToConcrete (AsWhereDecls ds@[Section _ am _ _]) ret = do
+instance ToConcrete A.WhereDeclarations WhereClause where
+  bindToConcrete (A.WhereDecls _ []) ret = ret C.NoWhere
+  bindToConcrete (A.WhereDecls (Just am) [A.Section _ _ _ ds]) ret = do
     ds' <- declsToConcrete ds
     cm  <- unqualify <$> lookupModule am
     -- Andreas, 2016-07-08 I put PublicAccess in the following SomeWhere
     -- Should not really matter for printing...
     let wh' = (if isNoName cm then AnyWhere else SomeWhere cm PublicAccess) $ ds'
     local (openModule' am defaultImportDir id) $ ret wh'
-  bindToConcrete (AsWhereDecls ds) ret =
+  bindToConcrete (A.WhereDecls _ ds) ret =
     ret . AnyWhere =<< declsToConcrete ds
 
 mergeSigAndDef :: [C.Declaration] -> [C.Declaration]
@@ -709,8 +777,8 @@
       es <- toConcrete es
       cs <- noTakenNames $ concat <$> toConcrete cs
       return (C.AbsurdRHS, [], es, cs)
-    toConcrete (A.RewriteRHS xeqs rhs wh) = do
-      wh <- declsToConcrete wh
+    toConcrete (A.RewriteRHS xeqs _spats rhs wh) = do
+      wh <- declsToConcrete (A.whereDecls wh)
       (rhs, eqs', es, whs) <- toConcrete rhs
       unless (null eqs')
         __IMPOSSIBLE__
@@ -734,23 +802,18 @@
   toConcrete (Constr d) = head <$> toConcrete d
 
 instance ToConcrete a C.LHS => ToConcrete (A.Clause' a) [C.Declaration] where
-  toConcrete (A.Clause lhs _ _ rhs wh catchall) =
-      bindToConcrete lhs $ \lhs ->
-        case lhs of
-          C.LHS p wps _ _ -> do
-            bindToConcrete (AsWhereDecls wh)  $ \wh' -> do
+  toConcrete (A.Clause lhs _ rhs wh catchall) =
+      bindToConcrete lhs $ \case
+          C.LHS p _ _ -> do
+            bindToConcrete wh $ \ wh' -> do
                 (rhs', eqs, with, wcs) <- toConcreteTop rhs
-                return $ FunClause (C.LHS p wps eqs with) rhs' wh' catchall : wcs
-          C.Ellipsis {} -> __IMPOSSIBLE__
-          -- TODO: Is the case above impossible? Previously there was
-          -- no code for it, but GHC 7's completeness checker spotted
-          -- that the case was not covered.
+                return $ FunClause (C.LHS p eqs with) rhs' wh' catchall : wcs
 
 instance ToConcrete A.ModuleApplication C.ModuleApplication where
   toConcrete (A.SectionApp tel y es) = do
     y  <- toConcreteCtx FunctionCtx y
     bindToConcrete tel $ \tel -> do
-      es <- toConcreteCtx ArgumentCtx es
+      es <- toConcreteCtx argumentCtx_ es
       let r = fuseRange y es
       return $ C.SectionApp r (concat tel) (foldl (C.App r) (C.Ident y) es)
 
@@ -849,7 +912,7 @@
 
   toConcrete (A.PatternSynDef x xs p) = do
     C.QName x <- toConcrete x
-    bindToConcrete xs $ \xs -> (:[]) . C.PatternSyn (getRange x) x xs <$> toConcrete (vacuous p :: A.Pattern)
+    bindToConcrete xs $ \xs -> (:[]) . C.PatternSyn (getRange x) x xs <$> dontFoldPatternSynonyms (toConcrete (vacuous p :: A.Pattern))
 
   toConcrete (A.UnquoteDecl _ i xs e) = do
     let unqual (C.QName x) = return x
@@ -869,9 +932,8 @@
 instance ToConcrete RangeAndPragma C.Pragma where
   toConcrete (RangeAndPragma r p) = case p of
     A.OptionsPragma xs  -> return $ C.OptionsPragma r xs
-    A.BuiltinPragma b e      -> C.BuiltinPragma r b <$> toConcrete e
-    A.BuiltinNoDefPragma b x -> C.BuiltinPragma r b . C.Ident <$>
-      toConcrete x
+    A.BuiltinPragma b x      -> C.BuiltinPragma r b <$> toConcrete x
+    A.BuiltinNoDefPragma b x -> C.BuiltinPragma r b <$> toConcrete x
     A.RewritePragma x        -> C.RewritePragma r . singleton <$> toConcrete x
     A.CompiledTypePragma x hs -> do
       x <- toConcrete x
@@ -899,10 +961,10 @@
       return $ C.CompiledDataUHCPragma r x crd crcs
     A.StaticPragma x -> C.StaticPragma r <$> toConcrete x
     A.InjectivePragma x -> C.InjectivePragma r <$> toConcrete x
-    A.InlinePragma x -> C.InlinePragma r <$> toConcrete x
+    A.InlinePragma b x -> C.InlinePragma r b <$> toConcrete x
     A.EtaPragma x    -> C.EtaPragma    r <$> toConcrete x
     A.DisplayPragma f ps rhs ->
-      C.DisplayPragma r <$> toConcrete (A.DefP (PatRange noRange) (AmbQ [f]) ps) <*> toConcrete rhs
+      C.DisplayPragma r <$> toConcrete (A.DefP (PatRange noRange) (unambiguous f) ps) <*> toConcrete rhs
 
 -- Left hand sides --------------------------------------------------------
 
@@ -910,10 +972,9 @@
   bindToConcrete lhs = bindToConcrete (A.spineToLhs lhs :: A.LHS)
 
 instance ToConcrete A.LHS C.LHS where
-    bindToConcrete (A.LHS i lhscore wps) ret = do
-      bindToConcreteCtx TopCtx lhscore $ \lhs ->
-        bindToConcreteCtx TopCtx wps $ \wps ->
-          ret $ C.LHS lhs wps [] []
+    bindToConcrete (A.LHS i lhscore) ret = do
+      bindToConcreteCtx TopCtx lhscore $ \ lhs ->
+          ret $ C.LHS lhs [] []
 
 instance ToConcrete A.LHSCore C.Pattern where
   bindToConcrete = bindToConcrete . lhsCoreToPattern
@@ -926,10 +987,10 @@
 newtype UserPattern a  = UserPattern a
 newtype SplitPattern a = SplitPattern a
 newtype BindingPattern = BindingPat A.Pattern
-newtype FreshName = FreshenName A.Name
+newtype FreshName = FreshenName BindName
 
 instance ToConcrete FreshName A.Name where
-  bindToConcrete (FreshenName x) ret = bindToConcrete x $ \ y -> ret x{ nameConcrete = y }
+  bindToConcrete (FreshenName (BindName x)) ret = bindToConcrete x $ \ y -> ret x { nameConcrete = y }
 
 -- Pass 1: (Issue #2729)
 -- Takes care of binding the originally user-written pattern variables, but doesn't actually
@@ -937,7 +998,7 @@
 instance ToConcrete (UserPattern A.Pattern) A.Pattern where
   bindToConcrete (UserPattern p) ret =
     case p of
-      A.VarP x               -> bindName' x $ ret $ A.VarP x
+      A.VarP x               -> bindName' (unBind x) $ ret $ A.VarP x
       A.WildP{}              -> ret p
       A.ProjP{}              -> ret p
       A.AbsurdP{}            -> ret p
@@ -952,9 +1013,10 @@
       A.DefP i f args        -> bindToConcrete (map UserPattern args) $ ret . A.DefP i f
       A.PatternSynP i f args -> bindToConcrete (map UserPattern args) $ ret . A.PatternSynP i f
       A.RecP i args          -> bindToConcrete ((map . fmap) UserPattern args) $ ret . A.RecP i
-      A.AsP i x p            -> bindName' x $
+      A.AsP i x p            -> bindName' (unBind x) $
                                 bindToConcrete (UserPattern p) $ \ p ->
                                 ret (A.AsP i x p)
+      A.WithP i p            -> bindToConcrete (UserPattern p) $ ret . A.WithP i
 
 instance ToConcrete (UserPattern (NamedArg A.Pattern)) (NamedArg A.Pattern) where
   bindToConcrete (UserPattern np) ret =
@@ -983,6 +1045,7 @@
       A.RecP i args          -> bindToConcrete ((map . fmap) SplitPattern args) $ ret . A.RecP i
       A.AsP i x p            -> bindToConcrete (SplitPattern p)  $ \ p ->
                                 ret (A.AsP i x p)
+      A.WithP i p            -> bindToConcrete (SplitPattern p) $ ret . A.WithP i
 
 instance ToConcrete (SplitPattern (NamedArg A.Pattern)) (NamedArg A.Pattern) where
   bindToConcrete (SplitPattern np) ret =
@@ -997,7 +1060,7 @@
 instance ToConcrete BindingPattern A.Pattern where
   bindToConcrete (BindingPat p) ret =
     case p of
-      A.VarP x               -> bindToConcrete (FreshenName x) $ ret . A.VarP
+      A.VarP x               -> bindToConcrete (FreshenName x) $ ret . A.VarP . BindName
       A.WildP{}              -> ret p
       A.ProjP{}              -> ret p
       A.AbsurdP{}            -> ret p
@@ -1009,7 +1072,8 @@
       A.RecP i args          -> bindToConcrete ((map . fmap)        BindingPat args) $ ret . A.RecP i
       A.AsP i x p            -> bindToConcrete (FreshenName x) $ \ x ->
                                 bindToConcrete (BindingPat p)  $ \ p ->
-                                ret (A.AsP i x p)
+                                ret (A.AsP i (BindName x) p)
+      A.WithP i p            -> bindToConcrete (BindingPat p) $ ret . A.WithP i
 
 instance ToConcrete A.Pattern C.Pattern where
   bindToConcrete p ret = do
@@ -1025,18 +1089,15 @@
       A.WildP i ->
         return $ C.WildP (getRange i)
 
-      A.ConP i (AmbQ []) args        -> __IMPOSSIBLE__
-      A.ConP i xs@(AmbQ (x:_)) args  -> tryOp x (A.ConP i xs) args
+      A.ConP i c args  -> tryOp (headAmbQ c) (A.ConP i c) args
 
-      A.ProjP _ _ (AmbQ []) -> __IMPOSSIBLE__
-      A.ProjP i ProjPrefix xs@(AmbQ (x:_)) -> C.IdentP <$> toConcrete x
-      A.ProjP i _ xs@(AmbQ (x:_)) -> C.DotP (getRange x) UserWritten . C.Ident <$> toConcrete x
+      A.ProjP i ProjPrefix p -> C.IdentP <$> toConcrete (headAmbQ p)
+      A.ProjP i _          p -> C.DotP noRange . C.Ident <$> toConcrete (headAmbQ p)
 
-      A.DefP i (AmbQ []) _ -> __IMPOSSIBLE__
-      A.DefP i xs@(AmbQ (x:_)) args -> tryOp x (A.DefP i xs)  args
+      A.DefP i x args -> tryOp (headAmbQ x) (A.DefP i x)  args
 
       A.AsP i x p -> do
-        (x, p) <- toConcreteCtx ArgumentCtx (x,p)
+        (x, p) <- toConcreteCtx argumentCtx_ (x,p)
         return $ C.AsP (getRange i) x p
 
       A.AbsurdP i ->
@@ -1048,22 +1109,21 @@
       A.LitP l ->
         return $ C.LitP l
 
-      A.DotP i o e -> do
+      A.DotP i e -> do
         c <- toConcreteCtx DotPatternCtx e
         case c of
           -- Andreas, 2016-02-04 print ._ pattern as _ pattern,
           -- following the fusing of WildP and ImplicitP.
           C.Underscore{} -> return $ C.WildP $ getRange i
-          _ -> return $ C.DotP (getRange i) o c
+          _ -> return $ C.DotP (getRange i) c
 
-      A.PatternSynP i n _ ->
-        -- Ulf, 2016-11-29: This doesn't seem right. The underscore is a list
-        -- of arguments, which we shouldn't really throw away! I guess this
-        -- case is __IMPOSSIBLE__?
-        C.IdentP <$> toConcrete n
+      A.PatternSynP i n args -> tryOp (headAmbQ n) (A.PatternSynP i n) args
 
       A.RecP i as ->
         C.RecP (getRange i) <$> mapM (traverse toConcrete) as
+
+      A.WithP i p -> C.WithP (getRange i) <$> toConcreteCtx WithArgCtx p
+
     where
     tryOp :: A.QName -> (A.Patterns -> A.Pattern) -> A.Patterns -> AbsToCon C.Pattern
     tryOp x f args = do
@@ -1073,17 +1133,17 @@
       -- and apply them pointwise with C.AppP later.
       let (args1, args2) = splitAt (numHoles x) args
       let funCtx = if null args2 then id else withPrecedence FunctionCtx
-      funCtx (tryToRecoverOpAppP $ f args1) >>= \case
+      tryToRecoverPatternSynP (f args) $ funCtx (tryToRecoverOpAppP $ f args1) >>= \case
         Just c  -> applyTo args2 c
         Nothing -> applyTo args . C.IdentP =<< toConcrete x
     -- Note: applyTo [] c = return c
     applyTo args c = bracketP_ (appBracketsArgs args) $ do
-      foldl C.AppP c <$> toConcreteCtx ArgumentCtx args
+      foldl C.AppP c <$> toConcreteCtx argumentCtx_ args
 
 
 -- Helpers for recovering C.OpApp ------------------------------------------
 
-data Hd = HdVar A.Name | HdCon A.QName | HdDef A.QName
+data Hd = HdVar A.Name | HdCon A.QName | HdDef A.QName | HdSyn A.QName
 
 cOpApp :: Range -> C.QName -> A.Name -> [Maybe C.Expr] -> C.Expr
 cOpApp r x n es =
@@ -1101,69 +1161,60 @@
 
 tryToRecoverNatural :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr
 tryToRecoverNatural e def = do
-  builtins <- stBuiltinThings <$> lift get
-  let reified = do
-        zero <- getAQName "ZERO" builtins
-        suc  <- getAQName "SUC"  builtins
-        explore zero suc 0 e
-  case reified of
-    Just n  -> return $ C.Lit $ LitNat noRange n
-    Nothing -> def
-  where
-
-    getAQName :: String -> BuiltinThings a -> Maybe A.QName
-    getAQName str bs = do
-      Builtin (I.Con hd _ _) <- Map.lookup str bs
-      return $ I.conName hd
+  is <- isBuiltinFun
+  caseMaybe (recoverNatural is e) def $ return . C.Lit . LitNat noRange
 
-    explore :: A.QName -> A.QName -> Integer -> A.Expr -> Maybe Integer
-    explore z s k (A.App _ (A.Con (AmbQ [f])) t) | f == s =
-      let v = 1+k in v `seq` explore z s v $ namedArg t
-    explore z s k (A.Con (AmbQ [x]))             | x == z = Just k
-    explore z s k (A.Lit (LitNat _ l))                    = Just (k + l)
-    explore _ _ _ _ = Nothing
+recoverNatural :: (A.QName -> String -> Bool) -> A.Expr -> Maybe Integer
+recoverNatural is e = explore (`is` builtinZero) (`is` builtinSuc) 0 e
+  where
+    explore :: (A.QName -> Bool) -> (A.QName -> Bool) -> Integer -> A.Expr -> Maybe Integer
+    explore isZero isSuc k (A.App _ (A.Con c) t) | Just f <- getUnambiguous c, isSuc f
+                                                = (explore isZero isSuc $! k + 1) (namedArg t)
+    explore isZero isSuc k (A.Con c) | Just x <- getUnambiguous c, isZero x = Just k
+    explore isZero isSuc k (A.Lit (LitNat _ l)) = Just (k + l)
+    explore _ _ _ _                             = Nothing
 
 tryToRecoverOpApp :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr
-tryToRecoverOpApp e def = caseMaybeM (recoverOpApp bracket (isParenlessLambda . defaultNamedArg) cOpApp view e) def return
+tryToRecoverOpApp e def = caseMaybeM (recoverOpApp bracket (isLambda . defaultNamedArg) cOpApp view e) def return
   where
     view e
         -- Do we have a series of inserted lambdas?
       | Just xs@(_:_) <- traverse insertedName bs =
-        (,) <$> getHead hd <*> sectionArgs xs args
+        (,) <$> getHead hd <*> sectionArgs (map unBind xs) args
       where
-        LamView     bs body = AV.lamView e
-        Application hd args = AV.appView body
+        LamView     bs body = A.lamView e
+        Application hd args = A.appView' body
 
         -- Only inserted domain-free visible lambdas come from sections.
-        insertedName (i, A.DomainFree ai x)
-          | getOrigin i == Inserted && visible ai = Just x
+        insertedName (A.DomainFree i x)
+          | getOrigin i == Inserted && visible i = Just x
         insertedName _ = Nothing
 
         -- Build section arguments. Need to check that:
         -- lambda bound variables appear in the right order and only as
         -- top-level arguments.
-        sectionArgs :: [A.Name] -> [NamedArg A.Expr] -> Maybe [NamedArg (Maybe A.Expr)]
+        sectionArgs :: [A.Name] -> [NamedArg (AppInfo, A.Expr)] -> Maybe [NamedArg (Maybe (AppInfo, A.Expr))]
         sectionArgs xs = go xs
           where
             noXs = getAll . foldExpr (\ case A.Var x -> All (notElem x xs)
-                                             _       -> All True)
+                                             _       -> All True) . snd . namedArg
             go [] [] = return []
             go (y : ys) (arg : args)
               | visible arg
-              , A.Var y' <- namedArg arg
-              , y == y'       = (fmap (Nothing <$) arg :) <$> go ys args
+              , A.Var y' <- snd $ namedArg arg
+              , y == y' = (fmap (Nothing <$) arg :) <$> go ys args
             go ys (arg : args)
               | visible arg, noXs arg = ((fmap . fmap) Just arg :) <$> go ys args
             go _ _ = Nothing
 
     view e = (, (map . fmap . fmap) Just args) <$> getHead hd
-      where Application hd args = AV.appView e
+      where Application hd args = A.appView' e
 
-    getHead (Var x)              = Just (HdVar x)
-    getHead (Def f)              = Just (HdDef f)
-    getHead (Con (AmbQ (c : _))) = Just (HdCon c)
-    getHead (Con (AmbQ []))      = __IMPOSSIBLE__
-    getHead _                    = Nothing
+    getHead (Var x)          = Just (HdVar x)
+    getHead (Def f)          = Just (HdDef f)
+    getHead (Con c)          = Just (HdCon $ headAmbQ c)
+    getHead (A.PatternSyn n) = Just (HdSyn $ headAmbQ n)
+    getHead _                = Nothing
 
 tryToRecoverOpAppP :: A.Pattern -> AbsToCon (Maybe C.Pattern)
 tryToRecoverOpAppP = recoverOpApp bracketP_ (const False) opApp view
@@ -1173,21 +1224,23 @@
     fromjust (Just x) = x
     fromjust Nothing  = __IMPOSSIBLE__  -- `view` does not generate any `Nothing`s
 
+    appInfo = defaultAppInfo_
+
     view p = case p of
-      ConP _ (AmbQ (c:_)) ps -> Just (HdCon c, (map . fmap . fmap) Just ps)
-      DefP _ (AmbQ (f:_)) ps -> Just (HdDef f, (map . fmap . fmap) Just ps)
-      _ -> __IMPOSSIBLE__
-      -- ProjP _ _ (AmbQ (d:_))   -> Just (HdDef d, [])   -- ? Andreas, 2016-04-21
-      -- _                      -> Nothing
+      ConP _        cs ps -> Just (HdCon (headAmbQ cs), (map . fmap . fmap) (Just . (appInfo,)) ps)
+      DefP _        fs ps -> Just (HdDef (headAmbQ fs), (map . fmap . fmap) (Just . (appInfo,)) ps)
+      PatternSynP _ ns ps -> Just (HdSyn (headAmbQ ns), (map . fmap . fmap) (Just . (appInfo,)) ps)
+      _                   -> Nothing
+      -- ProjP _ _ d   -> Just (HdDef (headAmbQ d), [])   -- ? Andreas, 2016-04-21
 
 recoverOpApp :: (ToConcrete a c, HasRange c)
   => ((PrecedenceStack -> Bool) -> AbsToCon c -> AbsToCon c)
-  -> (a -> Bool)  -- ^ Check for parenless lambdas
+  -> (a -> Bool)  -- ^ Check for lambdas
   -> (Range -> C.QName -> A.Name -> [Maybe c] -> c)
-  -> (a -> Maybe (Hd, [NamedArg (Maybe a)]))  -- ^ `Nothing` for sections
+  -> (a -> Maybe (Hd, [NamedArg (Maybe (AppInfo, a))]))  -- ^ `Nothing` for sections
   -> a
   -> AbsToCon (Maybe c)
-recoverOpApp bracket isParenlessLam opApp view e = case view e of
+recoverOpApp bracket isLam opApp view e = case view e of
   Nothing -> mDefault
   Just (hd, args)
     | all visible args    -> do
@@ -1198,10 +1251,13 @@
           | otherwise     -> doQNameHelper id        C.QName  n args'
         HdDef qn          -> doQNameHelper qnameName id      qn args'
         HdCon qn          -> doQNameHelper qnameName id      qn args'
+        HdSyn qn          -> doQNameHelper qnameName id      qn args'
     | otherwise           -> mDefault
   where
   mDefault = return Nothing
 
+  skipParens = maybe False $ \ (i, e) -> isLam e && preferParenless (appParens i)
+
   doQNameHelper fixityHelper conHelper n as = do
     x <- conHelper <$> toConcrete n
     doQName (theFixity $ nameFixity n') x n' as (C.nameParts $ C.unqualify x)
@@ -1223,10 +1279,10 @@
                     as@(_ : _ : _) -> init $ tail as
                     _              -> __IMPOSSIBLE__
         Just <$> do
-          bracket (opBrackets' (maybe False isParenlessLam an) fixity) $ do
-            e1 <- traverse (toConcreteCtx $ LeftOperandCtx fixity) a1
-            es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx) as'
-            en <- traverse (toConcreteCtx $ RightOperandCtx fixity) an
+          bracket (opBrackets' (skipParens an) fixity) $ do
+            e1 <- traverse (toConcreteCtx (LeftOperandCtx fixity) . snd) a1
+            es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx . snd) as'
+            en <- traverse (uncurry $ toConcreteCtx . RightOperandCtx fixity . appParens) an
             return $ opApp (getRange (e1, en)) x n ([e1] ++ es ++ [en])
 
   -- prefix
@@ -1237,9 +1293,9 @@
                     as@(_ : _) -> init as
                     _          -> __IMPOSSIBLE__
         Just <$> do
-          bracket (opBrackets' (maybe False isParenlessLam an) fixity) $ do
-            es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx) as'
-            en <- traverse (toConcreteCtx $ RightOperandCtx fixity) an
+          bracket (opBrackets' (skipParens an) fixity) $ do
+            es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx . snd) as'
+            en <- traverse (\ (i, e) -> toConcreteCtx (RightOperandCtx fixity $ appParens i) e) an
             return $ opApp (getRange (n, en)) x n (es ++ [en])
 
   -- postfix
@@ -1247,19 +1303,72 @@
     | Hole <- head xs = do
         let a1  = head as
             as' = tail as
-        e1 <- traverse (toConcreteCtx $ LeftOperandCtx fixity) a1
-        es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx) as'
+        e1 <- traverse (toConcreteCtx (LeftOperandCtx fixity) . snd) a1
+        es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx . snd) as'
         Just <$> do
           bracket (opBrackets fixity) $
             return $ opApp (getRange (e1, n)) x n ([e1] ++ es)
 
   -- roundfix
   doQName _ x n as xs = do
-    es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx) as
+    es <- (mapM . traverse) (toConcreteCtx InsideOperandCtx . snd) as
     Just <$> do
       bracket roundFixBrackets $
         return $ opApp (getRange x) x n es
 
+-- Recovering pattern synonyms --------------------------------------------
+
+-- | Recover pattern synonyms for expressions.
+tryToRecoverPatternSyn :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr
+tryToRecoverPatternSyn e fallback
+  | userWritten e = fallback
+  | litOrCon e    = recoverPatternSyn apply matchPatternSyn e fallback
+  | otherwise     = fallback
+  where
+    userWritten (A.App info _ _) = getOrigin info == UserWritten
+    userWritten _                = False  -- this means we always use pattern synonyms for nullary constructors
+
+    -- Only literals or constructors can head pattern synonym definitions
+    litOrCon e =
+      case A.appView e of
+        Application Con{}   _ -> True
+        Application A.Lit{} _ -> True
+        _                     -> False
+
+    apply c args = A.unAppView $ Application (A.PatternSyn $ unambiguous c) args
+
+-- | Recover pattern synonyms in patterns.
+tryToRecoverPatternSynP :: A.Pattern -> AbsToCon C.Pattern -> AbsToCon C.Pattern
+tryToRecoverPatternSynP = recoverPatternSyn apply matchPatternSynP
+  where apply c args = PatternSynP patNoRange (unambiguous c) args
+
+-- | General pattern synonym recovery parameterised over expression type
+recoverPatternSyn :: ToConcrete a c =>
+  (A.QName -> [NamedArg a] -> a)         -> -- applySyn
+  (PatternSynDefn -> a -> Maybe [Arg a]) -> -- match
+  a -> AbsToCon c -> AbsToCon c
+recoverPatternSyn applySyn match e fallback = do
+  doFold <- asks foldPatternSynonyms
+  if not doFold then fallback else do
+    psyns  <- lift getAllPatternSyns
+    scope  <- lift getScope
+    let isConP ConP{} = True    -- #2828: only fold pattern synonyms with
+        isConP _      = False   --        constructor rhs
+        cands = [ (q, args, score rhs) | (q, psyndef@(_, rhs)) <- reverse $ Map.toList psyns,
+                                         isConP rhs, Just args <- [match psyndef e],
+                                         isNameInScope q scope ]
+        cmp (_, _, x) (_, _, y) = flip compare x y
+    case sortBy cmp cands of
+      (q, args, _) : _ -> toConcrete $ applySyn q $ (map . fmap) unnamed args
+      []               -> fallback
+  where
+    -- Heuristic to pick the best pattern synonym: the one that folds the most
+    -- constructors.
+    score :: Pattern' Void -> Int
+    score = getSum . foldAPattern con
+      where con ConP{} = 1
+            con _      = 0
+
 -- Some instances that are related to interaction with users -----------
 
 instance ToConcrete InteractionId C.Expr where
@@ -1268,4 +1377,3 @@
 instance ToConcrete NamedMeta C.Expr where
     toConcrete i = do
       return $ C.Underscore noRange (Just $ prettyShow i)
-
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,10 +1,6 @@
 {-# LANGUAGE CPP                  #-}
 {-# LANGUAGE UndecidableInstances #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE OverlappingInstances #-}
-#endif
-
 {-| Translation from "Agda.Syntax.Concrete" to "Agda.Syntax.Abstract". Involves scope analysis,
     figuring out infix operator precedences and tidying up definitions.
 -}
@@ -24,7 +20,12 @@
     , PatName, APatName, LetDef, LetDefs
     ) where
 
-import Prelude hiding (mapM, null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), mapM, null )
+#else
+import Prelude hiding ( mapM, null )
+#endif
+
 import Control.Applicative
 import Control.Monad.Reader hiding (mapM)
 
@@ -40,8 +41,9 @@
 import Agda.Syntax.Concrete as C hiding (topLevelModuleName)
 import Agda.Syntax.Concrete.Generic
 import Agda.Syntax.Concrete.Operators
+import Agda.Syntax.Concrete.Pattern
 import Agda.Syntax.Abstract as A
-import Agda.Syntax.Abstract.Pattern ( patternVars )
+import Agda.Syntax.Abstract.Pattern ( patternVars, checkPatternLinearity )
 import Agda.Syntax.Abstract.Pretty
 import qualified Agda.Syntax.Internal as I
 import Agda.Syntax.Position
@@ -54,6 +56,7 @@
 import Agda.Syntax.Scope.Base
 import Agda.Syntax.Scope.Monad
 import Agda.Syntax.Translation.AbstractToConcrete (ToConcrete)
+import Agda.Syntax.DoNotation
 import Agda.Syntax.IdiomBrackets
 
 import Agda.TypeChecking.Monad.Base hiding (ModuleInfo, MetaInfo)
@@ -77,6 +80,8 @@
 import Agda.Interaction.Options
 import qualified Agda.Interaction.Options.Lenses as Lens
 
+import Agda.Utils.AssocList (AssocList)
+import qualified Agda.Utils.AssocList as AssocList
 import Agda.Utils.Either
 import Agda.Utils.Except ( MonadError(catchError, throwError) )
 import Agda.Utils.FileName
@@ -85,6 +90,7 @@
 import Agda.Utils.List
 import Agda.Utils.Maybe
 import Agda.Utils.Monad
+import Agda.Utils.NonemptyList
 import Agda.Utils.Null
 import qualified Agda.Utils.Pretty as P
 import Agda.Utils.Pretty (render, Pretty, pretty, prettyShow)
@@ -113,13 +119,6 @@
 notAValidLetBinding :: NiceDeclaration -> ScopeM a
 notAValidLetBinding d = typeError $ NotAValidLetBinding d
 
--- Debugging
-
-printLocals :: Int -> String -> ScopeM ()
-printLocals v s = verboseS "scope.top" v $ do
-  locals <- getLocalVars
-  reportSLn "scope.top" v $ s ++ " " ++ prettyShow locals
-
 {--------------------------------------------------------------------------
     Helpers
  --------------------------------------------------------------------------}
@@ -139,12 +138,6 @@
   s <- getScope
   return $ ScopedExpr s e
 
--- | Make sure that each variable occurs only once.
-checkPatternLinearity :: [A.Pattern' e] -> ScopeM ()
-checkPatternLinearity ps = do
-  unlessNull (duplicates $ map nameConcrete $ patternVars ps) $ \ ys -> do
-    typeError $ RepeatedVariablesInPattern ys
-
 -- | Make sure that there are no dot patterns (called on pattern synonyms).
 noDotPattern :: String -> A.Pattern' e -> ScopeM (A.Pattern' Void)
 noDotPattern err = traverse $ const $ typeError $ GenericError err
@@ -184,7 +177,7 @@
         C.NiceMutual _ _ _
           [ C.FunSig _ _ _ _ _instanc macro _info _ _ _
           , C.FunDef _ _ _ abstract _ _ _
-             [ C.Clause _top _catchall (C.LHS _p [] [] []) (C.RHS _rhs) NoWhere [] ]
+             [ C.Clause _top _catchall (C.LHS _p [] []) (C.RHS _rhs) NoWhere [] ]
           ] | abstract /= AbstractDef && macro /= MacroDef ->
           -- TODO: this is still too generous, we also need to check that _p
           -- is only variable patterns.
@@ -222,7 +215,7 @@
     -- Turn non-field declarations into a let binding.
     -- Smart constructor for C.Let:
     lets [] c = c
-    lets ds c = C.Let (getRange ds) ds c
+    lets ds c = C.Let (getRange ds) ds (Just c)
 
 checkModuleApplication
   :: C.ModuleApplication
@@ -243,7 +236,8 @@
     -- Scope check the telescope (introduces bindings!).
     tel' <- toAbstract tel
     -- Scope check the old module name and the module args.
-    (m1, args') <- toAbstract (OldModuleName m, args)
+    m1    <- toAbstract $ OldModuleName m
+    args' <- toAbstractCtx (ArgumentCtx PreferParen) args
     -- Drop constructors (OnlyQualified) if there are arguments. The record constructor
     -- isn't properly in the record module, so copying it will lead to badness.
     let noRecConstr | null args = id
@@ -435,13 +429,14 @@
 toAbstractTopCtx = toAbstractCtx TopCtx
 
 toAbstractHiding :: (LensHiding h, ToAbstract c a) => h -> c -> ScopeM a
-toAbstractHiding h = toAbstractCtx $ hiddenArgumentCtx $ getHiding h
+toAbstractHiding h | visible h = toAbstract -- don't change precedence if visible
+toAbstractHiding _             = toAbstractCtx TopCtx
 
 setContextCPS :: Precedence -> (a -> ScopeM b) ->
                  ((a -> ScopeM b) -> ScopeM b) -> ScopeM b
-setContextCPS p ret f =
-  withContextPrecedence p $ f $
-    bracket_ popContextPrecedence (\ _ -> pushContextPrecedence p) . ret
+setContextCPS p ret f = do
+  old <- scopePrecedence <$> getScope
+  withContextPrecedence p $ f $ \ x -> setContextPrecedence old >> ret x
 
 localToAbstractCtx :: ToAbstract concrete abstract =>
                      Precedence -> concrete -> (abstract -> ScopeM a) -> ScopeM a
@@ -468,11 +463,7 @@
         where
             flatten (x,(y,z)) = (x,y,z)
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} ToAbstract c a => ToAbstract [c] [a] where
-#else
-instance ToAbstract c a => ToAbstract [c] [a] where
-#endif
   toAbstract = mapM toAbstract
 
 instance (ToAbstract c1 a1, ToAbstract c2 a2) =>
@@ -485,7 +476,7 @@
 -- Names ------------------------------------------------------------------
 
 data NewName a = NewName
-  { newLetBound :: Bool -- bound by a @let@?
+  { newBinder   :: Binder -- what kind of binder?
   , newName     :: a
   }
 
@@ -493,6 +484,10 @@
   -- ^ If a set is given, then the first name must correspond to one
   -- of the names in the set.
 newtype OldName a = OldName a
+
+-- | Wrapper to resolve a name to a 'ResolvedName' (rather than an 'A.Expr').
+data ResolveQName = ResolveQName C.QName
+
 data PatName      = PatName C.QName (Maybe (Set A.Name))
   -- ^ If a set is given, then the first name must correspond to one
   -- of the names in the set.
@@ -514,16 +509,28 @@
     qx <- resolveName' allKindsOfNames ns x
     reportSLn "scope.name" 10 $ "resolved " ++ prettyShow x ++ ": " ++ prettyShow qx
     case qx of
-      VarName x' _        -> return $ A.Var x'
-      DefinedName _ d     -> return $ nameExpr d
-      FieldName     ds    -> return $ A.Proj ProjPrefix $ AmbQ (map anameName ds)
-      ConstructorName ds  -> return $ A.Con $ AmbQ (map anameName ds)
-      UnknownName         -> notInScope x
-      PatternSynResName d -> return $ nameExpr d
+      VarName x' _         -> return $ A.Var x'
+      DefinedName _ d      -> do
+        -- In case we find a defined name, we start by checking whether there's
+        -- a warning attached to it
+        reportSDoc "scope.warning" 50 $ text $ "Checking usage of " ++ prettyShow d
+        mstr <- Map.lookup (anameName d) <$> use stUserWarnings
+        forM_ mstr (warning . UserWarning)
+        -- and then we return the name
+        return $ nameExpr d
+      FieldName     ds     -> return $ A.Proj ProjPrefix $ AmbQ (fmap anameName ds)
+      ConstructorName ds   -> return $ A.Con $ AmbQ (fmap anameName ds)
+      UnknownName          -> notInScope x
+      PatternSynResName ds -> return $ A.PatternSyn $ AmbQ (fmap anameName ds)
 
+instance ToAbstract ResolveQName ResolvedName where
+  toAbstract (ResolveQName x) = resolveName x >>= \case
+    UnknownName -> notInScope x
+    q -> return q
+
 data APatName = VarPatName A.Name
-              | ConPatName [AbstractName]
-              | PatternSynPatName AbstractName
+              | ConPatName (NonemptyList AbstractName)
+              | PatternSynPatName (NonemptyList AbstractName)
 
 instance ToAbstract PatName APatName where
   toAbstract (PatName x ns) = do
@@ -531,27 +538,28 @@
     rx <- resolveName' [ConName, PatternSynName] ns x
           -- Andreas, 2013-03-21 ignore conflicting names which cannot
           -- be meant since we are in a pattern
-    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 (Left ds)
-      (PatternSynResName d, _)                              -> return $ Right (Right d)
+    case (rx, x) of
+      (VarName y _,     C.QName x)                          -> bindPatVar x
+      (FieldName d,     C.QName x)                          -> bindPatVar x
+      (DefinedName _ d, C.QName x) | DefName == anameKind d -> bindPatVar x
+      (UnknownName,     C.QName x)                          -> bindPatVar x
+      (ConstructorName ds, _)                               -> patCon ds
+      (PatternSynResName d, _)                              -> patSyn d
       _ -> genericError $ "Cannot pattern match on non-constructor " ++ prettyShow x
-    case z of
-      Left x  -> do
+    where
+      bindPatVar x = do
         reportSLn "scope.pat" 10 $ "it was a var: " ++ prettyShow x
-        p <- VarPatName <$> toAbstract (NewName False x)
-        printLocals 10 "bound it:"
-        return p
-      Right (Left ds) -> do
-        reportSLn "scope.pat" 10 $ "it was a con: " ++ prettyShow (map anameName ds)
+        y <- (AssocList.lookup x <$> getVarsToBind) >>= \case
+          Just (LocalVar y _ _) -> return $ setRange (getRange x) y
+          Nothing -> freshAbstractName_ x
+        addVarToBind x $ LocalVar y PatternBound []
+        return $ VarPatName y
+      patCon ds = do
+        reportSLn "scope.pat" 10 $ "it was a con: " ++ prettyShow (fmap anameName ds)
         return $ ConPatName ds
-      Right (Right d) -> do
-        reportSLn "scope.pat" 10 $ "it was a pat syn: " ++ prettyShow (anameName d)
-        return $ PatternSynPatName d
+      patSyn ds = do
+        reportSLn "scope.pat" 10 $ "it was a pat syn: " ++ prettyShow (fmap anameName ds)
+        return $ PatternSynPatName ds
 
 class ToQName a where
   toQName :: a -> C.QName
@@ -564,15 +572,13 @@
   toAbstract (OldName x) = do
     rx <- resolveName (toQName x)
     case rx of
-      DefinedName _ d     -> return $ anameName d
+      DefinedName _ d      -> return $ anameName d
       -- We can get the cases below for DISPLAY pragmas
-      ConstructorName (d : _) -> return $ anameName d   -- We'll throw out this one, so it doesn't matter which one we pick
-      ConstructorName []      -> __IMPOSSIBLE__
-      FieldName (d:_)         -> return $ anameName d
-      FieldName []            -> __IMPOSSIBLE__
-      PatternSynResName d     -> return $ anameName d
-      VarName x _             -> typeError $ GenericError $ "Not a defined name: " ++ prettyShow x
-      UnknownName             -> notInScope (toQName x)
+      ConstructorName ds   -> return $ anameName (headNe ds)   -- We'll throw out this one, so it doesn't matter which one we pick
+      FieldName ds         -> return $ anameName (headNe ds)
+      PatternSynResName ds -> return $ anameName (headNe ds)
+      VarName x _          -> typeError $ GenericError $ "Not a defined name: " ++ prettyShow x
+      UnknownName          -> notInScope (toQName x)
 
 newtype NewModuleName      = NewModuleName      C.Name
 newtype NewModuleQName     = NewModuleQName     C.QName
@@ -632,6 +638,9 @@
 mkArg :: C.Expr -> Arg C.Expr
 mkArg e = mkArg' defaultArgInfo e
 
+inferParenPreference :: C.Expr -> ParenPreference
+inferParenPreference C.Paren{} = PreferParen
+inferParenPreference _         = PreferParenless
 
 -- | Parse a possibly dotted C.Expr as A.Expr.  Bool = True if dotted.
 toAbstractDot :: Precedence -> C.Expr -> ScopeM (A.Expr, Bool)
@@ -663,14 +672,12 @@
     e <- toAbstractCtx ctx e
     -- We have at least one binder.  Get first @b@ and rest @bs@.
     caseList bs __IMPOSSIBLE__ $ \ b bs -> do
-      return $ A.Lam (setOrigin UserWritten $ (defaultLamInfo r) { lamParens = False }) b $ foldr mkLam e bs
+      return $ A.Lam (ExprRange r) b $ foldr mkLam e bs
   where
-    -- We set the origin of the outer lambda to `UserWritten` and the origin of
-    -- the inner lambdas to `Inserted`.
-    mkLam b e = A.Lam (defaultLamInfo $ fuseRange b e) b e
+    mkLam b e = A.Lam (ExprRange $ fuseRange b e) b e
 
 -- | Scope check extended lambda expression.
-scopeCheckExtendedLam :: Range -> [(C.LHS, C.RHS, WhereClause, Bool)] -> ScopeM A.Expr
+scopeCheckExtendedLam :: Range -> [C.LamClause] -> ScopeM A.Expr
 scopeCheckExtendedLam r cs = do
   whenM isInsideDotPattern $
     genericError "Extended lambdas are not allowed in dot patterns"
@@ -679,26 +686,53 @@
   cname <- nextlamname r 0 extendedLambdaName
   name  <- freshAbstractName_ cname
   reportSLn "scope.extendedLambda" 10 $ "new extended lambda name: " ++ prettyShow name
+  verboseS "scope.extendedLambda" 60 $ do
+    forM_ cs $ \ c -> do
+      reportSLn "scope.extendedLambda" 60 $ "extended lambda lhs: " ++ show (C.lamLHS c)
   qname <- qualifyName_ name
   bindName (PrivateAccess Inserted) DefName cname qname
 
   -- Compose a function definition and scope check it.
   a <- aModeToDef <$> asks envAbstractMode
   let
-    insertApp (C.RawAppP r es) = C.RawAppP r $ IdentP (C.QName cname) : es
-    insertApp (C.IdentP q    ) = C.RawAppP r $ IdentP (C.QName cname) : [C.IdentP q]
-      where r = getRange q
-    insertApp _ = __IMPOSSIBLE__
-    d = C.FunDef r [] noFixity' {-'-} a NotInstanceDef __IMPOSSIBLE__ cname $
-          for cs $ \ (lhs, rhs, wh, ca) -> -- wh == NoWhere, see parser for more info
-            C.Clause cname ca (mapLhsOriginalPattern insertApp lhs) rhs wh []
+    insertApp :: C.Pattern -> ScopeM C.Pattern
+    insertApp (C.RawAppP r es) = return $ C.RawAppP r $ IdentP (C.QName cname) : es
+    insertApp (C.AppP p1 p2)   = return $ (IdentP (C.QName cname) `C.AppP` defaultNamedArg p1) `C.AppP` p2  -- Case occurs in issue #2785
+    insertApp p = return $ C.RawAppP r $ IdentP (C.QName cname) : [p] -- Issue #2807: C.ParenP also possible
+      where r = getRange p
+      -- Andreas, 2017-10-17 issue #2807: do not raise IMPOSSSIBLE here
+      -- since we are actually not sure what is possible and what not.
+
+    -- insertApp (C.IdentP q    ) = return $ C.RawAppP r $ IdentP (C.QName cname) : [C.IdentP q]
+    --   where r = getRange q
+    -- insertApp p = do
+    --   reportSLn "impossible" 10 $ "scopeCheckExtendedLam: unexpected pattern: " ++
+    --     case p of
+    --       C.QuoteP{}    -> "QuoteP"
+    --       C.OpAppP{}    -> "OpAppP"
+    --       C.HiddenP{}   -> "HiddenP"
+    --       C.InstanceP{} -> "InstanceP"
+    --       C.ParenP{}    -> "ParenP"
+    --       C.WildP{}     -> "WildP"
+    --       C.AbsurdP{}   -> "AbsurdP"
+    --       C.AsP{}       -> "AsP"
+    --       C.DotP{}      -> "DotP"
+    --       C.LitP{}      -> "LitP"
+    --       C.RecP{}      -> "RecP"
+    --       _ -> __IMPOSSIBLE__
+    --   __IMPOSSIBLE__
+
+  d <- C.FunDef r [] noFixity' {-'-} a NotInstanceDef __IMPOSSIBLE__ cname <$> do
+          forM cs $ \ (LamClause lhs rhs wh ca) -> do -- wh == NoWhere, see parser for more info
+            lhs' <- mapLhsOriginalPatternM insertApp lhs
+            return $ C.Clause cname ca lhs' rhs wh []
   scdef <- toAbstract d
 
   -- Create the abstract syntax for the extended lambda.
   case scdef of
     A.ScopedDecl si [A.FunDef di qname' NotDelayed cs] -> do
       setScope si  -- This turns into an A.ScopedExpr si $ A.ExtendedLam...
-      return $ A.ExtendedLam (setOrigin UserWritten $ (defaultLamInfo r) { lamParens = False }) di qname' cs
+      return $ A.ExtendedLam (ExprRange r) di qname' cs
     _ -> __IMPOSSIBLE__
 
   where
@@ -725,7 +759,7 @@
             let builtin | n < 0     = Just <$> primFromNeg    -- negative literals are only allowed if FROMNEG is defined
                         | otherwise = ensureInScope =<< getBuiltin' builtinFromNat
                 l'   = LitNat r (abs n)
-                info = ExprRange r
+                info = defaultAppInfo r
             conv <- builtin
             case conv of
               Just (I.Def q _) -> return $ A.App info (A.Def q) $ defaultNamedArg (A.Lit l')
@@ -733,7 +767,7 @@
 
           LitString r s -> do
             conv <- ensureInScope =<< getBuiltin' builtinFromString
-            let info = ExprRange r
+            let info = defaultAppInfo r
             case conv of
               Just (I.Def q _) -> return $ A.App info (A.Def q) $ defaultNamedArg (A.Lit l)
               _                -> return $ A.Lit l
@@ -772,9 +806,11 @@
 
   -- Application
       C.App r e1 e2 -> do
+        let parenPref = inferParenPreference (namedArg e2)
+            info = (defaultAppInfo r) { appOrigin = UserWritten, appParens = parenPref }
         e1 <- toAbstractCtx FunctionCtx e1
-        e2 <- toAbstractCtx ArgumentCtx e2
-        return $ A.App (ExprRange r) e1 e2
+        e2 <- toAbstractCtx (ArgumentCtx parenPref) e2
+        return $ A.App info e1 e2
 
   -- Operator application
       C.OpApp r op ns es -> toAbstractOpApp op ns es
@@ -790,7 +826,7 @@
       C.InstanceArg _ _ -> nothingAppliedToInstanceArg e
 
   -- Lambda
-      C.AbsurdLam r h -> return $ A.AbsurdLam (setOrigin UserWritten $ (defaultLamInfo r) { lamParens = False }) h
+      C.AbsurdLam r h -> return $ A.AbsurdLam (ExprRange r) h
 
       C.Lam r bs e -> toAbstractLam r bs e TopCtx
 
@@ -817,12 +853,13 @@
       C.Prop _   -> return $ A.Prop $ ExprRange $ getRange e
 
   -- Let
-      e0@(C.Let _ ds e) ->
+      e0@(C.Let _ ds (Just e)) ->
         ifM isInsideDotPattern (genericError $ "Let-expressions are not allowed in dot patterns") $
         localToAbstract (LetDefs ds) $ \ds' -> do
           e <- toAbstractCtx TopCtx e
           let info = ExprRange (getRange e0)
           return $ A.Let info ds' e
+      C.Let _ _ Nothing -> genericError "Missing body in let-expression"
 
   -- Record construction
       C.Rec r fs  -> do
@@ -837,19 +874,16 @@
         A.RecUpdate (ExprRange r) <$> toAbstract e <*> toAbstractCtx TopCtx fs
 
   -- Parenthesis
-      C.Paren _ e -> setLamParens <$> toAbstractCtx TopCtx e
-        where
-          setP i = i { lamParens = True }
-          setLamParens (A.Lam i bs e)             = A.Lam (setP i) bs e
-          setLamParens (A.AbsurdLam i h)          = A.AbsurdLam (setP i) h
-          setLamParens (A.ExtendedLam i def q cs) = A.ExtendedLam (setP i) def q cs
-          setLamParens (A.ScopedExpr s e)         = A.ScopedExpr s (setLamParens e)
-          setLamParens e                          = e
+      C.Paren _ e -> toAbstractCtx TopCtx e
 
   -- Idiom brackets
       C.IdiomBrackets r e ->
         toAbstractCtx TopCtx =<< parseIdiomBrackets r e
 
+  -- Do notation
+      C.DoBlock r ss ->
+        toAbstractCtx TopCtx =<< desugarDoNotation r ss
+
   -- Post-fix projections
       C.Dot r e  -> A.Dot (ExprRange r) <$> toAbstract e
 
@@ -860,10 +894,11 @@
   -- Impossible things
       C.ETel _  -> __IMPOSSIBLE__
       C.Equal{} -> genericError "Parse error: unexpected '='"
+      C.Ellipsis _ -> genericError "Parse error: unexpected '...'"
 
   -- Quoting
       C.QuoteGoal _ x e -> do
-        x' <- toAbstract (NewName False x)
+        x' <- toAbstract (NewName LetBound x)
         e' <- toAbstract e
         return $ A.QuoteGoal (ExprRange $ getRange e) x' e'
       C.QuoteContext r -> return $ A.QuoteContext (ExprRange r)
@@ -880,6 +915,7 @@
   -- DontCare
       C.DontCare e -> A.DontCare <$> toAbstract e
 
+
 instance ToAbstract C.ModuleAssignment (A.ModuleName, [A.LetBinding]) where
   toAbstract (C.ModuleAssignment m es i)
     | null es && isDefaultImportDir i = (\x-> (x, [])) <$> toAbstract (OldModuleName m)
@@ -896,7 +932,7 @@
   toAbstract = traverse toAbstract
 
 instance ToAbstract C.LamBinding A.LamBinding where
-  toAbstract (C.DomainFree info x) = A.DomainFree info <$> toAbstract (NewName False x)
+  toAbstract (C.DomainFree info x) = A.DomainFree info . A.BindName <$> toAbstract (NewName LambdaBound x)
   toAbstract (C.DomainFull tb)     = A.DomainFull <$> toAbstract tb
 
 makeDomainFull :: C.LamBinding -> C.TypedBindings
@@ -911,8 +947,8 @@
 instance ToAbstract C.TypedBinding A.TypedBinding where
   toAbstract (C.TBind r xs t) = do
     t' <- toAbstractCtx TopCtx t
-    xs' <- toAbstract $ map (fmap (NewName False)) xs
-    return $ A.TBind r xs' t'
+    xs' <- toAbstract $ map (fmap (NewName LambdaBound)) xs
+    return $ A.TBind r (map (fmap A.BindName) xs') t'
   toAbstract (C.TLet r ds) = A.TLet r <$> toAbstract (LetDefs ds)
 
 -- | Scope check a module (top level function).
@@ -1100,8 +1136,12 @@
                   -- Check if the insideDecls end in a single module which has the same
                   -- name as the file.  In this case, it is highly likely that the user
                   -- put some non-allowed declarations before the top-level module in error.
+                  -- Andreas, 2017-10-19, issue #2808
+                  -- Widen this check to:
+                  -- If the first module of the insideDecls has the same name as the file,
+                  -- report an error.
                   case flip span insideDecls $ \case { C.Module{} -> False; _ -> True } of
-                    (ds0, [ C.Module _ m1 _ _ ])
+                    (ds0, (C.Module _ m1 _ _ : _))
                        | C.toTopLevelModuleName m1 == expectedMName
                          -- If the anonymous module comes from the user,
                          -- the range cannot be the beginningOfFile.
@@ -1149,16 +1189,12 @@
 niceDecls :: [C.Declaration] -> ScopeM [NiceDeclaration]
 niceDecls ds = do
   let (result, warns) = runNice $ niceDeclarations ds
-  unless (null warns) $ setCurrentRange ds $ warning $ NicifierIssue warns
+  unless (null warns) $ setCurrentRange ds $ warnings $ NicifierIssue <$> warns
   case result of
     Left e   -> throwError $ Exception (getRange e) $ pretty e
     Right ds -> return ds
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} ToAbstract [C.Declaration] [A.Declaration] where
-#else
-instance ToAbstract [C.Declaration] [A.Declaration] where
-#endif
   toAbstract ds = do
     -- When --safe is active the termination checker (Issue 586) and
     -- positivity checker (Issue 1614) may not be switched off, and
@@ -1203,9 +1239,11 @@
                 genericError $ "abstract not allowed in let expressions"
               when (macro == MacroDef) $ do
                 genericError $ "Macros cannot be defined in a let expression."
-              (x', e) <- letToAbstract cl
               t <- toAbstract t
-              x <- toAbstract (NewName True $ mkBoundName x fx)
+              -- We bind the name here to make sure it's in scope for the LHS (#917).
+              -- It's unbound for the RHS in letToAbstract.
+              x <- toAbstract (NewName LetBound $ mkBoundName x fx)
+              (x', e) <- letToAbstract cl
               -- If InstanceDef set info to Instance
               let info' | instanc == InstanceDef = makeInstance info
                         | otherwise              = info
@@ -1214,12 +1252,12 @@
               -- definition. The first list element below is
               -- used to highlight the declared instance in the
               -- right way (see Issue 1618).
-              return [ A.LetDeclaredVariable (setRange (getRange x') x)
-                     , A.LetBind (LetRange $ getRange d) info' x t e
+              return [ A.LetDeclaredVariable (A.BindName (setRange (getRange x') x))
+                     , A.LetBind (LetRange $ getRange d) info' (A.BindName x) t e
                      ]
 
       -- irrefutable let binding, like  (x , y) = rhs
-      NiceFunClause r PublicAccess ConcreteDef termCheck catchall d@(C.FunClause lhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere ca) -> do
+      NiceFunClause r PublicAccess ConcreteDef termCheck catchall d@(C.FunClause lhs@(C.LHS p [] []) (C.RHS rhs) NoWhere ca) -> do
         mp  <- setCurrentRange p $
                  (Right <$> parsePattern p)
                    `catchError`
@@ -1228,7 +1266,9 @@
           Right p -> do
             rhs <- toAbstract rhs
             p   <- toAbstract p
-            checkPatternLinearity [p]
+            checkPatternLinearity p $ \ys ->
+              typeError $ RepeatedVariablesInPattern ys
+            bindVarsToBind
             p   <- toAbstract p
             return [ A.LetPatBind (LetRange r) p rhs ]
           -- It's not a record pattern, so it should be a prefix left-hand side
@@ -1254,9 +1294,11 @@
               definedName C.QuoteP{}             = Nothing
               definedName C.HiddenP{}            = Nothing -- Not impossible, see issue #2291
               definedName C.InstanceP{}          = Nothing
+              definedName C.WithP{}              = Nothing
               definedName C.RawAppP{}            = __IMPOSSIBLE__
               definedName C.AppP{}               = __IMPOSSIBLE__
               definedName C.OpAppP{}             = __IMPOSSIBLE__
+              definedName C.EllipsisP{}          = __IMPOSSIBLE__
 
       -- You can't open public in a let
       NiceOpen r x dirs -> do
@@ -1280,7 +1322,7 @@
 
       _   -> notAValidLetBinding d
     where
-        letToAbstract (C.Clause top catchall clhs@(C.LHS p [] [] []) (C.RHS rhs) NoWhere []) = do
+        letToAbstract (C.Clause top catchall clhs@(C.LHS p [] []) (C.RHS rhs) NoWhere []) = do
 {-
             p    <- parseLHS top p
             localToAbstract (snd $ lhsArgs p) $ \args ->
@@ -1290,23 +1332,24 @@
               case res of
                 C.LHSHead x args -> return (x, args)
                 C.LHSProj{} -> genericError $ "copatterns not allowed in let bindings"
+                C.LHSWith{} -> genericError $ "with-patterns not allowed in let bindings"
 
-            e <- localToAbstract args $ \args ->
-                do  rhs <- toAbstract rhs
-                    foldM lambda rhs (reverse args)  -- just reverse because these DomainFree
+            e <- localToAbstract args $ \args -> do
+                bindVarsToBind
+                -- Make sure to unbind the function name in the RHS, since lets are non-recursive.
+                rhs <- unbindVariable top $ toAbstract rhs
+                foldM lambda rhs (reverse args)  -- just reverse because these DomainFree
             return (x, e)
         letToAbstract _ = notAValidLetBinding d
 
         -- Named patterns not allowed in let definitions
         lambda e (Arg info (Named Nothing (A.VarP x))) =
                 return $ A.Lam i (A.DomainFree info x) e
-            where
-                i = defaultLamInfo (fuseRange x e)
+            where i = ExprRange (fuseRange x e)
         lambda e (Arg info (Named Nothing (A.WildP i))) =
             do  x <- freshNoName (getRange i)
-                return $ A.Lam i' (A.DomainFree info x) e
-            where
-                i' = defaultLamInfo (fuseRange i e)
+                return $ A.Lam i' (A.DomainFree info $ A.BindName x) e
+            where i' = ExprRange (fuseRange i e)
         lambda _ _ = notAValidLetBinding d
 
 newtype Blind a = Blind { unBlind :: a }
@@ -1395,6 +1438,9 @@
     C.FunDef r ds f a i tc x cs -> do
         printLocals 10 $ "checking def " ++ prettyShow x
         (x',cs) <- toAbstract (OldName x,cs)
+        -- Andreas, 2017-12-04 the name must reside in the current module
+        unlessM ((A.qnameModule x' ==) <$> getCurrentModule) $
+          __IMPOSSIBLE__
         let delayed = NotDelayed
         -- (delayed, cs) <- translateCopatternClauses cs -- TODO
         return [ A.FunDef (mkDefInfoInstance x f PublicAccess a i NotMacroDef r) x' delayed cs ]
@@ -1408,6 +1454,11 @@
   -- Data definitions
     C.DataDef r f a _ x pars cons -> withLocalVars $ do
         printScope "scope.data.def" 20 ("checking DataDef for " ++ prettyShow x)
+        (p, ax) <- resolveName (C.QName x) >>= \case
+          DefinedName p ax -> do
+            livesInCurrentModule ax  -- Andreas, 2017-12-04, issue #2862
+            return (p, ax)
+          _ -> genericError $ "Missing type signature for data definition " ++ prettyShow x
         ensureNoLetStms pars
         -- Check for duplicate constructors
         do cs <- mapM conName cons
@@ -1418,7 +1469,6 @@
                 typeError $ DuplicateConstructors dups
 
         pars <- toAbstract pars
-        DefinedName p ax <- resolveName (C.QName x)
         let x' = anameName ax
         -- Create the module for the qualified constructors
         checkForModuleClash x -- disallow shadowing previously defined modules
@@ -1436,13 +1486,18 @@
 
   -- Record definitions (mucho interesting)
     C.RecDef r f a _ x ind eta cm pars fields -> do
+      printScope "scope.rec.def" 20 ("checking RecDef for " ++ prettyShow x)
+      (p, ax) <- resolveName (C.QName x) >>= \case
+        DefinedName p ax -> do
+          livesInCurrentModule ax  -- Andreas, 2017-12-04, issue #2862
+          return (p, ax)
+        _ -> genericError $ "Missing type signature for record definition " ++ prettyShow x
       ensureNoLetStms pars
       withLocalVars $ do
         -- Check that the generated module doesn't clash with a previously
         -- defined module
         checkForModuleClash x
         pars   <- toAbstract pars
-        DefinedName p ax <- resolveName (C.QName x)
         let x' = anameName ax
         -- We scope check the fields a first time when putting together
         -- the type of the constructor.
@@ -1572,9 +1627,11 @@
 
     NicePatternSyn r fx n as p -> do
       reportSLn "scope.pat" 10 $ "found nice pattern syn: " ++ prettyShow n
-      defn@(as, p) <- withLocalVars $ do
+      (as, p) <- withLocalVars $ do
          p  <- toAbstract =<< parsePatternSyn p
-         checkPatternLinearity [p]
+         checkPatternLinearity p $ \ys ->
+           typeError $ RepeatedVariablesInPattern ys
+         bindVarsToBind
          let err = "Dot patterns are not allowed in pattern synonyms. Use '_' instead."
          p <- noDotPattern err p
          as <- (traverse . mapM) (unVarName <=< resolveName . C.QName) as
@@ -1585,8 +1642,11 @@
          return (as, p)
       y <- freshAbstractQName fx n
       bindName PublicAccess PatternSynName n y
-      modifyPatternSyns (Map.insert y defn)
-      return [A.PatternSynDef y as p]   -- only for highlighting
+      -- Expanding pattern synonyms already at definition makes it easier to
+      -- fold them back when printing (issue #2762).
+      ep <- expandPatternSynonyms p
+      modifyPatternSyns (Map.insert y (as, ep))
+      return [A.PatternSynDef y as p]   -- only for highlighting, so use unexpanded version
       where unVarName (VarName a _) = return a
             unVarName _ = typeError $ UnusedVariableInPatternSynonym
 
@@ -1602,6 +1662,23 @@
       toAbstractNiceAxiom _ _ _ = __IMPOSSIBLE__
 
 
+-- | Make sure definition is in same module as signature.
+class LivesInCurrentModule a where
+  livesInCurrentModule :: a -> ScopeM ()
+
+instance LivesInCurrentModule AbstractName where
+  livesInCurrentModule = livesInCurrentModule . anameName
+
+instance LivesInCurrentModule A.QName where
+  livesInCurrentModule x = do
+    m <- getCurrentModule
+    reportSLn "scope.data.def" 30 $ unlines
+      [ "  A.QName of data type: " ++ show x
+      , "  current module: " ++ show m
+      ]
+    unless (A.qnameModule x == m) $
+      genericError $ "Definition in different module than its type signature"
+
 data IsRecordCon = YesRec | NoRec
 data ConstrDecl = ConstrDecl IsRecordCon A.ModuleName IsAbstract Access C.NiceDeclaration
 
@@ -1655,9 +1732,9 @@
     e <- toAbstract $ OldQName x Nothing
     case e of
       A.Def x          -> return [ A.RewritePragma x ]
-      A.Proj _ (AmbQ [x]) -> return [ A.RewritePragma x ]
+      A.Proj _ p | Just x <- getUnambiguous p -> return [ A.RewritePragma x ]
       A.Proj _ x       -> genericError $ "REWRITE used on ambiguous name " ++ prettyShow x
-      A.Con (AmbQ [x]) -> return [ A.RewritePragma x ]
+      A.Con c | Just x <- getUnambiguous c -> return [ A.RewritePragma x ]
       A.Con x          -> genericError $ "REWRITE used on ambiguous name " ++ prettyShow x
       A.Var x          -> genericError $ "REWRITE used on parameter " ++ prettyShow x ++ " instead of on a defined symbol"
       _       -> __IMPOSSIBLE__
@@ -1675,7 +1752,7 @@
     e <- toAbstract $ OldQName x Nothing
     y <- case e of
           A.Def x -> return x
-          A.Proj _ (AmbQ [x]) -> return x -- TODO: do we need to do s.th. special for projections? (Andreas, 2014-10-12)
+          A.Proj _ c | Just x <- getUnambiguous c -> return x -- TODO: do we need to do s.th. special for projections? (Andreas, 2014-10-12)
           A.Proj _ x -> genericError $ "COMPILED on ambiguous name " ++ prettyShow x
           A.Con _ -> genericError "Use COMPILED_DATA for constructors" -- TODO
           _       -> __IMPOSSIBLE__
@@ -1690,10 +1767,10 @@
     e <- toAbstract $ OldQName x Nothing
     y <- case e of
           A.Def x -> return x
-          A.Proj _ (AmbQ [x]) -> return x
+          A.Proj _ p | Just x <- getUnambiguous p -> return x
           A.Proj _ x -> genericError $
             "COMPILED_JS used on ambiguous name " ++ prettyShow x
-          A.Con (AmbQ [x]) -> return x
+          A.Con c | Just x <- getUnambiguous c -> return x
           A.Con x -> genericError $
             "COMPILED_JS used on ambiguous name " ++ prettyShow x
           _       -> __IMPOSSIBLE__
@@ -1715,9 +1792,9 @@
     let err what = genericError $ "Cannot COMPILE " ++ what ++ " " ++ prettyShow x
     y <- case e of
           A.Def x             -> return x
-          A.Proj _ (AmbQ [x]) -> return x
+          A.Proj _ p | Just x <- getUnambiguous p -> return x
           A.Proj _ x          -> err "ambiguous projection"
-          A.Con (AmbQ [x])    -> return x
+          A.Con c | Just x <- getUnambiguous c -> return x
           A.Con x             -> err "ambiguous constructor"
           A.PatternSyn{}      -> err "pattern synonym"
           A.Var{}             -> err "local variable"
@@ -1728,7 +1805,7 @@
       e <- toAbstract $ OldQName x Nothing
       y <- case e of
           A.Def  x -> return x
-          A.Proj _ (AmbQ [x]) -> return x
+          A.Proj _ p | Just x <- getUnambiguous p -> return x
           A.Proj _ x -> genericError $
             "STATIC used on ambiguous name " ++ prettyShow x
           _        -> genericError "Target of STATIC pragma should be a function"
@@ -1737,30 +1814,31 @@
       e <- toAbstract $ OldQName x Nothing
       y <- case e of
           A.Def  x -> return x
-          A.Proj _ (AmbQ [x]) -> return x
+          A.Proj _ p | Just x <- getUnambiguous p -> return x
           A.Proj _ x -> genericError $
             "INJECTIVE used on ambiguous name " ++ prettyShow x
           _        -> genericError "Target of INJECTIVE pragma should be a defined symbol"
       return [ A.InjectivePragma y ]
-  toAbstract (C.InlinePragma _ x) = do
+  toAbstract (C.InlinePragma _ b x) = do
       e <- toAbstract $ OldQName x Nothing
+      let sINLINE = if b then "INLINE" else "NOINLINE"
       y <- case e of
           A.Def  x -> return x
-          A.Proj _ (AmbQ [x]) -> return x
+          A.Proj _ p | Just x <- getUnambiguous p -> return x
           A.Proj _ x -> genericError $
-            "INLINE used on ambiguous name " ++ prettyShow x
-          _        -> genericError "Target of INLINE pragma should be a function"
-      return [ A.InlinePragma y ]
-  toAbstract (C.BuiltinPragma _ b e) | isUntypedBuiltin b = do
-    bindUntypedBuiltin b =<< toAbstract e
+            sINLINE ++ " used on ambiguous name " ++ prettyShow x
+          _        -> genericError $ "Target of " ++ sINLINE ++ " pragma should be a function"
+      return [ A.InlinePragma b y ]
+  toAbstract (C.BuiltinPragma _ b q) | isUntypedBuiltin b = do
+    bindUntypedBuiltin b =<< toAbstract (ResolveQName q)
     return []
-  toAbstract (C.BuiltinPragma _ b e) = do
+  toAbstract (C.BuiltinPragma _ b q) = do
     -- Andreas, 2015-02-14
     -- Some builtins cannot be given a valid Agda type,
     -- thus, they do not come with accompanying postulate or definition.
     if b `elem` builtinsNoDef then do
-      case e of
-        C.Ident q@(C.QName x) -> do
+      case q of
+        C.QName x -> do
           unlessM ((UnknownName ==) <$> resolveName q) $ genericError $
             "BUILTIN " ++ b ++ " declares an identifier " ++
             "(no longer expects an already defined identifier)"
@@ -1769,10 +1847,10 @@
           return [ A.BuiltinNoDefPragma b y ]
         _ -> genericError $
           "Pragma BUILTIN " ++ b ++ ": expected unqualified identifier, " ++
-          "but found expression " ++ prettyShow e
+          "but found " ++ prettyShow q
     else do
-      e <- toAbstract e
-      return [ A.BuiltinPragma b e ]
+      q <- toAbstract $ ResolveQName q
+      return [ A.BuiltinPragma b q ]
   toAbstract (C.ImportPragma _ i) = do
     addHaskellImport i
     return []
@@ -1801,35 +1879,41 @@
     (isPatSyn, hd) <- do
       qx <- resolveName' allKindsOfNames Nothing top
       case qx of
-        VarName x' _        -> return . (False,) $ A.qnameFromList [x']
-        DefinedName _ d     -> return . (False,) $ anameName d
-        FieldName     [d]    -> return . (False,) $ anameName d
-        FieldName ds         -> genericError $ "Ambiguous projection " ++ prettyShow top ++ ": " ++ prettyShow (map anameName ds)
-        ConstructorName [d] -> return . (False,) $ anameName d
-        ConstructorName ds  -> genericError $ "Ambiguous constructor " ++ prettyShow top ++ ": " ++ prettyShow (map anameName ds)
-        UnknownName         -> notInScope top
-        PatternSynResName d -> return . (True,) $ anameName d
+        VarName x' _                -> return . (False,) $ A.qnameFromList [x']
+        DefinedName _ d             -> return . (False,) $ anameName d
+        FieldName     (d :! [])     -> return . (False,) $ anameName d
+        FieldName ds                -> genericError $ "Ambiguous projection " ++ prettyShow top ++ ": " ++ prettyShow (fmap anameName ds)
+        ConstructorName (d :! [])   -> return . (False,) $ anameName d
+        ConstructorName ds          -> genericError $ "Ambiguous constructor " ++ prettyShow top ++ ": " ++ prettyShow (fmap anameName ds)
+        UnknownName                 -> notInScope top
+        PatternSynResName (d :! []) -> return . (True,) $ anameName d
+        PatternSynResName ds        -> genericError $ "Ambiguous pattern synonym" ++ prettyShow top ++ ": " ++ prettyShow (fmap anameName ds)
 
-    lhs <- toAbstract $ LeftHandSide top lhs []
+    lhs <- toAbstract $ LeftHandSide top lhs
     ps  <- case lhs of
-             A.LHS _ (A.LHSHead _ ps) [] -> return ps
+             A.LHS _ (A.LHSHead _ ps) -> return ps
              _ -> err
 
     -- Andreas, 2016-08-08, issue #2132
     -- Remove pattern synonyms on lhs
     (hd, ps) <- do
-      let mkP | isPatSyn =  A.PatternSynP (PatRange $ getRange lhs) hd
-              | otherwise = A.DefP (PatRange $ getRange lhs) (A.AmbQ [hd])
+      let mkP | isPatSyn  = A.PatternSynP (PatRange $ getRange lhs) (unambiguous hd)
+              | otherwise = A.DefP (PatRange $ getRange lhs) (unambiguous hd)
       p <- expandPatternSynonyms $ mkP ps
       case p of
-        A.DefP _ (A.AmbQ [hd]) ps -> return (hd, ps)
-        A.ConP _ (A.AmbQ [hd]) ps -> return (hd, ps)
+        A.DefP _ f ps | Just hd <- getUnambiguous f -> return (hd, ps)
+        A.ConP _ c ps | Just hd <- getUnambiguous c -> return (hd, ps)
         A.PatternSynP{} -> __IMPOSSIBLE__
         _ -> err
 
     rhs <- toAbstract rhs
     return [A.DisplayPragma hd ps rhs]
 
+  toAbstract (C.WarningOnUsage _ oqn str) = do
+    qn <- toAbstract $ OldName oqn
+    stUserWarnings %= Map.insert qn str
+    pure []
+
   -- Termination checking pragmes are handled by the nicifier
   toAbstract C.TerminationCheckPragma{} = __IMPOSSIBLE__
 
@@ -1842,12 +1926,11 @@
   toAbstract C.PolarityPragma{} = __IMPOSSIBLE__
 
 instance ToAbstract C.Clause A.Clause where
-  toAbstract (C.Clause top _ C.Ellipsis{} _ _ _) = genericError "bad '...'" -- TODO: error message
-  toAbstract (C.Clause top catchall lhs@(C.LHS p wps eqs with) rhs wh wcs) = withLocalVars $ do
+  toAbstract (C.Clause top catchall lhs@(C.LHS p eqs with) rhs wh wcs) = withLocalVars $ do
     -- Andreas, 2012-02-14: need to reset local vars before checking subclauses
     vars <- getLocalVars
     let wcs' = for wcs $ \ c -> setLocalVars vars $> c
-    lhs' <- toAbstract $ LeftHandSide (C.QName top) p wps
+    lhs' <- toAbstract $ LeftHandSide (C.QName top) p
     printLocals 10 "after lhs:"
     let (whname, whds) = case wh of
           NoWhere        -> (Nothing, [])
@@ -1866,7 +1949,7 @@
     if not (null eqs)
       then do
         rhs <- toAbstract =<< toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs whds)
-        return $ A.Clause lhs' [] [] rhs [] catchall
+        return $ A.Clause lhs' [] rhs A.noWhereDecls catchall
       else do
         -- ASR (16 November 2015) Issue 1137: We ban termination
         -- pragmas inside `where` clause.
@@ -1877,10 +1960,12 @@
         (rhs, ds) <- whereToAbstract (getRange wh) whname whds $
                       toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs [])
         rhs <- toAbstract rhs
-        return $ A.Clause lhs' [] [] rhs ds catchall
+                 -- #2897: we need to restrict named where modules in refined contexts,
+                 --        so remember whether it was named here
+        return $ A.Clause lhs' [] rhs ds catchall
 
-whereToAbstract :: Range -> Maybe (C.Name, Access) -> [C.Declaration] -> ScopeM a -> ScopeM (a, [A.Declaration])
-whereToAbstract _ _      []   inner = (,[]) <$> inner
+whereToAbstract :: Range -> Maybe (C.Name, Access) -> [C.Declaration] -> ScopeM a -> ScopeM (a, A.WhereDeclarations)
+whereToAbstract _ whname []   inner = (, A.noWhereDecls) <$> inner
 whereToAbstract r whname whds inner = do
   -- Create a fresh concrete name if there isn't (a proper) one.
   (m, acc) <- do
@@ -1902,7 +1987,7 @@
    void $ -- We can ignore the returned default A.ImportDirective.
     openModule_ (C.QName m) $
       defaultImportDir { publicOpen = True }
-  return (x, ds)
+  return (x, A.WhereDecls (am <$ whname) ds)
 
 data RightHandSide = RightHandSide
   { rhsRewriteEqn :: [C.RewriteEqn]    -- ^ @rewrite e@ (many)
@@ -1916,7 +2001,7 @@
   = AbsurdRHS'
   | WithRHS' [A.Expr] [ScopeM C.Clause]  -- ^ The with clauses haven't been translated yet
   | RHS' A.Expr C.Expr
-  | RewriteRHS' [A.Expr] AbstractRHS [A.Declaration]
+  | RewriteRHS' [A.Expr] AbstractRHS A.WhereDeclarations
 
 qualifyName_ :: A.Name -> ScopeM A.QName
 qualifyName_ x = do
@@ -1934,7 +2019,7 @@
   toAbstract (RewriteRHS' eqs rhs wh) = do
     auxs <- replicateM (length eqs) $ withFunctionName "rewrite-"
     rhs  <- toAbstract rhs
-    return $ RewriteRHS (zip auxs eqs) rhs wh
+    return $ RewriteRHS (zip auxs eqs) [] rhs wh
   toAbstract (WithRHS' es cs) = do
     aux <- withFunctionName "with-"
     A.WithRHS aux es <$> do toAbstract =<< sequence cs
@@ -1961,50 +2046,52 @@
     toAbstract C.AbsurdRHS = return $ AbsurdRHS'
     toAbstract (C.RHS e)   = RHS' <$> toAbstract e <*> pure e
 
-data LeftHandSide = LeftHandSide C.QName C.Pattern [C.Pattern]
+data LeftHandSide = LeftHandSide C.QName C.Pattern
 
 instance ToAbstract LeftHandSide A.LHS where
-    toAbstract (LeftHandSide top lhs wps) =
+    toAbstract (LeftHandSide top lhs) =
       traceCall (ScopeCheckLHS top lhs) $ do
         lhscore <- parseLHS top lhs
         reportSLn "scope.lhs" 5 $ "parsed lhs: " ++ show lhscore
         printLocals 10 "before lhs:"
         -- error if copattern parsed but --no-copatterns option
         unlessM (optCopatterns <$> pragmaOptions) $
-          case lhscore of
-            C.LHSProj{} -> typeError $ NeedOptionCopatterns
-            C.LHSHead{} -> return ()
+          when (hasCopatterns lhscore) $
+            typeError $ NeedOptionCopatterns
         -- scope check patterns except for dot patterns
         lhscore <- toAbstract lhscore
+        bindVarsToBind
         reportSLn "scope.lhs" 5 $ "parsed lhs patterns: " ++ show lhscore
-        wps  <- toAbstract =<< mapM parsePattern wps
-        checkPatternLinearity $ lhsCoreAllPatterns lhscore ++ wps
         printLocals 10 "checked pattern:"
         -- 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)) lhscore wps
+        return $ A.LHS (LHSRange $ getRange lhs) lhscore
 
 -- 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@(C.LHSProj d ps1 l ps2) = do
+        x <- withLocalVars $ do
+          setLocalVars []
+          toAbstract (OldName x)
+        A.LHSHead x <$> toAbstract ps
+    toAbstract (C.LHSProj d ps1 l ps2) = do
         unless (null ps1) $ typeError $ GenericDocError $
           P.text "Ill-formed projection pattern" P.<+> P.pretty (foldl C.AppP (C.IdentP d) ps1)
         qx <- resolveName d
         ds <- case qx of
-                FieldName [] -> __IMPOSSIBLE__
-                FieldName ds -> return $ map anameName ds
+                FieldName ds -> return $ fmap anameName ds
                 UnknownName -> notInScope d
                 _           -> genericError $
                   "head of copattern needs to be a field identifier, but "
                   ++ prettyShow d ++ " isn't one"
         A.LHSProj (AmbQ ds) <$> toAbstract l <*> toAbstract ps2
+    toAbstract (C.LHSWith core wps ps) = do
+      liftA3 A.LHSWith
+        (toAbstract core)
+        (toAbstract wps)
+        (toAbstract ps)
 
 instance ToAbstract c a => ToAbstract (WithHiding c) (WithHiding a) where
   toAbstract (WithHiding h a) = WithHiding h <$> toAbstractHiding h a
@@ -2024,25 +2111,28 @@
 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 lhscore ps) = A.LHSProj d <$> mapM toAbstract lhscore <*> mapM toAbstract ps
+    toAbstract (A.LHSWith core wps ps)  = liftA3 A.LHSWith (toAbstract core) (toAbstract wps) (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 (A.Pattern' C.Expr) (A.Pattern' A.Expr) where
-  toAbstract = traverse $ insideDotPattern . toAbstract
+  toAbstract = traverse $ insideDotPattern . toAbstractCtx DotPatternCtx  -- Issue #3033
 
 resolvePatternIdentifier ::
   Range -> C.QName -> Maybe (Set A.Name) -> ScopeM (A.Pattern' C.Expr)
 resolvePatternIdentifier r x ns = do
+  reportSLn "scope.pat" 60 $ "resolvePatternIdentifier " ++ show x ++ " at source position " ++ show r
   px <- toAbstract (PatName x ns)
   case px of
-    VarPatName y        -> return $ VarP y
-    ConPatName ds       -> return $ ConP (ConPatInfo ConOCon $ PatRange r)
-                                         (AmbQ $ map anameName ds)
-                                         []
-    PatternSynPatName d -> return $ PatternSynP (PatRange r)
-                                                (anameName d) []
+    VarPatName y         -> do
+      reportSLn "scope.pat" 60 $ "  resolved to VarPatName " ++ show y ++ " with range " ++ show (getRange y)
+      return $ VarP $ A.BindName y
+    ConPatName ds        -> return $ ConP (ConPatInfo ConOCon (PatRange r) False)
+                                          (AmbQ $ fmap anameName ds) []
+    PatternSynPatName ds -> return $ PatternSynP (PatRange r)
+                                                 (AmbQ $ fmap anameName ds) []
 
 instance ToAbstract C.Pattern (A.Pattern' C.Expr) where
 
@@ -2055,10 +2145,12 @@
       e <- toAbstract (OldQName x Nothing)
       let quoted (A.Def x) = return x
           quoted (A.Macro x) = return x
-          quoted (A.Proj _ (AmbQ [x])) = return x
-          quoted (A.Proj _ (AmbQ xs))  = genericError $ "quote: Ambigous name: " ++ prettyShow xs
-          quoted (A.Con (AmbQ [x])) = return x
-          quoted (A.Con (AmbQ xs))  = genericError $ "quote: Ambigous name: " ++ prettyShow xs
+          quoted (A.Proj _ p)
+            | Just x <- getUnambiguous p = return x
+            | otherwise                  = genericError $ "quote: Ambigous name: " ++ prettyShow (unAmbQ p)
+          quoted (A.Con c)
+            | Just x <- getUnambiguous c = return x
+            | otherwise                  = genericError $ "quote: Ambigous name: " ++ prettyShow (unAmbQ c)
           quoted (A.ScopedExpr _ e) = quoted e
           quoted _                  = genericError $ "quote: not a defined name"
       A.LitP . LitQName (getRange x) <$> quoted e
@@ -2067,17 +2159,54 @@
       genericError "quote must be applied to an identifier"
 
     toAbstract p0@(AppP p q) = do
+        reportSLn "scope.pat" 50 $ "distributeDots before = " ++ show p
+        p <- distributeDots p
+        reportSLn "scope.pat" 50 $ "distributeDots after  = " ++ show p
         (p', q') <- toAbstract (p, q)
         case p' of
             ConP i x as        -> return $ ConP (i {patInfo = info}) x (as ++ [q'])
-            ProjP i o x        -> typeError $ InvalidPattern p0
+            ProjP i o x        -> fail
             DefP _ x as        -> return $ DefP info x (as ++ [q'])
             PatternSynP _ x as -> return $ PatternSynP info x (as ++ [q'])
-            _                  -> typeError $ InvalidPattern p0
+            A.DotP i e         -> case e of
+              Ident x -> resolveName x >>= \case
+                ConstructorName ds -> do
+                  let cpi = ConPatInfo ConOCon i True
+                      c   = AmbQ (fmap anameName ds)
+                  return $ ConP cpi c [q']
+                _ -> fail
+              _ -> fail
+            _                  -> fail
         where
             r = getRange p0
             info = PatRange r
+            fail = typeError $ InvalidPattern p0
 
+            distributeDots :: C.Pattern -> ScopeM C.Pattern
+            distributeDots p@(C.DotP r e) = distributeDotsExpr r e
+            distributeDots p = return p
+
+            distributeDotsExpr :: Range -> C.Expr -> ScopeM C.Pattern
+            distributeDotsExpr r e = parseRawApp e >>= \case
+              C.App r e a     ->
+                AppP <$> distributeDotsExpr r e
+                     <*> (traverse . traverse) (distributeDotsExpr r) a
+              OpApp r q ns as ->
+                case (traverse . traverse . traverse) fromNoPlaceholder as of
+                  Just as -> OpAppP r q ns <$>
+                    (traverse . traverse . traverse) (distributeDotsExpr r) as
+                  Nothing -> return $ C.DotP r e
+              Paren r e -> ParenP r <$> distributeDotsExpr r e
+              _ -> return $ C.DotP r e
+
+            fromNoPlaceholder :: MaybePlaceholder (OpApp a) -> Maybe a
+            fromNoPlaceholder (NoPlaceholder _ (Ordinary e)) = Just e
+            fromNoPlaceholder _ = Nothing
+
+            parseRawApp :: C.Expr -> ScopeM C.Expr
+            parseRawApp (RawApp r es) = parseApplication es
+            parseRawApp e             = return e
+
     toAbstract p0@(OpAppP r op ns ps) = do
         p  <- resolvePatternIdentifier (getRange op) op (Just ns)
         ps <- toAbstract ps
@@ -2093,6 +2222,7 @@
     toAbstract (HiddenP _ _)   = __IMPOSSIBLE__
     toAbstract (InstanceP _ _) = __IMPOSSIBLE__
     toAbstract (RawAppP _ _)   = __IMPOSSIBLE__
+    toAbstract (EllipsisP _)   = __IMPOSSIBLE__
 
     toAbstract p@(C.WildP r)    = return $ A.WildP (PatRange r)
     -- Andreas, 2015-05-28 futile attempt to fix issue 819: repeated variable on lhs "_"
@@ -2100,18 +2230,14 @@
     toAbstract (C.ParenP _ p)   = toAbstract p
     toAbstract (C.LitP l)       = return $ A.LitP l
     toAbstract p0@(C.AsP r x p) = do
-        x <- toAbstract (NewName False x)
+        x <- toAbstract (NewName PatternBound x)
         p <- toAbstract p
-        return $ A.AsP info x p
-        where
-            info = PatRange r
+        return $ A.AsP (PatRange r) (A.BindName x) p
     -- we have to do dot patterns at the end
-    toAbstract p0@(C.DotP r o e) = return $ A.DotP info o e
-        where info = PatRange r
-    toAbstract p0@(C.AbsurdP r) = return $ A.AbsurdP info
-        where info = PatRange r
-    toAbstract (C.RecP r fs) = A.RecP (PatRange r) <$>
-      mapM (traverse toAbstract) fs
+    toAbstract p0@(C.DotP r e)     = return $ A.DotP (PatRange r) e
+    toAbstract p0@(C.AbsurdP r)    = return $ A.AbsurdP (PatRange r)
+    toAbstract (C.RecP r fs)       = A.RecP (PatRange r) <$> mapM (traverse toAbstract) fs
+    toAbstract (C.WithP r p)       = A.WithP (PatRange r) <$> toAbstract p
 
 -- | An argument @OpApp C.Expr@ to an operator can have binders,
 --   in case the operator is some @syntax@-notation.
@@ -2142,17 +2268,28 @@
     es <- left (notaFixity nota) nonBindingParts es
     -- Prepend the generated section binders (if any).
     let body = foldl' app op es
-    return $ foldr (A.Lam (defaultLamInfo (getRange body))) body binders
+    return $ foldr (A.Lam (ExprRange (getRange body))) body binders
   where
     -- Build an application in the abstract syntax, with correct Range.
-    app e arg = A.App (ExprRange (fuseRange e arg)) e arg
+    app e (pref, arg) = A.App info e arg
+      where info = (defaultAppInfo r) { appOrigin = getOrigin arg
+                                      , appParens = pref }
+            r = fuseRange e arg
 
-    -- Translate an argument.
+    inferParenPref :: NamedArg (Either A.Expr (OpApp C.Expr)) -> ParenPreference
+    inferParenPref e =
+      case namedArg e of
+        Right (Ordinary e) -> inferParenPreference e
+        Left{}             -> PreferParenless  -- variable inserted by section expansion
+        Right{}            -> PreferParenless  -- syntax lambda
+
+    -- Translate an argument. Returns the paren preference for the argument, so
+    -- we can build the correct info for the A.App node.
     toAbsOpArg :: Precedence ->
                   NamedArg (Either A.Expr (OpApp C.Expr)) ->
-                  ScopeM (NamedArg A.Expr)
-    toAbsOpArg cxt =
-      traverse $ traverse $ either return (toAbstractOpArg cxt)
+                  ScopeM (ParenPreference, NamedArg A.Expr)
+    toAbsOpArg cxt e = (pref,) <$> (traverse . traverse) (either return (toAbstractOpArg cxt)) e
+      where pref = inferParenPref e
 
     -- The hole left to the first @IdPart@ is filled with an expression in @LeftOperandCtx@.
     left f (IdPart _ : xs) es = inside f xs es
@@ -2176,7 +2313,8 @@
     -- The hole right of the last @IdPart@ is filled with an expression in @RightOperandCtx@.
     right _ (IdPart _)  [] = return []
     right f _          [e] = do
-        e <- toAbsOpArg (RightOperandCtx f) e
+        let pref = inferParenPref e
+        e <- toAbsOpArg (RightOperandCtx f pref) e
         return [e]
     right _ _     _  = __IMPOSSIBLE__
 
@@ -2191,9 +2329,19 @@
         x <- freshName noRange "section"
         let i = setOrigin Inserted $ argInfo a
         (ls, ns) <- replacePlaceholders as
-        return ( A.DomainFree i x : ls
+        return ( A.DomainFree i (A.BindName x) : ls
                , set (Left (Var x)) a : ns
                )
       where
       set :: a -> NamedArg b -> NamedArg a
       set x arg = fmap (fmap (const x)) arg
+
+
+{--------------------------------------------------------------------------
+    Things we parse but are not part of the Agda file syntax
+ --------------------------------------------------------------------------}
+
+-- | Content of interaction hole.
+
+instance ToAbstract C.HoleContent A.HoleContent where
+  toAbstract = mapM toAbstract
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
@@ -22,7 +22,7 @@
   ) where
 
 import Prelude hiding (mapM_, mapM, null)
-import Control.Applicative hiding (empty)
+import Control.Arrow ((&&&))
 import Control.Monad.State hiding (mapM_, mapM)
 import Control.Monad.Reader hiding (mapM_, mapM)
 
@@ -30,7 +30,8 @@
 import qualified Data.List as List
 import qualified Data.Map as Map
 import Data.Maybe
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend)
+import Data.Monoid ( Monoid, mempty, mappend )
+import Data.Semigroup ( Semigroup, (<>) )
 import Data.Set (Set)
 import qualified Data.Set as Set
 import Data.Traversable (Traversable, traverse, mapM)
@@ -44,7 +45,7 @@
 import Agda.Syntax.Concrete (FieldAssignment'(..), exprFieldA)
 import Agda.Syntax.Info as Info
 import Agda.Syntax.Abstract as A
-import Agda.Syntax.Abstract.Pattern ( foldAPattern )
+import Agda.Syntax.Abstract.Pattern
 import Agda.Syntax.Abstract.Pretty
 import Agda.Syntax.Internal as I
 import Agda.Syntax.Internal.Pattern as I
@@ -102,13 +103,28 @@
   arg <- reify arg  -- This replaces the arg by _ if irrelevant
   dontShowImp <- not <$> showImplicitArguments
   let hd | notVisible arg && dontShowImp = e
-         | otherwise                     = A.App noExprInfo e arg
+         | otherwise                     = A.App defaultAppInfo_ e arg
   nelims hd es
-nelims e (I.Proj o@ProjPrefix d  : es) =
-  nelims (A.App noExprInfo (A.Proj o $ AmbQ [d]) $ defaultNamedArg e) es
-nelims e (I.Proj o d  : es) =
-  nelims (A.App noExprInfo e (defaultNamedArg $ A.Proj o $ AmbQ [d])) es
+nelims e (I.Proj ProjPrefix d : es)             = nelimsProjPrefix e d es
+nelims e (I.Proj o          d : es) | isSelf e  = nelimsProjPrefix e d es
+                                    | otherwise =
+  nelims (A.App defaultAppInfo_ e (defaultNamedArg $ A.Proj o $ unambiguous d)) es
 
+nelimsProjPrefix :: Expr -> QName -> [I.Elim' (Named_ Expr)] -> TCM Expr
+nelimsProjPrefix e d es =
+  nelims (A.App defaultAppInfo_ (A.Proj ProjPrefix $ unambiguous d) $ defaultNamedArg e) es
+
+-- | If we are inside a record definition, the record value (self)
+--   is a variable with name "".
+--   In this case, we need to use a prefix-projection.  (Issue #2868.)
+--   Prefix projections magically print correctly since the thing
+--   we are projecting from has a null name, so vanishes in the visible world.
+--   We love hacks, don't we?  Sigh.
+isSelf :: Expr -> Bool
+isSelf = \case
+  A.Var x -> null $ prettyShow x
+  _ -> False
+
 -- | Drops hidden arguments unless --show-implicit.
 elims :: Expr -> [I.Elim' Expr] -> TCM Expr
 elims e = nelims e . map (fmap unnamed)
@@ -166,7 +182,7 @@
   reify d = case d of
     DTerm v -> reifyTerm False v
     DDot  v -> reify v
-    DCon c ci vs -> apps (A.Con (AmbQ [conName c])) =<< reify vs
+    DCon c ci vs -> apps (A.Con (unambiguous (conName c))) =<< reify vs
     DDef f es -> elims (A.Def f) =<< reify es
     DWithApp u us es0 -> do
       (e, es) <- reify (u, us)
@@ -185,9 +201,14 @@
 --   rewrite a lhs with a display form.
 --
 --   Note: we are not necessarily in the empty context upon entry!
-reifyDisplayFormP :: A.SpineLHS -> TCM A.SpineLHS
-reifyDisplayFormP lhs@(A.SpineLHS i f ps wps) =
-  ifNotM displayFormsEnabled (return lhs) $ {- else -} do
+reifyDisplayFormP
+  :: QName         -- ^ LHS head symbol
+  -> A.Patterns    -- ^ Patterns to be taken into account to find display form.
+  -> A.Patterns    -- ^ Remaining trailing patterns ("with patterns").
+  -> TCM (QName, A.Patterns) -- ^ New head symbol and new patterns.
+reifyDisplayFormP f ps wps = do
+  let fallback = return (f, ps ++ wps)
+  ifNotM displayFormsEnabled fallback $ {- else -} do
     -- Try to rewrite @f 0 1 2 ... |ps|-1@ to a dt.
     -- Andreas, 2014-06-11  Issue 1177:
     -- I thought we need to add the placeholders for ps to the context,
@@ -205,17 +226,17 @@
         -- for the @i@th pattern of @ps@.
         -- Andreas, 2014-06-11:
         -- Are we sure that @d@ did not use @var i@ otherwise?
-        lhs' <- displayLHS ps wps d
+        (f', ps', wps') <- displayLHS ps d
         reportSDoc "reify.display" 70 $ do
-          doc <- prettyA lhs'
+          doc <- prettyA $ SpineLHS empty f' (ps' ++ wps' ++ wps)
           return $ vcat
             [ text "rewritten lhs to"
             , text "  lhs' = " <+> doc
             ]
-        reifyDisplayFormP lhs'
+        reifyDisplayFormP f' ps' (wps' ++ wps)
       _ -> do
         reportSLn "reify.display" 70 $ "display form absent or not valid as lhs"
-        return lhs
+        fallback
   where
     -- Andreas, 2015-05-03: Ulf, please comment on what
     -- is the idea behind okDisplayForm.
@@ -250,7 +271,7 @@
     okToDropE I.Proj{}    = False
 
     okToDrop :: Arg I.Term -> Bool
-    okToDrop arg = notVisible arg && case ignoreSharing $ unArg arg of
+    okToDrop arg = notVisible arg && case unArg arg of
       I.Var _ []   -> True
       I.DontCare{} -> True  -- no matching on irrelevant things.  __IMPOSSIBLE__ anyway?
       I.Level{}    -> True  -- no matching on levels. __IMPOSSIBLE__ anyway?
@@ -265,7 +286,7 @@
 
     okTerm :: I.Term -> Bool
     okTerm (I.Var _ []) = True
-    okTerm (I.Con c ci vs) = all okArg vs
+    okTerm (I.Con c ci vs) = all okElim vs
     okTerm (I.Def x []) = isNoName $ qnameToConcrete x -- Handling wildcards in display forms
     okTerm _            = False
 
@@ -278,41 +299,40 @@
     flattenWith (DTerm (I.Def f es)) = (f, map (fmap DTerm) es, [])
     flattenWith _ = __IMPOSSIBLE__
 
-    displayLHS :: [NamedArg A.Pattern] -> [A.Pattern] -> DisplayTerm -> TCM A.SpineLHS
-    displayLHS ps wps d = do
+    displayLHS
+      :: A.Patterns   -- ^ Patterns to substituted into display term.
+      -> DisplayTerm  -- ^ Display term.
+      -> TCM (QName, A.Patterns, A.Patterns)  -- ^ New head, patterns, with-patterns.
+    displayLHS ps d = do
         let (f, vs, es) = flattenWith d
-        ds <- mapM (namedArg <.> elimToPat) es
-        vs <- mapM elimToPat vs
-        return $ SpineLHS i f vs (ds ++ wps)
+        ps  <- mapM elimToPat vs
+        wps <- mapM (updateNamedArg (A.WithP empty) <.> elimToPat) es
+        return (f, ps, wps)
       where
         argToPat :: Arg DisplayTerm -> TCM (NamedArg A.Pattern)
         argToPat arg = traverse termToPat arg
 
         elimToPat :: I.Elim' DisplayTerm -> TCM (NamedArg A.Pattern)
         elimToPat (I.Apply arg) = argToPat arg
-        elimToPat (I.Proj o d)  = return $ defaultNamedArg $ A.ProjP patNoRange o $ AmbQ [d]
+        elimToPat (I.Proj o d)  = return $ defaultNamedArg $ A.ProjP patNoRange o $ unambiguous d
 
+        -- | Substitute variables in display term by patterns.
         termToPat :: DisplayTerm -> TCM (Named_ A.Pattern)
 
+        -- Main action HERE:
         termToPat (DTerm (I.Var n [])) = return $ unArg $ fromMaybe __IMPOSSIBLE__ $ ps !!! n
 
         termToPat (DCon c ci vs)          = fmap unnamed <$> tryRecPFromConP =<< do
-           A.ConP (ConPatInfo ci patNoRange) (AmbQ [conName c]) <$> mapM argToPat vs
+           A.ConP (ConPatInfo ci patNoRange False) (unambiguous (conName c)) <$> mapM argToPat vs
 
         termToPat (DTerm (I.Con c ci vs)) = fmap unnamed <$> tryRecPFromConP =<< do
-           A.ConP (ConPatInfo ci patNoRange) (AmbQ [conName c]) <$> mapM (argToPat . fmap DTerm) vs
+           A.ConP (ConPatInfo ci patNoRange False) (unambiguous (conName c)) <$> mapM (elimToPat . fmap DTerm) vs
 
         termToPat (DTerm (I.Def _ [])) = return $ unnamed $ A.WildP patNoRange
         termToPat (DDef _ [])          = return $ unnamed $ A.WildP patNoRange
 
-        -- Currently we don't keep track of the origin of a dot pattern in the internal syntax,
-        -- so here we give __IMPOSSIBLE__. This is only used for printing purposes, the origin
-        -- should not be used anyway after this point.
-        -- Andreas, 2017-02-14: This crashes with -v 100.
-        -- termToPat (DDot v)             = A.DotP patNoRange __IMPOSSIBLE__ <$> termToExpr v
-        -- termToPat v                    = A.DotP patNoRange __IMPOSSIBLE__ <$> reify v -- __IMPOSSIBLE__
-        termToPat (DDot v)             = unnamed . A.DotP patNoRange Inserted <$> termToExpr v
-        termToPat v                    = unnamed . A.DotP patNoRange Inserted <$> reify v
+        termToPat (DDot v)             = unnamed . A.DotP patNoRange <$> termToExpr v
+        termToPat v                    = unnamed . A.DotP patNoRange <$> reify v
 
         len = length ps
 
@@ -325,8 +345,9 @@
           reportSLn "reify.display" 60 $ "termToExpr " ++ show v
           -- After unSpine, a Proj elimination is __IMPOSSIBLE__!
           case unSpine v of
-            I.Con c ci vs ->
-              apps (A.Con (AmbQ [conName c])) =<< argsToExpr vs
+            I.Con c ci es -> do
+              let vs = fromMaybe __IMPOSSIBLE__ $ mapM isApplyElim es
+              apps (A.Con (unambiguous (conName c))) =<< argsToExpr vs
             I.Def f es -> do
               let vs = fromMaybe __IMPOSSIBLE__ $ mapM isApplyElim es
               apps (A.Def f) =<< argsToExpr vs
@@ -360,12 +381,13 @@
   -- then we print system-generated projections as postfix, else prefix.
   havePfp <- optPostfixProjections <$> pragmaOptions
   let pred = if havePfp then (== ProjPrefix) else (/= ProjPostfix)
-  v <- ignoreSharing <$> instantiate v
+  v <- instantiate v
   case applyUnless metasBare (unSpine' pred) v of
     I.Var n es   -> do
         x  <- liftTCM $ nameOfBV n `catchError` \_ -> freshName_ ("@" ++ show n)
         elims (A.Var x) =<< reify es
     I.Def x es   -> do
+      reportSLn "reify.def" 100 $ "reifying def " ++ prettyShow x
       reifyDisplayForm x es $ reifyDef expandAnonDefs x es
     I.Con c ci vs -> do
       let x = conName c
@@ -376,9 +398,9 @@
           let keep (a, v) = showImp || visible a
           r  <- getConstructorData x
           xs <- getRecordFieldNames r
-          vs <- map unArg <$> reify vs
+          vs <- map unArg <$> reify (fromMaybe __IMPOSSIBLE__ $ allApplyElims vs)
           return $ A.Rec noExprInfo $ map (Left . uncurry FieldAssignment . mapFst unArg) $ filter keep $ zip xs vs
-        False -> reifyDisplayForm x (map I.Apply vs) $ do
+        False -> reifyDisplayForm x vs $ do
           def <- getConstInfo x
           let Constructor{conPars = np} = theDef def
           -- if we are the the module that defines constructor x
@@ -387,9 +409,9 @@
           -- 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])
+          let h = A.Con (unambiguous x)
           if null vs then return h else do
-            es <- reify vs
+            es <- reify (fromMaybe __IMPOSSIBLE__ $ allApplyElims 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
@@ -422,7 +444,7 @@
 --    I.Lam info b | isAbsurdBody b -> return $ A. AbsurdLam noExprInfo $ getHiding info
     I.Lam info b    -> do
       (x,e) <- reify b
-      return $ A.Lam (setOrigin (getOrigin info) defaultLamInfo_) (DomainFree info x) e
+      return $ A.Lam exprNoRange (DomainFree info $ BindName 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
@@ -440,8 +462,9 @@
             {- else -} (reify a)
       where
         mkPi b (Arg info a) = do
-          (x, b) <- reify b
-          return $ A.Pi noExprInfo [TypedBindings noRange $ Arg info (TBind noRange [pure x] a)] b
+          -- #2776: Out-of-scope dots are not helpful at this point.
+          (x, b) <- reify b{ absName = unNotInScopeName $ absName b }
+          return $ A.Pi noExprInfo [TypedBindings noRange $ Arg info (TBind noRange [pure $ BindName x] a)] b
         -- We can omit the domain type if it doesn't have any free variables
         -- and it's mentioned in the target type.
         domainFree a b = do
@@ -454,7 +477,6 @@
       ifM (asks envPrintMetasBare) {-then-} (return x') {-else-} $
         elims x' =<< reify es
     I.DontCare v -> A.DontCare <$> reifyTerm expandAnonDefs v
-    I.Shared p   -> reifyTerm expandAnonDefs $ derefPtr p
   where
     -- Andreas, 2012-10-20  expand a copy if not in scope
     -- to improve error messages.
@@ -499,7 +521,17 @@
                 | isAbsurdLambdaName x -> do
                   -- get hiding info from last pattern, which should be ()
                   let h = getHiding $ last $ namedClausePats cl
-                  elims (A.AbsurdLam defaultLamInfo_ h) =<< reify (drop n es)
+                      n = length (namedClausePats cl) - 1  -- drop all args before the absurd one
+                      absLam = A.AbsurdLam exprNoRange h
+                  if | n > length es -> do -- We don't have all arguments before the absurd one!
+                        let name (I.VarP _ x) = patVarNameToString $ dbPatVarName x
+                            name _            = __IMPOSSIBLE__  -- only variables before absurd pattern
+                            vars = map (getArgInfo &&& name . namedArg) $ drop (length es) $ init $ namedClausePats cl
+                            lam (i, s) = do
+                              x <- freshName_ s
+                              return $ A.Lam exprNoRange (A.DomainFree i $ A.BindName x)
+                        foldr ($) absLam <$> mapM lam vars
+                      | otherwise -> elims absLam =<< reify (drop n es)
 
       -- Otherwise (no absurd lambda):
        _ -> do
@@ -511,13 +543,18 @@
 
         -- Check whether we have an extended lambda and display forms are on.
         df <- displayFormsEnabled
-        toppars <- size <$> do lookupSection $ qnameModule x
-        let extLam = case def of
-             Function{ funExtLam = Just{}, funProjection = Just{} } -> __IMPOSSIBLE__
-             Function{ funExtLam = Just (ExtLamInfo h nh) } -> Just (toppars + h + nh)
-             _ -> Nothing
+
+        -- #3004: give up if we have to print a pattern lambda inside its own body!
+        alreadyPrinting <- view ePrintingPatternLambdas
+
+        extLam <- case def of
+          Function{ funExtLam = Just{}, funProjection = Just{} } -> __IMPOSSIBLE__
+          Function{ funExtLam = Just (ExtLamInfo m) } -> Just . size <$> lookupSection m
+          _ -> return Nothing
         case extLam of
-          Just pars | df -> reifyExtLam x pars (defClauses defn) es
+          Just pars | df, notElem x alreadyPrinting ->
+            locally ePrintingPatternLambdas (x :) $
+            reifyExtLam x pars (defClauses defn) es
 
         -- Otherwise (ordinary function call):
           _ -> do
@@ -585,7 +622,7 @@
              [ "  pad = " ++ show pad
              , "  nes = " ++ show nes
              ]
-           let hd = List.foldl' (A.App noExprInfo) (A.Def x) pad
+           let hd = List.foldl' (A.App defaultAppInfo_) (A.Def x) pad
            nelims hd =<< reify nes
 
     -- Andreas, 2016-07-06 Issue #2047
@@ -623,7 +660,7 @@
       cls <- mapM (reify . NamedClause x False . (`applyE` pars)) cls
       let cx    = nameConcrete $ qnameName x
           dInfo = mkDefInfo cx noFixity' PublicAccess ConcreteDef (getRange x)
-      elims (A.ExtendedLam defaultLamInfo_ dInfo x cls) =<< reify rest
+      elims (A.ExtendedLam exprNoRange dInfo x cls) =<< reify rest
 
 -- | @nameFirstIfHidden (x:a) ({e} es) = {x = e} es@
 nameFirstIfHidden :: Dom (ArgName, t) -> [Elim' a] -> [Elim' (Named_ a)]
@@ -641,7 +678,7 @@
 instance (Reify i a) => Reify (Arg i) (Arg a) where
   reify (Arg info i) = Arg info <$> (flip reifyWhen i =<< condition)
     where condition = (return (argInfoHiding info /= Hidden) `or2M` showImplicitArguments)
-              `and2M` (return (argInfoRelevance info /= Irrelevant) `or2M` showIrrelevantArguments)
+              `and2M` (return (getRelevance info /= Irrelevant) `or2M` showIrrelevantArguments)
   reifyWhen b i = traverse (reifyWhen b) i
 
 
@@ -662,23 +699,19 @@
 -- | Removes implicit arguments that are not needed, that is, that don't bind
 --   any variables that are actually used and doesn't do pattern matching.
 --   Doesn't strip any arguments that were written explicitly by the user.
-stripImplicits :: ([NamedArg A.Pattern], [A.Pattern]) ->
-                  TCM ([NamedArg A.Pattern], [A.Pattern])
-stripImplicits (ps, wps) = do          -- v if show-implicit we don't need the names
-  ifM showImplicitArguments (return (map (unnamed . namedThing <$>) ps, wps)) $ do
+stripImplicits :: A.Patterns -> TCM A.Patterns
+stripImplicits ps = do
+  -- if --show-implicit we don't need the names
+  ifM showImplicitArguments (return $ map (unnamed . namedThing <$>) ps) $ do
     reportSLn "reify.implicit" 30 $ unlines
       [ "stripping implicits"
       , "  ps   = " ++ show ps
-      , "  wps  = " ++ show wps
       ]
-    let allps       = ps ++ map defaultNamedArg wps
-        sps         = blankDots $ strip allps
-        (ps', wps') = splitAt (length sps - length wps) sps
+    let ps' = blankDots $ strip ps
     reportSLn "reify.implicit" 30 $ unlines
       [ "  ps'  = " ++ show ps'
-      , "  wps' = " ++ show (map namedArg wps')
       ]
-    return (ps', map namedArg wps')
+    return ps'
     where
       -- Replace variables in dot patterns by an underscore _ if they are hidden
       -- in the pattern. This is slightly nicer than making the implicts explicit.
@@ -688,9 +721,6 @@
         where
           stripArgs _ [] = []
           stripArgs fixedPos (a : as)
-            -- Andreas, 2017-01-18, issue #819: preserves _ when splitting:
-            -- An Inserted visible variable comes form a WildP and is restored as such.
-            | visible a, getOrigin a == Inserted, varOrDot (namedArg a) = goWild
             -- A hidden non-UserWritten variable is removed if not needed for
             -- correct position of the following hidden arguments.
             | canStrip a =
@@ -721,13 +751,14 @@
             A.ConP i c ps -> A.ConP i c $ stripArgs True ps
             A.ProjP{}     -> p
             A.DefP _ _ _  -> p
-            A.DotP _ _ e  -> p
+            A.DotP _ e    -> p
             A.WildP _     -> p
             A.AbsurdP _   -> p
             A.LitP _      -> p
             A.AsP i x p   -> A.AsP i x $ stripPat p
             A.PatternSynP _ _ _ -> __IMPOSSIBLE__ -- p
             A.RecP i fs   -> A.RecP i $ map (fmap stripPat) fs  -- TODO Andreas: is this right?
+            A.WithP i p   -> A.WithP i $ stripPat p -- TODO #2822: right?
 
           varOrDot A.VarP{}      = True
           varOrDot A.WildP{}     = True
@@ -760,27 +791,24 @@
   blank bound (Left x)  = Left $ blank bound x
   blank bound (Right y) = Right $ blank bound y
 
-instance BlankVars A.NamedDotPattern where
-  blank bound = id
-
-instance BlankVars A.StrippedDotPattern where
+instance BlankVars A.ProblemEq where
   blank bound = id
 
 instance BlankVars A.Clause where
-  blank bound (A.Clause lhs namedDots strippedDots rhs [] ca) =
+  blank bound (A.Clause lhs strippedPats rhs (A.WhereDecls _ []) ca) =
     let bound' = varsBoundIn lhs `Set.union` bound
     in  A.Clause (blank bound' lhs)
-                 (blank bound' namedDots)
-                 (blank bound' strippedDots)
-                 (blank bound' rhs) [] ca
-  blank bound (A.Clause lhs namedDots strippedDots rhs (_:_) ca) = __IMPOSSIBLE__
+                 (blank bound' strippedPats)
+                 (blank bound' rhs) noWhereDecls ca
+  blank bound (A.Clause lhs strippedPats rhs _ ca) = __IMPOSSIBLE__
 
 instance BlankVars A.LHS where
-  blank bound (A.LHS i core wps) = uncurry (A.LHS i) $ blank bound (core, wps)
+  blank bound (A.LHS i core) = A.LHS i $ blank bound core
 
 instance BlankVars A.LHSCore where
   blank bound (A.LHSHead f ps) = A.LHSHead f $ blank bound ps
   blank bound (A.LHSProj p b ps) = uncurry (A.LHSProj p) $ blank bound (b, ps)
+  blank bound (A.LHSWith h wps ps) = uncurry (uncurry A.LHSWith) $ blank bound ((h, wps), ps)
 
 instance BlankVars A.Expr where
   blank bound e = case e of
@@ -826,7 +854,7 @@
   blank bound (RHS e mc)             = RHS (blank bound e) mc
   blank bound AbsurdRHS              = AbsurdRHS
   blank bound (WithRHS _ es clauses) = __IMPOSSIBLE__ -- NZ
-  blank bound (RewriteRHS xes rhs _) = __IMPOSSIBLE__ -- NZ
+  blank bound (RewriteRHS xes spats rhs _) = __IMPOSSIBLE__ -- NZ
 
 instance BlankVars A.LamBinding where
   blank bound b@A.DomainFree{} = b
@@ -849,15 +877,16 @@
   varsBoundIn = foldMap varsBoundIn
 
 instance Binder A.LHS where
-  varsBoundIn (A.LHS _ core ps) = varsBoundIn (core, ps)
+  varsBoundIn (A.LHS _ core) = varsBoundIn core
 
 instance Binder A.LHSCore where
-  varsBoundIn (A.LHSHead _ ps)   = varsBoundIn ps
-  varsBoundIn (A.LHSProj _ b ps) = varsBoundIn (b, ps)
+  varsBoundIn (A.LHSHead _ ps)     = varsBoundIn ps
+  varsBoundIn (A.LHSProj _ b ps)   = varsBoundIn (b, ps)
+  varsBoundIn (A.LHSWith h wps ps) = varsBoundIn ((h, wps), ps)
 
 instance Binder A.Pattern where
   varsBoundIn = foldAPattern $ \case
-    A.VarP x            -> if prettyShow x == "()" then empty else singleton x -- TODO: get rid of this hack?
+    A.VarP x            -> singleton $ unBind x
     A.AsP _ x _         -> empty
     A.ConP _ _ _        -> empty
     A.ProjP{}           -> empty
@@ -868,9 +897,10 @@
     A.LitP{}            -> empty
     A.PatternSynP _ _ _ -> empty
     A.RecP _ _          -> empty
+    A.WithP _ _         -> empty
 
 instance Binder A.LamBinding where
-  varsBoundIn (A.DomainFree _ x) = singleton x
+  varsBoundIn (A.DomainFree _ x) = singleton $ unBind x
   varsBoundIn (A.DomainFull b)   = varsBoundIn b
 
 instance Binder TypedBindings where
@@ -881,7 +911,7 @@
   varsBoundIn (TLet _ bs)    = varsBoundIn bs
 
 instance Binder LetBinding where
-  varsBoundIn (LetBind _ _ x _ _) = singleton x
+  varsBoundIn (LetBind _ _ x _ _) = singleton $ unBind x
   varsBoundIn (LetPatBind _ p _)  = varsBoundIn p
   varsBoundIn LetApply{}          = empty
   varsBoundIn LetOpen{}           = empty
@@ -890,6 +920,9 @@
 instance Binder (WithHiding Name) where
   varsBoundIn (WithHiding _ x) = singleton x
 
+instance Binder (WithHiding BindName) where
+  varsBoundIn (WithHiding _ x) = singleton $ unBind x
+
 instance Binder a => Binder (FieldAssignment' a) where
 instance Binder a => Binder (Arg a)              where
 instance Binder a => Binder (Named x a)          where
@@ -913,34 +946,55 @@
     reifyPat p = do
      liftTCM $ reportSLn "reify.pat" 80 $ "reifying pattern " ++ show p
      case p of
-      I.VarP x -> do
-        n <- liftTCM $ nameOfBV $ dbPatVarIndex x
-        case dbPatVarName x of
-          "_"  -> return $ A.VarP n
-          -- Andreas, 2017-09-03: TODO for #2580
-          -- Patterns @VarP "()"@ should have been replaced by @AbsurdP@, but the
-          -- case splitter still produces them.
-          y    -> if prettyShow (nameConcrete n) == "()" then return $ A.VarP n else
-            -- Andreas, 2017-09-03, issue #2729
-            -- Restore original pattern name.  AbstractToConcrete picks unique names.
-            return $ A.VarP n { nameConcrete = C.Name noRange [ C.Id y ] }
-      I.DotP v -> do
-        t <- liftTCM $ reify v
-        -- This is only used for printing purposes, so the Origin shouldn't be
-        -- used after this point anyway.
-        return $ A.DotP patNoRange Inserted t
-        -- WAS: return $ A.DotP patNoRange __IMPOSSIBLE__ t
-        -- Crashes on -v 100.
-      I.AbsurdP p -> return $ A.AbsurdP patNoRange
+      I.VarP PatODot x -> reifyDotP $ var $ dbPatVarIndex x
+      I.VarP PatOWild _ -> return $ A.WildP patNoRange
+      I.VarP PatOAbsurd _ -> return $ A.AbsurdP patNoRange
+      I.VarP _ x -> reifyVarP x
+      I.DotP PatOWild _ -> return $ A.WildP patNoRange
+      I.DotP PatOAbsurd _ -> return $ A.AbsurdP patNoRange
+      -- If Agda turned a user variable @x@ into @.x@, print it back as @x@.
+      I.DotP (PatOVar x) v@(I.Var i []) -> do
+        x' <- nameOfBV i
+        if nameConcrete x == nameConcrete x' then
+          return $ A.VarP (BindName x')
+        else
+          reifyDotP v
+      I.DotP o v -> reifyDotP v
       I.LitP l  -> return $ A.LitP l
-      I.ProjP o d     -> return $ A.ProjP patNoRange o $ AmbQ [d]
-      I.ConP c cpi ps -> do
-        liftTCM $ reportSLn "reify.pat" 60 $ "reifying pattern " ++ show p
-        tryRecPFromConP =<< do A.ConP ci (AmbQ [conName c]) <$> reifyPatterns ps
-        where
-          ci = ConPatInfo origin patNoRange
-          origin = fromMaybe ConOCon $ I.conPRecord cpi
+      I.ProjP o d     -> return $ A.ProjP patNoRange o $ unambiguous d
+      I.ConP c cpi ps -> case conPRecord cpi of
+        Just PatOWild   -> return $ A.WildP patNoRange
+        Just PatOAbsurd -> return $ A.AbsurdP patNoRange
+        _               -> reifyConP c cpi ps
 
+    reifyVarP :: MonadTCM tcm => DBPatVar -> tcm A.Pattern
+    reifyVarP x = do
+      n <- liftTCM $ nameOfBV $ dbPatVarIndex x
+      case dbPatVarName x of
+        "_"  -> return $ A.VarP $ A.BindName n
+        -- Andreas, 2017-09-03: TODO for #2580
+        -- Patterns @VarP "()"@ should have been replaced by @AbsurdP@, but the
+        -- case splitter still produces them.
+        y    -> if prettyShow (nameConcrete n) == "()" then return $ A.VarP $ A.BindName n else
+          -- Andreas, 2017-09-03, issue #2729
+          -- Restore original pattern name.  AbstractToConcrete picks unique names.
+          return $ A.VarP $ A.BindName n { nameConcrete = C.Name noRange [ C.Id y ] }
+
+    reifyDotP :: MonadTCM tcm => Term -> tcm A.Pattern
+    reifyDotP v = do
+      t <- liftTCM $ reify v
+      return $ A.DotP patNoRange t
+
+    reifyConP :: MonadTCM tcm
+              => ConHead -> ConPatternInfo -> [NamedArg DeBruijnPattern]
+              -> tcm A.Pattern
+    reifyConP c cpi ps = do
+      tryRecPFromConP =<< do A.ConP ci (unambiguous (conName c)) <$> reifyPatterns ps
+      where
+        ci = ConPatInfo origin patNoRange False
+        origin = fromConPatternInfo cpi
+
+
 -- | If the record constructor is generated or the user wrote a record pattern,
 --   turn constructor pattern into record pattern.
 --   Otherwise, keep constructor pattern.
@@ -948,8 +1002,8 @@
 tryRecPFromConP p = do
   let fallback = return p
   case p of
-    A.ConP ci (AmbQ [c]) ps -> do
-        caseMaybeM (liftTCM $ isRecordConstructor c) fallback $ \ (r, def) -> do
+    A.ConP ci c ps -> do
+        caseMaybeM (liftTCM $ isRecordConstructor $ headAmbQ c) fallback $ \ (r, def) -> do
           -- If the record constructor is generated or the user wrote a record pattern,
           -- print record pattern.
           -- Otherwise, print constructor pattern.
@@ -971,28 +1025,26 @@
       ++ "\n  toDrop = " ++ show toDrop
       ++ "\n  cl     = " ++ show cl
     ps  <- reifyPatterns $ namedClausePats cl
-    lhs <- liftTCM $ reifyDisplayFormP $ SpineLHS info f ps [] -- LHS info (LHSHead f ps) []
+    lhs <- uncurry (SpineLHS empty) <$> reifyDisplayFormP f ps []
     -- Unless @toDrop@ we have already dropped the module patterns from the clauses
-    -- (e.g. for extended lambdas).
+    -- (e.g. for extended lambdas). We still get here with toDrop = True and
+    -- pattern lambdas when doing make-case, so take care to drop the right
+    -- number of parameters.
     lhs <- if not toDrop then return lhs else do
-      nfv <- getDefFreeVars f `catchError` \_ -> return 0
+      nfv <- (size <.> lookupSection =<< getDefModule f) `catchError` \_ -> return 0
       return $ dropParams nfv lhs
     lhs <- stripImps lhs
     reportSLn "reify.clause" 60 $ "reifying NamedClause, lhs = " ++ show lhs
     rhs <- caseMaybe (clauseBody cl) (return AbsurdRHS) $ \ e -> do
        RHS <$> reify e <*> pure Nothing
     reportSLn "reify.clause" 60 $ "reifying NamedClause, rhs = " ++ show rhs
-    let result = A.Clause (spineToLhs lhs) [] [] rhs [] (I.clauseCatchall cl)
+    let result = A.Clause (spineToLhs lhs) [] rhs A.noWhereDecls (I.clauseCatchall cl)
     reportSLn "reify.clause" 60 $ "reified NamedClause, result = " ++ show result
     return result
     where
-      perm = fromMaybe __IMPOSSIBLE__ $ clausePerm cl
-      info = LHSRange noRange
-
-      dropParams n (SpineLHS i f ps wps) = SpineLHS i f (drop n ps) wps
-      stripImps (SpineLHS i f ps wps) = do
-        (ps, wps) <- stripImplicits (ps, wps)
-        return $ SpineLHS i f ps wps
+      dropParams n (SpineLHS i f ps) = SpineLHS i f $ drop n ps
+      stripImps :: SpineLHS -> TCM SpineLHS
+      stripImps (SpineLHS i f ps) =  SpineLHS i f <$> stripImplicits ps
 
 instance Reify Type Expr where
     reifyWhen = reifyWhenE
@@ -1007,21 +1059,30 @@
         I.Type (I.Max [I.ClosedLevel n]) -> return $ A.Set noExprInfo n
         I.Type a -> do
           a <- reify a
-          return $ A.App noExprInfo (A.Set noExprInfo 0) (defaultNamedArg a)
+          return $ A.App defaultAppInfo_ (A.Set noExprInfo 0) (defaultNamedArg a)
         I.Prop       -> return $ A.Prop noExprInfo
         I.Inf       -> A.Var <$> freshName_ ("Setω" :: String)
         I.SizeUniv  -> do
           I.Def sizeU [] <- primSizeUniv
           return $ A.Def sizeU
-        I.DLub s1 s2 -> do
-          lub <- freshName_ ("dLub" :: String) -- TODO: hack
+        I.PiSort s1 s2 -> do
+          pis <- freshName_ ("piSort" :: String) -- TODO: hack
           (e1,e2) <- reify (s1, I.Lam defaultArgInfo $ fmap Sort s2)
-          let app x y = A.App noExprInfo x (defaultNamedArg y)
-          return $ A.Var lub `app` e1 `app` e2
+          let app x y = A.App defaultAppInfo_ x (defaultNamedArg y)
+          return $ A.Var pis `app` e1 `app` e2
+        I.UnivSort s -> do
+          univs <- freshName_ ("univSort" :: String) -- TODO: hack
+          e <- reify s
+          return $ A.App defaultAppInfo_ (A.Var univs) $ defaultNamedArg e
+        I.MetaS x es -> reify $ I.MetaV x es
 
 instance Reify Level Expr where
   reifyWhen = reifyWhenE
-  reify l = reify =<< reallyUnLevelView l
+  reify l   = ifM haveLevels (reify =<< reallyUnLevelView l) $ {-else-} do
+    -- Andreas, 2017-09-18, issue #2754
+    -- While type checking the level builtins, they are not
+    -- available for debug printing.  Thus, print some garbage instead.
+    A.Var <$> freshName_ (".#Lacking_Level_Builtins#" :: String)
 
 instance (Free i, Reify i a) => Reify (Abs i) (Name, a) where
   reify (NoAbs x v) = (,) <$> freshName_ x <*> reify v
@@ -1032,7 +1093,7 @@
     s <- return $ if isUnderscore s && 0 `freeIn` v then "z" else s
 
     x <- freshName_ s
-    e <- addContext' x -- type doesn't matter
+    e <- addContext x -- type doesn't matter
          $ reify v
     return (x,e)
 
@@ -1042,7 +1103,7 @@
     Arg info e <- reify arg
     (x,bs)  <- reify tel
     let r = getRange e
-    return $ TypedBindings r (Arg info (TBind r [pure x] e)) : bs
+    return $ TypedBindings r (Arg info (TBind r [pure $ BindName x] e)) : bs
 
 instance Reify i a => Reify (Dom i) (Arg a) where
     reify (Dom info i) = Arg info <$> reify i
diff --git a/src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs b/src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs
--- a/src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs
+++ b/src/full/Agda/Syntax/Translation/ReflectedToAbstract.hs
@@ -4,7 +4,6 @@
 
 module Agda.Syntax.Translation.ReflectedToAbstract where
 
-import Control.Applicative
 import Control.Monad.Reader
 
 import Data.Traversable as Trav hiding (mapM)
@@ -15,6 +14,7 @@
 import Agda.Syntax.Info
 import Agda.Syntax.Common
 import Agda.Syntax.Abstract as A hiding (Apply)
+import Agda.Syntax.Abstract.Pattern
 import Agda.Syntax.Reflected as R
 
 import Agda.TypeChecking.Monad as M hiding (MetaInfo)
@@ -68,14 +68,14 @@
 instance ToAbstract r Expr => ToAbstract (Dom r, Name) (A.TypedBindings) where
   toAbstract (Dom i x, name) = do
     dom <- toAbstract x
-    return $ TypedBindings noRange $ Arg i $ TBind noRange [pure name] dom
+    return $ TypedBindings noRange $ Arg i $ TBind noRange [pure $ BindName name] dom
 
 instance ToAbstract (Expr, Elim) Expr where
   toAbstract (f, Apply arg) = do
     arg     <- toAbstract arg
     showImp <- lift showImplicitArguments
     return $ if showImp || visible arg
-             then App (ExprRange noRange) f arg
+             then App (setOrigin Reflected defaultAppInfo_) f arg
              else f
 
 instance ToAbstract (Expr, Elims) Expr where
@@ -98,14 +98,14 @@
           names <- asks $ drop (size cxt) . reverse
           lift $ withShowAllArguments' False $ typeError $ DeBruijnIndexOutOfScope i cxt names
         Just name -> toAbstract (A.Var name, es)
-    R.Con c es -> toAbstract (A.Con (AmbQ [killRange c]), es)
+    R.Con c es -> toAbstract (A.Con (unambiguous $ killRange c), es)
     R.Def f es -> do
       af <- lift $ mkDef (killRange f)
       toAbstract (af, es)
     R.Lam h t  -> do
       (e, name) <- toAbstract t
       let info  = setHiding h $ setOrigin Reflected defaultArgInfo
-      return $ A.Lam (setOrigin Reflected defaultLamInfo_) (DomainFree info name) e
+      return $ A.Lam exprNoRange (DomainFree info $ BindName name) e
     R.ExtLam cs es -> do
       name <- freshName_ extendedLambdaName
       m    <- lift $ getCurrentModule
@@ -113,7 +113,7 @@
           cname   = nameConcrete name
           defInfo = mkDefInfo cname noFixity' PublicAccess ConcreteDef noRange
       cs <- toAbstract $ map (QNamed qname) cs
-      toAbstract (A.ExtendedLam (setOrigin Reflected defaultLamInfo_) defInfo qname cs, es)
+      toAbstract (A.ExtendedLam exprNoRange defInfo qname cs, es)
     R.Pi a b   -> do
       (b, name) <- toAbstract b
       a         <- toAbstract (a, name)
@@ -131,7 +131,7 @@
       (return $ A.Def f)
 
 mkSet :: Expr -> Expr
-mkSet e = App exprNoRange (A.Set exprNoRange 0) $ defaultNamedArg e
+mkSet e = App (setOrigin Reflected defaultAppInfo_) (A.Set exprNoRange 0) $ defaultNamedArg e
 
 instance ToAbstract Sort Expr where
   toAbstract (SetS x) = mkSet <$> toAbstract x
@@ -142,16 +142,16 @@
   toAbstract pat = case pat of
     R.ConP c args -> do
       (names, args) <- toAbstractPats args
-      return (names, A.ConP (ConPatInfo ConOCon patNoRange) (AmbQ [killRange c]) args)
+      return (names, A.ConP (ConPatInfo ConOCon patNoRange False) (unambiguous $ killRange c) args)
     R.DotP    -> return ([], A.WildP patNoRange)
-    R.VarP s | isNoName s -> withName "z" $ \ name -> return ([name], A.VarP name)
+    R.VarP s | isNoName s -> withName "z" $ \ name -> return ([name], A.VarP $ BindName name)
         -- Ulf, 2016-08-09: Also bind noNames (#2129). This to make the
         -- behaviour consistent with lambda and pi.
         -- return ([], A.WildP patNoRange)
-    R.VarP s  -> withName s $ \ name -> return ([name], A.VarP name)
+    R.VarP s  -> withName s $ \ name -> return ([name], A.VarP $ BindName name)
     R.LitP l  -> return ([], A.LitP l)
     R.AbsurdP -> return ([], A.AbsurdP patNoRange)
-    R.ProjP d -> return ([], A.ProjP patNoRange ProjSystem $ AmbQ [killRange d])
+    R.ProjP d -> return ([], A.ProjP patNoRange ProjSystem $ unambiguous $ killRange d)
 
 toAbstractPats :: [Arg R.Pattern] -> WithNames (Names, [NamedArg A.Pattern])
 toAbstractPats pats = case pats of
@@ -165,12 +165,12 @@
   toAbstract (QNamed name (R.Clause pats rhs)) = do
     (names, pats) <- toAbstractPats pats
     rhs           <- local (names++) $ toAbstract rhs
-    let lhs = spineToLhs $ SpineLHS (LHSRange noRange) name pats []
-    return $ A.Clause lhs [] [] (RHS rhs Nothing) [] False
+    let lhs = spineToLhs $ SpineLHS (LHSRange noRange) name pats
+    return $ A.Clause lhs [] (RHS rhs Nothing) noWhereDecls False
   toAbstract (QNamed name (R.AbsurdClause pats)) = do
     (_, pats) <- toAbstractPats pats
-    let lhs = spineToLhs $ SpineLHS (LHSRange noRange) name pats []
-    return $ A.Clause lhs [] [] AbsurdRHS [] False
+    let lhs = spineToLhs $ SpineLHS (LHSRange noRange) name pats
+    return $ A.Clause lhs [] AbsurdRHS noWhereDecls False
 
 instance ToAbstract [QNamed R.Clause] [A.Clause] where
   toAbstract = traverse toAbstract
diff --git a/src/full/Agda/Syntax/Treeless.hs b/src/full/Agda/Syntax/Treeless.hs
--- a/src/full/Agda/Syntax/Treeless.hs
+++ b/src/full/Agda/Syntax/Treeless.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE PatternSynonyms #-}
 
 -- | The treeless syntax is intended to be used as input for the compiler backends.
 -- It is more low-level than Internal syntax and is not used for type checking.
@@ -15,7 +16,7 @@
 
 import Data.Map (Map)
 import Data.Data (Data)
-import Data.Typeable (Typeable)
+import Data.Word
 
 import Agda.Syntax.Position
 import Agda.Syntax.Literal
@@ -24,7 +25,7 @@
 data Compiled = Compiled
   { cTreeless :: TTerm
   , cArgUsage :: [Bool] }
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 type Args = [TTerm]
 
@@ -44,7 +45,7 @@
            -- MUST only be evaluated if it is used inside the body.
            -- Sharing may happen, but is optional.
            -- It is also perfectly valid to just inline the bound term in the body.
-           | TCase Int CaseType TTerm [TAlt]
+           | TCase Int CaseInfo TTerm [TAlt]
            -- ^ Case scrutinee (always variable), case type, default value, alternatives
            -- First, all TACon alternatives are tried; then all TAGuard alternatives
            -- in top to bottom order.
@@ -52,9 +53,10 @@
            | TUnit -- used for levels right now
            | TSort
            | TErased
+           | TCoerce TTerm  -- ^ Used by the GHC backend
            | TError TError
            -- ^ A runtime error, something bad has happened.
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 -- | Compiler-related primitives. This are NOT the same thing as primitives
 -- in Agda's surface or internal syntax!
@@ -67,24 +69,25 @@
 -- Q    | QName
 -- S    | String
 data TPrim
-  = PAdd
-  | PSub
-  | PMul
-  | PQuot
-  | PRem
+  = PAdd | PAdd64
+  | PSub | PSub64
+  | PMul | PMul64
+  | PQuot | PQuot64
+  | PRem  | PRem64
   | PGeq
-  | PLt
-  | PEqI
+  | PLt   | PLt64
+  | PEqI  | PEq64
   | PEqF
   | PEqS
   | PEqC
   | PEqQ
   | PIf
   | PSeq
-  deriving (Typeable, Data, Show, Eq, Ord)
+  | PITo64 | P64ToI
+  deriving (Data, Show, Eq, Ord)
 
 isPrimEq :: TPrim -> Bool
-isPrimEq p = p `elem` [PEqI, PEqF, PEqS, PEqC, PEqQ]
+isPrimEq p = p `elem` [PEqI, PEqF, PEqS, PEqC, PEqQ, PEq64]
 
 mkTApp :: TTerm -> Args -> TTerm
 mkTApp x           [] = x
@@ -121,6 +124,10 @@
 intView (TLit (LitNat _ x)) = Just x
 intView _ = Nothing
 
+word64View :: TTerm -> Maybe Word64
+word64View (TLit (LitWord64 _ x)) = Just x
+word64View _ = Nothing
+
 tPlusK :: Integer -> TTerm -> TTerm
 tPlusK 0 n = n
 tPlusK k n | k < 0 = tOp PSub n (tInt (-k))
@@ -140,8 +147,14 @@
 negPlusKView _ = Nothing
 
 tOp :: TPrim -> TTerm -> TTerm -> TTerm
-tOp op a b = TApp (TPrim op) [a, b]
+tOp op a b = TPOp op a b
 
+pattern TPOp :: TPrim -> TTerm -> TTerm -> TTerm
+pattern TPOp op a b = TApp (TPrim op) [a, b]
+
+pattern TPFn :: TPrim -> TTerm -> TTerm
+pattern TPFn op a = TApp (TPrim op) [a]
+
 tUnreachable :: TTerm
 tUnreachable = TError TUnreachable
 
@@ -156,8 +169,13 @@
   | CTString
   | CTFloat
   | CTQName
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
+data CaseInfo = CaseInfo
+  { caseLazy :: Bool
+  , caseType :: CaseType }
+  deriving (Data, Show, Eq, Ord)
+
 data TAlt
   = TACon    { aCon  :: QName, aArity :: Int, aBody :: TTerm }
   -- ^ Matches on the given constructor. If the match succeeds,
@@ -166,7 +184,7 @@
   | TAGuard  { aGuard :: TTerm, aBody :: TTerm }
   -- ^ Binds no variables
   | TALit    { aLit :: Literal,   aBody:: TTerm }
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 data TError
   = TUnreachable
@@ -174,7 +192,7 @@
   -- Runtime behaviour of unreachable code is undefined, but preferably
   -- the program will exit with an error message. The compiler is free
   -- to assume that this code is unreachable and to remove it.
-  deriving (Typeable, Data, Show, Eq, Ord)
+  deriving (Data, Show, Eq, Ord)
 
 
 class Unreachable a where
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
@@ -62,7 +62,7 @@
 --   It can be labelled with several call matrices if there
 --   are several pathes from one function to another.
 
-type Call cinfo = Edge Node Node (CMSet cinfo)
+type Call cinfo = Edge Node (CMSet cinfo)
 
 callMatrixSet :: Call cinfo -> CMSet cinfo
 callMatrixSet = label
@@ -83,7 +83,7 @@
 -- meta information for different calls can be combined when the calls
 -- are combined.
 
-newtype CallGraph cinfo = CallGraph { theCallGraph :: Graph Node Node (CMSet cinfo) }
+newtype CallGraph cinfo = CallGraph { theCallGraph :: Graph Node (CMSet cinfo) }
   deriving (Show)
 
 
@@ -102,7 +102,7 @@
 --   call graph.
 
 fromList :: [Call cinfo] -> CallGraph cinfo
-fromList = CallGraph . Graph.fromListWith CMSet.union
+fromList = CallGraph . Graph.fromEdgesWith CMSet.union
 
 -- | 'null' checks whether the call graph is completely disconnected.
 instance Null (CallGraph cinfo) where
@@ -146,7 +146,7 @@
 
 deriving instance CombineNewOld (CMSet cinfo)
 
-instance (Monoid a, CombineNewOld a, Ord s, Ord t) => CombineNewOld (Graph s t a) where
+instance (Monoid a, CombineNewOld a, Ord n) => CombineNewOld (Graph n a) where
   combineNewOld new old = Graph.unzip $ Graph.unionWith comb new' old'
     where
       new' = (,mempty) <$> new
@@ -226,4 +226,3 @@
 -- --    , "Behaviour: " ++ show (diagonal $ mat $ cm c)  -- TODO
 -- --    , "Meta info: " ++ show cinfo
 --     ]
-
diff --git a/src/full/Agda/Termination/CutOff.hs b/src/full/Agda/Termination/CutOff.hs
--- a/src/full/Agda/Termination/CutOff.hs
+++ b/src/full/Agda/Termination/CutOff.hs
@@ -1,9 +1,5 @@
 {-# LANGUAGE CPP #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE DeriveDataTypeable #-}
-#endif
-
 -- | Defines 'CutOff' type which is used in "Agda.Interaction.Options".
 --   This module's purpose is to eliminate the dependency of
 --   "Agda.TypeChecking.Monad.Base" on the termination checker and
@@ -11,21 +7,12 @@
 
 module Agda.Termination.CutOff where
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Typeable ( Typeable )
-#endif
-
 -- | Cut off structural order comparison at some depth in termination checker?
 
 data CutOff
   = CutOff Int -- ^ @c >= 0@ means: record decrease up to including @c+1@.
   | DontCutOff
-  deriving ( Eq
-           , Ord
-#if __GLASGOW_HASKELL__ <= 708
-           , Typeable
-#endif
-           )
+  deriving (Eq , Ord)
 
 instance Show CutOff where
   show (CutOff k) = show k
diff --git a/src/full/Agda/Termination/Inlining.hs b/src/full/Agda/Termination/Inlining.hs
--- a/src/full/Agda/Termination/Inlining.hs
+++ b/src/full/Agda/Termination/Inlining.hs
@@ -45,7 +45,6 @@
   , isWithFunction
   , expandWithFunctionCall ) where
 
-import Control.Applicative
 import Control.Monad.State
 
 import qualified Data.List as List
@@ -213,14 +212,14 @@
         DDef d es        -> do
           ifM (return (null es) `and2M` do isJust <$> lift (isProjection d))
             {-then-} (return $ ProjP ProjPrefix d)
-            {-else-} (DotP (dtermToTerm v) <$ skip)
-        DDot v           -> DotP v <$ skip
+            {-else-} (dotP (dtermToTerm v) <$ skip)
+        DDot v           -> dotP v <$ skip
         DTerm (Var i []) ->
           ifM (bindVar i) (varP . nameToPatVarName <$> lift (nameOfBV i))
-                          (pure $ DotP (Var i []))
+                          (pure $ dotP (Var i []))
         DTerm (Con c ci vs) -> ConP c (toConPatternInfo ci) . map (fmap unnamed) <$>
-                              mapM (traverse (dtermToPat . DTerm)) vs
-        DTerm v          -> DotP v <$ skip
+                              mapM (traverse (dtermToPat . DTerm)) (fromMaybe __IMPOSSIBLE__ $ allApplyElims vs)
+        DTerm v          -> dotP v <$ skip
 
 isWithFunction :: MonadTCM tcm => QName -> tcm (Maybe QName)
 isWithFunction x = liftTCM $ do
diff --git a/src/full/Agda/Termination/Monad.hs b/src/full/Agda/Termination/Monad.hs
--- a/src/full/Agda/Termination/Monad.hs
+++ b/src/full/Agda/Termination/Monad.hs
@@ -18,7 +18,8 @@
 
 import Data.Foldable (Foldable)
 import Data.Traversable (Traversable)
-import Data.Semigroup (Semigroup(..), Monoid(..))
+import Data.Monoid ( Monoid(..) )
+import Data.Semigroup ( Semigroup(..) )
 
 import Agda.Interaction.Options
 
@@ -458,7 +459,7 @@
             reportSLn "term.guardedness" 40 $ prettyShow q ++ " is coinductive; record type is " ++ prettyShow r
             if not mustBeRecursive then return True else do
               reportSLn "term.guardedness" 40 $ prettyShow q ++ " must be recursive"
-              if not (recRecursive rdef) then return False else do
+              if not (safeRecRecursive rdef) then return False else do
                 reportSLn "term.guardedness" 40 $ prettyShow q ++ " has been declared recursive, doing actual check now..."
                 -- TODO: the following test for recursiveness of a projection should be cached.
                 -- E.g., it could be stored in the @Projection@ component.
@@ -487,7 +488,26 @@
       _ -> do
         reportSLn "term.guardedness" 40 $ prettyShow q ++ " is not a proper projection"
         return False
+  where
+  -- Andreas, 2018-02-24, issue #2975, example:
+  -- @
+  -- record R : Set where
+  --   coinductive
+  --   field force : R
 
+  --   r : R
+  --   force r = r
+  -- @
+  -- The termination checker expects the positivity checker to have run on the
+  -- record declaration R to know whether R is recursive.
+  -- However, here, because the awkward processing of record declarations (see #434),
+  -- that has not happened.  To avoid crashing (as in Agda 2.5.3),
+  -- we rather give the possibly wrong answer here,
+  -- restoring the behavior of Agda 2.5.2.  TODO: fix record declaration checking.
+  safeRecRecursive :: Defn -> Bool
+  safeRecRecursive (Record { recMutual = Just qs }) = not $ null qs
+  safeRecRecursive _ = False
+
 -- * De Bruijn pattern stuff
 
 -- | How long is the path to the deepest atomic pattern?
@@ -515,12 +535,11 @@
 
 instance UsableSizeVars DeBruijnPattern where
   usableSizeVars = foldrPattern $ \case
-    VarP x    -> const $ ifM terGetUseSizeLt (return $ VarSet.singleton $ dbPatVarIndex x) $
+    VarP _ x   -> const $ ifM terGetUseSizeLt (return $ VarSet.singleton $ dbPatVarIndex x) $
                    {-else-} return mempty
     ConP c _ _ -> conUseSizeLt $ conName c
     LitP{}     -> none
     DotP{}     -> none
-    AbsurdP{}  -> none
     ProjP{}    -> none
     where none _ = return mempty
 
@@ -533,12 +552,11 @@
 
 instance UsableSizeVars (Masked DeBruijnPattern) where
   usableSizeVars (Masked m p) = (`foldrPattern` p) $ \case
-    VarP x    -> const $ ifM terGetUseSizeLt (return $ VarSet.singleton $ dbPatVarIndex x) $
+    VarP _ x   -> const $ ifM terGetUseSizeLt (return $ VarSet.singleton $ dbPatVarIndex x) $
                    {-else-} return mempty
     ConP c _ _ -> if m then none else conUseSizeLt $ conName c
     LitP{}     -> none
     DotP{}     -> none
-    AbsurdP{}  -> none
     ProjP{}    -> none
     where none _ = return mempty
 
@@ -609,7 +627,7 @@
     forM (telToList tel) $ \ dom -> do
       a <- reduce $ snd $ unDom dom
       ifM (isJust <$> isSizeType a) (return 1) {- else -} $
-        case ignoreSharing $ unEl a of
+        case unEl a of
           MetaV{} -> return 1
           _       -> return 0
   terLocal (set terSizeDepth n) cont
diff --git a/src/full/Agda/Termination/RecCheck.hs b/src/full/Agda/Termination/RecCheck.hs
--- a/src/full/Agda/Termination/RecCheck.hs
+++ b/src/full/Agda/Termination/RecCheck.hs
@@ -18,8 +18,6 @@
     )
  where
 
-import Control.Applicative
-
 import Data.Graph
 
 import Data.List (nub)
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
@@ -17,7 +17,11 @@
     , Result
     ) where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
 import Control.Applicative hiding (empty)
 import Control.Monad.Reader
@@ -194,17 +198,17 @@
 
   -- NO_TERMINATION_CHECK
   if (Info.mutualTermCheck i `elem` [ NoTerminationCheck, Terminating ]) then do
-      reportSLn "term.warn.yes" 2 $ "Skipping termination check for " ++ prettyShow names
+      reportSLn "term.warn.yes" 10 $ "Skipping termination check for " ++ prettyShow names
       forM_ allNames $ \ q -> setTerminates q True -- considered terminating!
       return mempty
   -- NON_TERMINATING
     else if (Info.mutualTermCheck i == NonTerminating) then do
-      reportSLn "term.warn.yes" 2 $ "Considering as non-terminating: " ++ prettyShow names
+      reportSLn "term.warn.yes" 10 $ "Considering as non-terminating: " ++ prettyShow names
       forM_ allNames $ \ q -> setTerminates q False
       return mempty
   -- Trivially terminating (non-recursive)
     else ifM skip (do
-      reportSLn "term.warn.yes" 2 $ "Trivially terminating: " ++ prettyShow names
+      reportSLn "term.warn.yes" 10 $ "Trivially terminating: " ++ prettyShow names
       forM_ allNames $ \ q -> setTerminates q True
       return mempty)
    $ {- else -} do
@@ -408,7 +412,7 @@
 typeEndsInDef :: MonadTCM tcm => Type -> tcm (Maybe QName)
 typeEndsInDef t = liftTCM $ do
   TelV _ core <- telView t
-  case ignoreSharing $ unEl core of
+  case unEl core of
     Def d vs -> return $ Just d
     _        -> return Nothing
 
@@ -521,18 +525,18 @@
 --   termToPattern t = unnamed <$> termToPattern t
 
 instance TermToPattern Term DeBruijnPattern where
-  termToPattern t = (liftTCM $ ignoreSharing <$> constructorForm t) >>= \case
+  termToPattern t = (liftTCM $ constructorForm t) >>= \case
     -- Constructors.
-    Con c _ args -> ConP c noConPatternInfo . map (fmap unnamed) <$> termToPattern args
+    Con c _ args -> ConP c noConPatternInfo . map (fmap unnamed) <$> termToPattern (fromMaybe __IMPOSSIBLE__ $ allApplyElims args)
     Def s [Apply arg] -> do
       suc <- terGetSizeSuc
       if Just s == suc then ConP (ConHead s Inductive []) noConPatternInfo . map (fmap unnamed) <$> termToPattern [arg]
-       else return $ DotP t
+       else return $ dotP t
     DontCare t  -> termToPattern t -- OR: __IMPOSSIBLE__  -- removed by stripAllProjections
     -- Leaves.
-    Var i []    -> VarP . (`DBPatVar` i) . prettyShow <$> nameOfBV i
+    Var i []    -> varP . (`DBPatVar` i) . prettyShow <$> nameOfBV i
     Lit l       -> return $ LitP l
-    t           -> return $ DotP t
+    t           -> return $ dotP t
 
 
 -- | Masks all non-data/record type patterns if --without-K.
@@ -590,8 +594,8 @@
 
   where
     parseDotP = \case
-      DotP t -> termToDBP t
-      p      -> return p
+      DotP o t -> termToDBP t
+      p        -> return p
     stripCoCon p = case p of
       ConP (ConHead c _ _) _ _ -> do
         ifM ((Just c ==) <$> terGetSizeSuc) (return p) $ {- else -} do
@@ -655,7 +659,9 @@
       Inf        -> return empty
       SizeUniv   -> return empty
       Type t     -> terUnguarded $ extract t  -- no guarded levels
-      DLub s1 s2 -> extract (s1, s2)
+      PiSort s1 s2 -> extract (s1, s2)
+      UnivSort s -> extract s
+      MetaS x es -> return empty
 
 -- | Extract recursive calls from a type.
 
@@ -732,10 +738,9 @@
 
     -- We have to reduce constructors in case they're reexported.
     -- Andreas, Issue 1530: constructors have to be reduced deep inside terms,
-    -- thus, we need to use traverseTermM.  Sharing is handled by traverseTermM,
-    -- so no ignoreSharing needed here.
+    -- thus, we need to use traverseTermM.
     let (reduceCon :: Term -> TCM Term) = traverseTermM $ \ t -> case t of
-           Con c ci vs -> (`apply` vs) <$> reduce (Con c ci [])  -- make sure we don't reduce the arguments
+           Con c ci vs -> (`applyE` vs) <$> reduce (Con c ci [])  -- make sure we don't reduce the arguments
            _ -> return t
 
     -- Reduce constructors only when this call is actually a recursive one.
@@ -776,7 +781,15 @@
          -- We still need to reduce constructors, even when with-inlining happened.
          es <- -- ifM terGetHaveInlinedWith (return es0) {-else-} $
            liftTCM $ forM es0 $
-             etaContract <=< traverse reduceCon <=< instantiateFull
+             -- 2017-09-09, re issue #2732
+             -- The eta-contraction here does not seem necessary to make structural order
+             -- comparison not having to worry about eta.
+             -- Maybe we thought an eta redex could come from a meta instantiation.
+             -- However, eta-contraction is already performed by instantiateFull.
+             -- See test/Succeed/Issue2732-termination.agda.
+             -- etaContract <=<
+             traverse reduceCon <=< instantiateFull
+
            -- 2017-05-16, issue #2403: Argument normalization is too expensive,
            -- even if we only expand non-recursive functions.
            -- Argument normalization TURNED OFF.
@@ -850,11 +863,11 @@
 
     -- Instantiate top-level MetaVar.
     t <- liftTCM $ instantiate t
-    case ignoreSharing t of
+    case t of
 
       -- Constructed value.
-      Con ConHead{conName = c} _ args -> do
-
+      Con ConHead{conName = c} _ es -> do
+        let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
         -- A constructor preserves the guardedness of all its arguments.
         let argsg = zip args $ repeat True
 
@@ -907,8 +920,6 @@
         -- Andreas, 2014-03-26 Benchmark discontinued, < 0.3% spent on levels.
         extract l
 
-      Shared{} -> __IMPOSSIBLE__
-
 -- | Extract recursive calls from level expressions.
 
 deriving instance ExtractCalls Level
@@ -932,7 +943,7 @@
     (Nothing, _)  -> __IMPOSSIBLE__
     (Just size, Just sizelt) -> do
       TelV tel c <- telView a
-      case ignoreSharingType a of
+      case a of
         El s (Def d [v]) | d == sizelt -> return $ Dom info $
           abstract tel $ El s $ Def size []
         _ -> return dom
@@ -961,7 +972,7 @@
   -- Count the number of coinductive projection(pattern)s in caller and callee.
   -- Only recursive coinductive projections are eligible (Issue 1209).
   projsCaller <- length <$> do
-    filterM (isCoinductiveProjection True) $ mapMaybe (fmap (head . unAmbQ . snd) . isProjP . getMasked) pats
+    filterM (isCoinductiveProjection True) $ mapMaybe (fmap (headAmbQ . snd) . isProjP . getMasked) pats
   projsCallee <- length <$> do
     filterM (isCoinductiveProjection True) $ mapMaybe (fmap snd . isProjElim) es
   cutoff <- terGetCutOff
@@ -1085,10 +1096,9 @@
 subPatterns :: DeBruijnPattern -> [DeBruijnPattern]
 subPatterns = foldPattern $ \case
   ConP _ _ ps -> map namedArg ps
-  VarP _      -> mempty
+  VarP _ _    -> mempty
   LitP _      -> mempty
-  DotP _      -> mempty
-  AbsurdP _   -> mempty
+  DotP _ _    -> mempty
   ProjP _ _   -> mempty
 
 
@@ -1130,7 +1140,7 @@
 
 instance StripAllProjections Term where
   stripAllProjections t = do
-    case ignoreSharing t of
+    case t of
       Var i es   -> Var i <$> stripAllProjections es
       Con c ci ts -> Con c ci <$> stripAllProjections ts
       Def d es   -> Def d <$> stripAllProjections es
@@ -1138,15 +1148,13 @@
       _ -> return t
 
 -- | @compareTerm' t dbpat@
---
---   Precondition: top meta variable resolved
 
 compareTerm' :: Term -> Masked DeBruijnPattern -> TerM Order
 compareTerm' v mp@(Masked m p) = do
   suc  <- terGetSizeSuc
   cutoff <- terGetCutOff
   let ?cutoff = cutoff
-  v <- return $ ignoreSharing v
+  v <- liftTCM (instantiate v)
   case (v, p) of
 
     -- Andreas, 2013-11-20 do not drop projections,
@@ -1189,7 +1197,7 @@
 
     (Lit l, _) -> do
       v <- liftTCM $ constructorForm v
-      case ignoreSharing v of
+      case v of
         Lit{}       -> return Order.unknown
         v           -> compareTerm' v mp
 
@@ -1198,14 +1206,16 @@
     (Con{}, ConP c _ ps) | any (isSubTerm v . namedArg) ps ->
       decr True <$> offsetFromConstructor (conName c)
 
-    (Con c _ ts, ConP c' _ ps) | conName c == conName c'->
+    (Con c _ es, ConP c' _ ps) | conName c == conName c'->
+      let ts = fromMaybe __IMPOSSIBLE__ $ allApplyElims es in
       compareConArgs ts ps
 
     (Con _ _ [], _) -> return Order.le
 
     -- new case for counting constructors / projections
     -- register also increase
-    (Con c _ ts, _) -> do
+    (Con c _ es, _) -> do
+      let ts = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
       increase <$> offsetFromConstructor (conName c)
                <*> (infimum <$> mapM (\ t -> compareTerm' (unArg t) mp) ts)
 
@@ -1215,18 +1225,18 @@
 subTerm :: (?cutoff :: CutOff) => Term -> DeBruijnPattern -> Order
 subTerm t p = if equal t p then Order.le else properSubTerm t p
   where
-    equal (Shared p) dbp = equal (derefPtr p) dbp
-    equal (Con c _ ts) (ConP c' _ ps) =
+    equal (Con c _ es) (ConP c' _ ps) =
+      let ts = fromMaybe __IMPOSSIBLE__ $ allApplyElims es in
       and $ (conName c == conName c')
           : (length ts == length ps)
           : zipWith (\ t p -> equal (unArg t) (namedArg p)) ts ps
-    equal (Var i []) (VarP x) = i == dbPatVarIndex x
+    equal (Var i []) (VarP _ x) = i == dbPatVarIndex x
     equal (Lit l)    (LitP l') = l == l'
     -- Terms.
     -- Checking for identity here is very fragile.
     -- However, we cannot do much more, as we are not allowed to normalize t.
     -- (It might diverge, and we are just in the process of termination checking.)
-    equal t         (DotP t') = t == t'
+    equal t         (DotP _ t') = t == t'
     equal _ _ = False
 
     properSubTerm t (ConP _ _ ps) =
@@ -1275,8 +1285,7 @@
     ProjP{}   -> no
     LitP{}    -> no
     DotP{}   -> no
-    AbsurdP{} -> no
-    VarP x    -> compareVarVar i (Masked m x)
+    VarP _ x  -> compareVarVar i (Masked m x)
 
     ConP s _ [p] | Just (conName s) == suc ->
       setUsability True . decrease 1 <$> compareVar i (notMasked $ namedArg p)
@@ -1306,4 +1315,4 @@
       res <- isBounded i
       case res of
         BoundedNo  -> return Order.unknown
-        BoundedLt v -> setUsability u . decrease 1 <$> compareTerm' v (Masked m $ VarP x)
+        BoundedLt v -> setUsability u . decrease 1 <$> compareTerm' v (Masked m $ varP x)
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
@@ -4,7 +4,6 @@
 -- | Functions for abstracting terms over other terms.
 module Agda.TypeChecking.Abstract where
 
-import Control.Applicative
 import Control.Monad
 import Control.Monad.State
 import Data.Function
@@ -45,6 +44,10 @@
     sep [ text "piAbstract" <+> sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM a ]
         , nest 2 $ text "from" <+> prettyTCM b
         , nest 2 $ text "-->" <+> prettyTCM fun ]
+  reportSDoc "tc.abstract" 70 $
+    sep [ text "piAbstract" <+> sep [ (text . show) v <+> text ":", nest 2 $ (text . show) a ]
+        , nest 2 $ text "from" <+> (text . show) b
+        , nest 2 $ text "-->" <+> (text . show) fun ]
   return fun
 
 -- | @piAbstract (v, a) b[v] = (w : a) -> b[w]@
@@ -86,7 +89,7 @@
 
 instance IsPrefixOf Term where
   isPrefixOf u v =
-    case (ignoreSharing u, ignoreSharing v) of
+    case (u, v) of
       (Var   i us, Var   j vs) | i == j  -> us `isPrefixOf` vs
       (Def   f us, Def   g vs) | f == g  -> us `isPrefixOf` vs
       (Con c _ us, Con d _ vs) | c == d  -> us `isPrefixOf` vs
@@ -101,6 +104,11 @@
         , nest 2 $ sep [ prettyTCM u <+> text ":", nest 2 $ prettyTCM a ]
         , text "over"
         , nest 2 $ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM b ] ]
+  reportSDoc "tc.abstract" 70 $
+    sep [ text "Abstracting"
+        , nest 2 $ sep [ (text . show) u <+> text ":", nest 2 $ (text . show) a ]
+        , text "over"
+        , nest 2 $ sep [ (text . show) v <+> text ":", nest 2 $ (text . show) b ] ]
 
   hole <- qualify <$> currentModule <*> freshName_ "hole"
   noMutualBlock $ addConstant hole $ defaultDefn defaultArgInfo hole a Axiom
@@ -124,21 +132,18 @@
                       , nest 2 $ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM b ] ]
                 return v
 
-  v <- catchError_ (checkInternal' (defaultAction { preAction = abstr }) v b) $ \ err -> do
-        reportSDoc "impossible" 10 $
-          vcat [ text "Type error in term to abstract"
-               , nest 2 $ (prettyTCM =<< getContextTelescope) <+> text "⊢"
-               , nest 2 $ sep [ prettyTCM v <+> text ":", nest 2 $ prettyTCM b ]
-               , nest 2 $ prettyTCM err ]
-        reportSDoc "impossible" 60 $
-          vcat [ text "Type error in term to abstract (raw)"
-               , nest 2 $ ((text . show) =<< getContextTelescope) <+> text "⊢"
-               , nest 2 $ sep [ (text . show) v <+> text ":", nest 2 $ (text . show) b ]
-               ]
-        __IMPOSSIBLE__
-  reportSDoc "tc.abstract" 50 $ sep [ text "Resulting abstraction", nest 2 $ prettyTCM v ]
+  -- #2763: This can fail if the user is with-abstracting incorrectly (for
+  -- instance, abstracting over a first component of a sigma without also
+  -- abstracting the second component). In this case we skip abstraction
+  -- altogether and let the type check of the final with-function type produce
+  -- the error message.
+  res <- catchError_ (checkInternal' (defaultAction { preAction = abstr }) v b) $ \ err -> do
+        reportSDoc "tc.abstract.ill-typed" 40 $
+          text "Skipping typed abstraction over ill-typed term" <?> (prettyTCM v <?> (text ":" <+> prettyTCM b))
+        return v
+  reportSDoc "tc.abstract" 50 $ text "Resulting abstraction" <?> prettyTCM res
   modifySignature $ updateDefinitions $ HMap.delete hole
-  return $ absTerm (Def hole args) v
+  return $ absTerm (Def hole args) res
 
 abstractTerm _ u _ v = return $ absTerm u v -- Non-constructors can use untyped abstraction
 
@@ -162,13 +167,9 @@
       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 = absTerm u x
 
-instance AbsTerm a => AbsTerm (Ptr a) where
-  absTerm u = fmap (absTerm u)
-
 instance AbsTerm Type where
   absTerm u (El s v) = El (absTerm u s) (absTerm u v)
 
@@ -178,7 +179,9 @@
     Prop       -> Prop
     Inf        -> Inf
     SizeUniv   -> SizeUniv
-    DLub s1 s2 -> DLub (absS s1) (absS s2)
+    PiSort s1 s2 -> PiSort (absS s1) (absS s2)
+    UnivSort s -> UnivSort $ absS s
+    MetaS x es -> MetaS x $ absS es
     where absS x = absTerm u x
 
 instance AbsTerm Level where
diff --git a/src/full/Agda/TypeChecking/CheckInternal.hs b/src/full/Agda/TypeChecking/CheckInternal.hs
--- a/src/full/Agda/TypeChecking/CheckInternal.hs
+++ b/src/full/Agda/TypeChecking/CheckInternal.hs
@@ -18,7 +18,6 @@
   ) where
 
 import Control.Arrow ((&&&), (***), first, second)
-import Control.Applicative
 import Control.Monad
 
 import Agda.Syntax.Common
@@ -34,6 +33,7 @@
 import Agda.TypeChecking.Records (getDefType)
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Sort
 import Agda.TypeChecking.Telescope
 
 import Agda.Utils.Functor (($>))
@@ -70,16 +70,17 @@
     , prettyTCM t
     ]
   v <- elimView True $ unEl t -- bring projection-like funs in post-fix form
-  case ignoreSharing v of
+  case v of
     Pi a b -> do
       s1 <- checkType' $ unDom a
       s2 <- (b $>) <$> do
-        addContext (absName b, a) $ do
-          checkType' $ absBody b
-      return $ dLub s1 s2
+        let goInside = case b of Abs{}   -> addContext (absName b, a)
+                                 NoAbs{} -> id
+        goInside $ checkType' $ unAbs b
+      inferPiSort s1 s2
     Sort s -> do
       _ <- checkSort defaultAction s
-      return $ sSuc s
+      inferUnivSort s
     Var i es   -> do
       a <- typeOfBV i
       checkTypeSpine a (Var i   []) es
@@ -94,7 +95,6 @@
     v@Lit{}    -> typeError $ InvalidType v
     v@Level{}  -> typeError $ InvalidType v
     DontCare v -> checkType' $ t $> v
-    Shared{}   -> __IMPOSSIBLE__
 
 checkTypeSpine :: Type -> Term -> Elims -> TCM Sort
 checkTypeSpine a self es = shouldBeSort =<< do snd <$> inferSpine a self es
@@ -125,7 +125,7 @@
 eraseUnusedAction = defaultAction { postAction = eraseUnused }
   where
     eraseUnused :: Type -> Term -> TCM Term
-    eraseUnused t v = case ignoreSharing v of
+    eraseUnused t v = case v of
       Def f es -> do
         pols <- getPolarity f
         return $ Def f $ eraseIfNonvariant pols es
@@ -150,7 +150,7 @@
   -- Bring projection-like funs in post-fix form,
   -- even lone ones (True).
   v <- elimView True =<< preAction action t v
-  postAction action t =<< case ignoreSharing v of
+  postAction action t =<< case v of
     Var i es   -> do
       a <- typeOfBV i
       checkSpine action a (Var i []) es t
@@ -163,7 +163,7 @@
     Con c ci vs -> do
       -- We need to fully apply the constructor to make getConType work!
       fullyApplyCon c vs t $ \ _d _dt _pars a vs' tel t -> do
-        Con c ci vs2 <- checkArgs action a (Con c ci []) vs' t
+        Con c ci vs2 <- checkSpine action a (Con c ci []) vs' t
         -- Strip away the extra arguments
         return $ applySubst (strengthenS __IMPOSSIBLE__ (size tel))
           $ Con c ci $ take (length vs) vs2
@@ -188,22 +188,21 @@
       -- TODO: checkPTS sa sb s
       goInside $ Pi a . mkRng <$> checkInternal' action (unEl $ unAbs b) (sort sb)
     Sort s     -> do
-      s <- checkSort action s  -- this ensures @s /= Inf@
-      Sort s <$ ((sSuc s `leqSort`) =<< shouldBeSort t)
+      s <- checkSort action s
+      Sort s <$ ((sortFitsIn s) =<< shouldBeSort t) -- sortFitsIn ensures @s /= Inf@
     Level l    -> do
       l <- checkLevel action l
       Level l <$ ((`subtype` t) =<< levelType)
     DontCare v -> DontCare <$> checkInternal' action v t
-    Shared{}   -> __IMPOSSIBLE__
 
 -- | Make sure a constructor is fully applied
 --   and infer the type of the constructor.
 --   Raises a type error if the constructor does not belong to the given type.
 fullyApplyCon
   :: ConHead -- ^ Constructor.
-  -> Args    -- ^ Constructor arguments.
+  -> Elims    -- ^ Constructor arguments.
   -> Type    -- ^ Type of the constructor application.
-  -> (QName -> Type -> Args -> Type -> Args -> Telescope -> Type -> TCM a)
+  -> (QName -> Type -> Args -> Type -> Elims -> Telescope -> Type -> TCM a)
        -- ^ Name of the data/record type,
        --   type of the data/record type,
        --   reconstructed parameters,
@@ -222,7 +221,7 @@
       Nothing ->
         typeError $ DoesNotConstructAnElementOf (conName c) t
       Just ((d, dt, pars), a) ->
-        ret d dt pars a (raise (size tel) vs ++ teleArgs tel) tel t
+        ret d dt pars a (raise (size tel) vs ++ map Apply (teleArgs tel)) tel t
 
 checkSpine
   :: Action
@@ -268,22 +267,15 @@
 -- | @checkRelevance action term type@.
 --
 --   The @term@ 'Relevance' can be updated by the @action@.
---   Note that the relevances might not match precisedly,
---   because of the non-semantic 'Forced' relevance.
 checkRelevance :: Action -> Relevance -> Relevance -> TCM Relevance
-checkRelevance action r0 r0' = do
+checkRelevance action r r' = do
   unless (r == r') $ typeError $ RelevanceMismatch r r'
-  return $ relevanceAction action r0' r0  -- Argument order for actions: @type@ @term@
-  where
-    r  = canon r0
-    r' = canon r0'
-    canon Forced{}  = Relevant
-    canon r         = r
+  return $ relevanceAction action r' r  -- Argument order for actions: @type@ @term@
 
 -- | Infer type of a neutral term.
 infer :: Term -> TCM Type
 infer v = do
-  case ignoreSharing v of
+  case v of
     Var i es   -> do
       a <- typeOfBV i
       snd <$> inferSpine a (Var i   []) es
@@ -292,7 +284,6 @@
     MetaV x es -> do -- we assume meta instantiations to be well-typed
       a <- metaType x
       snd <$> inferSpine a (MetaV x []) es
-    Shared{} -> __IMPOSSIBLE__
     _ -> __IMPOSSIBLE__
 
 -- | Infer ordinary function application.
@@ -363,7 +354,7 @@
 ifIsSort :: Type -> (Sort -> TCM a) -> TCM a -> TCM a
 ifIsSort t yes no = do
   t <- reduce t
-  case ignoreSharing $ unEl t of
+  case unEl t of
     Sort s -> yes s
     _      -> no
 
@@ -374,13 +365,21 @@
     Type l   -> Type <$> checkLevel action l
     Prop     -> __IMPOSSIBLE__
       -- the dummy Prop should not be part of a term we check
-    Inf      -> typeError $ SetOmegaNotValidType
-      -- we cannot have Setω on the lhs of the colon
-    SizeUniv -> typeError $ InvalidTypeSort s
-    DLub a b -> do
+    Inf      -> return Inf
+    SizeUniv -> return SizeUniv
+    PiSort a b -> do
       a <- checkSort action a
       addContext (absName b, defaultDom (sort a) :: Dom Type) $ do
-        DLub a . Abs (absName b) <$> checkSort action (absBody b)
+        PiSort a . Abs (absName b) <$> checkSort action (absBody b)
+    UnivSort s -> UnivSort <$> checkSort action s
+    MetaS x es -> do -- we assume sort meta instantiations to be well-formed
+      a <- metaType x
+      let self = Sort $ MetaS x []
+      ((_,v),_) <- inferSpine' action a self self es
+      case v of
+        Sort s     -> return s
+        MetaV x es -> return $ MetaS x es
+        _          -> __IMPOSSIBLE__
 
 -- | Check if level is well-formed.
 checkLevel :: Action -> Level -> TCM Level
@@ -413,7 +412,7 @@
 -- | Compute the sort of a type.
 
 inferSort :: Term -> TCM Sort
-inferSort t = case ignoreSharing t of
+inferSort t = case t of
     Var i es   -> do
       a <- typeOfBV i
       (_, s) <- eliminate (Var i []) a es
@@ -426,14 +425,13 @@
       a <- metaType x
       (_, s) <- eliminate (MetaV x []) a es
       shouldBeSort s
-    Pi a b     -> return $ dLub (getSort a) (getSort <$> b)
-    Sort s     -> return $ sSuc s
+    Pi a b     -> inferPiSort (getSort a) (getSort <$> b)
+    Sort s     -> inferUnivSort s
     Con{}      -> __IMPOSSIBLE__
     Lit{}      -> __IMPOSSIBLE__
     Lam{}      -> __IMPOSSIBLE__
     Level{}    -> __IMPOSSIBLE__
     DontCare{} -> __IMPOSSIBLE__
-    Shared{}   -> __IMPOSSIBLE__
 
 -- | @eliminate t self es@ eliminates value @self@ of type @t@ by spine @es@
 --   and returns the remaining value and its type.
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
@@ -13,12 +13,12 @@
 
 import qualified Data.Map as Map
 import Data.Map (Map)
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, Any(..))
-import Data.Foldable (Foldable, foldMap)
-import Data.Traversable (Traversable, traverse)
+import Data.Semigroup hiding (Arg(..))
+import Data.Foldable hiding (null)
+import Data.Traversable
+import Data.Maybe
 
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
@@ -33,7 +33,7 @@
 import Agda.Utils.Impossible
 
 data WithArity c = WithArity { arity :: Int, content :: c }
-  deriving (Typeable, Data, Functor, Foldable, Traversable, Show)
+  deriving (Data, Functor, Foldable, Traversable, Show)
 
 -- | Branches in a case tree.
 
@@ -44,12 +44,18 @@
   , conBranches    :: Map QName (WithArity c)
     -- ^ Map from constructor (or projection) names to their arity
     --   and the case subtree.  (Projections have arity 0.)
+  , etaBranch      :: Maybe (ConHead, WithArity c)
+    -- ^ Eta-expand with the given (eta record) constructor. If this is
+    --   present, there should not be any conBranches or litBranches.
   , litBranches    :: Map Literal c
     -- ^ Map from literal to case subtree.
   , catchAllBranch :: Maybe c
     -- ^ (Possibly additional) catch-all clause.
+  , lazyMatch :: Bool
+    -- ^ Lazy pattern match. Requires single (non-copattern) branch with no lit
+    --   branches and no catch-all.
   }
-  deriving (Typeable, Data, Functor, Foldable, Traversable, Show)
+  deriving (Data, Functor, Foldable, Traversable, Show)
 
 -- | Case tree with bodies.
 
@@ -66,22 +72,36 @@
     --   still reduce.
   | Fail
     -- ^ Absurd case.
-  deriving (Typeable, Data, Functor, Traversable, Foldable, Show)
+  deriving (Data, Functor, Traversable, Foldable, Show)
 
 type CompiledClauses = CompiledClauses' Term
 
 litCase :: Literal -> c -> Case c
-litCase l x = Branches False Map.empty (Map.singleton l x) Nothing
+litCase l x = Branches False Map.empty Nothing (Map.singleton l x) Nothing False
 
 conCase :: QName -> WithArity c -> Case c
-conCase c x = Branches False (Map.singleton c x) Map.empty Nothing
+conCase c x = Branches False (Map.singleton c x) Nothing Map.empty Nothing False
 
+etaCase :: ConHead -> WithArity c -> Case c
+etaCase c x = Branches False Map.empty (Just (c, x)) Map.empty Nothing True
+
 projCase :: QName -> c -> Case c
-projCase c x = Branches True (Map.singleton c $ WithArity 0 x) Map.empty Nothing
+projCase c x = Branches True (Map.singleton c $ WithArity 0 x) Nothing Map.empty Nothing False
 
 catchAll :: c -> Case c
-catchAll x = Branches False Map.empty Map.empty (Just x)
+catchAll x = Branches False Map.empty Nothing Map.empty (Just x) False
 
+-- | Check that the requirements on lazy matching (single inductive case) are
+--   met, and set lazy to False otherwise.
+checkLazyMatch :: Case c -> Case c
+checkLazyMatch b = b { lazyMatch = lazyMatch b && requirements }
+  where
+    requirements = and
+      [ null (catchAllBranch b)
+      , Map.size (conBranches b) <= 1
+      , null (litBranches b)
+      , not $ projPatterns b ]
+
 -- | Check whether a case tree has a catch-all clause.
 hasCatchAll :: CompiledClauses -> Bool
 hasCatchAll = getAny . loop
@@ -91,6 +111,15 @@
     Done{}    -> mempty
     Case _ br -> maybe (foldMap loop br) (const $ Any True) $ catchAllBranch br
 
+-- | Check whether a case tree has any projection patterns
+hasProjectionPatterns :: CompiledClauses -> Bool
+hasProjectionPatterns = getAny . loop
+  where
+  loop cc = case cc of
+    Fail{}    -> mempty
+    Done{}    -> mempty
+    Case _ br -> Any (projPatterns br) <> foldMap loop br
+
 instance Semigroup c => Semigroup (WithArity c) where
   WithArity n1 c1 <> WithArity n2 c2
     | n1 == n2  = WithArity n1 (c1 <> c2)
@@ -101,19 +130,24 @@
   mappend = (<>)
 
 instance Semigroup m => Semigroup (Case m) where
-  Branches cop  cs  ls  m <> Branches cop' cs' ls' m' =
+  Branches cop cs eta ls m lazy <> Branches cop' cs' eta' ls' m' lazy' = checkLazyMatch $
     Branches (cop || cop') -- for @projCase <> mempty@
              (Map.unionWith (<>) cs cs')
+             (unionEta eta eta')
              (Map.unionWith (<>) ls ls')
              (m <> m')
+             (lazy && lazy')
+    where unionEta Nothing b = b
+          unionEta b Nothing = b
+          unionEta Just{} Just{} = __IMPOSSIBLE__
 
 instance (Semigroup m, Monoid m) => Monoid (Case m) where
   mempty  = empty
   mappend = (<>)
 
 instance Null (Case m) where
-  empty = Branches False Map.empty Map.empty Nothing
-  null (Branches _cop cs ls mcatch) = null cs && null ls && null mcatch
+  empty = Branches False Map.empty Nothing Map.empty Nothing True
+  null (Branches _cop cs eta ls mcatch _lazy) = null cs && null eta && null ls && null mcatch
 
 -- * Pretty instances.
 
@@ -121,12 +155,15 @@
   pretty = pretty . content
 
 instance Pretty a => Pretty (Case a) where
-  prettyPrec p (Branches _cop cs ls m) =
-    mparens (p > 0) $ vcat $
-      prettyMap cs ++ prettyMap ls ++ prC m
+  prettyPrec p (Branches _cop cs eta ls m lazy) =
+    mparens (p > 0) $ prLazy lazy <+> vcat (prettyMap cs ++ prEta eta ++ prettyMap ls ++ prC m)
     where
+      prLazy True  = text "~"
+      prLazy False = empty
       prC Nothing = []
       prC (Just x) = [text "_ ->" <+> pretty x]
+      prEta Nothing = []
+      prEta (Just (c, cc)) = [(text "eta" <+> pretty c <+> text "->") <?> pretty cc]
 
 prettyMap :: (Pretty k, Pretty v) => Map k v -> [Doc]
 prettyMap m = [ sep [ pretty k <+> text "->"
@@ -134,16 +171,14 @@
               | (k, v) <- Map.toList m ]
 
 instance Pretty CompiledClauses where
-  pretty (Done hs t) = text ("done" ++ show hs) <+> pretty t
+  pretty (Done hs t) = text ("done" ++ show hs) <?> pretty t
   pretty Fail        = text "fail"
   pretty (Case n bs) | projPatterns bs =
     sep [ text "record"
         , nest 2 $ pretty bs
         ]
   pretty (Case n bs) =
-    sep [ text ("case " ++ prettyShow n ++ " of")
-        , nest 2 $ pretty bs
-        ]
+    text ("case " ++ prettyShow n ++ " of") <?> pretty bs
 
 -- * KillRange instances.
 
@@ -151,10 +186,12 @@
   killRange = fmap killRange
 
 instance KillRange c => KillRange (Case c) where
-  killRange (Branches cop con lit all) = Branches cop
+  killRange (Branches cop con eta lit all lazy) = Branches cop
     (killRangeMap con)
+    (killRange eta)
     (killRangeMap lit)
     (killRange all)
+    lazy
 
 instance KillRange CompiledClauses where
   killRange (Case i br) = killRange2 Case i br
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
@@ -4,13 +4,17 @@
 
 import Prelude hiding (null)
 
+import Control.Applicative
+import Control.Arrow (first, second)
 import Control.Monad
 
 import Data.Maybe
 import Data.Monoid
 import qualified Data.Map as Map
-import Data.List (nubBy)
+import Data.List (nubBy, findIndex)
 import Data.Function
+import qualified Data.IntSet as IntSet
+import Data.Traversable (traverse)
 
 import Debug.Trace
 
@@ -20,21 +24,43 @@
 import Agda.TypeChecking.CompiledClause
 import Agda.TypeChecking.Coverage
 import Agda.TypeChecking.Coverage.SplitTree
+import Agda.TypeChecking.Forcing
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.RecordPatterns
 import Agda.TypeChecking.Substitute
-import Agda.TypeChecking.Pretty (prettyTCM, nest, sep, text)
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Free
+import Agda.TypeChecking.Free.Precompute
+import Agda.TypeChecking.Reduce
 
 import Agda.Utils.Functor
 import Agda.Utils.Maybe
 import Agda.Utils.Null
 import Agda.Utils.List
-import Agda.Utils.Pretty (Pretty(..), prettyShow)
 import qualified Agda.Utils.Pretty as P
 
 #include "undefined.h"
 import Agda.Utils.Impossible
 
+data RunRecordPatternTranslation = RunRecordPatternTranslation | DontRunRecordPatternTranslation
+  deriving (Eq)
+
+compileClauses' :: RunRecordPatternTranslation -> [Clause] -> TCM CompiledClauses
+compileClauses' recpat cs = do
+  -- Apply forcing translation. This only shuffles the deBruijn variables
+  -- so doesn't affect the right hand side.
+  cs <- sequence [ forcingTranslation ps <&> \ qs -> c{ namedClausePats = qs }
+                 | c@Clause{ namedClausePats = ps } <- cs ]
+
+  -- Throw away the unreachable clauses (#2723).
+  let notUnreachable = (Just True /=) . clauseUnreachable
+  cs <- map unBruijn <$> normaliseProjP (filter notUnreachable cs)
+
+  let translate | recpat == RunRecordPatternTranslation = translateCompiledClauses
+                | otherwise                             = return
+
+  translate $ compile cs
+
 -- | Process function clauses into case tree.
 --   This involves:
 --   1. Coverage checking, generating a split tree.
@@ -48,34 +74,30 @@
 compileClauses mt cs = do
   -- Construct clauses with pattern variables bound in left-to-right order.
   -- Discard de Bruijn indices in patterns.
-  let unBruijn cs = [ Cl (map (fmap (fmap dbPatVarName . namedThing)) $ namedClausePats c)
-                         (compiledClauseBody c) | c <- cs ]
-  shared <- sharedFun
   case mt of
-    Nothing -> compile shared . unBruijn <$> normaliseProjP cs
+    Nothing -> compile . map unBruijn <$> normaliseProjP cs
     Just (q, t)  -> do
       splitTree <- coverageCheck q t cs
 
       -- The coverage checker might have added some clauses (#2288)!
       -- Throw away the unreachable clauses (#2723).
       let notUnreachable = (Just True /=) . clauseUnreachable
-      cs <- normaliseProjP =<< filter notUnreachable . defClauses <$> getConstInfo q
-      let cls = unBruijn cs
+      cs <- normaliseProjP =<< instantiateFull =<< filter notUnreachable . defClauses <$> getConstInfo q
 
+      let cls = map unBruijn cs
+
       reportSDoc "tc.cc" 30 $ sep $ do
         (text "clauses patterns  before compilation") : do
           map (prettyTCM . map unArg . clPats) cls
-      reportSDoc "tc.cc" 50 $ do
-        sep [ text "clauses before compilation"
-            , (nest 2 . text . show) cs
-            ]
-      let cc = compileWithSplitTree shared splitTree cls
+      reportSDoc "tc.cc" 50 $
+        text "clauses before compilation" <?> pretty cs
+      let cc = compileWithSplitTree splitTree cls
       reportSDoc "tc.cc" 12 $ sep
         [ text "compiled clauses (still containing record splits)"
         , nest 2 $ return $ P.pretty cc
         ]
       cc <- translateCompiledClauses cc
-      return cc
+      return (fmap precomputeFreeVars_ cc)
 
 -- | Stripped-down version of 'Agda.Syntax.Internal.Clause'
 --   used in clause compiler.
@@ -85,70 +107,94 @@
   , clBody :: Maybe Term
   } deriving (Show)
 
-instance Pretty Cl where
-  pretty (Cl ps b) = P.prettyList ps P.<+> P.text "->" P.<+> maybe (P.text "_|_") pretty b
+instance P.Pretty Cl where
+  pretty (Cl ps b) = P.prettyList ps P.<+> P.text "->" P.<+> maybe (P.text "_|_") P.pretty b
 
 type Cls = [Cl]
 
-compileWithSplitTree :: (Term -> Term) -> SplitTree -> Cls -> CompiledClauses
-compileWithSplitTree shared t cs = case t of
+-- | Strip down a clause. Don't forget to apply the substitution to the dot
+--   patterns!
+unBruijn :: Clause -> Cl
+unBruijn c = Cl (applySubst sub $ (map . fmap) (fmap dbPatVarName . namedThing) $ namedClausePats c)
+                (applySubst sub $ clauseBody c)
+  where
+    sub = renamingR $ fromMaybe __IMPOSSIBLE__ (clausePerm c)
+
+compileWithSplitTree :: SplitTree -> Cls -> CompiledClauses
+compileWithSplitTree t cs = case t of
   SplitAt i ts -> Case i $ compiles ts $ splitOn (length ts == 1) (unArg i) cs
         -- if there is just one case, we force expansion of catch-alls
         -- this is needed to generate a sound tree on which we can
         -- collapse record pattern splits
-  SplittingDone n -> compile shared 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{ projPatterns = cop
                            , conBranches = cons
+                           , etaBranch   = Nothing
                            , litBranches = lits
                            , catchAllBranch = catchAll }
-      = Branches
-          { projPatterns   = cop
-          , conBranches    = updCons cons
-          , litBranches    = compile shared <$> lits
-          , catchAllBranch = compile shared <$> catchAll
+      = br{ conBranches    = updCons cons
+          , etaBranch      = Nothing
+          , litBranches    = updLits lits
+          , catchAllBranch = updCatchall catchAll
           }
       where
         updCons = Map.mapWithKey $ \ c cl ->
-         caseMaybe (lookup c ts) (compile shared) (compileWithSplitTree shared) <$> cl
+         caseMaybe (lookup (SplitCon c) ts) compile compileWithSplitTree <$> cl
          -- When the split tree is finished, we continue with @compile@.
+        updLits = Map.mapWithKey $ \ l cl ->
+          caseMaybe (lookup (SplitLit l) ts) compile compileWithSplitTree cl
+        updCatchall = fmap $ caseMaybe (lookup SplitCatchall ts) compile compileWithSplitTree
+    compiles _ Branches{etaBranch = Just{}} = __IMPOSSIBLE__  -- we haven't inserted eta matches yet
 
-compile :: (Term -> Term) -> Cls -> CompiledClauses
-compile shared cs = case nextSplit cs of
-  Just (isRecP, n)-> Case n $ fmap (compile shared) $ splitOn isRecP (unArg n) cs
+compile :: Cls -> CompiledClauses
+compile [] = Fail
+compile cs = case nextSplit cs of
+  Just (isRecP, n) -> Case n $ fmap compile $ splitOn isRecP (unArg n) cs
   Nothing -> case clBody c of
     -- It's possible to get more than one clause here due to
     -- catch-all expansion.
-    Just t  -> Done (map (fmap name) $ clPats c) (shared t)
+    Just t  -> Done (map (fmap name) $ clPats c) t
     Nothing -> Fail
   where
     -- If there are more than one clauses, take the first one.
     c = headWithDefault __IMPOSSIBLE__ cs
-    name (VarP x) = x
-    name (DotP _) = underscore
-    name AbsurdP{} = absurdPatternName
+    name (VarP _ x) = x
+    name (DotP _ _) = underscore
     name ConP{}  = __IMPOSSIBLE__
     name LitP{}  = __IMPOSSIBLE__
     name ProjP{} = __IMPOSSIBLE__
 
 -- | 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.
+--   This the number of the first pattern that does a (non-lazy) match in the first clause.
+--   Or the first lazy match where all clauses agree on the constructor, if there are no
+--   non-lazy matches.
 nextSplit :: Cls -> Maybe (Bool, Arg Int)
-nextSplit []            = __IMPOSSIBLE__
-nextSplit (Cl ps _ : _) = headMaybe $ catMaybes $
-  zipWith (\ (Arg ai p) n -> (, Arg ai n) <$> properSplit p) ps [0..]
+nextSplit []             = __IMPOSSIBLE__
+nextSplit (Cl ps _ : cs) = findSplit nonLazy ps <|> findSplit allAgree ps
+  where
+    nonLazy _ (ConP _ cpi _) = not $ conPLazy cpi
+    nonLazy _ _              = True
 
+    findSplit okPat ps = headMaybe (catMaybes $
+      zipWith (\ (Arg ai p) n -> (, Arg ai n) <$> properSplit p <* guard (okPat n p)) ps [0..])
+
+    allAgree i (ConP c _ _) = all ((== Just (conName c)) . getCon . map unArg . drop i . clPats) cs
+    allAgree _ _            = False
+
+    getCon (ConP c _ _ : _) = Just $ conName c
+    getCon _                = Nothing
+
 -- | Is is not a variable pattern?
 --   And if yes, is it a record pattern?
 properSplit :: Pattern' a -> Maybe Bool
-properSplit (ConP _ cpi _) = Just $ isJust $ conPRecord cpi
+properSplit (ConP _ cpi _) = Just (Just PatORec == conPRecord cpi)
 properSplit LitP{}  = Just False
 properSplit ProjP{} = Just False
 properSplit VarP{}  = Nothing
-properSplit AbsurdP{} = Nothing -- for purposes of compilation
 properSplit DotP{}  = Nothing
 
 -- | Is this a variable pattern?
@@ -157,7 +203,6 @@
 isVar :: Pattern' a -> Bool
 isVar VarP{}  = True
 isVar DotP{}  = True
-isVar AbsurdP{} = True
 isVar ConP{}  = False
 isVar LitP{}  = False
 isVar ProjP{} = False
@@ -172,12 +217,11 @@
 splitC :: Int -> Cl -> Case Cl
 splitC n (Cl ps b) = caseMaybe mp fallback $ \case
   ProjP _ d   -> projCase d $ Cl (ps0 ++ ps1) b
-  ConP c _ qs -> conCase (conName c) $ WithArity (length qs) $
-                   Cl (ps0 ++ map (fmap namedThing) qs ++ ps1) b
+  ConP c i qs -> (conCase (conName c) $ WithArity (length qs) $
+                   Cl (ps0 ++ map (fmap namedThing) qs ++ ps1) b) { lazyMatch = conPLazy i }
   LitP l      -> litCase l $ Cl (ps0 ++ ps1) b
   VarP{}      -> fallback
   DotP{}      -> fallback
-  AbsurdP{}   -> fallback
   where
     (ps0, rest) = splitAt n ps
     mp          = unArg <$> headMaybe rest
@@ -284,12 +328,12 @@
     expand cl (qs, q) =
       case unArg q of
         ConP c mt qs' -> Cl (ps0 ++ [q $> ConP c mt conPArgs] ++ ps1)
-                            (substBody n' m (Con c ci conArgs) b)
+                            (substBody n' m (Con c ci (map Apply conArgs)) b)
           where
             ci       = fromConPatternInfo mt
             m        = length qs'
             -- replace all direct subpatterns of q by _
-            conPArgs = map (fmap ($> VarP "_")) qs'
+            conPArgs = map (fmap ($> varP "_")) qs'
             conArgs  = zipWith (\ q' i -> q' $> var i) qs' $ downFrom m
         LitP l -> Cl (ps0 ++ [q $> LitP l] ++ ps1) (substBody n' 0 (Lit l) b)
         _ -> __IMPOSSIBLE__
@@ -301,13 +345,7 @@
         -- The following pattern match cannot fail (by construction of @ps@).
         (ps0, _:ps1) = splitAt n ps
 
-        n' = countVars ps1
-        countVars = sum . map (count . unArg)
-        count VarP{}        = 1
-        count (ConP _ _ ps) = countVars $ map (fmap namedThing) ps
-        count DotP{}        = 1   -- dot patterns are treated as variables in the clauses
-        count (AbsurdP p)   = count p
-        count _             = 0
+        n' = countPatternVars ps1
 
 -- | Make sure (by eta-expansion) that clause has arity at least @n@
 --   where @n@ is also the length of the provided list.
@@ -320,8 +358,10 @@
   ais  = drop k ais0
   -- m = Number of arguments to add
   m    = n - k
-  ps'  = for ais $ \ ai -> Arg ai $ VarP "_"
+  ps'  = for ais $ \ ai -> Arg ai $ varP "_"
   args = zipWith (\ i ai -> Arg ai $ var i) (downFrom m) ais
 
 substBody :: (Subst t a) => Int -> Int -> t -> a -> a
 substBody n m v = applySubst $ liftS n $ v :# raiseS m
+
+instance PrecomputeFreeVars a => PrecomputeFreeVars (CompiledClauses' a) where
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
@@ -2,7 +2,6 @@
 
 module Agda.TypeChecking.CompiledClause.Match where
 
-import Control.Applicative
 import Control.Monad.Reader (asks)
 
 import qualified Data.List as List
@@ -69,8 +68,6 @@
 
   do
 
-    shared <- sharedFun
-
     case c of
 
       -- impossible case
@@ -89,11 +86,24 @@
           -- at least the first @n@ elims must be @Apply@s, so we can
           -- turn them into a subsitution
           toSubst        = parallelS . reverse . map (unArg . argFromElim . ignoreReduced)
-          -- Andreas, 2013-05-21 why introduce sharing only here,
-          -- and not in underapplied case also?
-          (es0, es1)     = splitAt n $ map (fmap $ fmap shared) es
+          (es0, es1)     = splitAt n es
           lam x t        = Lam (argInfo x) (Abs (unArg x) t)
 
+      -- splitting on an eta-record constructor
+      Case (Arg _ n) Branches{etaBranch = Just (c, cc), catchAllBranch = ca} ->
+        case splitAt n es of
+          (_, []) -> no (NotBlocked Underapplied) es
+          (es0, MaybeRed _ e@(Apply (Arg _ v0)) : es1) ->
+              let projs = [ MaybeRed NotReduced $ Apply $ defaultArg $ v0 `applyE` [Proj ProjSystem f] | f <- fs ]
+                  catchAllFrame stack = maybe stack (\c -> (c, es, patch) : stack) ca in
+              match' $ (content cc, es0 ++ projs ++ es1, patchEta) : catchAllFrame stack
+            where
+              fs = conFields c
+              patchEta es = patch (es0 ++ [e] ++ es1)
+                where (es0, es') = splitAt n es
+                      (_, es1)   = splitAt (length fs) es'
+          _ -> __IMPOSSIBLE__
+
       -- splitting on the @n@th elimination
       Case (Arg _ n) bs -> do
         case splitAt n es of
@@ -122,7 +132,7 @@
                   case Map.lookup (conName c) (conBranches bs) of
                     Nothing -> stack
                     Just cc -> ( content cc
-                               , es0 ++ map (MaybeRed NotReduced . Apply) vs ++ es1
+                               , es0 ++ map (MaybeRed NotReduced) vs ++ es1
                                , patchCon c ci (length vs)
                                ) : stack
                 -- If our argument is @Proj p@, we push @projFrame p@ onto the stack.
@@ -139,18 +149,18 @@
                 patchCon c ci m es = patch (es0 ++ [Con c ci vs <$ e] ++ es2)
                   where (es0, rest) = splitAt n es
                         (es1, es2)  = splitAt m rest
-                        vs          = map argFromElim es1
+                        vs          = es1
 
             -- Now do the matching on the @n@ths argument:
             id $
-             case fmap ignoreSharing <$> eb of
+             case eb of
               Blocked x _            -> no (Blocked x) es'
               NotBlocked _ (Apply (Arg info (MetaV x _))) -> no (Blocked x) es'
 
               -- In case of a literal, try also its constructor form
               NotBlocked _ (Apply (Arg info v@(Lit l))) -> performedSimplification $ do
                 cv <- constructorForm v
-                let cFrame stack = case ignoreSharing cv of
+                let cFrame stack = case cv of
                       Con c ci vs -> conFrame c ci vs stack
                       _        -> stack
                 match' $ litFrame l $ cFrame $ catchAllFrame stack
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
@@ -5,43 +5,37 @@
 
 import Prelude hiding (null)
 
-import Control.Applicative hiding (empty)
-
 import Control.Monad
 import Control.Monad.Reader
-import Control.Monad.State
-import Control.Monad.Trans.Maybe
 
 import qualified Data.List as List
 import qualified Data.Set as Set
 
 import Agda.Syntax.Internal
 
-import Agda.TypeChecking.Free
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.InstanceArguments
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.LevelConstraints
 import Agda.TypeChecking.SizedTypes
+import Agda.TypeChecking.Sort
 import Agda.TypeChecking.MetaVars.Mention
 import Agda.TypeChecking.Warnings
 
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Application
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Def
 import {-# SOURCE #-} Agda.TypeChecking.Rules.Term
 import {-# SOURCE #-} Agda.TypeChecking.Conversion
 import {-# SOURCE #-} Agda.TypeChecking.MetaVars
 import {-# SOURCE #-} Agda.TypeChecking.Empty
 
 import Agda.Utils.Except ( MonadError(throwError) )
-import Agda.Utils.Functor
 import Agda.Utils.Maybe
 import Agda.Utils.Monad
 import Agda.Utils.Null
 import Agda.Utils.Pretty (prettyShow)
 import Agda.Utils.Lens
-import Agda.Utils.Size
-import qualified Agda.Utils.VarSet as VarSet
 
 #include "undefined.h"
 import Agda.Utils.Impossible
@@ -68,12 +62,12 @@
       , prettyTCM c ]
     -- Need to reduce to reveal possibly blocking metas
     c <- reduce =<< instantiateFull c
-    c' <- simpl c
-    if (c /= c')
+    cs <- simpl c
+    if ([c] /= cs)
       then do
-        reportSDoc "tc.constr.add" 20 $ text "  simplified:" <+> prettyTCM c'
-        solveConstraint_ c'
-      else addConstraint' c'
+        reportSDoc "tc.constr.add" 20 $ text "  simplified:" <+> prettyList (map prettyTCM cs)
+        mapM_ solveConstraint_ cs
+      else mapM_ addConstraint' cs
     -- the added constraint can cause IFS constraints to be solved (but only
     -- the constraints which aren’t blocked on an uninstantiated meta)
     unless (isIFSConstraint c) $
@@ -91,26 +85,23 @@
     isLvl _          = False
 
     -- Try to simplify a level constraint
-    simpl :: Constraint -> TCM Constraint
-    simpl c = if not $ isLvl c then return c else do
+    simpl :: Constraint -> TCM [Constraint]
+    simpl c = if not $ isLvl c then return [c] else do
       cs <- map theConstraint <$> getAllConstraints
       lvls <- instantiateFull $ List.filter (isLvl . clValue) cs
       when (not $ null lvls) $ do
         reportSDoc "tc.constr.lvl" 40 $ text "simplifying level constraint" <+> prettyTCM c
                                         $$ nest 2 (hang (text "using") 2 (prettyTCM lvls))
-      let c' = simplifyLevelConstraint c $ map clValue lvls
-      reportSDoc "tc.constr.lvl" 40 $
-        if c' /= c then text "simplified to" <+> prettyTCM c'
-                   else text "no simplification"
-      return c'
+      return $ simplifyLevelConstraint c $ map clValue lvls
 
 -- | Don't allow the argument to produce any constraints.
 noConstraints :: TCM a -> TCM a
 noConstraints problem = liftTCM $ do
   (pid, x) <- newProblem problem
   cs <- getConstraintsForProblem pid
-  w <- warning_ (UnsolvedConstraints cs)
-  unless (null cs) $ typeError $ NonFatalErrors [ w ]
+  unless (null cs) $ do
+    w <- warning_ (UnsolvedConstraints cs)
+    typeError $ NonFatalErrors [ w ]
   return x
 
 -- | Create a fresh problem for the given action.
@@ -190,7 +181,7 @@
 
 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_ (ElimCmp cmp fs a e u v)   = compareElims cmp fs a e u v
 solveConstraint_ (TypeCmp cmp a b)          = compareType cmp a b
 solveConstraint_ (TelCmp a b cmp tela telb) = compareTel a b cmp tela telb
 solveConstraint_ (SortCmp cmp s1 s2)        = compareSort cmp s1 s2
@@ -228,16 +219,21 @@
       -- I think this is because the size solver instantiates
       -- some metas with infinity but does not clean up the UnBlock constraints.
       -- See also issue #2637.
-      InstV{} -> return ()
+      -- Ulf, 2018-04-30: The size solver shouldn't touch blocked terms! They have
+      -- a twin meta that it's safe to solve.
+      InstV{} -> __IMPOSSIBLE__
       -- Open (whatever that means)
       Open -> __IMPOSSIBLE__
       OpenIFS -> __IMPOSSIBLE__
 solveConstraint_ (FindInScope m b cands)      = findInScope m cands
+solveConstraint_ (CheckFunDef d i q cs)       = checkFunDef d i q cs
+solveConstraint_ (HasBiggerSort a)            = hasBiggerSort a
+solveConstraint_ (HasPTSRule a b)             = hasPTSRule a b
 
 checkTypeCheckingProblem :: TypeCheckingProblem -> TCM Term
 checkTypeCheckingProblem p = case p of
   CheckExpr e t                  -> checkExpr e t
-  CheckArgs eh r args t0 t1 k    -> checkArguments' eh r args t0 t1 k
+  CheckArgs eh r args t0 t1 k    -> checkArguments eh r args t0 t1 k
   CheckLambda args body target   -> checkPostponedLambda args body target
   UnquoteTactic tac hole t       -> unquoteTactic tac hole t $ return hole
 
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
@@ -3,7 +3,6 @@
 
 module Agda.TypeChecking.Conversion where
 
-import Control.Applicative
 import Control.Monad
 import Control.Monad.Reader
 import Control.Monad.State
@@ -28,6 +27,7 @@
 import Agda.TypeChecking.Constraints
 import {-# SOURCE #-} Agda.TypeChecking.CheckInternal (infer)
 import Agda.TypeChecking.Errors
+import Agda.TypeChecking.Forcing (isForced, nextIsForced)
 import Agda.TypeChecking.Free
 import Agda.TypeChecking.Datatypes (getConType, getFullyAppliedConType)
 import Agda.TypeChecking.Records
@@ -116,19 +116,13 @@
     , nest 2 $ prettyTCM u <+> prettyTCM cmp <+> prettyTCM v
     , nest 2 $ text ":" <+> prettyTCM a
     ]
-  -- Check pointer equality first.
-  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
-    -- Check syntactic equality. This actually saves us quite a bit of work.
-    ((u, v), equal) <- runReduceM $ SynEq.checkSyntacticEquality u v
+  -- Check syntactic equality. This actually saves us quite a bit of work.
+  ((u, v), equal) <- runReduceM $ SynEq.checkSyntacticEquality u v
   -- OLD CODE, traverses the *full* terms u v at each step, even if they
   -- are different somewhere.  Leads to infeasibility in issue 854.
   -- (u, v) <- instantiateFull (u, v)
   -- let equal = u == v
-    unifyPointers cmp u v $ if equal then verboseS "profile.sharing" 20 $ tick "equal terms" else do
+  unifyPointers cmp u v $ if equal then verboseS "profile.sharing" 20 $ tick "equal terms" else do
       verboseS "profile.sharing" 20 $ tick "unequal terms"
       reportSDoc "tc.conv.term" 15 $ sep
         [ text "compareTerm (not syntactically equal)"
@@ -144,13 +138,13 @@
           unlessSubtyping cont =
               if cmp == CmpEq then cont else do
                 -- Andreas, 2014-04-12 do not short cut if type is blocked.
-                ifBlockedType a (\ _ _ -> fallback) {-else-} $ \ a -> do
+                ifBlockedType a (\ _ _ -> fallback) {-else-} $ \ _ a -> do
                   -- do not short circuit size comparison!
                   caseMaybeM (isSizeType a) cont (\ _ -> fallback)
 
           dir = fromCmp cmp
           rid = flipCmp dir     -- The reverse direction.  Bad name, I know.
-      case (ignoreSharing u, ignoreSharing v) of
+      case (u, v) of
         (MetaV x us, MetaV y vs)
           | x /= y    -> unlessSubtyping $ solve1 `orelse` solve2 `orelse` compareTerm' cmp a u v
           | otherwise -> fallback
@@ -237,17 +231,16 @@
     reportSDoc "tc.conv.level" 60 $ nest 2 $ sep
       [ text "a'   =" <+> pretty a'
       , text "mlvl =" <+> pretty mlvl
-      , text $ "(Just (ignoreSharing $ unEl a') == mlvl) = " ++ show (Just (ignoreSharing $ unEl a') == mlvl)
+      , text $ "(Just (unEl a') == mlvl) = " ++ show (Just (unEl a') == mlvl)
       ]
     case s of
       Prop | proofIrr -> return ()
       _    | isSize   -> compareSizes cmp m n
-      _               -> case ignoreSharing $ unEl a' of
+      _               -> case unEl a' of
         a | Just a == mlvl -> do
           a <- levelView m
           b <- levelView n
           equalLevel a b
--- OLD:        Pi dom _  -> equalFun (dom, a') m n
         a@Pi{}    -> equalFun a m n
         Lam _ _   -> __IMPOSSIBLE__
         Def r es  -> do
@@ -259,17 +252,15 @@
               -- Andreas, 2010-10-11: allowing neutrals to be blocked things does not seem
               -- to change Agda's behavior
               --    isNeutral Blocked{}          = False
-                  isNeutral = isNeutral' . fmap ignoreSharing
-                  isMeta    = isMeta'    . fmap ignoreSharing
-                  isNeutral' (NotBlocked _ Con{}) = return False
+                  isNeutral (NotBlocked _ Con{}) = return False
               -- Andreas, 2013-09-18 / 2015-06-29: a Def by copatterns is
               -- not neutral if it is blocked (there can be missing projections
               -- to trigger a reduction.
-                  isNeutral' (NotBlocked r (Def q _)) = do    -- Andreas, 2014-12-06 optimize this using r !!
+                  isNeutral (NotBlocked r (Def q _)) = do    -- Andreas, 2014-12-06 optimize this using r !!
                     not <$> usesCopatterns q -- a def by copattern can reduce if projected
-                  isNeutral' _                   = return True
-                  isMeta' (NotBlocked _ MetaV{}) = True
-                  isMeta' _                      = False
+                  isNeutral _                   = return True
+                  isMeta (NotBlocked _ MetaV{}) = True
+                  isMeta _                      = False
 
               reportSDoc "tc.conv.term" 30 $ prettyTCM a <+> text "is eta record type"
               m <- reduceB m
@@ -295,17 +286,16 @@
                   -- No subtyping on record terms
                   c <- getRecordConstructor r
                   -- Record constructors are covariant (see test/succeed/CovariantConstructors).
-                  compareArgs (repeat $ polFromCmp cmp) (telePi_ tel $ sort Prop) (Con c ConOSystem []) m' n'
+                  compareArgs (repeat $ polFromCmp cmp) [] (telePi_ tel $ sort Prop) (Con c ConOSystem []) m' n'
 
             else compareAtom cmp a' m n
         _ -> compareAtom cmp a' m n
   where
     -- 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 info _) b) m n = do
         name <- freshName_ $ suggest (absName b) "x"
-        addContext' (name, dom) $ compareTerm cmp (absBody b) m' n'
+        addContext (name, dom) $ compareTerm cmp (absBody b) m' n'
       where
         (m',n') = raise 1 (m,n) `apply` [Arg info $ var 0]
     equalFun _ _ _ = __IMPOSSIBLE__
@@ -324,16 +314,6 @@
     (ExtendTel dom1@(Dom i1 a1) tel1, ExtendTel dom2@(Dom i2 a2) tel2) -> do
       compareDom cmp dom1 dom2 tel1 tel2 bad bad $
         compareTel t1 t2 cmp (absBody tel1) (absBody tel2)
-
-{- OLD, before 2013-05-15
-          let checkDom = escapeContext 1 $ compareType cmp a1 a2
-              c = TelCmp t1 t2 cmp (absBody tel1) (absBody tel2)
-
-          addContext (name, dom1) $
-            if dependent
-            then guardConstraint c checkDom
-            else checkDom >> solveConstraint_ c
--}
   where
     -- Andreas, 2011-05-10 better report message about types
     bad = typeError $ UnequalTypes cmp t2 t1
@@ -362,7 +342,7 @@
           ]
         patternViolation
   -- if type is not blocked, then we would have tried eta already
-  flip (ifBlockedType t) (\ _ -> inequal) $ \ _ _ -> do
+  flip (ifBlockedType t) (\ _ _ -> inequal) $ \ _ _ -> do
     -- type is blocked
     case (m, n) of
       (Con{}, _) -> dontKnow
@@ -419,7 +399,7 @@
 
     -- 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
+    (mb'', nb'') <- case (ignoreBlocking mb', ignoreBlocking nb') of
       (Lit _, Lit _) -> return (mb', nb')
       _ -> (,) <$> traverse constructorForm mb'
                <*> traverse constructorForm nb'
@@ -450,7 +430,7 @@
         text "compareAtom" <+> fsep [ prettyTCM mb <+> prettyTCM cmp
                                     , prettyTCM nb
                                     , text ":" <+> prettyTCM t ]
-      case (ignoreSharing <$> mb, ignoreSharing <$> nb) of
+      case (mb, 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))
@@ -465,33 +445,35 @@
                     PrunedEverything -> return ()
                     PrunedNothing    -> postpone
                     PrunedSomething  -> postpone
-                    -- OLD CODE: if killedAll then return () else checkSyntacticEquality
                 -- not all relevant arguments are variables
                 Nothing -> checkSyntacticEquality -- Check syntactic equality on meta-variables
                                 -- (same as for blocked terms)
             | otherwise -> do
                 [p1, p2] <- mapM getMetaPriority [x,y]
-                -- instantiate later meta variables first
+                -- First try the one with the highest priority. If that doesn't
+                -- work, try the low priority one.
                 let (solve1, solve2)
-                      | (p1,x) > (p2,y) = (l,r)
-                      | otherwise       = (r,l)
-                      where l = assign dir x xArgs n
-                            r = assign rid y yArgs m
+                      | (p1, x) > (p2, y) = (l1, r2)
+                      | otherwise         = (r1, l2)
+                      where l1 = assign dir x xArgs n
+                            r1 = assign rid y yArgs m
+                            -- Careful: the first attempt might prune the low
+                            -- priority meta! (Issue #2978)
+                            l2 = ifM (isInstantiatedMeta x) (compareTermDir dir t m n) l1
+                            r2 = ifM (isInstantiatedMeta y) (compareTermDir rid t n m) r1
 
                     try m h = m `catchError_` \err -> case err of
                       PatternErr{} -> h
                       _            -> throwError err
 
-                -- First try the one with the highest priority. If that doesn't
-                -- work, try the low priority one.
                 try solve1 solve2
 
         -- one side a meta, the other an unblocked term
         (NotBlocked _ (MetaV x es), _) -> assign dir x es n
         (_, NotBlocked _ (MetaV x es)) -> assign rid x es m
         (Blocked{}, Blocked{})  -> checkSyntacticEquality
-        (Blocked{}, _)    -> useInjectivity cmp t m n
-        (_,Blocked{})     -> useInjectivity cmp t m n
+        (Blocked{}, _)  -> useInjectivity (fromCmp cmp) t m n   -- The blocked term goes first
+        (_, Blocked{})  -> useInjectivity (flipCmp $ fromCmp cmp) t n m
         _ -> do
           -- -- Andreas, 2013-10-20 put projection-like function
           -- -- into the spine, to make compareElims work.
@@ -502,7 +484,7 @@
           -- Andreas, 2015-07-01, actually, don't put them into the spine.
           -- Polarity cannot be communicated properly if projection-like
           -- functions are post-fix.
-          case (ignoreSharing m, ignoreSharing n) of
+          case (m, n) of
             (Pi{}, Pi{}) -> equalFun m n
 
             (Sort s1, Sort Inf) -> return ()
@@ -512,14 +494,14 @@
             (Var i es, Var i' es') | i == i' -> do
                 a <- typeOfBV i
                 -- Variables are invariant in their arguments
-                compareElims [] a (var i) es es'
+                compareElims [] [] a (var i) es es'
             (Def f [], Def f' []) | f == f' -> return ()
             (Def f es, Def f' es') | f == f' -> do
                 a <- computeElimHeadType f es es'
                 -- The polarity vector of projection-like functions
                 -- does not include the parameters.
                 pol <- getPolarity' cmp f
-                compareElims pol a (Def f []) es es'
+                compareElims pol [] a (Def f []) es es'
             (Def f es, Def f' es') ->
               unlessM (bothAbsurd f f') $ do
                 trySizeUniv cmp t m n f es f' es'
@@ -528,13 +510,14 @@
                 | x == y -> do
                     -- Get the type of the constructor instantiated to the datatype parameters.
                     a' <- conType x t
+                    forcedArgs <- getForcedArgs $ conName x
                     -- Constructors are covariant in their arguments
                     -- (see test/succeed/CovariantConstructors).
-                    compareArgs (repeat $ polFromCmp cmp) a' (Con x ci []) xArgs yArgs
+                    compareElims (repeat $ polFromCmp cmp) forcedArgs a' (Con x ci []) xArgs yArgs
             _ -> etaInequal cmp t m n -- fixes issue 856 (unsound conversion error)
     where
         -- Andreas, 2013-05-15 due to new postponement strategy, type can now be blocked
-        conType c t = ifBlockedType t (\ _ _ -> patternViolation) $ \ t -> do
+        conType c t = ifBlockedType t (\ _ _ -> patternViolation) $ \ _ t -> do
           let impossible = do
                 reportSDoc "impossible" 10 $
                   text "expected data/record type, found " <+> prettyTCM t
@@ -547,7 +530,7 @@
                 -- Thus, instead of crashing, just give up gracefully.
                 patternViolation
           maybe impossible (return . snd) =<< getFullyAppliedConType c t
-        equalFun t1 t2 = case (ignoreSharing t1, ignoreSharing t2) of
+        equalFun t1 t2 = case (t1, t2) of
           (Pi dom1 b1, Pi dom2 b2) -> do
             verboseBracket "tc.conv.fun" 15 "compare function types" $ do
               reportSDoc "tc.conv.fun" 20 $ nest 2 $ vcat
@@ -558,18 +541,6 @@
             where
             errH = typeError $ UnequalHiding t1 t2
             errR = typeError $ UnequalRelevance cmp t1 t2
-
-{- OLD, before 2013-05-15
-                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.
-                name <- freshName_ (suggest b1 b2)
-                addContext (name, dom1) $
-                  if isBinderUsed b2 -- dependent function type?
-                  then guardConstraint conCoDom checkDom
-                  else checkDom >> solveConstraint_ conCoDom
--}
           _ -> __IMPOSSIBLE__
 
 -- | Check whether @a1 `cmp` a2@ and continue in context extended by @a1@.
@@ -585,9 +556,7 @@
   -> TCM ()
 compareDom cmp dom1@(Dom i1 a1) dom2@(Dom i2 a2) b1 b2 errH errR cont
   | not (sameHiding dom1 dom2) = errH
-  -- Andreas 2010-09-21 compare r1 and r2, but ignore forcing annotations!
-  | not $ compareRelevance cmp (ignoreForced $ getRelevance dom1)
-                               (ignoreForced $ getRelevance dom2) = errR
+  | not $ compareRelevance cmp (getRelevance dom1) (getRelevance dom2) = errR
   | otherwise = do
       let r = max (getRelevance dom1) (getRelevance dom2)
               -- take "most irrelevant"
@@ -599,7 +568,7 @@
         -- We only need to require a1 == a2 if b2 is dependent
         -- If it's non-dependent it doesn't matter what we add to the context.
       name <- freshName_ $ suggest b1 b2
-      addContext' (name, dom) $ cont
+      addContext (name, dom) $ cont
       stealConstraints pid
         -- Andreas, 2013-05-15 Now, comparison of codomains is not
         -- blocked any more by getting stuck on domains.
@@ -632,14 +601,14 @@
   ((u, v), eq) <- runReduceM (SynEq.checkSyntacticEquality u v)
   if eq then return u else do
   (u, v) <- reduce (u, v)
-  case (ignoreSharing u, ignoreSharing v) of
+  case (u, v) of
     (Pi ua ub, Pi va vb) -> do
       wa0 <- antiUnifyType pid (unDom ua) (unDom va)
       let wa = wa0 <$ ua
       wb <- addContext wa $ antiUnifyType pid (unAbs ub) (unAbs vb)
       return $ Pi wa (wb <$ ub)
     (Lam i u, Lam _ v) ->
-      case ignoreSharing $ unEl a of
+      case unEl a of
         Pi a b -> Lam i . (<$ u) <$> addContext a (antiUnify pid (unAbs b) (unAbs u) (unAbs v))
         _      -> fallback
     (Var i us, Var j vs) | i == j -> maybeGiveUp $ do
@@ -653,7 +622,7 @@
     -- thus, we would not see clearly if we used @getFullyAppliedConType@ instead.)
     (Con x ci us, Con y _ vs) | x == y -> maybeGiveUp $ do
       a <- maybe patternViolation (return . snd) =<< getConType x a
-      antiUnifyElims pid a (Con x ci []) (map Apply us) (map Apply vs)
+      antiUnifyElims pid a (Con x ci []) us vs
     (Def f us, Def g vs) | f == g, length us == length vs -> maybeGiveUp $ do
       a <- computeElimHeadType f us vs
       antiUnifyElims pid a (Def f []) us vs
@@ -676,7 +645,7 @@
     Just (_, self, a) -> antiUnifyElims pid a self es1 es2
     Nothing -> patternViolation -- can fail for projection like
 antiUnifyElims pid a self (Apply u : es1) (Apply v : es2) = do
-  case ignoreSharing $ unEl a of
+  case unEl a of
     Pi a b -> do
       w <- antiUnify pid (unDom a) (unArg u) (unArg v)
       antiUnifyElims pid (b `lazyAbsApp` w) (apply self [w <$ u]) es1 es2
@@ -685,8 +654,8 @@
 
 -- | @compareElims pols a v els1 els2@ performs type-directed equality on eliminator spines.
 --   @t@ is the type of the head @v@.
-compareElims :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()
-compareElims pols0 a v els01 els02 = catchConstraint (ElimCmp pols0 a v els01 els02) $ do
+compareElims :: [Polarity] -> [IsForced] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()
+compareElims pols0 fors0 a v els01 els02 = catchConstraint (ElimCmp pols0 fors0 a v els01 els02) $ do
   let v1 = applyE v els01
       v2 = applyE v els02
       failure = typeError $ UnequalTerms CmpEq v1 v2 a
@@ -697,6 +666,7 @@
      nest 2 $ vcat
       [ text "a     =" <+> prettyTCM a
       , text "pols0 (truncated to 10) =" <+> sep (map prettyTCM $ take 10 pols0)
+      , text "fors0 (truncated to 10) =" <+> sep (map prettyTCM $ take 10 fors0)
       , text "v     =" <+> prettyTCM v
       , text "els01 =" <+> prettyTCM els01
       , text "els02 =" <+> prettyTCM els02
@@ -724,8 +694,9 @@
         , text ""
         ]
       let (pol, pols) = nextPolarity pols0
-      ifBlockedType a (\ m t -> patternViolation) $ \ a -> do
-        case ignoreSharing . unEl $ a of
+          (for, fors) = nextIsForced fors0
+      ifBlockedType a (\ m t -> patternViolation) $ \ _ a -> do
+        case unEl a of
           (Pi (Dom info b) codom) -> do
             mlvl <- tryMaybe primLevel
             let freeInCoDom (Abs _ c) = 0 `freeInIgnoringSorts` c
@@ -743,12 +714,13 @@
 
             -- compare arg1 and arg2
             pid <- newProblem_ $ applyRelevanceToContext r $
-                case r of
-                  Forced{}   -> return ()
-                  r | irrelevant r ->
-                                compareIrrelevant b (unArg arg1) (unArg arg2)
-                  _          -> compareWithPol pol (flip compareTerm b)
-                                  (unArg arg1) (unArg arg2)
+                if isForced for then
+                  return ()
+                else if isIrrelevant r then
+                  compareIrrelevant b (unArg arg1) (unArg arg2)
+                else
+                  compareWithPol pol (flip compareTerm b)
+                    (unArg arg1) (unArg arg2)
             -- if comparison got stuck and function type is dependent, block arg
             solved <- isProblemSolved pid
             arg <- if dependent && not solved
@@ -759,35 +731,16 @@
                     return arg
                    else return arg1
             -- continue, possibly with blocked instantiation
-            compareElims pols (codom `lazyAbsApp` unArg arg) (apply v [arg]) els1 els2
+            compareElims pols fors (codom `lazyAbsApp` unArg arg) (apply v [arg]) els1 els2
             -- any left over constraints of arg are associatd to the comparison
             stealConstraints pid
-
-{- Stealing solves this issue:
-
-   Does not create enough blocked tc-problems,
-   see test/fail/DontPrune.
-   (There are remaining problems which do not show up as yellow.)
-   Need to find a way to associate pid also to result of compareElims.
--}
-
-{- OLD, before 2013-05-15
-
-            let checkArg = applyRelevanceToContext r $
-                               case r of
-                  Forced     -> return ()
-                  r | irrelevant r ->
-                                compareIrrelevant b (unArg arg1) (unArg arg2)
-                  _          -> compareWithPol pol (flip compareTerm b)
-                                  (unArg arg1) (unArg arg2)
-
-                theRest = ElimCmp pols (piApply a [arg1]) (apply v [arg1]) els1 els2
-
-            if dependent
-              then guardConstraint theRest checkArg
-              else checkArg >> solveConstraint_ theRest
--}
+            {- Stealing solves this issue:
 
+               Does not create enough blocked tc-problems,
+               see test/fail/DontPrune.
+               (There are remaining problems which do not show up as yellow.)
+               Need to find a way to associate pid also to result of compareElims.
+            -}
           a -> do
             reportSDoc "impossible" 10 $
               text "unexpected type when comparing apply eliminations " <+> prettyTCM a
@@ -801,7 +754,7 @@
     -- case: f == f' are projections
     (Proj o f : els1, Proj _ f' : els2)
       | f /= f'   -> typeError . GenericError . show =<< prettyTCM f <+> text "/=" <+> prettyTCM f'
-      | otherwise -> ifBlockedType a (\ m t -> patternViolation) $ \ a -> do
+      | otherwise -> ifBlockedType a (\ m t -> patternViolation) $ \ _ a -> do
         res <- projectTyped v a o f -- fails only if f is proj.like but parameters cannot be retrieved
         case res of
           Just (_, u, t) -> do
@@ -809,7 +762,7 @@
             -- The arguments following the principal argument of a projection
             -- are invariant.  (At least as long as we have no explicit polarity
             -- annotations.)
-            compareElims [] t u els1 els2
+            compareElims [] [] t u els1 els2
           Nothing -> do
             reportSDoc "tc.conv.elims" 30 $ sep
               [ text $ "projection " ++ show f
@@ -840,7 +793,6 @@
     ]
   try v w $ try w v $ return ()
   where
-    try (Shared p) w fallback = try (derefPtr p) w fallback
     try (MetaV x es) w fallback = do
       mv <- lookupMeta x
       let rel  = getMetaRelevance mv
@@ -851,7 +803,7 @@
         [ nest 2 $ text $ "rel  = " ++ show rel
         , nest 2 $ text "inst =" <+> pretty inst
         ]
-      if not (irrelevant rel) || inst
+      if not (isIrrelevant rel) || inst
         then fallback
         -- Andreas, 2016-08-08, issue #2131:
         -- Mining for solutions for irrelevant metas is not definite.
@@ -872,9 +824,9 @@
 
 -- | 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)
+compareArgs :: [Polarity] -> [IsForced] -> Type -> Term -> Args -> Args -> TCM ()
+compareArgs pol for a v args1 args2 =
+  compareElims pol for a v (map Apply args1) (map Apply args2)
 
 ---------------------------------------------------------------------------
 -- * Types
@@ -963,11 +915,12 @@
   -- 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
+    ifBlockedType b2 (\ _ _ -> fallback) $ \ _ _ -> do
       (args, t1') <- implicitArgs n notVisible t1
-      coerceSize leqType (v `apply` args) t1' t2
+      let v' = v `apply` args
+      v' <$ coerceSize leqType v' t1' t2
   where
-    fallback = coerceSize leqType v t1 t2
+    fallback = v <$ coerceSize leqType v t1 t2
 
 -- | Account for situations like @k : (Size< j) <= (Size< k + 1)@
 --
@@ -979,7 +932,7 @@
 --   For now, we do a cheap heuristics.
 --
 --   Precondition: types are reduced.
-coerceSize :: (Type -> Type -> TCM ()) -> Term -> Type -> Type -> TCM Term
+coerceSize :: (Type -> Type -> TCM ()) -> Term -> Type -> Type -> TCM ()
 coerceSize leqType v t1 t2 = workOnTypes $ do
     reportSDoc "tc.conv.coerce" 70 $
       text "coerceSize" <+> vcat
@@ -987,8 +940,8 @@
         , text "from type t1 =" <+> pretty t1
         , text "to type   t2 =" <+> pretty t2
         ]
-    let fallback = v <$ leqType t1 t2
-        done = caseMaybeM (isSizeType t1) fallback $ \ b1 -> return v
+    let fallback = leqType t1 t2
+        done = caseMaybeM (isSizeType t1) fallback $ \ _ -> return ()
     -- Andreas, 2015-07-22, Issue 1615:
     -- If t1 is a meta and t2 a type like Size< v2, we need to make sure we do not miss
     -- the constraint v < v2!
@@ -999,7 +952,7 @@
       mv <- sizeMaxView v
       if any (\case{ DOtherSize{} -> True; _ -> False }) mv then fallback else do
       -- Andreas, 2015-02-11 do not instantiate metas here (triggers issue 1203).
-      ifM (tryConversion $ dontAssignMetas $ leqType t1 t2) (return v) $ {- else -} do
+      unlessM (tryConversion $ dontAssignMetas $ leqType t1 t2) $ do
         -- A (most probably weaker) alternative is to just check syn.eq.
         -- ifM (snd <$> checkSyntacticEquality t1 t2) (return v) $ {- else -} do
         reportSDoc "tc.conv.coerce" 20 $ text "coercing to a size type"
@@ -1052,25 +1005,40 @@
                         , prettyTCM s2 ]
         ]
   case (s1, s2) of
+      -- The most basic rule: @Set l =< Set l'@ iff @l =< l'@
+      (Type a  , Type b  ) -> leqLevel a b
 
+      -- Prop is currently not supported
+      (Prop    , _       ) -> __IMPOSSIBLE__
+      (_       , Prop    ) -> __IMPOSSIBLE__
+
+      -- Setω is the top sort
       (_       , Inf     ) -> yes
+      (Inf     , _       ) -> equalSort s1 s2
 
-      (SizeUniv, _       ) -> equalSort s1 s2
+      -- Set0 and SizeUniv are bottom sorts
+      -- note: this ceases to hold if we add @Prop =< Set0@
+      (_       , Type (Max [])) -> equalSort s1 s2
       (_       , SizeUniv) -> equalSort s1 s2
 
-      (Type a  , Type b  ) -> leqLevel a b
-
-      (Prop    , Prop    ) -> yes
-      (Prop    , Type _  ) -> yes
-      (Type _  , Prop    ) -> no
+      -- If we compare @univSort s@ against @Set (lsuc l)@,
+      -- we can simplify the comparison.
+      (UnivSort s, Type b    )
+        | Just b' <- levelSucView b -> leqSort s (Type b')
+      (Type a    , UnivSort s)
+        | Just a' <- levelSucView a -> leqSort (Type a') s
 
-      -- (SizeUniv, SizeUniv) -> yes
-      -- (SizeUniv, _       ) -> no
-      -- (_       , SizeUniv) -> no
+      -- SizeUniv is unrelated to any Set l
+      (SizeUniv, Type{}  ) -> no
 
-      (Inf     , _       ) -> equalSort s1 s2
-      (DLub{}  , _       ) -> postpone
-      (_       , DLub{}  ) -> postpone
+      -- PiSort, UnivSort and MetaS might reduce once we instantiate
+      -- more metas, so we postpone.
+      (PiSort{}, _       ) -> postpone
+      (_       , PiSort{}) -> postpone
+      (UnivSort{}, _     ) -> postpone
+      (_     , UnivSort{}) -> postpone
+      (MetaS{} , _       ) -> postpone
+      (_       , MetaS{} ) -> postpone
 
 leqLevel :: Level -> Level -> TCM ()
 leqLevel a b = liftTCM $ do
@@ -1246,7 +1214,7 @@
         _ | as == bs -> ok
           | any isBlocked (as ++ bs) -> do
               lvl <- levelType
-              liftTCM $ useInjectivity CmpEq lvl (Level a) (Level b)
+              liftTCM $ addConstraint $ ValueCmp CmpEq lvl (Level a) (Level b)
 
         -- closed == closed
         ([ClosedLevel n], [ClosedLevel m])
@@ -1370,28 +1338,6 @@
             yes      = return ()
             no       = unlessM typeInType $ typeError $ UnequalSorts s1 s2
 
-            -- Test whether a level is infinity.
-            isInf ClosedLevel{}   = no
-            isInf (Plus _ l) = case l of
-              MetaLevel x es -> assignE DirEq x es (Sort Inf) $ equalAtom topSort
-                -- Andreas, 2015-02-14
-                -- This seems to be a hack, as a level meta is instantiated
-                -- by a sort.
-              NeutralLevel _ v -> case ignoreSharing v of
-                Sort Inf -> yes
-                _        -> no
-              _ -> no
-
-            -- Equate a level with SizeUniv.
-            eqSizeUniv l0 = case l0 of
-              Plus 0 l -> case l of
-                MetaLevel x es -> assignE DirEq x es (Sort SizeUniv) $ equalAtom topSort
-                NeutralLevel _ v -> case ignoreSharing v of
-                  Sort SizeUniv -> yes
-                  _ -> no
-                _ -> no
-              _ -> no
-
         reportSDoc "tc.conv.sort" 30 $ sep
           [ text "equalSort"
           , vcat [ nest 2 $ fsep [ prettyTCM s1 <+> text "=="
@@ -1403,40 +1349,76 @@
 
         case (s1, s2) of
 
-            (Type a  , Type b  ) -> equalLevel a b
+            -- before anything else, try syntactic equality
+            _ | s1 == s2              -> return ()
 
-            (SizeUniv, SizeUniv) -> yes
-            (SizeUniv, Type (Max as@(_:_))) -> mapM_ eqSizeUniv as
-            (Type (Max as@(_:_)), SizeUniv) -> mapM_ eqSizeUniv as
-            (SizeUniv, _       ) -> no
-            (_       , SizeUniv) -> no
+            -- one side is a meta sort: try to instantiate
+            -- In case both sides are meta sorts, instantiate the
+            -- bigger (i.e. more recent) one.
+            (MetaS x es , MetaS y es')
+              | x < y                  -> meta y es' s1
+              | otherwise              -> meta x es s2
+            (MetaS x es , _          ) -> meta x es s2
+            (_          , MetaS x es ) -> meta x es s1
 
-            (Prop    , Prop    ) -> yes
-            (Type _  , Prop    ) -> no
-            (Prop    , Type _  ) -> no
+            -- diagonal cases for rigid sorts
+            (Type a     , Type b     ) -> equalLevel a b
+            (SizeUniv   , SizeUniv   ) -> yes
+            (Prop       , Prop       ) -> yes
+            (Inf        , Inf        ) -> yes
 
-            (Inf     , Inf     )             -> yes
-            (Inf     , Type (Max as@(_:_)))  -> mapM_ isInf as
-            (Type (Max as@(_:_)), Inf)       -> mapM_ isInf as
-            -- Andreas, 2014-06-27:
-            -- @Type (Max [])@ (which is Set0) falls through to error.
-            (Inf     , _       )             -> no
-            (_       , Inf     )             -> no
+            -- @UnivSort s == Set (lsuc l)@ iff @s == Set l@
+            (Type a     , UnivSort s )
+              | Just a' <- levelSucView a -> equalSort (Type a') s
+            (UnivSort s , Type b     )
+              | Just b' <- levelSucView b -> equalSort s (Type b')
 
-            -- Andreas, 2014-06-27:  Why are there special cases for Set0?
-            -- Andreas, 2015-02-14:  Probably because s ⊔ s' = Set0
-            -- entailed that both s and s' are Set0.
-            -- This is no longer true if  SizeUniv ⊔ s = s
+            -- if @PiSort a b == Set0@, then @b == Set0@
+            -- we use this fact to solve metas in @b@,
+            -- hopefully allowing the @PiSort@ to reduce.
+            (Type (Max []) , PiSort a b   ) -> piSortEqualToSet0 a b
+            (PiSort a b    , Type (Max [])) -> piSortEqualToSet0 a b
 
-            -- (DLub s1 s2, s0@(Type (Max []))) -> do
-            --   equalSort s1 s0
-            --   underAbstraction_ s2 $ \s2 -> equalSort s2 s0
-            -- (s0@(Type (Max [])), DLub s1 s2) -> do
-            --   equalSort s0 s1
-            --   underAbstraction_ s2 $ \s2 -> equalSort s0 s2
+            -- @PiSort a b == SizeUniv@ iff @b == SizeUniv@
+            (SizeUniv   , PiSort a b ) ->
+              underAbstraction_ b $ equalSort SizeUniv
+            (PiSort a b , SizeUniv   ) ->
+              underAbstraction_ b $ equalSort SizeUniv
 
-            (DLub{}  , _       )             -> postpone
-            (_       , DLub{}  )             -> postpone
+            -- Prop and SizeUniv don't contain any universes,
+            -- so they cannot be a UnivSort
+            (Prop       , UnivSort s ) -> no
+            (UnivSort s , Prop       ) -> no
+            (SizeUniv   , UnivSort s ) -> no
+            (UnivSort s , SizeUniv   ) -> no
+
+            -- PiSort and UnivSort could compute later, so we postpone
+            (PiSort{}   , _          ) -> postpone
+            (_          , PiSort{}   ) -> postpone
+            (UnivSort{} , _          ) -> postpone
+            (_          , UnivSort{} ) -> postpone
+
+            -- any other combinations of sorts are not equal
+            (_          , _          ) -> no
+
+    where
+      -- perform assignment (MetaS x es) := s
+      meta x es s = do
+        reportSLn "tc.meta.sort" 30 $ "Assigning meta sort"
+        reportSDoc "tc.meta.sort" 50 $ text "meta" <+> sep [pretty x, prettyList $ map pretty es, pretty s]
+        assignE DirEq x es (Sort s) __IMPOSSIBLE__
+
+      -- equate @piSort a b@ to @Set0@
+      -- note: this assumes @piSort a b == Set0@ implies @b == Set0@,
+      -- which becomes invalid if we add Prop.
+      piSortEqualToSet0 a b = do
+        let set0 = Type $ Max []
+        underAbstraction_ b $ equalSort set0
+        -- we may have instantiated some metas, so @a@ could reduce
+        a <- reduce a
+        case funSort' a set0 of
+          Just s  -> equalSort s set0
+          Nothing -> addConstraint $ SortCmp CmpEq (funSort a set0) set0
 
 ---------------------------------------------------------------------------
 -- * Definitions
diff --git a/src/full/Agda/TypeChecking/Conversion.hs-boot b/src/full/Agda/TypeChecking/Conversion.hs-boot
--- a/src/full/Agda/TypeChecking/Conversion.hs-boot
+++ b/src/full/Agda/TypeChecking/Conversion.hs-boot
@@ -6,8 +6,8 @@
 
 compareTerm  :: Comparison -> Type -> Term -> Term -> TCM ()
 compareAtom  :: Comparison -> Type -> Term -> Term -> TCM ()
-compareArgs  :: [Polarity] -> Type -> Term -> Args -> Args -> TCM ()
-compareElims :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()
+compareArgs  :: [Polarity] -> [IsForced] -> Type -> Term -> Args -> Args -> TCM ()
+compareElims :: [Polarity] -> [IsForced] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()
 compareType  :: Comparison -> Type -> Type -> TCM ()
 compareTel   :: Type -> Type -> Comparison -> Telescope -> Telescope -> TCM ()
 compareSort  :: Comparison -> Sort -> Sort -> TCM ()
@@ -15,4 +15,6 @@
 equalTerm    :: Type -> Term -> Term -> TCM ()
 equalType    :: Type -> Type -> TCM ()
 equalSort    :: Sort -> Sort -> TCM ()
+equalLevel   :: Level -> Level -> TCM ()
 leqType      :: Type -> Type -> TCM ()
+leqLevel     :: Level -> Level -> TCM ()
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
@@ -21,10 +21,6 @@
 import Control.Monad
 import Control.Monad.Trans ( lift )
 
-#if !MIN_VERSION_base(4,8,0)
-import Control.Applicative hiding (empty)
-#endif
-
 import Data.Either (lefts)
 import qualified Data.List as List
 import Data.Monoid (Any(..))
@@ -41,14 +37,18 @@
 import Agda.Syntax.Internal.Pattern
 
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin (litType)
 
+import Agda.TypeChecking.Rules.LHS (checkSortOfSplitVar)
 import Agda.TypeChecking.Rules.LHS.Problem (allFlexVars)
 import Agda.TypeChecking.Rules.LHS.Unify
 
 import Agda.TypeChecking.Coverage.Match
 import Agda.TypeChecking.Coverage.SplitTree
 
+import Agda.TypeChecking.Conversion (tryConversion, equalType)
 import Agda.TypeChecking.Datatypes (getConForm)
+import Agda.TypeChecking.Patterns.Internal (dotPatternsToPatterns)
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Reduce
@@ -83,10 +83,10 @@
 data SplitClause = SClause
   { scTel    :: Telescope
     -- ^ Type of variables in @scPats@.
-  , scPats   :: [NamedArg DeBruijnPattern]
+  , scPats   :: [NamedArg SplitPattern]
     -- ^ The patterns leading to the currently considered branch of
     --   the split tree.
-  , scSubst  :: PatternSubstitution
+  , scSubst  :: Substitution' SplitPattern
     -- ^ Substitution from 'scTel' to old context.
     --   Only needed directly after split on variable:
     --   * To update 'scTarget'
@@ -99,8 +99,8 @@
     --   'splitResult', which does not split on a variable,
     --   should reset it to the identity 'idS', lest it be
     --   applied to 'scTarget' again, leading to Issue 1294.
-  , scModuleParameterSub :: ModuleParamDict
-    -- ^ We need to keep track of the module parameter substitutions for the
+  , scCheckpoints :: Map CheckpointId Substitution
+    -- ^ We need to keep track of the module parameter checkpoints for the
     -- clause for the purpose of inferring missing instance clauses.
   , scTarget :: Maybe (Arg Type)
     -- ^ The type of the rhs, living in context 'scTel'.
@@ -114,8 +114,8 @@
 data Covering = Covering
   { covSplitArg     :: Arg Nat
      -- ^ De Bruijn level (counting dot patterns) of argument we split on.
-  , covSplitClauses :: [(QName, SplitClause)]
-      -- ^ Covering clauses, indexed by constructor these clauses share.
+  , covSplitClauses :: [(SplitTag, SplitClause)]
+      -- ^ Covering clauses, indexed by constructor/literal these clauses share.
   }
 
 -- | Project the split clauses out of a covering.
@@ -126,9 +126,9 @@
 clauseToSplitClause :: Clause -> SplitClause
 clauseToSplitClause cl = SClause
   { scTel    = clauseTel  cl
-  , scPats   = namedClausePats cl
+  , scPats   = toSplitPatterns $ namedClausePats cl
   , scSubst  = idS  -- Andreas, 2014-07-15  TODO: Is this ok?
-  , scModuleParameterSub = Map.empty
+  , scCheckpoints = Map.empty -- #2996: not __IMPOSSIBLE__ for debug printing
   , scTarget = clauseType cl
   }
 
@@ -152,9 +152,12 @@
       -- The initial module parameter substitutions need to be weakened by the
       -- number of arguments that aren't module parameters.
   fv           <- getDefFreeVars f
-  moduleParams <- raise (n - fv) <$> use stModuleParameters
+
+  -- TODO: does this make sense? Why are we weakening by n - fv?
+  checkpoints <- applySubst (raiseS (n - fv)) <$> view eCheckpoints
+
       -- construct the initial split clause
-  let sc = SClause gamma xs idS moduleParams $ Just $ defaultArg a
+  let sc = SClause gamma xs idS checkpoints $ Just $ defaultArg a
 
   reportSDoc "tc.cover.top" 10 $ do
     let prCl cl = addContext (clauseTel cl) $
@@ -238,24 +241,21 @@
   reportSDoc "tc.cover.cover" 10 $ inTopContext $ vcat
     [ text "checking coverage of pattern:"
     , nest 2 $ text "tel  =" <+> prettyTCM tel
-    , nest 2 $ text "ps   =" <+> do addContext tel $ prettyTCMPatternList ps
+    , nest 2 $ text "ps   =" <+> do addContext tel $ prettyTCMPatternList $ fromSplitPatterns ps
     ]
+  reportSDoc "tc.cover.cover" 60 $ vcat
+    [ nest 2 $ text "ps   =" <+> pretty ps
+    ]
   cs' <- normaliseProjP cs
+  ps <- (traverse . traverse . traverse) dotPatternsToPatterns ps
   case match cs' ps of
-    Yes (i,(mps,ls0)) -> do
+    Yes (i,mps) -> do
       exact <- allM mps isTrivialPattern
       let noExactClause = if exact || clauseCatchall (cs !! i)
                           then Set.empty
                           else Set.singleton i
       reportSLn "tc.cover.cover" 10 $ "pattern covered by clause " ++ show i
-      -- Check if any earlier clauses could match with appropriate literals
-      let lsis = mapMaybe (\(j,c) -> (,j) <$> matchLits c ps) $ zip [0..i-1] cs
-      reportSLn "tc.cover.cover"  10 $ "literal matches: " ++ show lsis
-      -- Andreas, 2016-10-08, issue #2243 (#708)
-      -- If we have several literal matches with the same literals
-      -- only take the first matching clause of these.
-      let is = Map.elems $ Map.fromListWith min $ (ls0,i) : lsis
-      return $ CoverResult (SplittingDone (size tel)) (Set.fromList is) [] noExactClause
+      return $ CoverResult (SplittingDone (size tel)) (Set.singleton i) [] noExactClause
 
     No        ->  do
       reportSLn "tc.cover" 20 $ "pattern is not covered"
@@ -268,12 +268,15 @@
           -- type error before getting to this point.
           inferMissingClause f sc
           return $ CoverResult (SplittingDone (size tel)) Set.empty [] Set.empty
-        _ -> return $ CoverResult (SplittingDone (size tel)) Set.empty [(tel, ps)] Set.empty
+        _ -> do
+          let ps' = fromSplitPatterns ps
+          return $ CoverResult (SplittingDone (size tel)) Set.empty [(tel, ps')] Set.empty
 
     -- We need to split!
     -- If all clauses have an unsplit copattern, we try that first.
-    Block res bs -> tryIf (getAny res) splitRes $ do
-      let done = return $ CoverResult (SplittingDone (size tel)) Set.empty [(tel, ps)] Set.empty
+    Block res bs -> tryIf res splitRes $ do
+      let ps' = fromSplitPatterns ps
+          done = return $ CoverResult (SplittingDone (size tel)) Set.empty [(tel, ps')] Set.empty
       if null bs then done else do
       -- Otherwise, if there are variables to split, we try them
       -- in the order determined by a split strategy.
@@ -281,9 +284,22 @@
       -- 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
+      -- Andreas, 2017-10-08, issue #2594
+      -- First, try to find split order for complete coverage.
+      -- If this fails, try to at least carry out the splitting to the end.
+      continue xs NoAllowPartialCover $ \ _err -> do
+        continue xs YesAllowPartialCover $ \ err -> do
+          typeError $ SplitError err
+  where
+    continue
+      :: [BlockingVar]
+      -> AllowPartialCover
+      -> (SplitError -> TCM CoverResult)
+      -> TCM CoverResult
+    continue xs allowPartialCover handle = do
+      r <- altM1 (split Inductive allowPartialCover sc) xs
       case r of
-        Left err -> typeError $ SplitError err
+        Left err -> handle err
         -- If we get the empty covering, we have reached an impossible case
         -- and are done.
         Right (Covering n []) ->
@@ -309,13 +325,12 @@
               tree   = SplitAt n trees'
           return $ CoverResult tree (Set.unions useds) (concat psss) (Set.unions noex)
 
-  where
-    tryIf :: Monad m => Bool -> m (Maybe a) -> m a -> m a
-    tryIf True  me m = fromMaybeM m me
+    tryIf :: Monad m => Bool -> m (Either err a) -> m a -> m a
+    tryIf True  me m = fromRightM (const m) me
     tryIf False me m = m
 
     -- Try to split result
-    splitRes :: TCM (Maybe CoverResult)
+    splitRes :: TCM (Either CosplitError CoverResult)
     splitRes = do
       reportSLn "tc.cover" 20 $ "blocked by projection pattern"
       -- forM is a monadic map over a Maybe here
@@ -336,41 +351,38 @@
         return $ CoverResult tree (Set.unions useds) (concat psss) (Set.unions noex)
 
     gatherEtaSplits :: Int -> SplitClause
-                    -> [NamedArg DeBruijnPattern] -> [NamedArg DeBruijnPattern]
+                    -> [NamedArg SplitPattern] -> [NamedArg SplitPattern]
     gatherEtaSplits n sc []
        | n >= 0    = __IMPOSSIBLE__ -- we should have encountered the main
                                     -- split by now already
        | otherwise = []
     gatherEtaSplits n sc (p:ps) = case namedArg p of
-      VarP x
+      VarP _ x
        | n == 0    -> case p' of -- this is the main split
-           VarP  _      -> __IMPOSSIBLE__
-           DotP  _      -> __IMPOSSIBLE__
-           AbsurdP _    -> __IMPOSSIBLE__
+           VarP  _ _    -> p : gatherEtaSplits (-1) sc ps
+           DotP  _ _    -> __IMPOSSIBLE__
            ConP  _ _ qs -> qs ++ gatherEtaSplits (-1) sc ps
-           LitP  _      -> __IMPOSSIBLE__
+           LitP  _      -> gatherEtaSplits (-1) sc ps
            ProjP{}      -> __IMPOSSIBLE__
        | otherwise ->
            updateNamedArg (\ _ -> p') p : gatherEtaSplits (n-1) sc ps
-        where p' = lookupS (scSubst sc) $ dbPatVarIndex x
-      DotP  _      -> p : gatherEtaSplits (n-1) sc ps -- count dot patterns
-      AbsurdP _    -> p : gatherEtaSplits (n-1) sc ps
+        where p' = lookupS (scSubst sc) $ splitPatVarIndex x
+      DotP  _ _    -> p : gatherEtaSplits (n-1) sc ps -- count dot patterns
       ConP  _ _ qs -> gatherEtaSplits n sc (qs ++ ps)
       LitP  _      -> gatherEtaSplits n sc ps
       ProjP{}      -> gatherEtaSplits n sc ps
 
-    addEtaSplits :: Int -> [NamedArg DeBruijnPattern] -> SplitTree -> SplitTree
+    addEtaSplits :: Int -> [NamedArg SplitPattern] -> SplitTree -> SplitTree
     addEtaSplits k []     t = t
     addEtaSplits k (p:ps) t = case namedArg p of
-      VarP  _       -> addEtaSplits (k+1) ps t
-      DotP  _       -> addEtaSplits (k+1) ps t
-      AbsurdP _     -> addEtaSplits (k+1) ps t
-      ConP c cpi qs -> SplitAt (p $> k) [(conName c , addEtaSplits k (qs ++ ps) t)]
+      VarP  _ _     -> addEtaSplits (k+1) ps t
+      DotP  _ _     -> addEtaSplits (k+1) ps t
+      ConP c cpi qs -> SplitAt (p $> k) [(SplitCon (conName c) , addEtaSplits k (qs ++ ps) t)]
       LitP  _       -> __IMPOSSIBLE__
       ProjP{}       -> __IMPOSSIBLE__
 
-    etaRecordSplits :: Int -> [NamedArg DeBruijnPattern] -> (QName,SplitClause)
-                    -> SplitTree -> (QName,SplitTree)
+    etaRecordSplits :: Int -> [NamedArg SplitPattern] -> (SplitTag,SplitClause)
+                    -> SplitTree -> (SplitTag,SplitTree)
     etaRecordSplits n ps (q , sc) t =
       (q , addEtaSplits 0 (gatherEtaSplits n sc ps) t)
 
@@ -381,9 +393,11 @@
   -> SplitClause
        -- ^ Clause to add.  Clause hiding (in 'clauseType') must be 'Instance'.
    -> TCM ()
-inferMissingClause f (SClause tel ps _ mpsub (Just t)) = setCurrentRange f $ do
+inferMissingClause f (SClause tel ps _ cps (Just t)) = setCurrentRange f $ do
   reportSDoc "tc.cover.infer" 20 $ addContext tel $ text "Trying to infer right-hand side of type" <+> prettyTCM t
-  cl <- addContext tel $ withModuleParameters mpsub $ do
+  cl <- addContext tel
+        $ locally eCheckpoints (const cps)
+        $ checkpoint IdS $ do    -- introduce a fresh checkpoint
     (_x, rhs) <- case getHiding t of
                   Instance{} -> newIFSMeta "" (unArg t)
                   Hidden     -> __IMPOSSIBLE__
@@ -391,7 +405,7 @@
     return $ Clause { clauseLHSRange  = noRange
                     , clauseFullRange = noRange
                     , clauseTel       = tel
-                    , namedClausePats = ps
+                    , namedClausePats = fromSplitPatterns ps
                     , clauseBody      = Just rhs
                     , clauseType      = Just t
                     , clauseCatchall  = False
@@ -401,7 +415,7 @@
 inferMissingClause _ (SClause _ _ _ _ Nothing) = __IMPOSSIBLE__
 
 splitStrategy :: BlockingVars -> Telescope -> TCM BlockingVars
-splitStrategy bs tel = return $ updateLast clearBlockingVarCons xs
+splitStrategy bs tel = return $ updateLast setBlockingVarOverlap 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.
@@ -427,7 +441,7 @@
   let t       = unDom at
       throw f = throwError . f =<< do liftTCM $ buildClosure t
   t' <- liftTCM $ reduce t
-  case ignoreSharing $ unEl t' of
+  case unEl t' of
     Def d es -> do
       let ~(Just args) = allApplyElims es
       def <- liftTCM $ theDef <$> getConstInfo d
@@ -454,12 +468,12 @@
 --   if target becomes a function type.
 --   Returns the domains of the function type (if any).
 fixTarget :: SplitClause -> TCM (Telescope, SplitClause)
-fixTarget sc@SClause{ scTel = sctel, scPats = ps, scSubst = sigma, scModuleParameterSub = mpsub, scTarget = target } =
+fixTarget sc@SClause{ scTel = sctel, scPats = ps, scSubst = sigma, scCheckpoints = cps, scTarget = target } =
   caseMaybe target (return (empty, sc)) $ \ a -> do
     reportSDoc "tc.cover.target" 20 $ sep
       [ text "split clause telescope: " <+> prettyTCM sctel
       , text "old patterns          : " <+> do
-          addContext sctel $ prettyTCMPatternList ps
+          addContext sctel $ prettyTCMPatternList $ fromSplitPatterns ps
       ]
     reportSDoc "tc.cover.target" 60 $ sep
       [ text "substitution          : " <+> text (show sigma)
@@ -468,7 +482,7 @@
       [ text "target type before substitution (variables may be wrong): " <+> do
           addContext sctel $ prettyTCM a
       ]
-    TelV tel b <- telView $ applyPatSubst sigma $ unArg a
+    TelV tel b <- telView $ applySplitPSubst sigma $ unArg a
     reportSDoc "tc.cover.target" 15 $ sep
       [ text "target type telescope (after substitution): " <+> do
           addContext sctel $ prettyTCM tel
@@ -489,7 +503,7 @@
           , scPats   = ps'
           , scSubst  = wkS n $ sigma -- Should be wkS instead of liftS since
                                      -- variables are only added to new tel.
-          , scModuleParameterSub = applySubst (raiseS n) mpsub
+          , scCheckpoints        = applySubst (raiseS n) cps
           , scTarget = newTarget
           }
     -- Separate debug printing to find cause of crash (Issue 1374)
@@ -498,7 +512,7 @@
       ]
     reportSDoc "tc.cover.target" 30 $ sep
       [ text "new split clause patterns    : " <+> do
-          addContext sctel' $ prettyTCMPatternList ps'
+          addContext sctel' $ prettyTCMPatternList $ fromSplitPatterns ps'
       ]
     reportSDoc "tc.cover.target" 60 $ sep
       [ text "new split clause substitution: " <+> text (show $ scSubst sc')
@@ -520,7 +534,7 @@
   | visible ai = setOrigin UserWritten ai
   | otherwise  = setOrigin Inserted ai
 
--- | @computeNeighbourhood delta1 delta2 d pars ixs hix tel ps mpsub con@
+-- | @computeNeighbourhood delta1 delta2 d pars ixs hix tel ps con@
 --
 --   @
 --      delta1   Telescope before split point
@@ -532,7 +546,7 @@
 --      hix      Index of split variable
 --      tel      Telescope for patterns ps
 --      ps       Patterns before doing the split
---      mpsub    Current module parameter substitutions
+--      cps      Current module parameter checkpoints
 --      con      Constructor to fit into hole
 --   @
 --   @dtype == d pars ixs@
@@ -545,11 +559,11 @@
   -> Args                         -- ^ Data type indices.
   -> Nat                          -- ^ Index of split variable.
   -> Telescope                    -- ^ Telescope for the patterns.
-  -> [NamedArg DeBruijnPattern]   -- ^ Patterns before doing the split.
-  -> ModuleParamDict              -- ^ Current module parameter substitution.
+  -> [NamedArg SplitPattern]      -- ^ Patterns before doing the split.
+  -> Map CheckpointId Substitution -- ^ Current checkpoints
   -> QName                        -- ^ Constructor to fit into hole.
   -> CoverM (Maybe SplitClause)   -- ^ New split clause if successful.
-computeNeighbourhood delta1 n delta2 d pars ixs hix tel ps mpsub c = do
+computeNeighbourhood delta1 n delta2 d pars ixs hix tel ps cps c = do
 
   -- Get the type of the datatype
   dtype <- liftTCM $ (`piApply` pars) . defType <$> getConstInfo d
@@ -565,7 +579,7 @@
   -- Lookup the type of the constructor at the given parameters
   (gamma0, cixs) <- do
     TelV gamma0 (El _ d) <- liftTCM $ telView (ctype `piApply` pars)
-    let Def _ es = ignoreSharing d
+    let Def _ es = d
         Just cixs = allApplyElims es
     return (gamma0, cixs)
 
@@ -573,7 +587,6 @@
   -- 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 (x, t) = (x, t)
       gammal = map (fmap preserve) . telToList $ gamma0
       gamma  = telFromList gammal
@@ -605,19 +618,20 @@
       debugSubst "rho0" rho0
 
       -- We have Δ₁' ⊢ ρ₀ : Δ₁Γ, so split it into the part for Δ₁ and the part for Γ
-      let (rho1,rho2) = splitS (size gamma) rho0
+      let (rho1,rho2) = splitS (size gamma) $ toSplitPSubst rho0
 
       -- Andreas, 2015-05-01  I guess it is fine to use no @conPType@
       -- as the result of splitting is never used further down the pipeline.
       -- After splitting, Agda reloads the file.
       -- Andreas, 2017-09-03, issue #2729: remember that pattern was generated by case split.
-      let conp    = ConP con (ConPatternInfo (Just ConOSplit) Nothing) $ applySubst rho2 $
-                      map (mapArgInfo hiddenInserted) $ tele2NamedArgs gamma0 gamma
+      let cpi  = noConPatternInfo{ conPRecord = Just PatOSplit }
+          conp = ConP con cpi $ applySubst rho2 $
+                   map (mapArgInfo hiddenInserted) $ tele2NamedArgs gamma0 gamma
           -- Andreas, 2016-09-08, issue #2166: use gamma0 for correct argument names
 
       -- Compute final context and substitution
       let rho3    = consS conp rho1            -- Δ₁' ⊢ ρ₃ : Δ₁(x:D)
-          delta2' = applyPatSubst rho3 delta2  -- Δ₂' = Δ₂ρ₃
+          delta2' = applySplitPSubst rho3 delta2  -- Δ₂' = Δ₂ρ₃
           delta'  = delta1' `abstract` delta2' -- Δ'  = Δ₁'Δ₂'
           rho     = liftS (size delta2) rho3   -- Δ' ⊢ ρ : Δ₁(x:D)Δ₂
 
@@ -629,9 +643,9 @@
       let ps' = applySubst rho ps
       debugPlugged delta' ps'
 
-      let mpsub' = applySubst (fromPatternSubstitution rho) mpsub
+      let cps' = applySplitPSubst rho cps
 
-      return $ Just $ SClause delta' ps' rho mpsub' Nothing -- target fixed later
+      return $ Just $ SClause delta' ps' rho cps' Nothing -- target fixed later
 
   where
     debugInit con ctype d pars ixs cixs delta1 delta2 gamma tel ps hix =
@@ -641,7 +655,7 @@
           [ text "context=" <+> (inTopContext . prettyTCM =<< getContextTelescope)
           , text "con    =" <+> prettyTCM con
           , text "ctype  =" <+> prettyTCM ctype
-          , text "ps     =" <+> do inTopContext $ addContext tel $ prettyTCMPatternList ps
+          , text "ps     =" <+> do inTopContext $ addContext tel $ prettyTCMPatternList $ fromSplitPatterns ps
           , text "d      =" <+> prettyTCM d
           , text "pars   =" <+> do prettyList $ map prettyTCM pars
           , text "ixs    =" <+> do addContext delta1 $ prettyList $ map prettyTCM ixs
@@ -672,18 +686,30 @@
     debugPs tel ps =
       liftTCM $ reportSDoc "tc.cover.split.con" 20 $
         inTopContext $ addContext tel $ nest 2 $ vcat
-          [ text "ps     =" <+> prettyTCMPatternList ps
+          [ text "ps     =" <+> prettyTCMPatternList (fromSplitPatterns ps)
           ]
 
     debugPlugged delta' ps' =
       liftTCM $ reportSDoc "tc.cover.split.con" 20 $
         inTopContext $ addContext delta' $ nest 2 $ vcat
-          [ text "ps'    =" <+> do prettyTCMPatternList ps'
+          [ text "ps'    =" <+> do prettyTCMPatternList $ fromSplitPatterns ps'
           ]
 
+-- | Introduce trailing pattern variables via 'fixTarget'?
+data FixTarget
+  = YesFixTarget
+  | NoFixTarget
+  deriving (Show)
+
+-- | Allow partial covering for split?
+data AllowPartialCover
+  = YesAllowPartialCover  -- To try to coverage-check incomplete splits.
+  | NoAllowPartialCover   -- Default.
+  deriving (Eq, Show)
+
 -- | Entry point from @Interaction.MakeCase@.
 splitClauseWithAbsurd :: SplitClause -> Nat -> TCM (Either SplitError (Either SplitClause Covering))
-splitClauseWithAbsurd c x = split' Inductive False c (BlockingVar x Nothing)
+splitClauseWithAbsurd c x = split' Inductive NoAllowPartialCover NoFixTarget c (BlockingVar x [] [] True)
   -- Andreas, 2016-05-03, issue 1950:
   -- Do not introduce trailing pattern vars after split,
   -- because this does not work for with-clauses.
@@ -692,8 +718,8 @@
 --   @splitLast CoInductive@ is used in the @refine@ tactics.
 
 splitLast :: Induction -> Telescope -> [NamedArg DeBruijnPattern] -> TCM (Either SplitError Covering)
-splitLast ind tel ps = split ind sc (BlockingVar 0 Nothing)
-  where sc = SClause tel ps empty empty Nothing
+splitLast ind tel ps = split ind NoAllowPartialCover sc (BlockingVar 0 [] [] True)
+  where sc = SClause tel (toSplitPatterns ps) empty empty Nothing
 
 -- | @split ind splitClause x = return res@
 --   splits @splitClause@ at pattern var @x@ (de Bruijn index).
@@ -710,10 +736,13 @@
 split :: Induction
          -- ^ Coinductive constructors are allowed if this argument is
          -- 'CoInductive'.
+      -> AllowPartialCover
+         -- ^ Don't fail if computed 'Covering' does not cover all constructors.
       -> SplitClause
       -> BlockingVar
       -> TCM (Either SplitError Covering)
-split ind sc x = fmap blendInAbsurdClause <$> split' ind True sc x
+split ind allowPartialCover sc x =
+  fmap blendInAbsurdClause <$> split' ind allowPartialCover YesFixTarget sc x
   where
     n = lookupPatternVar sc $ blockingVarNo x
     blendInAbsurdClause :: Either SplitClause Covering -> Covering
@@ -728,7 +757,7 @@
   where n = if k < 0
             then __IMPOSSIBLE__
             else fromMaybe __IMPOSSIBLE__ $ permPicks perm !!! k
-        perm = fromMaybe __IMPOSSIBLE__ $ dbPatPerm pats
+        perm = fromMaybe __IMPOSSIBLE__ $ dbPatPerm $ fromSplitPatterns pats
         k = size tel - x - 1
         arg = telVars (size tel) tel !! k
 
@@ -749,15 +778,18 @@
 split' :: Induction
           -- ^ Coinductive constructors are allowed if this argument is
           -- 'CoInductive'.
-       -> Bool
-          -- ^ If 'True', introduce new trailing variable patterns via
+       -> AllowPartialCover
+          -- ^ Don't fail if computed 'Covering' does not cover all constructors.
+       -> FixTarget
+          -- ^ If 'YesFixTarget', introduce new trailing variable patterns via
           --   'fixTarget'.
        -> SplitClause
        -> BlockingVar
        -> TCM (Either SplitError (Either SplitClause Covering))
-split' ind fixtarget sc@(SClause tel ps _ mpsub target) (BlockingVar x mcons) = liftTCM $ runExceptT $ do
+split' ind allowPartialCover fixtarget sc@(SClause tel ps _ cps target) (BlockingVar x pcons' plits overlap) =
+ liftTCM $ runExceptT $ do
 
-  debugInit tel x ps mpsub
+  debugInit tel x ps cps
 
   -- Split the telescope at the variable
   -- t = type of the variable,  Δ₁ ⊢ t
@@ -765,34 +797,60 @@
     let (tel1, Dom info (n, t) : tel2) = splitAt (size tel - x - 1) $ telToList tel
     return (n, Dom info t, telFromList tel1, telFromList tel2)
 
-  -- 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
-
   -- Compute the neighbourhoods for the constructors
-  ns <- catMaybes <$> do
-    forM cons $ \ con ->
-      fmap (con,) <$> do
-        msc <- computeNeighbourhood delta1 n delta2 d pars ixs x tel ps mpsub con
-        if not fixtarget then return msc else do
-        Trav.forM msc $ \ sc -> lift $ snd <$> fixTarget sc{ scTarget = target }
+  let computeNeighborhoods = do
+        -- 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
+        mns <- forM cons $ \ con -> fmap (SplitCon con,) <$>
+          computeNeighbourhood delta1 n delta2 d pars ixs x tel ps cps con
+        return $ catMaybes mns
 
+      computeLitNeighborhoods = do
+        typeOk <- liftTCM $ do
+          t' <- litType $ headWithDefault {-'-} __IMPOSSIBLE__ plits
+          liftTCM $ dontAssignMetas $ tryConversion $ equalType (unDom t) t'
+        unless typeOk $ throwError . NotADatatype =<< do liftTCM $ buildClosure (unDom t)
+        ns <- forM plits $ \lit -> do
+          let delta2' = subst 0 (Lit lit) delta2
+              delta'  = delta1 `abstract` delta2'
+              rho     = liftS x $ consS (LitP lit) idS
+              ps'     = applySubst rho ps
+              cps'    = applySplitPSubst rho cps
+          return (SplitLit lit , SClause delta' ps' rho cps' Nothing)
+        ca <- do
+          let delta' = tel -- telescope is unchanged for catchall branch
+              varp   = VarP PatOSplit $ SplitPatVar
+                         { splitPatVarName   = underscore
+                         , splitPatVarIndex  = 0
+                         , splitExcludedLits = plits
+                         }
+              rho    = liftS x $ consS varp $ raiseS 1
+              ps'    = applySubst rho ps
+          return (SplitCatchall , SClause delta' ps' rho cps Nothing)
+        return $ ns ++ [ ca ]
+
+  ns <- if null pcons' && not (null plits)
+        then computeLitNeighborhoods
+        else computeNeighborhoods
+
+  ns <- case fixtarget of
+    NoFixTarget  -> return ns
+    YesFixTarget -> lift $ forM ns $ \(con,sc) ->
+      (con,) . snd <$> fixTarget sc{ scTarget = target }
+
   case ns of
     []  -> do
-      let ps' = (fmap . fmap . fmap . fmap)
-                  (\(DBPatVar name y) -> if (x==y)
-                                         then DBPatVar absurdPatternName y
-                                         else DBPatVar name y)
-                  ps
+      let absurdp = VarP PatOAbsurd $ SplitPatVar underscore 0 []
+          rho = liftS x $ consS absurdp $ raiseS 1
+          ps' = applySubst rho ps
       return $ Left $ SClause
-               { scTel  = telFromList $ telToList delta1 ++
-                                        [fmap ((,) "()") t] ++ -- add name "()"
-                                        telToList delta2
-               , scPats = ps
-               , scSubst = idS -- not used anyway
-               , scModuleParameterSub = __IMPOSSIBLE__ -- not used
-               , scTarget = Nothing -- not used
+               { scTel  = tel
+               , scPats = ps'
+               , scSubst              = __IMPOSSIBLE__ -- not used
+               , scCheckpoints        = __IMPOSSIBLE__ -- not used
+               , scTarget             = Nothing
                }
 
     -- Andreas, 2011-10-03
@@ -803,36 +861,37 @@
 
   -- Andreas, 2012-10-10 fail if precomputed constructor set does not cover
   -- all the data type constructors
-
-    _ | Just pcons' <- mcons,
-        let pcons = map conName pcons',
-        let cons = (map fst ns),
-        let diff = Set.fromList cons Set.\\ Set.fromList pcons,
+  -- Andreas, 2017-10-08 ... unless partial covering is explicitly allowed.
+    _ | allowPartialCover == NoAllowPartialCover,
+        overlap == False,
+        let ptags = map (SplitCon . conName) pcons' ++ map SplitLit plits,
+        let tags  = map fst ns,
+        let diff  = Set.fromList tags Set.\\ Set.fromList ptags,
         not (Set.null diff) -> do
           liftTCM $ reportSDoc "tc.cover.precomputed" 10 $ vcat
-            [ hsep $ text "pcons =" : map prettyTCM pcons
-            , hsep $ text "cons  =" : map prettyTCM cons
+            [ hsep $ text "ptags =" : map prettyTCM ptags
+            , hsep $ text "tags  =" : map prettyTCM tags
             ]
           throwError (GenericSplitError "precomputed set of constructors does not cover all cases")
 
-    _  -> return $ Right $ Covering (lookupPatternVar sc x) ns
+    _  -> do
+      liftTCM $ checkSortOfSplitVar $ unDom t
+      return $ Right $ Covering (lookupPatternVar sc x) ns
 
   where
-    inContextOfT :: MonadTCM tcm => tcm a -> tcm a
-    inContextOfT = addContext tel . escapeContext (x + 1)
-
-    inContextOfDelta2 :: MonadTCM tcm => tcm a -> tcm a
+    inContextOfT, inContextOfDelta2 :: (MonadTCM tcm, MonadDebug tcm) => tcm a -> tcm a
+    inContextOfT      = addContext tel . escapeContext (x + 1)
     inContextOfDelta2 = addContext tel . escapeContext x
 
     -- Debug printing
-    debugInit tel x ps mpsub = liftTCM $ inTopContext $ do
+    debugInit tel x ps cps = liftTCM $ inTopContext $ do
       reportSDoc "tc.cover.top" 10 $ vcat
         [ text "TypeChecking.Coverage.split': split"
         , nest 2 $ vcat
           [ text "tel     =" <+> prettyTCM tel
           , text "x       =" <+> prettyTCM x
-          , text "ps      =" <+> do addContext tel $ prettyTCMPatternList ps
-          , text "mpsub   =" <+> prettyTCM mpsub
+          , text "ps      =" <+> do addContext tel $ prettyTCMPatternList $ fromSplitPatterns ps
+          , text "cps     =" <+> prettyTCM cps
           ]
         ]
 
@@ -845,13 +904,31 @@
         , text "t      =" <+> inContextOfT (prettyTCM t)
         ]
 
+-- | What could go wrong if we try to split on the result?
+data CosplitError
+  = CosplitNoTarget
+      -- ^ We do not know the target type of the clause.
+  | CosplitNoRecordType Telescope Type
+      -- ^ Type living in the given telescope is not a record type.
+  | CosplitIrrelevantProjections
+      -- ^ Record has irrelevant fields, but we do not have irrelevant projections.
+
+instance PrettyTCM CosplitError where
+  prettyTCM = \case
+    CosplitNoTarget ->
+      text "target type is unknown"
+    CosplitIrrelevantProjections ->
+      text "record has irrelevant fields, but no corresponding projections"
+    CosplitNoRecordType tel t -> addContext tel $ do
+      text "target type " <+> prettyTCM t <+> text " is not a record type"
+
 -- | @splitResult f sc = return res@
 --
 --   If the target type of @sc@ is a record type, a covering set of
 --   split clauses is returned (@sc@ extended by all valid projection patterns),
 --   otherwise @res == Nothing@.
 --   Note that the empty set of split clauses is returned if the record has no fields.
-splitResult :: QName -> SplitClause -> TCM (Maybe Covering)
+splitResult :: QName -> SplitClause -> TCM (Either CosplitError Covering)
 splitResult f sc@(SClause tel ps _ _ target) = do
   reportSDoc "tc.cover.split" 10 $ vcat
     [ text "splitting result:"
@@ -859,8 +936,8 @@
     , nest 2 $ text "target =" <+> (addContext tel $ maybe empty prettyTCM target)
     ]
   -- if we want to split projections, but have no target type, we give up
-  let done = return Nothing
-  caseMaybe target done $ \ t -> do
+  let failure = return . Left
+  caseMaybe target (failure CosplitNoTarget) $ \ t -> do
     isR <- addContext tel $ isRecordType $ unArg t
     case isR of
       Just (_r, vs, Record{ recFields = fs }) -> do
@@ -869,21 +946,24 @@
           , text   "applied to parameters vs = " <+> (addContext tel $ prettyTCM vs)
           , text $ "and have fields       fs = " ++ prettyShow fs
           ]
-        let es = patternsToElims ps
+        -- Andreas, 2018-03-19, issue #2971, check that we have a "strong" record type,
+        -- i.e., with all the projections.  Otherwise, we may not split.
+        ifNotM (strongRecord fs) (failure CosplitIrrelevantProjections) $ {-else-} do
+        let es = patternsToElims $ fromSplitPatterns ps
         -- Note: module parameters are part of ps
         let self  = defaultArg $ Def f [] `applyE` es
             pargs = vs ++ [self]
         reportSDoc "tc.cover" 20 $ sep
           [ text   "we are              self = " <+> (addContext tel $ prettyTCM $ unArg self)
           ]
-        let n = defaultArg $ permRange $ fromMaybe __IMPOSSIBLE__ $ dbPatPerm ps
+        let n = defaultArg $ permRange $ fromMaybe __IMPOSSIBLE__ $ dbPatPerm $ fromSplitPatterns ps
             -- Andreas & James, 2013-11-19 includes the dot patterns!
             -- See test/succeed/CopatternsAndDotPatterns.agda for a case with dot patterns
             -- and copatterns which fails for @n = size tel@ with a broken case tree.
 
         -- Andreas, 2016-07-22 read the style of projections from the user's lips
         projOrigin <- ifM (optPostfixProjections <$> pragmaOptions) (return ProjPostfix) (return ProjPrefix)
-        Just . Covering n <$> do
+        Right . Covering n <$> do
           forM fs $ \ proj -> do
             -- compute the new target
             dType <- defType <$> do getConstInfo $ unArg proj -- WRONG: typeOfConst $ unArg proj
@@ -894,20 +974,28 @@
                          , scSubst  = idS
                          , scTarget = target'
                          }
-            return (unArg proj, sc')
-      _ -> done
+            return (SplitCon (unArg proj), sc')
+      _ -> failure $ CosplitNoRecordType tel $ unArg t
+  where
+  -- A record type is strong if it has all the projections.
+  -- This is the case if --irrelevant-projections or no field is irrelevant.
+  -- TODO: what about shape irrelevance?
+  strongRecord :: [Arg QName] -> TCM Bool
+  strongRecord fs = (optIrrelevantProjections <$> pragmaOptions) `or2M`
+    (return $ not $ any isIrrelevant fs)
 
+
 -- * Boring instances
 
 -- | For debugging only.
 instance PrettyTCM SplitClause where
-  prettyTCM (SClause tel pats sigma mpsub target) = sep
+  prettyTCM (SClause tel pats sigma cps target) = sep
     [ text "SplitClause"
     , nest 2 $ vcat
       [ text "tel          =" <+> prettyTCM tel
       , text "pats         =" <+> sep (map (prettyTCM . namedArg) pats)
       , text "subst        =" <+> (text . show) sigma
-      , text "mpsub        =" <+> prettyTCM mpsub
+      , text "checkpoints  =" <+> prettyTCM cps
       , text "target       =" <+> do
           caseMaybe target empty $ \ t -> do
             addContext tel $ 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
@@ -2,12 +2,14 @@
 
 module Agda.TypeChecking.Coverage.Match where
 
-import Control.Applicative
 import Control.Monad.State
 
+import Prelude hiding ( null )
+
 import qualified Data.List as List
-import Data.Maybe (mapMaybe, isJust)
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, mconcat, Any(..))
+import Data.Maybe (mapMaybe, isJust, fromMaybe)
+import Data.Monoid ( Monoid, mempty, mappend, mconcat )
+import Data.Semigroup ( Semigroup, (<>), Any(..) )
 import Data.Traversable (traverse)
 
 import Agda.Syntax.Abstract (IsProjP(..))
@@ -17,11 +19,14 @@
 import Agda.Syntax.Literal
 
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Pretty ( PrettyTCM(..) )
 import Agda.TypeChecking.Records
 import Agda.TypeChecking.Substitute
 
+import Agda.Utils.Null
 import Agda.Utils.Permutation
-import Agda.Utils.Pretty ( Pretty(pretty), text, (<+>) )
+import Agda.Utils.Pretty ( Pretty(..), text, (<+>), cat , prettyList_ )
+import qualified Agda.Utils.Pretty as P
 import Agda.Utils.Size
 import Agda.Utils.List
 import Agda.Utils.Monad
@@ -44,100 +49,168 @@
 -}
 
 -- | Match the given patterns against a list of clauses
-match :: [Clause] -> [NamedArg DeBruijnPattern] -> Match (Nat,([DeBruijnPattern],[Literal]))
+match :: [Clause] -> [NamedArg SplitPattern] -> Match (Nat,[SplitPattern])
 match cs ps = foldr choice No $ zipWith matchIt [0..] cs
   where
-    -- 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 = (i,) <$>
-      matchClause yesMatchLit ps i c +++
-      matchClause noMatchLit  ps i c
+    matchIt i c = (i,) <$> matchClause ps c
 
-    Yes _     +++ m = m
-    No        +++ _ = No
-    m@Block{} +++ _ = m
+-- | For each variable in the patterns of a split clause, we remember the
+--   de Bruijn-index and the literals excluded by previous matches.
+data SplitPatVar = SplitPatVar
+  { splitPatVarName   :: PatVarName
+  , splitPatVarIndex  :: Int
+  , splitExcludedLits :: [Literal]
+  } deriving (Show)
 
--- | Convert the root of a term into a pattern constructor, if possible.
-buildPattern :: Term -> Maybe DeBruijnPattern
-buildPattern (Con c ci args) = Just $
-  ConP c (toConPatternInfo ci) $ map (fmap $ unnamed . DotP) args
-buildPattern (Var i [])     = Just $ deBruijnVar i
-buildPattern (Shared p)     = buildPattern (derefPtr p)
-buildPattern _              = Nothing
+instance Pretty SplitPatVar where
+  prettyPrec _ x =
+    (text $ patVarNameToString (splitPatVarName x)) P.<>
+    (text $ "@" ++ show (splitPatVarIndex x)) P.<>
+    (ifNull (splitExcludedLits x) empty $ \lits ->
+      text "\\{" P.<> prettyList_ lits P.<> text "}")
 
+instance PrettyTCM SplitPatVar where
+  prettyTCM = prettyTCM . var . splitPatVarIndex
+
+type SplitPattern = Pattern' SplitPatVar
+
+toSplitVar :: DBPatVar -> SplitPatVar
+toSplitVar x = SplitPatVar (dbPatVarName x) (dbPatVarIndex x) []
+
+fromSplitVar :: SplitPatVar -> DBPatVar
+fromSplitVar x = DBPatVar (splitPatVarName x) (splitPatVarIndex x)
+
+toSplitPatterns :: [NamedArg DeBruijnPattern] -> [NamedArg SplitPattern]
+toSplitPatterns = (fmap . fmap . fmap . fmap) toSplitVar
+
+fromSplitPatterns :: [NamedArg SplitPattern] -> [NamedArg DeBruijnPattern]
+fromSplitPatterns = (fmap . fmap . fmap . fmap) fromSplitVar
+
+instance DeBruijn SplitPattern where
+  debruijnNamedVar n i  = varP $ SplitPatVar n i []
+  deBruijnView _        = Nothing
+
+type SplitPSubstitution = Substitution' SplitPattern
+
+toSplitPSubst :: PatternSubstitution -> SplitPSubstitution
+toSplitPSubst = (fmap . fmap) toSplitVar
+
+fromSplitPSubst :: SplitPSubstitution -> PatternSubstitution
+fromSplitPSubst = (fmap . fmap) fromSplitVar
+
+applySplitPSubst :: (Subst Term a) => SplitPSubstitution -> a -> a
+applySplitPSubst = applyPatSubst . fromSplitPSubst
+
+-- TODO: merge this instance and the one for DeBruijnPattern in
+-- Substitute.hs into one for Subst (Pattern' a) (Pattern' a).
+instance Subst SplitPattern SplitPattern where
+  applySubst IdS p = p
+  applySubst rho p = case p of
+    VarP o x     ->
+      usePatOrigin o $
+      useName (splitPatVarName x) $
+      useExcludedLits (splitExcludedLits x) $
+      lookupS rho $ splitPatVarIndex x
+    DotP o u     -> DotP o $ applySplitPSubst rho u
+    ConP c ci ps -> ConP c ci $ applySubst rho ps
+    LitP x       -> p
+    ProjP{}      -> p
+
+    where
+      useName :: PatVarName -> SplitPattern -> SplitPattern
+      useName n (VarP o x)
+        | isUnderscore (splitPatVarName x)
+        = VarP o $ x { splitPatVarName = n }
+      useName _ x = x
+
+      useExcludedLits :: [Literal] -> SplitPattern -> SplitPattern
+      useExcludedLits lits = \case
+        (VarP o x) -> VarP o $ x
+          { splitExcludedLits = lits ++ splitExcludedLits x }
+        p -> p
+
+
 -- | A pattern that matches anything (modulo eta).
 isTrivialPattern :: (HasConstInfo m) => Pattern' a -> m Bool
 isTrivialPattern p = case p of
   VarP{}      -> return True
   DotP{}      -> return True
-  AbsurdP{}   -> return True
   ConP c i ps -> andM $ (isEtaCon $ conName c)
                       : (map (isTrivialPattern . namedArg) ps)
   LitP{}      -> return False
   ProjP{}     -> return False
 
 -- | If matching succeeds, we return the instantiation of the clause pattern vector
---   to obtain the split clause pattern vector, plus the literals of the clause patterns
---   matched against split clause variables.
-type MatchResult = Match ([DeBruijnPattern],[Literal])
+--   to obtain the split clause pattern vector.
+type MatchResult = Match [SplitPattern]
 
 -- | If matching is inconclusive (@Block@) we want to know which
 --   variables are blocking the match.
 data Match a
   = Yes a   -- ^ Matches unconditionally.
   | No      -- ^ Definitely does not match.
-  | Block Any BlockingVars
-            -- ^ Could match if non-empty list of blocking variables
-            --   is instantiated properly.
-            --   Also 'Any' is 'True' if all clauses have a result split.
-            --   (Only then can we do result splitting.)
+  | Block
+    { blockedOnResult :: Bool
+      -- ^ True if the clause has a result split
+    , blockedOnVars :: BlockingVars
+      -- ^ @BlockingVar i cs ls o@ means variable @i@ is blocked on
+      -- constructors @cs@ and literals @ls@.
+    }
   deriving (Functor)
 
 -- | Variable blocking a match.
-data BlockingVar  = BlockingVar
-  { blockingVarNo   :: Nat
+data BlockingVar = BlockingVar
+  { blockingVarNo  :: Nat
     -- ^ De Bruijn index of variable blocking the match.
-  , blockingVarCons :: Maybe [ConHead]
-    -- ^ @Nothing@ means there is an overlapping match for this variable.
-    --   This happens if one clause has a constructor pattern at this position,
-    --   and another a variable.  It is also used for "just variable".
-    --
-    --   @Just cons@ means that it is an non-overlapping match and
-    --   @cons@ are the encountered constructors.
+  , blockingVarCons :: [ConHead]
+    -- ^ Constructors in this position.
+  , blockingVarLits :: [Literal]
+    -- ^ Literals in this position.
+  , blockingVarOverlap :: Bool
+    -- ^ True if at least one clause has a variable pattern in this
+    --   position.
   } deriving (Show)
 
 instance Pretty BlockingVar where
-  pretty (BlockingVar i mcs) = case mcs of
-    Nothing -> text $ "blocking var " ++ show i ++ " (overlapping)"
-    Just cs -> text ("blocking var " ++ show i ++ " (non-overlapping); constructors:")
-      <+> pretty cs
+  pretty (BlockingVar i cs ls o) = cat
+    [ text ("variable " ++ show i)
+    , if null cs then empty else text " blocked on constructors" <+> pretty cs
+    , if null ls then empty else text " blocked on literals" <+> pretty ls
+    , if o then text " (overlapping)" else empty
+    ]
 
 type BlockingVars = [BlockingVar]
 
+blockedOnConstructor :: Nat -> ConHead -> Match a
+blockedOnConstructor i c = Block False [BlockingVar i [c] [] False]
+
+blockedOnLiteral :: Nat -> Literal -> Match a
+blockedOnLiteral i l = Block False [BlockingVar i [] [l] False]
+
+blockedOnProjection :: Match a
+blockedOnProjection = Block True []
+
 -- | Lens for 'blockingVarCons'.
-mapBlockingVarCons :: (Maybe [ConHead] -> Maybe [ConHead]) -> BlockingVar -> BlockingVar
+mapBlockingVarCons :: ([ConHead] -> [ConHead]) -> BlockingVar -> BlockingVar
 mapBlockingVarCons f b = b { blockingVarCons = f (blockingVarCons b) }
 
-clearBlockingVarCons :: BlockingVar -> BlockingVar
-clearBlockingVarCons = mapBlockingVarCons $ const Nothing
+-- | Lens for 'blockingVarLits'.
+mapBlockingVarLits :: ([Literal] -> [Literal]) -> BlockingVar -> BlockingVar
+mapBlockingVarLits f b = b { blockingVarLits = f (blockingVarLits b) }
 
+setBlockingVarOverlap :: BlockingVar -> BlockingVar
+setBlockingVarOverlap = \x -> x { blockingVarOverlap = True }
+
 overlapping :: BlockingVars -> BlockingVars
-overlapping = map clearBlockingVarCons
+overlapping = map setBlockingVarOverlap
 
 -- | Left dominant merge of blocking vars.
 zipBlockingVars :: BlockingVars -> BlockingVars -> BlockingVars
 zipBlockingVars xs ys = map upd xs
   where
-    upd (BlockingVar x (Just cons))
-      | Just (BlockingVar _ (Just cons')) <- List.find ((x ==) . blockingVarNo) ys
-                          = BlockingVar x (Just $ cons ++ cons')
-    upd (BlockingVar x _) = BlockingVar x Nothing
+    upd (BlockingVar x cons lits o) = case List.find ((x ==) . blockingVarNo) ys of
+      Just (BlockingVar _ cons' lits' o') -> BlockingVar x (cons ++ cons') (lits ++ lits') (o || o')
+      Nothing -> BlockingVar x cons lits True
 
 -- | @choice m m'@ combines the match results @m@ of a function clause
 --   with the (already combined) match results $m'$ of the later clauses.
@@ -146,57 +219,25 @@
 --   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 r xs) (Block s ys) = Block (Any $ getAny r && getAny s) $
-  zipBlockingVars xs ys
+choice (Block r xs) (Block s ys) = Block (r && s) $ zipBlockingVars xs ys
 choice (Block r xs) (Yes _)      = Block r $ overlapping xs
 choice m@Block{}    No           = m
 choice No           m            = m
 
--- | Could the literal cover (an instantiation of) the split clause pattern?
---   Basically, the split clause pattern needs to be a variable.
---
---   Note: literal patterns do not occur in the split clause
---   since we cannot split into all possible literals (that would be infeasible).
-type MatchLit = Literal -> DeBruijnPattern -> MatchResult
-
--- | Use this function if literal patterns should not cover a split clause pattern.
-noMatchLit :: MatchLit
-noMatchLit _ _ = No
-
--- | Use this function if a literal pattern should cover a split clause variable pattern.
-yesMatchLit :: MatchLit
-yesMatchLit l q@VarP{} = Yes ([q], [l])
-yesMatchLit l (DotP t) = maybe No (yesMatchLit l) $ buildPattern t
-yesMatchLit _ ConP{}   = No
-yesMatchLit _ ProjP{}  = No
-yesMatchLit _ AbsurdP{} = __IMPOSSIBLE__
-yesMatchLit _ LitP{}   = __IMPOSSIBLE__
-
--- | Check if a clause could match given generously chosen literals
-matchLits :: Clause -> [NamedArg DeBruijnPattern] -> Maybe [Literal]
-matchLits c ps =
-  case matchClause yesMatchLit ps 0 c of
-    Yes (qs,ls) -> Just ls
-    _ -> Nothing
-
--- | @matchClause mlit qs i c@ checks whether clause @c@ number @i@
+-- | @matchClause qs i c@ checks whether clause @c@
 --   covers a split clause with patterns @qs@.
 matchClause
-  :: MatchLit
-     -- ^ Consider literals?
-  -> [NamedArg DeBruijnPattern]
+  :: [NamedArg SplitPattern]
      -- ^ Split clause patterns @qs@.
-  -> Nat
-     -- ^ Clause number @i@.
   -> Clause
      -- ^ Clause @c@ to cover split clause.
   -> MatchResult
      -- ^ Result.
      --   If 'Yes' the instantiation @rs@ such that @(namedClausePats c)[rs] == qs@.
-matchClause mlit qs i c = matchPats mlit (namedClausePats c) qs
+matchClause qs c = matchPats (namedClausePats c) qs
 
 
--- | @matchPats mlit ps qs@ checks whether a function clause with patterns
+-- | @matchPats ps qs@ checks whether a function clause with patterns
 --   @ps@ covers a split clause with patterns @qs@.
 --
 --   Issue #842 / #1986: This is accepted:
@@ -212,18 +253,16 @@
 --   in @mconcat []@ which is @Yes []@.
 
 matchPats
-  :: MatchLit
-     -- ^ Matcher for literals.
-  -> [NamedArg (Pattern' a)]
+  :: [NamedArg (Pattern' a)]
      -- ^ Clause pattern vector @ps@ (to cover split clause pattern vector).
-  -> [NamedArg DeBruijnPattern]
+  -> [NamedArg SplitPattern]
      -- ^ Split clause pattern vector @qs@ (to be covered by clause pattern vector).
   -> MatchResult
      -- ^ Result.
      --   If 'Yes' the instantiation @rs@ such that @ps[rs] == qs@.
 
-matchPats mlit ps qs = mconcat $ [ projPatternsLeftInSplitClause ] ++
-    zipWith (matchPat mlit) (map namedArg ps) (map namedArg qs) ++
+matchPats ps qs = mconcat $ [ projPatternsLeftInSplitClause ] ++
+    zipWith matchPat (map namedArg ps) (map namedArg qs) ++
     [ projPatternsLeftInMatchedClause ]
   where
     -- Patterns left in split clause:
@@ -244,7 +283,7 @@
     projPatternsLeftInMatchedClause =
         case mapMaybe isProjP psrest of
             [] -> mempty               -- no proj. patterns left
-            ds -> Block (Any True) []  -- proj. patterns left
+            ds -> blockedOnProjection  -- proj. patterns left
 
 
 -- | Combine results of checking whether function clause patterns
@@ -265,7 +304,7 @@
   Yes _      <> m          = m
   No         <> _          = No
   Block{}    <> No         = No
-  Block r xs <> Block s ys = Block (r <> s) (xs <> ys)
+  Block r xs <> Block s ys = Block (r || s) (xs ++ ys)
   m@Block{}  <> Yes{}      = m
 
 instance (Semigroup a, Monoid a) => Monoid (Match a) where
@@ -273,42 +312,47 @@
   mappend = (<>)
 
 
--- | @matchPat mlit p q@ checks whether a function clause pattern @p@
+-- | @matchPat p q@ checks whether a function clause pattern @p@
 --   covers a split clause pattern @q@.  There are three results:
 --   @Yes rs@ means it covers, because @p@ is a variable pattern. @rs@ collects
 --   the instantiations of the variables in @p@ s.t. @p[rs] = q@.
 --   @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@.
+--   @BlockLit [x] means @p@ is a proper instance of @q@ and could become
+--   a cover if variable @x@ is instantiated with an appropriate literal.
 
 matchPat
-  :: MatchLit
-     -- ^ Matcher for literals.
-  -> Pattern' a
+  :: Pattern' a
      -- ^ Clause pattern @p@ (to cover split clause pattern).
-  -> DeBruijnPattern
+  -> SplitPattern
      -- ^ Split clause pattern @q@ (to be covered by clause pattern).
   -> MatchResult
      -- ^ Result.
      --   If 'Yes', also the instantiation @rs@ of the clause pattern variables
      --   to produce the split clause pattern, @p[rs] = q@.
 
-matchPat _    VarP{}   q = Yes ([q],[])
-matchPat _    DotP{}   q = mempty
-matchPat _    AbsurdP{} q = mempty
+matchPat VarP{}   q = Yes [q]
+matchPat DotP{}   q = mempty
 -- Jesper, 2014-11-04: putting 'Yes [q]' here triggers issue 1333.
 -- Not checking for trivial patterns should be safe here, as dot patterns are
 -- guaranteed to match if the rest of the pattern does, so some extra splitting
 -- on them doesn't change the reduction behaviour.
-matchPat mlit (LitP l) q = mlit l q
-matchPat _    (ProjP _ d) (ProjP _ d') = if d == d' then mempty else No
-matchPat _    ProjP{} _ = __IMPOSSIBLE__
-matchPat mlit p@(ConP c _ ps) q = case q of
-  VarP x -> Block (Any False) [BlockingVar (dbPatVarIndex x) (Just [c])]
+matchPat p@(LitP l) q = case q of
+  VarP _ x -> if l `elem` splitExcludedLits x
+              then No
+              else blockedOnLiteral (splitPatVarIndex x) l
+  ConP{}   -> No
+  DotP{}   -> No
+  LitP l'  -> if l == l' then Yes [] else No
+  ProjP{}  -> __IMPOSSIBLE__  -- excluded by typing
+matchPat (ProjP _ d) (ProjP _ d') = if d == d' then mempty else No
+matchPat ProjP{} _ = __IMPOSSIBLE__
+matchPat p@(ConP c _ ps) q = case q of
+  VarP _ x -> blockedOnConstructor (splitPatVarIndex x) c
   ConP c' i qs
-    | c == c'   -> matchPats mlit ps qs
+    | c == c'   -> matchPats ps qs
     | otherwise -> No
-  DotP t  -> maybe No (matchPat mlit p) $ buildPattern t
-  AbsurdP{} -> __IMPOSSIBLE__  -- excluded by typing
-  LitP _  -> __IMPOSSIBLE__  -- split clause has no literal patterns
-  ProjP{} -> __IMPOSSIBLE__  -- excluded by typing
+  DotP o t  -> No
+  LitP _    -> No
+  ProjP{}   -> __IMPOSSIBLE__  -- excluded by typing
diff --git a/src/full/Agda/TypeChecking/Coverage/SplitTree.hs b/src/full/Agda/TypeChecking/Coverage/SplitTree.hs
--- a/src/full/Agda/TypeChecking/Coverage/SplitTree.hs
+++ b/src/full/Agda/TypeChecking/Coverage/SplitTree.hs
@@ -18,15 +18,18 @@
 import Agda.Syntax.Abstract.Name
 import Agda.Syntax.Common
 import Agda.Syntax.Internal as I
+import Agda.Syntax.Literal
 
+import Agda.TypeChecking.Pretty ( PrettyTCM(..) )
+
 import Agda.Utils.Monad
 import Agda.Utils.Pretty
 
 #include "undefined.h"
 import Agda.Utils.Impossible
 
-type SplitTree  = SplitTree'  QName
-type SplitTrees = SplitTrees' QName
+type SplitTree  = SplitTree'  SplitTag
+type SplitTrees = SplitTrees' SplitTag
 
 -- | Abstract case tree shape.
 data SplitTree' a
@@ -46,6 +49,25 @@
 --   so many constructors per data type, and there is no need for
 --   random access.
 type SplitTrees' a = [(a, SplitTree' a)]
+
+-- | Tag for labeling branches of a split tree. Each branch is associated to
+--   either a constructor or a literal, or is a catchall branch (currently
+--   only used for splitting on a literal type).
+data SplitTag
+  = SplitCon QName
+  | SplitLit Literal
+  | SplitCatchall
+  deriving (Show, Eq, Ord)
+
+instance Pretty SplitTag where
+  pretty (SplitCon c)  = pretty c
+  pretty (SplitLit l)  = pretty l
+  pretty SplitCatchall = underscore
+
+instance PrettyTCM SplitTag where
+  prettyTCM (SplitCon c)  = prettyTCM c
+  prettyTCM (SplitLit l)  = prettyTCM l
+  prettyTCM SplitCatchall = return underscore
 
 -- * Printing a split tree
 
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
@@ -34,7 +34,7 @@
 --   if possible.
 getConForm :: QName -> TCM (Either SigError ConHead)
 getConForm c = caseEitherM (getConHead c) (return . Left) $ \ ch -> do
-  Con con _ [] <- ignoreSharing <$> constructorForm (Con ch ConOCon [])
+  Con con _ [] <- constructorForm (Con ch ConOCon [])
   return $ Right con
 
 -- | Augment constructor with record fields (preserve constructor name).
@@ -118,7 +118,7 @@
   reportSLn "tc.getConType" 35 $ List.intercalate " " $
     [ "getFullyAppliedConType", prettyShow c, prettyShow t ]
   c <- fromRight __IMPOSSIBLE__ <$> do getConHead $ conName c
-  case ignoreSharing $ unEl t of
+  case unEl t of
     -- Note that if we come e.g. from getConType,
     -- then the non-parameter arguments of @es@ might contain __IMPOSSIBLE__
     -- coming from strengthening.  (Thus, printing them is not safe.)
@@ -137,9 +137,6 @@
         _ ->  return Nothing
     _ -> return Nothing
 
-data HasEta = NoEta | YesEta
-  deriving (Eq)
-
 data ConstructorInfo
   = DataCon Nat                  -- ^ Arity.
   | RecordCon HasEta [Arg QName] -- ^ List of field names.
@@ -155,7 +152,7 @@
     Constructor{ conData = d, conArity = n } -> do
       (theDef <$> getConstInfo d) >>= \case
         r@Record{ recFields = fs } ->
-           return $ RecordCon (if recEtaEquality r then YesEta else NoEta) fs
+           return $ RecordCon (recEtaEquality r) fs
         Datatype{} ->
            return $ DataCon n
         _ -> __IMPOSSIBLE__
@@ -186,7 +183,7 @@
 -- | Precodition: 'Term' is 'reduce'd.
 isDataOrRecord :: Term -> TCM (Maybe QName)
 isDataOrRecord v = do
-  case ignoreSharing v of
+  case v of
     Def d _ -> fmap (const d) <$> isDataOrRecordType d
     _       -> return Nothing
 
@@ -201,12 +198,35 @@
 
 -- | Precondition: Name is a data or record type.
 getConstructors :: QName -> TCM [QName]
-getConstructors d = do
-  def <- theDef <$> getConstInfo d
-  case def of
-    Datatype{dataCons = cs} -> return cs
-    Record{recConHead = h}  -> return [conName h]
-    _                       -> __IMPOSSIBLE__
+getConstructors d = fromMaybe __IMPOSSIBLE__ <$>
+  getConstructors' d
+
+-- | 'Nothing' if not data or record type name.
+getConstructors' :: QName -> TCM (Maybe [QName])
+getConstructors' d = getConstructors_ . theDef <$> getConstInfo d
+
+-- | 'Nothing' if not data or record definition.
+getConstructors_ :: Defn -> Maybe [QName]
+getConstructors_ = \case
+    Datatype{dataCons = cs} -> Just cs
+    Record{recConHead = h}  -> Just [conName h]
+    _                       -> Nothing
+
+-- | Precondition: Name is a data or record type.
+getConHeads :: QName -> TCM [ConHead]
+getConHeads d = fromMaybe __IMPOSSIBLE__ <$>
+  getConHeads' d
+
+-- | 'Nothing' if not data or record type name.
+getConHeads' :: QName -> TCM (Maybe [ConHead])
+getConHeads' d = getConHeads_ . theDef <$> getConstInfo d
+
+-- | 'Nothing' if not data or record definition.
+getConHeads_ :: Defn -> Maybe [ConHead]
+getConHeads_ = \case
+    Datatype{dataCons = cs} -> Just $ map (\ c -> ConHead c Inductive []) cs
+    Record{recConHead = h}  -> Just [h]
+    _                       -> Nothing
 
 {- UNUSED
 data DatatypeInfo = DataInfo
diff --git a/src/full/Agda/TypeChecking/DeadCode.hs b/src/full/Agda/TypeChecking/DeadCode.hs
--- a/src/full/Agda/TypeChecking/DeadCode.hs
+++ b/src/full/Agda/TypeChecking/DeadCode.hs
@@ -1,7 +1,6 @@
 {-# LANGUAGE CPP #-}
 module Agda.TypeChecking.DeadCode (eliminateDeadCode) where
 
-import Control.Applicative
 import Control.Monad
 import Data.Map (Map)
 import qualified Data.Map as Map
@@ -41,7 +40,10 @@
   patsyn <- getPatternSyns
   public <- Set.map anameName . publicNames <$> getScope
   defs <- traverse instantiateFull $ sig ^. sigDefinitions
-  let r     = reachableFrom public patsyn defs
+  -- #2921: Eliminating definitions with attached COMPILE pragmas results in
+  -- the pragmas not being checked. Simple solution: don't eliminate these.
+  let hasCompilePragma = Set.fromList . HMap.keys . HMap.filter (not . Map.null . defCompiledRep) $ defs
+  let r     = reachableFrom (Set.union public hasCompilePragma) patsyn defs
       dead  = Set.fromList (HMap.keys defs) `Set.difference` r
       valid = Set.null . Set.intersection dead . namesIn
       defs' = HMap.map ( \ d -> d { defDisplay = filter valid (defDisplay d) } )
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
@@ -6,12 +6,12 @@
 module Agda.TypeChecking.DisplayForm where
 
 import Prelude hiding (all)
-import Control.Applicative
 import Control.Monad
 import Control.Monad.Trans (lift)
 import Control.Monad.Trans.Maybe
 import Data.Foldable (all)
 import qualified Data.Set as Set
+import qualified Data.Map as Map
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
@@ -25,9 +25,10 @@
 
 import Agda.Utils.Except
 import Agda.Utils.Functor
+import Agda.Utils.Lens
 import Agda.Utils.List
 import Agda.Utils.Maybe
-import Agda.Utils.Pretty ( prettyShow )
+import Agda.Utils.Pretty
 
 #include "undefined.h"
 import Agda.Utils.Impossible
@@ -37,7 +38,7 @@
 dtermToTerm dt = case dt of
   DWithApp d ds es ->
     dtermToTerm d `apply` map (defaultArg . dtermToTerm) ds `applyE` es
-  DCon c ci args   -> Con c ci $ map (fmap dtermToTerm) args
+  DCon c ci args   -> Con c ci $ map (Apply . fmap dtermToTerm) args
   DDef f es        -> Def f $ map (fmap dtermToTerm) es
   DDot v           -> v
   DTerm v          -> v
@@ -52,16 +53,23 @@
 --   @dt@ if successful.  First match wins.
 displayForm :: QName -> Elims -> TCM (Maybe DisplayTerm)
 displayForm q es = do
-    -- Get display forms for name q.
-    odfs  <- getDisplayForms q `catchError` \_ -> return []
+  -- Get display forms for name q.
+  odfs  <- getDisplayForms q
+  if (null odfs) then do
+    reportSLn "tc.display.top" 101 $ "no displayForm for " ++ prettyShow q
+    return Nothing
+  else do
     -- Display debug info about the @Open@s.
-    unless (null odfs) $ verboseS "tc.display.top" 100 $ do
-      n <- getContextId
-      reportSLn "tc.display.top" 100 $
-        "displayForm for " ++ prettyShow q ++ ": context = " ++ show n ++
-        ", dfs = " ++ show odfs
+    verboseS "tc.display.top" 100 $ unlessDebugPrinting $ do
+      cps <- view eCheckpoints
+      cxt <- getContextTelescope
+      reportSDoc "tc.display.top" 100 $ return $ vcat
+        [ text "displayForm for" <+> pretty q
+        , nest 2 $ text "cxt =" <+> pretty cxt
+        , nest 2 $ text "cps =" <+> vcat (map pretty (Map.toList cps))
+        , nest 2 $ text "dfs =" <+> vcat (map pshow odfs) ]
     -- Use only the display forms that can be opened in the current context.
-    dfs   <- catMaybes <$> mapM getLocal odfs
+    dfs   <- catMaybes <$> mapM tryGetOpen odfs
     scope <- getScope
     -- Keep the display forms that match the application @q es@.
     ms <- do
@@ -69,7 +77,7 @@
       return [ m | Just (d, m) <- ms, wellScoped scope d ]
     -- Not safe when printing non-terminating terms.
     -- (nfdfs, us) <- normalise (dfs, es)
-    unless (null odfs) $ reportSLn "tc.display.top" 100 $ unlines
+    unlessDebugPrinting $ reportSLn "tc.display.top" 100 $ unlines
       [ "name        : " ++ prettyShow q
       , "displayForms: " ++ show dfs
       , "arguments   : " ++ show es
@@ -78,12 +86,6 @@
       ]
     -- Return the first display form that matches.
     return $ headMaybe ms
-
---  Andreas, 2014-06-11: The following error swallowing
---  is potentially harmful, making debugging harder.
---  I removed it, and it does not cause problems on the test suite.
---  `catchError` \_ -> return Nothing
-
   where
     -- Look at the original display form, not the instantiated result when
     -- checking if it's well-scoped. Otherwise we might pick up out of scope
@@ -140,7 +142,7 @@
       _                           -> mzero
 
 instance Match Term where
-  match p v = lift (instantiate v) >>= \ v -> case (ignoreSharing p, ignoreSharing v) of
+  match p v = lift (instantiate v) >>= \ v -> case (p, v) of
     (Var 0 [], v) -> return [ WithOrigin Inserted $ strengthen __IMPOSSIBLE__ v ]
     (Var i ps, Var j vs) | i == j  -> match ps vs
     (Def c ps, Def d vs) | c == d  -> match ps vs
@@ -184,7 +186,7 @@
 
 instance SubstWithOrigin (Arg Term) where
   substWithOrigin rho ots (Arg ai v) =
-    case ignoreSharing v of
+    case v of
       -- pattern variable: replace origin if better
       Var x [] -> case ots !!! x of
         Just (WithOrigin o u) -> Arg (mapOrigin (replaceOrigin o) ai) u
@@ -201,7 +203,7 @@
 
 instance SubstWithOrigin Term where
   substWithOrigin rho ots v =
-    case ignoreSharing v of
+    case v of
       -- constructor: recurse
       Con c ci args -> Con c ci $ substWithOrigin rho ots args
       -- def: recurse
diff --git a/src/full/Agda/TypeChecking/DropArgs.hs b/src/full/Agda/TypeChecking/DropArgs.hs
--- a/src/full/Agda/TypeChecking/DropArgs.hs
+++ b/src/full/Agda/TypeChecking/DropArgs.hs
@@ -5,7 +5,7 @@
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 
-import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Substitute
 
 import Agda.TypeChecking.CompiledClause
@@ -51,15 +51,13 @@
 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.
+-- | Use for dropping initial lambdas in 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
+  dropArgs n v = case 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
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
@@ -1,8 +1,6 @@
 
 module Agda.TypeChecking.Empty (isEmptyType) where
 
-import Control.Applicative
-import Control.Monad
 import Control.Monad.Except
 
 import Data.Semigroup
@@ -15,6 +13,7 @@
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Coverage
+import Agda.TypeChecking.Coverage.Match ( fromSplitPatterns )
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Records
 import Agda.TypeChecking.Reduce
@@ -41,7 +40,10 @@
 
 -- | Check whether a type is empty.
 --   This check may be postponed as emptiness constraint.
-isEmptyType :: Range -> Type -> TCM ()
+isEmptyType
+  :: Range   -- ^ Range of the absurd pattern.
+  -> Type    -- ^ Type that should be empty (empty data type or iterated product of such).
+  -> TCM ()
 isEmptyType r t = caseEitherM (loop t) failure return
   where
   failure DontKnow          = addConstraint $ IsEmpty r t
@@ -56,10 +58,10 @@
     case mr of
 
       -- If t is blocked or a meta, we cannot decide emptiness now.  Postpone.
-      Left Nothing -> return $ Left DontKnow
+      Left (Blocked m t) -> return $ Left DontKnow
 
       -- If t is not a record type, try to split
-      Left (Just t) -> do
+      Left (NotBlocked nb t) -> do
         -- from the current context xs:ts, create a pattern list
         -- xs _ : ts t and try to split on _ (the last variable)
         tel0 <- getContextTelescope
@@ -73,13 +75,13 @@
             Left UnificationStuck{} -> return $ Left DontKnow
             Left _                  -> return $ Left Fail
             Right cov -> do
-              let ps = map (namedArg . last . scPats) $ splitClauses cov
+              let ps = map (namedArg . last . fromSplitPatterns . scPats) $ splitClauses cov
               if (null ps) then return (Right ()) else
                 Left . FailBecause <$> do typeError_ $ ShouldBeEmpty t ps
 
       -- If t is a record type, see if any of the field types is empty
       Right (r, pars, def) -> do
-        if not $ recEtaEquality def then return $ Left Fail else do
+        if recEtaEquality def == NoEta then return $ Left Fail else do
           checkTel $ recTel def `apply` pars
 
   checkTel :: Telescope -> TCM (Either ErrorNonEmpty ())
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
@@ -16,15 +16,15 @@
   , sayWhen
   ) where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
 import Control.Monad.Reader
 import Control.Monad.State
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Foldable (foldMap)
-#endif
-
 import Data.Function
 import Data.List (nub, sortBy, intersperse, isInfixOf)
 import Data.Maybe
@@ -46,7 +46,7 @@
 import Agda.Syntax.Internal as I
 import Agda.Syntax.Translation.InternalToAbstract
 import Agda.Syntax.Translation.AbstractToConcrete
-import Agda.Syntax.Scope.Monad (isDatatypeModule)
+import Agda.Syntax.Scope.Monad (isDatatypeModule, withContextPrecedence)
 import Agda.Syntax.Scope.Base
 import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Monad.Closure
@@ -69,6 +69,7 @@
 import Agda.Utils.Maybe
 import Agda.Utils.Monad
 import Agda.Utils.Null
+import Agda.Utils.NonemptyList
 import Agda.Utils.Pretty ( prettyShow )
 import qualified Agda.Utils.Pretty as P
 import Agda.Utils.Size
@@ -163,7 +164,7 @@
       ++ [prettyTCM ocs]
 
     OldBuiltin old new -> fwords $
-      "Builtin " ++ old ++ " does no longer exist. " ++
+      "Builtin " ++ old ++ " no longer exists. " ++
       "It is now bound by BUILTIN " ++ new
 
     EmptyRewritePragma -> fsep . pwords $ "Empty REWRITE pragma"
@@ -174,6 +175,14 @@
       pwords "It is pointless for INLINE'd function" ++ [prettyTCM q] ++
       pwords "to have a separate Haskell definition"
 
+    InversionDepthReached f -> do
+      maxDepth <- maxInversionDepth
+      fsep $ pwords "Refusing to invert pattern matching of" ++ [prettyTCM f] ++
+             pwords ("because the maximum depth (" ++ show maxDepth ++ ") has been reached.") ++
+             pwords "Most likely this means you have an unsatisfiable constraint, but it could" ++
+             pwords "also mean that you need to increase the maximum depth using the flag" ++
+             pwords "--inversion-max-depth=N"
+
     GenericWarning d -> return d
 
     GenericNonFatalError d -> return d
@@ -184,7 +193,7 @@
     SafeFlagPragma xs ->
       let plural | length xs == 1 = ""
                  | otherwise      = "s"
-      in fsep $ [fwords ("Cannot set OPTION pragma" ++ plural)]
+      in fsep $ [fwords ("Cannot set OPTIONS pragma" ++ plural)]
                 ++ map text xs ++ [fwords "with safe flag."]
 
     SafeFlagNonTerminating -> fsep $
@@ -193,13 +202,13 @@
     SafeFlagTerminating -> fsep $
       pwords "Cannot use TERMINATING pragma with safe flag."
 
-    SafeFlagPrimTrustMe -> fsep (pwords "Cannot use primTrustMe with safe flag")
+    SafeFlagPrimTrustMe -> fsep (pwords "Cannot use primTrustMe with safe flag.")
 
     SafeFlagNoPositivityCheck -> fsep $
       pwords "Cannot use NO_POSITIVITY_CHECK pragma with safe flag."
 
     SafeFlagPolarity -> fsep $
-      pwords "The POLARITY pragma must not be used in safe mode."
+      pwords "Cannot use POLARITY pragma with safe flag."
 
     ParseWarning pw -> pretty pw
 
@@ -207,10 +216,10 @@
       [text old] ++ pwords "has been deprecated. Use" ++ [text new] ++ pwords
       "instead. This will be an error in Agda" ++ [text version <> text "."]
 
-    NicifierIssue ws -> vcat $ do
-      for ws $ \ w -> do
-        sayWhere (getRange w) $ pretty w
+    NicifierIssue w -> sayWhere (getRange w) $ pretty w
 
+    UserWarning str -> text str
+
 prettyTCWarnings :: [TCWarning] -> TCM String
 prettyTCWarnings = fmap (unlines . intersperse "") . prettyTCWarnings'
 
@@ -234,8 +243,8 @@
   -- This is a way to collect all of them and remove duplicates.
   let pragmas w = case tcWarning w of { SafeFlagPragma ps -> ([w], ps); _ -> ([], []) }
   let sfp = case fmap nub (foldMap pragmas ws) of
-              (TCWarning r w p:_, sfp) ->
-                 [TCWarning r (SafeFlagPragma sfp) p]
+              (TCWarning r w p b:_, sfp) ->
+                 [TCWarning r (SafeFlagPragma sfp) p b]
               _                        -> []
 
 
@@ -260,6 +269,7 @@
           UselessPublic                -> True
           ParseWarning{}               -> True
           UnreachableClauses{}         -> True
+          InversionDepthReached{}      -> True
           CoverageNoExactSplit{}       -> catchallNotOK
           UselessInline{}              -> True
           GenericWarning{}             -> True
@@ -273,6 +283,7 @@
           SafeFlagPolarity             -> True
           DeprecationWarning{}         -> True
           NicifierIssue{}              -> True
+          UserWarning{}                -> True
 
   return $ sfp ++ filter (cleanUp . tcWarning) ws
 
@@ -293,7 +304,7 @@
 
 nameWithBinding :: QName -> TCM Doc
 nameWithBinding q =
-  sep [ prettyTCM q, text "bound at", prettyTCM r ]
+  (prettyTCM q <+> text "bound at") <?> prettyTCM r
   where
     r = nameBindingSite $ qnameName q
 
@@ -317,6 +328,7 @@
   AmbiguousTopLevelModuleName {}           -> "AmbiguousTopLevelModuleName"
   BadArgumentsToPatternSynonym{}           -> "BadArgumentsToPatternSynonym"
   TooFewArgumentsToPatternSynonym{}        -> "TooFewArgumentsToPatternSynonym"
+  CannotResolveAmbiguousPatternSynonym{}   -> "CannotResolveAmbiguousPatternSynonym"
   BothWithAndRHS                           -> "BothWithAndRHS"
   BuiltinInParameterisedModule{}           -> "BuiltinInParameterisedModule"
   BuiltinMustBeConstructor{}               -> "BuiltinMustBeConstructor"
@@ -352,6 +364,7 @@
   LocalVsImportedModuleClash{}             -> "LocalVsImportedModuleClash"
   MetaCannotDependOn{}                     -> "MetaCannotDependOn"
   MetaOccursInItself{}                     -> "MetaOccursInItself"
+  MetaIrrelevantSolution{}                 -> "MetaIrrelevantSolution"
   ModuleArityMismatch{}                    -> "ModuleArityMismatch"
   ModuleDefinedInOtherFile {}              -> "ModuleDefinedInOtherFile"
   ModuleDoesntExport{}                     -> "ModuleDoesntExport"
@@ -403,10 +416,10 @@
   ImpossibleConstructor{}                  -> "ImpossibleConstructor"
   TerminationCheckFailed{}                 -> "TerminationCheckFailed"
   TooFewFields{}                           -> "TooFewFields"
-  TooManyArgumentsInLHS{}                  -> "TooManyArgumentsInLHS"
   TooManyFields{}                          -> "TooManyFields"
   TooManyPolarities{}                      -> "TooManyPolarities"
   SplitOnIrrelevant{}                      -> "SplitOnIrrelevant"
+  SplitOnNonVariable{}                     -> "SplitOnNonVariable"
   DefinitionIsIrrelevant{}                 -> "DefinitionIsIrrelevant"
   VariableIsIrrelevant{}                   -> "VariableIsIrrelevant"
   UnequalBecauseOfUniverseConflict{}       -> "UnequalBecauseOfUniverseConflict"
@@ -420,6 +433,7 @@
   WithOnFreeVariable{}                     -> "WithOnFreeVariable"
   UnexpectedWithPatterns{}                 -> "UnexpectedWithPatterns"
   UninstantiatedDotPattern{}               -> "UninstantiatedDotPattern"
+  ForcedConstructorNotInstantiated{}       -> "ForcedConstructorNotInstantiated"
   UninstantiatedModule{}                   -> "UninstantiatedModule"
   SolvedButOpenHoles{}                     -> "SolvedButOpenHoles"
   UnusedVariableInPatternSynonym           -> "UnusedVariableInPatternSynonym"
@@ -443,7 +457,7 @@
     -- Gallais, 2016-05-14
     -- Given where `NonFatalErrors` are created, we know for a
     -- fact that ̀ws` is non-empty.
-    TypeError _ (Closure _ _ _ _ (NonFatalErrors ws)) -> foldr1 ($$) $ fmap prettyTCM ws
+    TypeError _ Closure{ clValue = NonFatalErrors ws } -> foldr1 ($$) $ fmap prettyTCM ws
     -- Andreas, 2014-03-23
     -- This use of localState seems ok since we do not collect
     -- Benchmark info during printing errors.
@@ -565,6 +579,10 @@
     UninstantiatedDotPattern e -> fsep $
       pwords "Failed to infer the value of dotted pattern"
 
+    ForcedConstructorNotInstantiated p -> fsep $
+      pwords "Failed to infer that constructor pattern "
+      ++ [prettyA p] ++ pwords " is forced"
+
     IlltypedPattern p a -> do
       let ho _ _ = fsep $ pwords "Cannot pattern match on functions"
       ifPiType a ho $ {- else -} \ _ -> do
@@ -583,10 +601,6 @@
            pwords "with pattern" ++ prettyA p :
            pwords "(did you supply too many arguments?)"
 
-    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" ++ [prettyTCM expect] ++
@@ -677,11 +691,14 @@
       pwords "Functions may not return sizes, thus, function type " ++
       [ prettyTCM v ] ++ pwords " is illegal"
 
-    SplitOnIrrelevant p t -> fsep $
-      pwords "Cannot pattern match" ++ [prettyA p] ++
-      pwords "against" ++ [text $ verbalize $ getRelevance t] ++
+    SplitOnIrrelevant t -> fsep $
+      pwords "Cannot pattern match against" ++ [text $ verbalize $ getRelevance t] ++
       pwords "argument of type" ++ [prettyTCM t]
 
+    SplitOnNonVariable v t -> fsep $
+      pwords "Cannot pattern match because the (refined) argument " ++
+      [ prettyTCM v ] ++ pwords " is not a variable."
+
     DefinitionIsIrrelevant x -> fsep $
       text "Identifier" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"
     VariableIsIrrelevant x -> fsep $
@@ -706,8 +723,6 @@
 
     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, 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 $
@@ -769,6 +784,10 @@
     MetaOccursInItself m -> fsep $
       pwords "Cannot construct infinite solution of metavariable" ++ [prettyTCM $ MetaV m []]
 
+    MetaIrrelevantSolution m _ -> fsep $
+      pwords "Cannot instantiate the metavariable because (part of) the" ++
+      pwords "solution was created in an irrelevant context."
+
     BuiltinMustBeConstructor s e -> fsep $
       [prettyA e] ++ pwords "must be a constructor in the binding to builtin" ++ [text s]
 
@@ -898,14 +917,14 @@
     AmbiguousName x ys -> vcat
       [ fsep $ pwords "Ambiguous name" ++ [pretty x <> text "."] ++
                pwords "It could refer to any one of"
-      , nest 2 $ vcat $ map nameWithBinding ys
+      , nest 2 $ vcat $ map nameWithBinding (toList ys)
       , fwords "(hint: Use C-c C-w (in Emacs) if you want to know why)"
       ]
 
     AmbiguousModule x ys -> vcat
       [ fsep $ pwords "Ambiguous module name" ++ [pretty x <> text "."] ++
                pwords "It could refer to any one of"
-      , nest 2 $ vcat $ map help ys
+      , nest 2 $ vcat $ map help (toList ys)
       , fwords "(hint: Use C-c C-w (in Emacs) if you want to know why)"
       ]
       where
@@ -1020,11 +1039,22 @@
         isPlaceholder NoPlaceholder{} = False
 
     BadArgumentsToPatternSynonym x -> fsep $
-      pwords "Bad arguments to pattern synonym " ++ [prettyTCM x]
+      pwords "Bad arguments to pattern synonym " ++ [prettyTCM $ headAmbQ x]
 
     TooFewArgumentsToPatternSynonym x -> fsep $
-      pwords "Too few arguments to pattern synonym " ++ [prettyTCM x]
+      pwords "Too few arguments to pattern synonym " ++ [prettyTCM $ headAmbQ x]
 
+    CannotResolveAmbiguousPatternSynonym defs -> vcat
+      [ fsep $ pwords "Cannot resolve overloaded pattern synonym" ++ [prettyTCM x <> comma] ++
+               pwords "since candidates have different shapes:"
+      , nest 2 $ vcat $ map prDef (toList defs)
+      , fsep $ pwords "(hint: overloaded pattern synonyms must be equal up to variable and constructor names)"
+      ]
+      where
+        (x, _) = headNe defs
+        prDef (x, (xs, p)) = prettyA (A.PatternSynDef x xs p) <?> (text "at" <+> pretty r)
+          where r = nameBindingSite $ qnameName x
+
     UnusedVariableInPatternSynonym -> fsep $
       pwords "Unused variable in pattern synonym."
 
@@ -1241,9 +1271,8 @@
       NotHidden  -> prettyPat 1 x
 
     prettyPat :: Integer -> (I.Pattern' a) -> TCM Doc
-    prettyPat _ (I.VarP _) = text "_"
-    prettyPat _ (I.DotP _) = text "._"
-    prettyPat _ (I.AbsurdP _) = text absurdPatternName
+    prettyPat _ (I.VarP _ _) = text "_"
+    prettyPat _ (I.DotP _ _) = text "._"
     prettyPat n (I.ConP c _ args) =
       mpar n args $
         prettyTCM c <+> fsep (map (prettyArg . fmap namedThing) args)
@@ -1264,7 +1293,7 @@
      -- if printed differently, no extra explanation needed
     if P.render d1 /= P.render d2 then empty else do
       (v1, v2) <- instantiate (t1, t2)
-      case (ignoreSharing v1, ignoreSharing v2) of
+      case (v1, v2) of
         (I.Var i1 _, I.Var i2 _)
           | i1 == i2  -> generic -- possible, see issue 1826
           | otherwise -> varVar i1 i2
@@ -1364,7 +1393,7 @@
 
 
 instance PrettyTCM Call where
-  prettyTCM c = case c of
+  prettyTCM c = withContextPrecedence TopCtx $ case c of
     CheckClause t cl -> do
       reportSLn "error.checkclause" 60 $ "prettyTCM CheckClause: cl = " ++ show (deepUnscope cl)
       clc <- abstractToConcrete_ cl
@@ -1406,6 +1435,12 @@
       pwords "to a function of type" ++
       [prettyTCM t0]
 
+    CheckTargetType r infTy expTy -> sep
+      [ text "when checking that the inferred type of an application"
+      , nest 2 $ prettyTCM infTy
+      , text "matches the expected type"
+      , nest 2 $ prettyTCM expTy ]
+
     CheckRecDef _ x ps cs ->
       fsep $ pwords "when checking the definition of" ++ [prettyTCM x]
 
@@ -1418,7 +1453,7 @@
 
     CheckConstructor{} -> __IMPOSSIBLE__
 
-    CheckFunDef _ f _ ->
+    CheckFunDefCall _ f _ ->
       fsep $ pwords "when checking the definition of" ++ [prettyTCM f]
 
     CheckPragma _ p ->
@@ -1440,6 +1475,9 @@
     CheckPatternShadowing c -> fsep $
       pwords "when checking the clause" ++ [prettyA c]
 
+    CheckNamedWhere m -> fsep $
+      pwords "when checking the named where block" ++ [prettyA m]
+
     InferVar x ->
       fsep $ pwords "when inferring the type of" ++ [prettyTCM x]
 
@@ -1479,7 +1517,7 @@
 
     where
     hPretty :: Arg (Named_ Expr) -> TCM Doc
-    hPretty a = pretty =<< abstractToConcreteCtx (hiddenArgumentCtx (getHiding a)) a
+    hPretty a = withContextPrecedence (ArgumentCtx PreferParen) $ pretty =<< abstractToConcreteHiding a a
 
 ---------------------------------------------------------------------------
 -- * Natural language
@@ -1501,7 +1539,6 @@
       Relevant   -> "relevant"
       Irrelevant -> "irrelevant"
       NonStrict  -> "shape-irrelevant"
-      Forced{}   -> "forced"
 
 -- | Indefinite article.
 data Indefinite a = Indefinite a
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
@@ -33,7 +33,7 @@
   -- At least record constructors should be fully applied where possible!
   -- TODO: also for ordinary constructors (\ x -> suc x  vs.  suc)?
   Con c ci xs
-    | null (conFields c) -> app (Con c ci) xs
+    | null (conFields c) -> appE (Con c ci) xs
     | otherwise          -> noApp
   Lit _      -> noApp
   Level _    -> noApp   -- could be an application, but let's not eta contract levels
@@ -42,7 +42,6 @@
   Sort _     -> noApp
   MetaV _ _  -> noApp
   DontCare _ -> noApp
-  Shared p   -> binAppView (derefPtr p)  -- destroys sharing
   where
     noApp = NoApp t
     app f [] = noApp
@@ -65,40 +64,59 @@
   -- Andreas, 2012-11-18: this call to reportSDoc seems to cost me 2%
   -- performance on the std-lib
   -- reportSDoc "tc.eta" 70 $ text "eta-contracting" <+> prettyTCM v
-  Shared{} -> updateSharedTerm etaOnce v
-  Lam i (Abs _ b) -> do  -- NoAbs can't be eta'd
-      tyty <- typeInType
-      case binAppView b of
-        App u (Arg info v)
-          | isVar0 tyty v
-          -- Andreas, 2017-02-20 issue #2464
-          -- Contracting with any irrelevant argument breaks subject reduction.
-          -- E.g. \ .x -> f .(subst P eq x)  can in general not be contracted to f.
-          -- -- | (isIrrelevant info || isVar0 tyty v)
-                    && sameHiding i info
-                    && not (freeIn 0 u) ->
-            return $ strengthen __IMPOSSIBLE__ u
-        _ -> return v
-    where
-      isVar0 tyty (Shared p)            = isVar0 tyty (derefPtr p)
-      isVar0 _ (Var 0 [])               = True
-      -- Andreas, 2016-01-08 If --type-in-type, all levels are equal.
-      isVar0 True Level{}               = True
-      isVar0 tyty (Level (Max [Plus 0 l])) = case l of
-        NeutralLevel _ v -> isVar0 tyty v
-        UnreducedLevel v -> isVar0 tyty v
-        BlockedLevel{}   -> False
-        MetaLevel{}      -> False
-      isVar0 _ _ = False
+  Lam i (Abs x b) -> etaLam i x b  -- NoAbs can't be eta'd
 
   -- Andreas, 2012-12-18:  Abstract definitions could contain
   -- abstract records whose constructors are not in scope.
   -- To be able to eta-contract them, we ignore abstract.
-  Con c ci args -> ignoreAbstractMode $ do
-      -- reportSDoc "tc.eta" 20 $ text "eta-contracting record" <+> prettyTCM t
-      r <- getConstructorData $ conName c -- fails in ConcreteMode if c is abstract
-      ifM (isEtaRecord r)
-          (do -- reportSDoc "tc.eta" 20 $ text "eta-contracting record" <+> prettyTCM t
-              etaContractRecord r c ci args)
-          (return v)
+  Con c ci es | Just args <- allApplyElims es -> do
+    etaCon c ci args etaContractRecord
   v -> return v
+
+-- | If record constructor, call eta-contraction function.
+etaCon :: (MonadReader TCEnv m, HasConstInfo m, HasOptions m)
+  => ConHead  -- ^ Constructor name @c@.
+  -> ConInfo  -- ^ Constructor info @ci@.
+  -> Args     -- ^ Constructor arguments @args@.
+  -> (QName -> ConHead -> ConInfo -> Args -> m Term)
+              -- ^ Eta-contraction workhorse, gets also name of record type.
+  -> m Term   -- ^ Returns @Con c ci args@ or its eta-contraction.
+etaCon c ci args cont = ignoreAbstractMode $ do
+  let fallback = return $ Con c ci $ map Apply args
+  -- reportSDoc "tc.eta" 20 $ text "eta-contracting record" <+> prettyTCM t
+  r <- getConstructorData $ conName c -- fails in ConcreteMode if c is abstract
+  ifNotM (isEtaRecord r) fallback $ {-else-} do
+    -- reportSDoc "tc.eta" 20 $ text "eta-contracting record" <+> prettyTCM t
+    cont r c ci args
+
+-- | Try to contract a lambda-abstraction @Lam i (Abs x b)@.
+etaLam :: (MonadReader TCEnv m, HasConstInfo m, HasOptions m)
+  => ArgInfo  -- ^ Info @i@ of the 'Lam'.
+  -> ArgName  -- ^ Name @x@ of the abstraction.
+  -> Term     -- ^ Body ('Term') @b@ of the 'Abs'.
+  -> m Term   -- ^ @Lam i (Abs x b)@, eta-contracted if possible.
+etaLam i x b = do
+    let fallback = return $ Lam i $ Abs x b
+    case binAppView b of
+      App u (Arg info v) -> do
+        tyty <- typeInType
+        if isVar0 tyty v
+        -- Andreas, 2017-02-20 issue #2464
+        -- Contracting with any irrelevant argument breaks subject reduction.
+        -- E.g. \ .x -> f .(subst P eq x)  can in general not be contracted to f.
+        -- -- (isIrrelevant info || isVar0 tyty v)
+             && sameHiding i info
+             && not (freeIn 0 u)
+           then return $ strengthen __IMPOSSIBLE__ u
+           else fallback
+      _ -> fallback
+  where
+    isVar0 _ (Var 0 [])               = True
+    -- Andreas, 2016-01-08 If --type-in-type, all levels are equal.
+    isVar0 True Level{}               = True
+    isVar0 tyty (Level (Max [Plus 0 l])) = case l of
+      NeutralLevel _ v -> isVar0 tyty v
+      UnreducedLevel v -> isVar0 tyty v
+      BlockedLevel{}   -> False
+      MetaLevel{}      -> False
+    isVar0 _ _ = False
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
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP               #-}
+{-# LANGUAGE TypeFamilies #-}
 
 {-| A constructor argument is forced if it appears as pattern variable
 in an index of the target.
@@ -57,24 +58,34 @@
 
 module Agda.TypeChecking.Forcing where
 
-import Prelude hiding (elem, maximum)
-
-import Control.Applicative
-import Data.Foldable
+import Control.Arrow (first, second)
+import Control.Monad
+import Control.Monad.Trans.Maybe
+import Control.Monad.Writer (WriterT(..), tell)
+import Data.Foldable hiding (any)
 import Data.Traversable
+import Data.Semigroup hiding (Arg)
+import Data.Maybe
+import Data.List ((\\))
 
 import Agda.Interaction.Options
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+import Agda.Syntax.Internal.Pattern
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Irrelevance
+import Agda.TypeChecking.Records
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Substitute
-import Agda.TypeChecking.Conversion
+import Agda.TypeChecking.Pretty hiding ((<>))
+import Agda.TypeChecking.Telescope
 
 import Agda.Utils.Function
+import Agda.Utils.PartialOrd
+import Agda.Utils.Pretty (prettyShow)
+import Agda.Utils.List
 import Agda.Utils.Monad
 import Agda.Utils.Size
 
@@ -83,67 +94,207 @@
 
 -- | Given the type of a constructor (excluding the parameters),
 --   decide which arguments are forced.
---   Update the relevance info in the domains accordingly.
 --   Precondition: the type is of the form @Γ → D vs@ and the @vs@
 --   are in normal form.
-addForcingAnnotations :: Type -> TCM Type
-addForcingAnnotations t =
+computeForcingAnnotations :: Type -> TCM [IsForced]
+computeForcingAnnotations t =
   ifM (not . optForcing <$> commandLineOptions)
-      (return t) $ do
+      (return []) $ do
   -- Andreas, 2015-03-10  Normalization prevents Issue 1454.
   -- t <- normalise t
   -- Andreas, 2015-03-28  Issue 1469: Normalization too costly.
   -- Instantiation also fixes Issue 1454.
   -- Note that normalization of s0 below does not help.
   t <- instantiateFull t
-  let TelV tel (El s a) = telView' t
-      vs = case ignoreSharing a of
+  -- Ulf, 2018-01-28 (#2919): We do need to reduce the target type enough to
+  -- get to the actual data type.
+  -- Also #2947: The type might reduce to a pi type.
+  TelV tel (El _ a) <- telView t
+  let vs = case a of
         Def _ us -> us
         _        -> __IMPOSSIBLE__
       n  = size tel
-      indexToLevel x = n - x - 1
-  -- Note: data parameters will be negative levels.
-  let xs = filter (>=0) $ map indexToLevel $ forcedVariables vs
-  let s0 = raise (0 - size tel) s
-  t' <- force s0 xs t
+      xs = forcedVariables vs
+      -- #2819: We can only mark an argument as forced if it appears in the
+      -- type with a relevance below (i.e. more relevant) than the one of the
+      -- constructor argument. Otherwise we can't actually get the value from
+      -- the type. Also the argument shouldn't be irrelevant, since it that
+      -- case it isn't really forced.
+      isForced m i = getRelevance m /= Irrelevant &&
+                     any (\ (m', j) -> i == j && related m' POLE m) xs
+      forcedArgs =
+        [ if isForced m i then Forced else NotForced
+        | (i, m) <- zip (downFrom n) $ map getModality (telToList tel)
+        ]
   reportSLn "tc.force" 60 $ unlines
     [ "Forcing analysis"
-    , "  xs = " ++ show xs
-    , "  t  = " ++ show t
-    , "  t' = " ++ show t'
+    , "  xs          = " ++ show xs
+    , "  forcedArgs  = " ++ show forcedArgs
     ]
-  return t'
+  return forcedArgs
 
 -- | Compute the pattern variables of a term or term-like thing.
 class ForcedVariables a where
-  forcedVariables :: a -> [Nat]
+  forcedVariables :: a -> [(Modality, Nat)]
 
-instance (ForcedVariables a, Foldable t) => ForcedVariables (t a) where
+  default forcedVariables :: (ForcedVariables b, Foldable t, a ~ t b) => a -> [(Modality, Nat)]
   forcedVariables = foldMap forcedVariables
 
+instance ForcedVariables a => ForcedVariables [a] where
+
+-- Note the 'a' does not include the 'Arg' in 'Apply'.
+instance ForcedVariables a => ForcedVariables (Elim' a) where
+  forcedVariables (Apply x) = forcedVariables x
+  forcedVariables Proj{} = []
+
+instance ForcedVariables a => ForcedVariables (Arg a) where
+  forcedVariables x = [ (m <> m', i) | (m', i) <- forcedVariables (unArg x) ]
+    where m = getModality x
+
 -- | Assumes that the term is in normal form.
 instance ForcedVariables Term where
-  forcedVariables t = case ignoreSharing t of
-    Var i [] -> [i]
+  forcedVariables t = case t of
+    Var i [] -> [(mempty, i)]
     Con _ _ vs -> forcedVariables vs
     _ -> []
 
--- | @force s xs t@ marks the domains @xs@ in function type @t@ as forced.
---   Domains bigger than @s@ are marked as @'Forced' 'Big'@, others as
---   @'Forced' 'Small'@.
---   Counting left-to-right, starting with 0.
---   Precondition: function type is exposed.
-force :: Sort -> [Nat] -> Type -> TCM Type
-force s0 xs t = loop 0 t
+isForced :: IsForced -> Bool
+isForced Forced    = True
+isForced NotForced = False
+
+nextIsForced :: [IsForced] -> (IsForced, [IsForced])
+nextIsForced []     = (NotForced, [])
+nextIsForced (f:fs) = (f, fs)
+
+-----------------------------------------------------------------------------
+-- * Forcing translation
+-----------------------------------------------------------------------------
+
+-- | Move bindings for forced variables to unforced positions.
+forcingTranslation :: [NamedArg DeBruijnPattern] -> TCM [NamedArg DeBruijnPattern]
+forcingTranslation ps = do
+  (qs, rebind) <- dotForcedPatterns ps
+  reportSDoc "tc.force" 50 $ text "forcingTranslation" <?> vcat
+    [ text "patterns:" <?> pretty ps
+    , text "dotted:  " <?> pretty qs
+    , text "rebind:  " <?> pretty rebind ]
+  rs <- foldM rebindForcedPattern qs rebind
+  when (not $ null rebind) $ reportSDoc "tc.force" 50 $ nest 2 $ text "result:  " <?> pretty rs
+  return rs
+
+-- | Applies the forcing translation in order to update modalities of forced
+--   arguments in the telescope. This is used before checking a right-hand side
+--   in order to make sure all uses of forced arguments agree with the
+--   relevance of the position where the variable will ultimately be bound.
+--   Precondition: the telescope types the bound variables of the patterns.
+forceTranslateTelescope :: Telescope -> [NamedArg DeBruijnPattern] -> TCM Telescope
+forceTranslateTelescope delta qs = do
+  qs' <- forcingTranslation qs
+  let xms  = patternVarModalities qs
+      xms' = patternVarModalities qs'
+      old  = xms \\ xms'
+      new  = xms' \\ xms
+  if null new then return delta else do
+      reportSLn "tc.force" 40 $ "Updating modalities of forced arguments\n" ++
+                                "  from: " ++ show old ++ "\n" ++
+                                "  to:   " ++ show new
+      let mods    = map (first dbPatVarIndex) new
+          ms      = reverse [ lookup i mods | i <- [0..size delta - 1] ]
+          delta'  = telFromList $ zipWith (maybe id setModality) ms $ telToList delta
+      reportSDoc "tc.force" 60 $ nest 2 $ text "delta' =" <?> prettyTCM delta'
+      return delta'
+
+-- | Rebind a forced pattern in a non-forced position. The forced pattern has
+--   already been dotted by 'dotForcedPatterns', so the remaining task is to
+--   find a dot pattern in an unforced position that can be turned into a
+--   proper match of the forced pattern.
+--
+--   For instance (with patterns prettified to ease readability):
+--
+--    rebindForcedPattern [.(suc n), cons .n x xs] n = [suc n, cons .n x xs]
+--
+rebindForcedPattern :: [NamedArg DeBruijnPattern] -> DeBruijnPattern -> TCM [NamedArg DeBruijnPattern]
+rebindForcedPattern ps toRebind = go $ zip (repeat NotForced) ps
   where
-    m = maximum (-1:xs)  -- number of domains to look at
-    loop i t | i > m = return t
-    loop i t = case ignoreSharingType t of
-      El s (Pi a b) -> do
-        a' <- if not (i `elem` xs) then return a else do
-          -- If the sort of the data type is >= the sort of the argument type
-          -- then the index is small, else big.
-          b <- ifM (tryConversion $ leqSort (getSort a) (raise i s0)) (return Small) (return Big)
-          return $ mapRelevance (composeRelevance $ Forced b) a
-        El s . Pi a' <$> traverse (loop $ i + 1) b
-      _ -> __IMPOSSIBLE__
+    targetDotP = patternToTerm toRebind
+
+    go [] = __IMPOSSIBLE__ -- unforcing cannot fail
+    go ((Forced,    p) : ps) = (p :) <$> go ps
+    go ((NotForced, p) : ps) =
+      case namedArg p of
+        VarP{}   -> (p :) <$> go ps
+        DotP _ v -> mkPat v >>= \ case
+          Nothing -> (p :) <$> go ps
+          Just q' -> return $ fmap (q' <$) p : map snd ps
+        ConP c i qs -> do
+          fqs <- withForced c qs
+          qps <- go (fqs ++ ps)
+          let (qs', ps') = splitAt (length qs) qps
+          return $ fmap (ConP c i qs' <$) p : ps'
+        LitP{}  -> (p :) <$> go ps
+        ProjP{} -> (p :) <$> go ps
+
+    withForced :: ConHead -> [a] -> TCM [(IsForced, a)]
+    withForced c qs = do
+      fs <- defForced <$> getConstInfo (conName c)
+      return $ zip (fs ++ repeat NotForced) qs
+
+    -- Try to turn a term in a dot pattern into a pattern matching q
+    mkPat :: Term -> TCM (Maybe DeBruijnPattern)
+    mkPat v = mkPat' (NotForced, v)
+
+    mkPat' :: (IsForced, Term) -> TCM (Maybe DeBruijnPattern)
+    mkPat' (Forced, _) = return Nothing
+    mkPat' (NotForced, v) | targetDotP == v = return (Just toRebind)
+    mkPat' (NotForced, v) =
+      case v of
+        Con c co es -> do
+          let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
+          fvs <- withForced c vs
+          let fvs' = [ (f,) <$> a | (f, a) <- fvs ] :: [Arg (IsForced, Term)]
+          -- It takes a bit of juggling to apply mkPat' under the the 'Arg's, but since it
+          -- type checks, it's pretty much guaranteed to be the right thing.
+          mps :: [Maybe (Arg DeBruijnPattern)] <- mapM (runMaybeT . traverse (MaybeT . mkPat')) fvs'
+          case break (isJust . snd) (zip vs mps) of
+            (mvs1, (_, Just p) : mvs2) -> do
+              let vs1 = map fst mvs1
+                  vs2 = map fst mvs2
+                  ci = (toConPatternInfo co) { conPLazy = True }
+                  dots = (map . fmap) dotP
+              return $ Just $ ConP c ci $ doname $ dots vs1 ++ [p] ++ dots vs2
+            _ -> return Nothing
+        _ -> return Nothing
+      where
+        doname = (map . fmap) unnamed
+
+-- | Dot all forced patterns and return a list of patterns that need to be
+--   undotted elsewhere. Patterns that need to be undotted are those that bind
+--   variables or does some actual (non-eta) matching.
+dotForcedPatterns :: [NamedArg DeBruijnPattern] -> TCM ([NamedArg DeBruijnPattern], [DeBruijnPattern])
+dotForcedPatterns ps = runWriterT $ (traverse . traverse . traverse) (forced NotForced) ps
+  where
+    forced :: IsForced -> DeBruijnPattern -> WriterT [DeBruijnPattern] TCM DeBruijnPattern
+    forced f p =
+      case p of
+        DotP{}          -> return p
+        ProjP{}         -> return p
+        _ | f == Forced -> do
+          properMatch <- isProperMatch p
+          dotP (patternToTerm p) <$ tell [p | properMatch || length p > 0]
+        VarP{}          -> return p
+        LitP{}          -> return p
+        ConP c i ps     -> do
+          fs <- defForced <$> getConstInfo (conName c)
+          ConP c i <$> zipWithM forcedArg (fs ++ repeat NotForced) ps
+
+    forcedArg f = (traverse . traverse) (forced f)
+
+    isProperMatch LitP{}  = return True
+    isProperMatch VarP{}  = return False
+    isProperMatch ProjP{} = return False
+    isProperMatch DotP{}  = return False
+    isProperMatch (ConP c i ps) =
+      ifM (isEtaCon $ conName c)
+          (anyM ps (isProperMatch . namedArg))
+          (return True)
+
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
@@ -18,15 +18,17 @@
 
 module Agda.TypeChecking.Free
     ( FreeVars(..)
+    , VarCounts(..)
     , Free
     , IsVarSet(..)
     , IgnoreSorts(..)
     , runFree , rigidVars, relevantVars, allVars
-    , allFreeVars
+    , allFreeVars, allFreeVarsWithOcc
     , allRelevantVars, allRelevantVarsIgnoring
     , freeIn, freeInIgnoringSorts, isBinderUsed
     , relevantIn, relevantInIgnoringSortAnn
     , Occurrence(..)
+    , VarOcc(..)
     , occurrence
     , closed
     , freeVars -- only for testing
@@ -38,7 +40,8 @@
 import Control.Monad.Reader
 
 import Data.Maybe
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, mconcat, Any(..), All(..))
+import Data.Monoid ( Monoid, mempty, mappend, mconcat )
+import Data.Semigroup ( Semigroup, (<>), Any(..), All(..) )
 import Data.IntSet (IntSet)
 import qualified Data.IntSet as Set
 import Data.IntMap (IntMap)
@@ -53,7 +56,7 @@
 
 import Agda.TypeChecking.Free.Lazy
   ( Free(..) , FreeEnv(..), initFreeEnv
-  , VarOcc(..), IgnoreSorts(..), Variable, SingleVar
+  , VarOcc(..), topVarOcc, TheVarMap, theVarMap, IgnoreSorts(..), Variable, SingleVar
   , MetaSet, IsVarSet(..), runFreeM
   )
 import qualified Agda.TypeChecking.Free.Lazy as Free
@@ -75,7 +78,7 @@
     --   can still become strongly rigid if put under a constructor
     --   whereas weakly rigid ones stay weakly rigid.
   , weaklyRigidVars   :: VarSet
-    -- ^ Ordinary rigid variables, e.g., in arguments of variables.
+    -- ^ Ordinary rigid variables, e.g., in arguments of variables or functions.
   , flexibleVars      :: IntMap MetaSet
     -- ^ Variables occuring in arguments of metas.
     --   These are only potentially free, depending how the meta variable is instantiated.
@@ -83,17 +86,14 @@
   , irrelevantVars    :: VarSet
     -- ^ Variables in irrelevant arguments and under a @DontCare@, i.e.,
     --   in irrelevant positions.
-  , unusedVars        :: VarSet
-    -- ^ Variables in 'UnusedArg'uments.
   } deriving (Eq, Show)
 
-mapSRV, mapUGV, mapWRV, mapIRV, mapUUV
+mapSRV, mapUGV, mapWRV, mapIRV
   :: (VarSet -> VarSet) -> FreeVars -> FreeVars
 mapSRV f fv = fv { stronglyRigidVars = f $ stronglyRigidVars fv }
 mapUGV f fv = fv { unguardedVars     = f $ unguardedVars     fv }
 mapWRV f fv = fv { weaklyRigidVars   = f $ weaklyRigidVars   fv }
 mapIRV f fv = fv { irrelevantVars    = f $ irrelevantVars    fv }
-mapUUV f fv = fv { unusedVars        = f $ unusedVars        fv }
 
 mapFXV :: (IntMap MetaSet -> IntMap MetaSet) -> FreeVars -> FreeVars
 mapFXV f fv = fv { flexibleVars      = f $ flexibleVars      fv }
@@ -112,7 +112,7 @@
 
 -- | @allVars fv@ includes irrelevant variables.
 allVars :: FreeVars -> VarSet
-allVars fv = Set.unions [relevantVars fv, irrelevantVars fv, unusedVars fv]
+allVars fv = Set.unions [relevantVars fv, irrelevantVars fv]
 
 data Occurrence
   = NoOccurrence
@@ -121,7 +121,6 @@
   | Unguarded         -- ^ In top position, or only under inductive record constructors.
   | WeaklyRigid       -- ^ In arguments to variables and definitions.
   | Flexible MetaSet  -- ^ In arguments of metas.
-  | Unused
   deriving (Eq,Show)
 
 -- | Compute an occurrence of a single variable in a piece of internal syntax.
@@ -136,7 +135,6 @@
   | x `Set.member` weaklyRigidVars   fv = WeaklyRigid
   | Just ms <- Map.lookup x (flexibleVars fv) = Flexible ms
   | x `Set.member` irrelevantVars    fv = Irrelevantly
-  | x `Set.member` unusedVars        fv = Unused
   | otherwise                           = NoOccurrence
 
 -- | Mark variables as flexible.  Useful when traversing arguments of metas.
@@ -182,24 +180,17 @@
 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, Map.keysSet (flexibleVars fv), unusedVars fv ]
-  }
-
 -- | Pointwise union.
 union :: FreeVars -> FreeVars -> FreeVars
-union (FV sv1 gv1 rv1 fv1 iv1 uv1) (FV sv2 gv2 rv2 fv2 iv2 uv2) =
-  FV (Set.union sv1 sv2) (Set.union gv1 gv2) (Set.union rv1 rv2) (Map.unionWith mappend fv1 fv2) (Set.union iv1 iv2) (Set.union uv1 uv2)
+union (FV sv1 gv1 rv1 fv1 iv1) (FV sv2 gv2 rv2 fv2 iv2) =
+  FV (Set.union sv1 sv2) (Set.union gv1 gv2) (Set.union rv1 rv2) (Map.unionWith mappend fv1 fv2) (Set.union iv1 iv2)
 
 unions :: [FreeVars] -> FreeVars
 unions = foldr union empty
 
 instance Null FreeVars where
-  empty = FV Set.empty Set.empty Set.empty Map.empty Set.empty Set.empty
-  null (FV a b c d e f) = null a && null b && null c && null d && null e && null f
+  empty = FV Set.empty Set.empty Set.empty Map.empty Set.empty
+  null (FV a b c d e) = null a && null b && null c && null d && null e
 
 -- | Free variable sets form a monoid under 'union'.
 instance Semigroup FreeVars where
@@ -212,7 +203,7 @@
 
 -- | @delete x fv@ deletes variable @x@ from variable set @fv@.
 delete :: Nat -> FreeVars -> FreeVars
-delete n (FV sv gv rv fv iv uv) = FV (Set.delete n sv) (Set.delete n gv) (Set.delete n rv) (Map.delete n fv) (Set.delete n iv) (Set.delete n uv)
+delete n (FV sv gv rv fv iv) = FV (Set.delete n sv) (Set.delete n gv) (Set.delete n rv) (Map.delete n fv) (Set.delete n iv)
 
 instance Singleton Variable FreeVars where
   singleton i = mapUGV (Set.insert i) mempty
@@ -227,8 +218,7 @@
         Free.StronglyRigid -> strongly
       goRel r = case r of
         Relevant   -> id
-        NonStrict  -> id    -- we don't track non-strict and
-        Forced{}   -> id    -- forced in FreeVars
+        NonStrict  -> id    -- we don't track non-strict in FreeVars
         Irrelevant -> irrelevantly
 
 -- In most cases we don't care about the VarOcc.
@@ -238,6 +228,20 @@
 instance IsVarSet Any    where withVarOcc _ = id
 instance IsVarSet All    where withVarOcc _ = id
 
+newtype VarCounts = VarCounts { varCounts :: IntMap Int }
+
+instance Semigroup VarCounts where
+  VarCounts fv1 <> VarCounts fv2 = VarCounts (Map.unionWith (+) fv1 fv2)
+
+instance Monoid VarCounts where
+  mempty = VarCounts Map.empty
+  mappend = (<>)
+
+instance IsVarSet VarCounts where withVarOcc _ = id
+
+instance Singleton Variable VarCounts where
+  singleton i = VarCounts $ Map.singleton i 1
+
 -- * Collecting free variables.
 
 bench :: a -> a
@@ -285,8 +289,8 @@
 
 instance IsVarSet a => IsVarSet (RelevantIn a) where
   withVarOcc o x
-    | irrelevant (varRelevance o) = mempty
-    | otherwise                   = RelevantIn $ withVarOcc o $ getRelevantIn x
+    | isIrrelevant (varRelevance o) = mempty
+    | otherwise = RelevantIn $ withVarOcc o $ getRelevantIn x
 
 relevantIn' :: Free a => IgnoreSorts -> Nat -> a -> Bool
 relevantIn' ig x t = getAny . getRelevantIn $ runFree (RelevantIn . Any . (x ==)) ig t
@@ -310,7 +314,11 @@
 allFreeVars :: Free a => a -> VarSet
 allFreeVars = runFree Set.singleton IgnoreNot
 
--- | Collect all relevant free variables, excluding the "unused" ones, possibly ignoring sorts.
+-- | Collect all free variables together with information about their occurrence.
+allFreeVarsWithOcc :: Free a => a -> TheVarMap
+allFreeVarsWithOcc = theVarMap . runFree (singleton . (,topVarOcc)) IgnoreNot
+
+-- | Collect all relevant free variables, possibly ignoring sorts.
 allRelevantVarsIgnoring :: Free a => IgnoreSorts -> a -> VarSet
 allRelevantVarsIgnoring ig = getRelevantIn . runFree (RelevantIn . Set.singleton) ig
 
diff --git a/src/full/Agda/TypeChecking/Free/Lazy.hs b/src/full/Agda/TypeChecking/Free/Lazy.hs
--- a/src/full/Agda/TypeChecking/Free/Lazy.hs
+++ b/src/full/Agda/TypeChecking/Free/Lazy.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE UndecidableInstances #-}
 
 -- | Computing the free variables of a term lazily.
@@ -33,7 +34,9 @@
 
 import Data.Foldable (foldMap)
 import Data.IntMap (IntMap)
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, mconcat)
+import qualified Data.IntMap as IntMap
+import Data.Monoid ( Monoid, mempty, mappend, mconcat )
+import Data.Semigroup ( Semigroup, (<>) )
 import Data.Set (Set)
 
 import Agda.Syntax.Common
@@ -55,6 +58,8 @@
 --   The constructors are listed in increasing order (wrt. information content).
 data FlexRig
   = Flexible MetaSet  -- ^ In arguments of metas.
+                      --   The set of metas is used by ''Agda.TypeChecking.Rewriting.NonLinMatch''
+                      --   to generate the right blocking information.
   | WeaklyRigid       -- ^ In arguments to variables and definitions.
   | Unguarded         -- ^ In top position, or only under inductive record constructors.
   | StronglyRigid     -- ^ Under at least one and only inductive constructors.
@@ -112,6 +117,10 @@
 composeVarOcc :: VarOcc -> VarOcc -> VarOcc
 composeVarOcc (VarOcc o r) (VarOcc o' r') = VarOcc (composeFlexRig o o') (max r r')
 
+instance LensRelevance VarOcc where
+  getRelevance = varRelevance
+  setRelevance rel (VarOcc x _) = VarOcc x rel
+
 -- | Any representation of a set of variables need to be able to be modified by
 --   a variable occurrence. This is to ensure that free variable analysis is
 --   compositional. For instance, it should be possible to compute `fv (v [u/x])`
@@ -129,10 +138,27 @@
   --      ```
   withVarOcc :: VarOcc -> a -> a
 
-type VarMap = IntMap VarOcc
+type TheVarMap = IntMap VarOcc
+newtype VarMap = VarMap { theVarMap :: TheVarMap }
+  deriving (Show, Singleton (Variable, VarOcc))
 
+mapVarMap :: (TheVarMap -> TheVarMap) -> VarMap -> VarMap
+mapVarMap f = VarMap . f . theVarMap
+
+instance Semigroup VarMap where
+  VarMap m <> VarMap m' = VarMap $ IntMap.unionWith maxVarOcc m m'
+
+-- Andreas & Jesper, 2018-05-11, issue #3052:
+
+-- | Proper monoid instance for @VarMap@ rather than inheriting the broken one from IntMap.
+--   We combine two occurrences of a variable using 'maxVarOcc'.
+instance Monoid VarMap where
+  mempty  = VarMap IntMap.empty
+  mappend = (<>)
+  mconcat = VarMap . IntMap.unionsWith maxVarOcc . map theVarMap
+
 instance IsVarSet VarMap where
-  withVarOcc o = fmap (composeVarOcc o)
+  withVarOcc o = mapVarMap $ fmap $ composeVarOcc o
 
 -- * Collecting free variables.
 
@@ -261,7 +287,6 @@
     Level l      -> freeVars' l
     MetaV m ts   -> go (Flexible $ singleton m) $ freeVars' ts
     DontCare mt  -> goRel Irrelevant $ freeVars' mt
-    Shared p     -> freeVars' (derefPtr p)
 
 instance Free a => Free (Type' a) where
   freeVars' (El s t) =
@@ -277,7 +302,9 @@
       Prop       -> mempty
       Inf        -> mempty
       SizeUniv   -> mempty
-      DLub s1 s2 -> go WeaklyRigid $ freeVars' (s1, s2)
+      PiSort s1 s2 -> go WeaklyRigid $ freeVars' (s1, s2)
+      UnivSort s -> go WeaklyRigid $ freeVars' s
+      MetaS x es -> go (Flexible $ singleton x) $ freeVars' es
 
 instance Free Level where
   freeVars' (Max as) = freeVars' as
diff --git a/src/full/Agda/TypeChecking/Free/Old.hs b/src/full/Agda/TypeChecking/Free/Old.hs
--- a/src/full/Agda/TypeChecking/Free/Old.hs
+++ b/src/full/Agda/TypeChecking/Free/Old.hs
@@ -40,7 +40,8 @@
 import Control.Monad.Reader
 
 import Data.Foldable (foldMap)
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, mconcat)
+import Data.Monoid ( Monoid, mempty, mappend, mconcat )
+import Data.Semigroup ( Semigroup, (<>) )
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
@@ -70,8 +71,6 @@
   , irrelevantVars    :: VarSet
     -- ^ Variables in irrelevant arguments and under a @DontCare@, i.e.,
     --   in irrelevant positions.
-  , unusedVars        :: VarSet
-    -- ^ Variables in 'UnusedArg'uments.
   } deriving (Eq, Show)
 
 -- | Rigid variables: either strongly rigid, unguarded, or weakly rigid.
@@ -88,7 +87,7 @@
 
 -- | @allVars fv@ includes irrelevant variables.
 allVars :: FreeVars -> VarSet
-allVars fv = Set.unions [relevantVars fv, irrelevantVars fv, unusedVars fv]
+allVars fv = Set.unions [relevantVars fv, irrelevantVars fv]
 
 data Occurrence
   = NoOccurrence
@@ -97,7 +96,6 @@
   | Unguarded     -- ^ In top position, or only under inductive record constructors.
   | WeaklyRigid   -- ^ In arguments to variables and definitions.
   | Flexible      -- ^ In arguments of metas.
-  | Unused
   deriving (Eq,Show)
 
 {- NO LONGER
@@ -110,7 +108,6 @@
   | 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.
@@ -154,23 +151,16 @@
 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 gv1 rv1 fv1 iv1 uv1) (FV sv2 gv2 rv2 fv2 iv2 uv2) =
-  FV (Set.union sv1 sv2) (Set.union gv1 gv2) (Set.union rv1 rv2) (Set.union fv1 fv2) (Set.union iv1 iv2) (Set.union uv1 uv2)
+union (FV sv1 gv1 rv1 fv1 iv1) (FV sv2 gv2 rv2 fv2 iv2) =
+  FV (Set.union sv1 sv2) (Set.union gv1 gv2) (Set.union rv1 rv2) (Set.union fv1 fv2) (Set.union iv1 iv2)
 
 unions :: [FreeVars] -> FreeVars
 unions = foldr union empty
 
 empty :: FreeVars
-empty = FV Set.empty Set.empty Set.empty Set.empty Set.empty Set.empty
+empty = FV Set.empty Set.empty Set.empty Set.empty Set.empty
 
 -- | Free variable sets form a monoid under 'union'.
 instance Semigroup FreeVars where
@@ -183,11 +173,11 @@
 
 -- | @delete x fv@ deletes variable @x@ from variable set @fv@.
 delete :: Nat -> FreeVars -> FreeVars
-delete n (FV sv gv rv fv iv uv) = FV (Set.delete n sv) (Set.delete n gv) (Set.delete n rv) (Set.delete n fv) (Set.delete n iv) (Set.delete n uv)
+delete n (FV sv gv rv fv iv) = FV (Set.delete n sv) (Set.delete n gv) (Set.delete n rv) (Set.delete n fv) (Set.delete n iv)
 
 -- | @subtractFV n fv@ subtracts $n$ from each free variable in @fv@.
 subtractFV :: Nat -> FreeVars -> FreeVars
-subtractFV n (FV sv gv rv fv iv uv) = FV (Set.subtract n sv) (Set.subtract n gv) (Set.subtract n rv) (Set.subtract n fv) (Set.subtract n iv) (Set.subtract n uv)
+subtractFV n (FV sv gv rv fv iv) = FV (Set.subtract n sv) (Set.subtract n gv) (Set.subtract n rv) (Set.subtract n fv) (Set.subtract n iv)
 
 -- | A single unguarded variable.
 singleton :: Nat -> FreeVars
@@ -272,7 +262,6 @@
     Level l    -> freeVars' l
     MetaV _ ts -> flexible <$> freeVars' ts
     DontCare mt -> irrelevantly <$> freeVars' mt
-    Shared p    -> freeVars' (derefPtr p)
 
 instance Free Type where
   freeVars' (El s t) =
@@ -288,7 +277,9 @@
       Prop       -> mempty
       Inf        -> mempty
       SizeUniv   -> mempty
-      DLub s1 s2 -> weakly <$> freeVars' (s1, s2)
+      PiSort s1 s2 -> weakly <$> freeVars' (s1, s2)
+      UnivSort s -> weakly <$> freeVars' s
+      MetaS x es -> flexible <$> freeVars' es
 
 instance Free Level where
   freeVars' (Max as) = freeVars' as
diff --git a/src/full/Agda/TypeChecking/Free/Precompute.hs b/src/full/Agda/TypeChecking/Free/Precompute.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Free/Precompute.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE TypeFamilies #-}
+-- | Precompute free variables in a term (and store in 'ArgInfo').
+module Agda.TypeChecking.Free.Precompute
+  ( PrecomputeFreeVars, precomputeFreeVars
+  , precomputedFreeVars, precomputeFreeVars_ ) where
+
+import Control.Monad.Writer
+import Data.IntSet (IntSet)
+import qualified Data.IntSet as IntSet
+import Data.Traversable (Traversable, traverse)
+
+import Agda.Syntax.Common
+import Agda.Syntax.Internal
+import Agda.Utils.Functor
+import Agda.Utils.Impossible
+
+#include "undefined.h"
+
+type FV = Writer IntSet
+
+precomputeFreeVars_ :: PrecomputeFreeVars a => a -> a
+precomputeFreeVars_ = fst . runWriter . precomputeFreeVars
+
+precomputedFreeVars :: PrecomputeFreeVars a => a -> IntSet
+precomputedFreeVars = snd . runWriter . precomputeFreeVars
+
+class PrecomputeFreeVars a where
+  precomputeFreeVars :: a -> FV a
+
+  default precomputeFreeVars :: (Traversable c, PrecomputeFreeVars x, a ~ c x) => a -> FV a
+  precomputeFreeVars = traverse precomputeFreeVars
+
+-- The instances where things actually happen: Arg, Abs and Term.
+
+maybePrecomputed :: PrecomputeFreeVars a => ArgInfo -> a -> FV (ArgInfo, a)
+maybePrecomputed i x =
+  case getFreeVariables i of
+    KnownFVs fv -> (i, x) <$ tell fv
+    UnknownFVs -> do
+      (x', fv) <- listen $ precomputeFreeVars x
+      return (setFreeVariables (KnownFVs fv) i, x')
+
+instance PrecomputeFreeVars a => PrecomputeFreeVars (Arg a) where
+  precomputeFreeVars arg@(Arg i x) = uncurry Arg <$> maybePrecomputed i x
+
+-- Note that we don't store free variables in the Dom. The reason is that the
+-- ArgInfo in the Dom tends to get reused during type checking for the argument
+-- of that domain type, and it would be tedious and error prone to ensure that
+-- we don't accidentally inherit also the free variables. Moreover we don't
+-- really need the free variables of the Dom.
+instance PrecomputeFreeVars a => PrecomputeFreeVars (Dom a) where
+
+instance PrecomputeFreeVars a => PrecomputeFreeVars (Abs a) where
+  precomputeFreeVars (NoAbs x b) = NoAbs x <$> precomputeFreeVars b
+  precomputeFreeVars (Abs x b) =
+    censor (IntSet.map (subtract 1) . IntSet.delete 0) $
+      Abs x <$> precomputeFreeVars b
+
+instance PrecomputeFreeVars Term where
+  precomputeFreeVars t =
+    case t of
+      Var x es -> do
+        tell (IntSet.singleton x)
+        Var x <$> precomputeFreeVars es
+      Lam i b    -> Lam i      <$> precomputeFreeVars b
+      Lit{}      -> pure t
+      Def f es   -> Def f      <$> precomputeFreeVars es
+      Con c i es -> Con c i    <$> precomputeFreeVars es
+      Pi a b     -> uncurry Pi <$> precomputeFreeVars (a, b)
+      Sort s     -> Sort       <$> precomputeFreeVars s
+      Level l    -> Level      <$> precomputeFreeVars l
+      MetaV x es -> MetaV x    <$> precomputeFreeVars es
+      DontCare t -> DontCare   <$> precomputeFreeVars t
+
+-- The other instances are boilerplate.
+
+instance PrecomputeFreeVars Sort where
+  precomputeFreeVars s =
+    case s of
+      Type a     -> Type <$> precomputeFreeVars a
+      Prop       -> pure s
+      Inf        -> pure s
+      SizeUniv   -> pure s
+      PiSort s1 s2 -> uncurry PiSort <$> precomputeFreeVars (s1, s2)
+      UnivSort s -> UnivSort <$> precomputeFreeVars s
+      MetaS x es -> MetaS x <$> precomputeFreeVars es
+
+instance PrecomputeFreeVars Level where
+  precomputeFreeVars (Max ls) = Max <$> precomputeFreeVars ls
+
+instance PrecomputeFreeVars PlusLevel where
+  precomputeFreeVars l@ClosedLevel{} = pure l
+  precomputeFreeVars (Plus n l) = Plus n <$> precomputeFreeVars l
+
+instance PrecomputeFreeVars LevelAtom where
+  precomputeFreeVars l =
+    case l of
+      MetaLevel x es   -> MetaLevel x <$> precomputeFreeVars es
+      BlockedLevel x t -> BlockedLevel x <$> precomputeFreeVars t
+      NeutralLevel b t -> NeutralLevel b <$> precomputeFreeVars t
+      UnreducedLevel t -> UnreducedLevel <$> precomputeFreeVars t
+
+instance PrecomputeFreeVars Type where
+  precomputeFreeVars (El s t) = uncurry El <$> precomputeFreeVars (s, t)
+
+-- Note: don't use default instance, since that bypasses the 'Arg' in 'Apply'.
+instance PrecomputeFreeVars a => PrecomputeFreeVars (Elim' a) where
+  precomputeFreeVars e =
+    case e of
+      Apply x -> Apply <$> precomputeFreeVars x
+      Proj{}  -> pure e
+
+-- The very boilerplate instances
+
+instance PrecomputeFreeVars a => PrecomputeFreeVars [a] where
+instance PrecomputeFreeVars a => PrecomputeFreeVars (Maybe a) where
+
+instance (PrecomputeFreeVars a, PrecomputeFreeVars b) => PrecomputeFreeVars (a, b) where
+  precomputeFreeVars (x, y) = (,) <$> precomputeFreeVars x <*> precomputeFreeVars y
+
diff --git a/src/full/Agda/TypeChecking/Functions.hs b/src/full/Agda/TypeChecking/Functions.hs
--- a/src/full/Agda/TypeChecking/Functions.hs
+++ b/src/full/Agda/TypeChecking/Functions.hs
@@ -70,7 +70,7 @@
     -- Get all initial lambdas of the body.
     peekLambdas :: Term -> [Arg ArgName]
     peekLambdas v =
-      case ignoreSharing v of
+      case v of
         Lam info b -> Arg info (absName b) : peekLambdas (unAbs b)
         _ -> []
 
@@ -93,7 +93,7 @@
 --   Returns 'Nothing' if no such head exists.
 
 getDef :: Term -> TCM (Maybe QName)
-getDef t = (ignoreSharing <$> reduce t) >>= \case
+getDef t = reduce t >>= \case
   Def d _    -> return $ Just d
   Lam _ v    -> underAbstraction_ v getDef
   Level v    -> getDef =<< reallyUnLevelView v
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,7 +4,6 @@
 -}
 module Agda.TypeChecking.Implicit where
 
-import Control.Applicative
 import Control.Monad
 
 import Agda.Syntax.Common
@@ -44,7 +43,7 @@
 implicitNamedArgs 0 expand t0 = return ([], t0)
 implicitNamedArgs n expand t0 = do
     t0' <- reduce t0
-    case ignoreSharing $ unEl t0' of
+    case unEl t0' of
       Pi (Dom info a) b | let x = absName b, expand (getHiding info) x -> do
           info' <- if hidden info then return info else do
             reportSDoc "tc.term.args.ifs" 15 $
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
@@ -5,14 +5,17 @@
 import Prelude hiding (mapM)
 
 import Control.Applicative
+import Control.Arrow (first, second)
 import Control.Monad.State hiding (mapM, forM)
 import Control.Monad.Reader hiding (mapM, forM)
+import Control.Monad.Trans.Maybe
 
 import Data.Map (Map)
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 import Data.Maybe
 import Data.Traversable hiding (for)
+import Data.Semigroup ((<>))
 
 import qualified Agda.Syntax.Abstract.Name as A
 import Agda.Syntax.Common
@@ -20,19 +23,23 @@
 import Agda.Syntax.Internal.Pattern
 
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Primitive
 import {-# SOURCE #-} Agda.TypeChecking.MetaVars
 import {-# SOURCE #-} Agda.TypeChecking.Conversion
-import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Pretty hiding ((<>))
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Polarity
+import Agda.TypeChecking.Warnings
 
 import Agda.Utils.Except ( MonadError(catchError, throwError) )
 import Agda.Utils.Functor
+import Agda.Utils.Lens
 import Agda.Utils.List
 import Agda.Utils.Maybe
+import Agda.Utils.Monad
 import Agda.Utils.Permutation
 import Agda.Utils.Pretty ( prettyShow )
 
@@ -43,8 +50,8 @@
 headSymbol v = do -- ignoreAbstractMode $ do
   -- Andreas, 2013-02-18 ignoreAbstractMode leads to information leakage
 
-  v <- ignoreBlocking <$> reduceHead v
-  case ignoreSharing v of
+  v <- constructorForm =<< ignoreBlocking <$> reduceHead v
+  case v of
     Def f _ -> do
       let yes = return $ Just $ ConsHead f
           no  = return $ Nothing
@@ -70,121 +77,235 @@
     Con c _ _ -> return (Just $ ConsHead $ conName 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...
+    Var i [] -> return (Just $ VarHead i) -- Only naked variables. Otherwise substituting a neutral term is not guaranteed to stay neutral.
+    Lit _   -> return Nothing -- TODO: LitHead (for literals with no constructorForm)
     Lam{}   -> return Nothing
     Var{}   -> return Nothing
     Level{} -> return Nothing
     MetaV{} -> return Nothing
     DontCare{} -> return Nothing
-    Shared{}   -> __IMPOSSIBLE__
 
+-- | Do a full whnf and treat neutral terms as rigid. Used on the arguments to
+--   an injective functions and to the right-hand side.
+headSymbol' :: Term -> TCM (Maybe TermHead)
+headSymbol' v = do
+  v <- traverse constructorForm =<< reduceB v
+  case v of
+    Blocked{} -> return Nothing
+    NotBlocked _ v -> case v of
+      Def g _    -> return $ Just $ ConsHead g
+      Con c _ _  -> return $ Just $ ConsHead $ conName c
+      Var i _    -> return $ Just (VarHead i)
+      Sort _     -> return $ Just SortHead
+      Pi _ _     -> return $ Just PiHead
+      Lit _      -> return Nothing
+      Lam{}      -> return Nothing
+      Level{}    -> return Nothing
+      MetaV{}    -> return Nothing
+      DontCare{} -> return Nothing
+
+-- | Does deBruijn variable i correspond to a top-level argument, and if so
+--   which one (index from the left).
+topLevelArg :: Clause -> Int -> Maybe TermHead
+topLevelArg Clause{ namedClausePats = ps } i =
+  case [ n | (n, VarP _ (DBPatVar _ j)) <- zip [0..] $ map namedArg ps, i == j ] of
+    []    -> Nothing
+    [n]   -> Just (VarHead n)
+    _:_:_ -> __IMPOSSIBLE__
+
+-- | Join a list of inversion maps.
+joinHeadMaps :: [InversionMap c] -> InversionMap c
+joinHeadMaps = Map.unionsWith (<>)
+
+-- | Update the heads of an inversion map.
+updateHeads :: Monad m => (TermHead -> [c] -> m TermHead) -> InversionMap c -> m (InversionMap c)
+updateHeads f m = joinHeadMaps <$> mapM f' (Map.toList m)
+  where f' (h, c) = (`Map.singleton` c) <$> f h c
+
 checkInjectivity :: QName -> [Clause] -> TCM FunctionInverse
 checkInjectivity f cs
-  | pointLess cs = do
+  | pointless cs = do
       reportSLn "tc.inj.check.pointless" 20 $
         "Injectivity of " ++ prettyShow (A.qnameToConcrete f) ++ " would be pointless."
       return NotInjective
   where
     -- Is it pointless to use injectivity for this function?
-    pointLess []      = True
-    pointLess (_:_:_) = False
-    pointLess [cl] = not $ any (properlyMatching . namedArg) $ namedClausePats cl
+    pointless []      = True
+    pointless (_:_:_) = False
+    pointless [cl] = not $ any (properlyMatching . namedArg) $ namedClausePats cl
         -- Andreas, 2014-06-12
         -- If we only have record patterns, it is also pointless.
         -- We need at least one proper match.
-checkInjectivity f cs = do
+checkInjectivity f cs = fromMaybe NotInjective <.> runMaybeT $ do
   reportSLn "tc.inj.check" 40 $ "Checking injectivity of " ++ prettyShow f
-  -- Extract the head symbol of the rhs of each clause (skip absurd clauses)
-  es <- catMaybes <$> do
-    forM cs $ \ c -> do             -- produces a list ...
-      mapM ((,c) <.> headSymbol) $ clauseBody c -- ... of maybes
-  let (hs, ps) = unzip es
-  reportSLn "tc.inj.check" 40 $ "  right hand sides: " ++ show hs
-  if all isJust hs && distinct hs
-    then do
-      let inv = Map.fromList (map fromJust hs `zip` ps)
-      reportSLn "tc.inj.check" 20 $ prettyShow f ++ " is injective."
-      reportSDoc "tc.inj.check" 30 $ nest 2 $ vcat $
-        for (Map.toList inv) $ \ (h, c) ->
-          text (prettyShow h) <+> text "-->" <+>
-          fsep (punctuate comma $ map (prettyTCM . namedArg) $ namedClausePats c)
-      return $ Inverse inv
-    else return NotInjective
 
+  let varToArg :: Clause -> TermHead -> MaybeT TCM TermHead
+      varToArg c (VarHead i) = MaybeT $ return $ topLevelArg c i
+      varToArg _ h           = return h
+
+  -- We don't need to consider absurd clauses
+  let computeHead c@Clause{ clauseBody = Just body } = do
+        h <- varToArg c =<< lift (fromMaybe UnknownHead <$> headSymbol body)
+        return [Map.singleton h [c]]
+      computeHead _ = return []
+
+  hdMap <- joinHeadMaps . concat <$> mapM computeHead cs
+
+  case Map.lookup UnknownHead hdMap of
+    Just (_:_:_) -> empty -- More than one unknown head: we can't really do anything in that case.
+    _            -> return ()
+
+  reportSLn  "tc.inj.check" 20 $ prettyShow f ++ " is potentially injective."
+  reportSDoc "tc.inj.check" 30 $ nest 2 $ vcat $
+    for (Map.toList hdMap) $ \ (h, uc) ->
+      text (prettyShow h) <+> text "-->" <+>
+      case uc of
+        [c] -> prettyTCM $ map namedArg $ namedClausePats c
+        _   -> text "(multiple clauses)"
+
+  return $ Inverse hdMap
+
+-- | If a clause is over-applied we can't trust the head (Issue 2944). For
+--   instance, the clause might be `f ps = u , v` and the actual call `f vs
+--   .fst`. In this case the head will be the head of `u` rather than `_,_`.
+checkOverapplication :: Elims -> InversionMap Clause -> TCM (InversionMap Clause)
+checkOverapplication es = updateHeads overapplied
+  where
+    overapplied :: TermHead -> [Clause] -> TCM TermHead
+    overapplied h cs | all (not . isOverapplied) cs = return h
+    overapplied h cs = ifM (isSuperRigid h) (return h) (return UnknownHead)
+
+    -- A super-rigid head is one that can't be eliminated. Crucially, this is
+    -- applied after instantiateVars, so VarHeads are really bound variables.
+    isSuperRigid SortHead     = return True
+    isSuperRigid PiHead       = return True
+    isSuperRigid VarHead{}    = return True
+    isSuperRigid UnknownHead  = return True -- or False, doesn't matter
+    isSuperRigid (ConsHead q) = do
+      def <- getConstInfo q
+      return $ case theDef def of
+        Axiom{}        -> True
+        AbstractDefn{} -> True
+        Function{}     -> False
+        Datatype{}     -> True
+        Record{}       -> True
+        Constructor{conSrcCon = ConHead{ conFields = fs }}
+                       -> null fs   -- Record constructors can be eliminated by projections
+        Primitive{}    -> False
+
+
+    isOverapplied Clause{ namedClausePats = ps } = length es > length ps
+
+-- | Turn variable heads, referring to top-level argument positions, into
+--   proper heads. These might still be `VarHead`, but in that case they refer to
+--   deBruijn variables. Checks that the instantiated heads are still rigid and
+--   distinct.
+instantiateVarHeads :: QName -> Elims -> InversionMap c -> TCM (Maybe (InversionMap c))
+instantiateVarHeads f es m = runMaybeT $ updateHeads (const . instHead) m
+  where
+    instHead :: TermHead -> MaybeT TCM TermHead
+    instHead h@(VarHead i)
+      | length es > i,
+        Apply arg <- es !! i = MaybeT $ headSymbol' (unArg arg)
+      | otherwise = empty   -- impossible?
+    instHead h = return h
+
 -- | Argument should be in weak head normal form.
 functionInverse :: Term -> TCM InvView
-functionInverse v = case ignoreSharing v of
+functionInverse v = case v of
   Def f es -> do
-    d <- theDef <$> getConstInfo f
-    case d of
-      Function{ funInv = inv } -> case inv of
-        NotInjective  -> return NoInv
-        Inverse m     -> return $ Inv f es m
-          -- NB: Invertible functions are never classified as
-          --     projection-like, so this is fine, we are not
-          --     missing parameters.  (Andreas, 2013-11-01)
-      _ -> return NoInv
+    inv <- defInverse <$> getConstInfo f
+    case inv of
+      NotInjective -> return NoInv
+      Inverse m    -> maybe NoInv (Inv f es) <$> (traverse (checkOverapplication es) =<< instantiateVarHeads f es m)
+        -- NB: Invertible functions are never classified as
+        --     projection-like, so this is fine, we are not
+        --     missing parameters.  (Andreas, 2013-11-01)
   _ -> return NoInv
 
-data InvView = Inv QName [Elim] (Map TermHead Clause)
+data InvView = Inv QName [Elim] (InversionMap Clause)
              | NoInv
 
 data MaybeAbort = Abort | KeepGoing
 
-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
-    -- Andreas, Francesco, 2014-06-12:
-    -- We know that one of u,v is neutral
-    -- (see calls to useInjectivity in Conversion.hs).
-    -- Otherwise, (e.g. if both were Blocked), the following case would be
-    -- unsound, since it assumes the arguments to be pointwise equal.
-    -- It would deliver non-unique solutions for metas.
-    (Inv f fArgs _, Inv g gArgs _)
-      | f == g    -> do
-        a <- defType <$> getConstInfo f
-        reportSDoc "tc.inj.use" 20 $ vcat
-          [ fsep (pwords "comparing application of injective function" ++ [prettyTCM f] ++
-                pwords "at")
-          , nest 2 $ fsep $ punctuate comma $ map prettyTCM fArgs
-          , nest 2 $ fsep $ punctuate comma $ map prettyTCM gArgs
-          , nest 2 $ text "and type" <+> prettyTCM a
-          ]
-        pol <- getPolarity' cmp f
-        compareElims pol a (Def f []) fArgs gArgs
-      | otherwise -> fallBack
-    (Inv f args inv, NoInv) -> do
-      a <- defType <$> getConstInfo f
-      reportSDoc "tc.inj.use" 20 $ fsep $
-        pwords "inverting injective function" ++
-        [ prettyTCM f, text ":", prettyTCM a, text "for", prettyTCM v
-        , parens $ text "args =" <+> prettyList (map prettyTCM args)
-        ]
-      invert u f a inv args =<< headSymbol v
-    (NoInv, Inv g args inv) -> do
-      a <- defType <$> getConstInfo g
-      reportSDoc "tc.inj.use" 20 $ fsep $
-        pwords "inverting injective function" ++
-        [ prettyTCM g, text ":", prettyTCM a,  text "for", prettyTCM u
-        , parens $ text "args =" <+> prettyList (map prettyTCM args)
-        ]
-      invert v g a inv args =<< headSymbol u
-    (NoInv, NoInv)          -> fallBack
+-- | Precondition: The first argument must be blocked and the second must be
+--                 neutral.
+useInjectivity :: CompareDirection -> Type -> Term -> Term -> TCM ()
+useInjectivity dir ty blk neu = locally eInjectivityDepth succ $ do
+  inv <- functionInverse blk
+  -- Injectivity might cause non-termination for unsatisfiable constraints
+  -- (#431, #3067). Look at the number of active problems and the injectivity
+  -- depth to detect this.
+  nProblems <- Set.size <$> view eActiveProblems
+  injDepth  <- view eInjectivityDepth
+  let depth = max nProblems injDepth
+  maxDepth  <- maxInversionDepth
+  case inv of
+    NoInv            -> fallback  -- not invertible
+    Inv f blkArgs hdMap
+      | depth > maxDepth -> warning (InversionDepthReached f) >> fallback
+      | otherwise -> do
+      reportSDoc "tc.inj.use" 30 $ fsep $
+        pwords "useInjectivity on" ++
+        [ prettyTCM blk, prettyTCM cmp, prettyTCM neu, text ":", prettyTCM ty ]
+      let canReduceToSelf = Map.member (ConsHead f) hdMap || Map.member UnknownHead hdMap
+          allUnique       = all isUnique hdMap
+          isUnique [_] = True
+          isUnique _   = False
+      case neu of
+        -- f us == f vs  <=>  us == vs
+        -- Crucially, this relies on `f vs` being neutral and only works
+        -- if `f` is not a possible head for `f us`.
+        Def f' neuArgs | f == f', not canReduceToSelf -> do
+          fTy <- defType <$> getConstInfo f
+          reportSDoc "tc.inj.use" 20 $ vcat
+            [ fsep (pwords "comparing application of injective function" ++ [prettyTCM f] ++
+                  pwords "at")
+            , nest 2 $ fsep $ punctuate comma $ map prettyTCM blkArgs
+            , nest 2 $ fsep $ punctuate comma $ map prettyTCM neuArgs
+            , nest 2 $ text "and type" <+> prettyTCM fTy
+            ]
+          fs  <- getForcedArgs f
+          pol <- getPolarity' cmp f
+          reportSDoc "tc.inj.invert.success" 20 $ hsep [text "Successful spine comparison of", prettyTCM f]
+          app (compareElims pol fs fTy (Def f [])) blkArgs neuArgs
+
+        -- f us == c vs
+        --    Find the clause unique clause `f ps` with head `c` and unify
+        --    us == ps  with fresh metas for the pattern variables of ps.
+        --    If there's no such clause we can safely throw an error.
+        _ -> headSymbol' neu >>= \ case
+          Nothing -> fallback
+          Just (ConsHead f') | f == f', canReduceToSelf -> fallback
+                                    -- We can't invert in this case, since we can't
+                                    -- tell the difference between a solution that makes
+                                    -- the blocked term neutral and one that makes progress.
+          Just hd -> invertFunction cmp blk inv hd fallback err success
+            where err = typeError $ app (\ u v -> UnequalTerms cmp u v ty) blk neu
   where
-    fallBack = addConstraint $ ValueCmp cmp a u v
+    fallback     = addConstraint $ app (ValueCmp cmp ty) blk neu
+    success blk' = app (compareTerm cmp ty) blk' neu
 
-    invert :: Term -> QName -> Type -> Map TermHead Clause -> [Elim] -> Maybe TermHead -> TCM ()
-    invert _ _ a inv args Nothing  = fallBack
-    invert org f ftype inv args (Just h) = case Map.lookup h inv of
-      Nothing -> typeError $ UnequalTerms cmp u v a
-      Just cl@Clause{ clauseTel  = tel } -> maybeAbort $ do
+    (cmp, app) = case dir of
+      DirEq -> (CmpEq, id)
+      DirLeq -> (CmpLeq, id)
+      DirGeq -> (CmpLeq, flip)
+
+-- | The second argument should be a blocked application and the third argument
+--   the inverse of the applied function.
+invertFunction :: Comparison -> Term -> InvView -> TermHead -> TCM () -> TCM () -> (Term -> TCM ()) -> TCM ()
+invertFunction _ _ NoInv _ fallback _ _ = fallback
+invertFunction cmp blk (Inv f blkArgs hdMap) hd fallback err success = do
+    fTy <- defType <$> getConstInfo f
+    reportSDoc "tc.inj.use" 20 $ vcat
+      [ text "inverting injective function" <?> hsep [prettyTCM f, text ":", prettyTCM fTy]
+      , text "for" <?> pretty hd
+      , nest 2 $ text "args =" <+> prettyList (map prettyTCM blkArgs)
+      ]                         -- Clauses with unknown heads are also possible candidates
+    case fromMaybe [] $ Map.lookup hd hdMap <> Map.lookup UnknownHead hdMap of
+      [] -> err
+      _:_:_ -> fallback
+      [cl@Clause{ clauseTel  = tel }] -> maybeAbort $ do
           let ps   = clausePats cl
               perm = fromMaybe __IMPOSSIBLE__ $ clausePerm cl
           -- These are what dot patterns should be instantiated at
@@ -203,44 +324,38 @@
             [ text "inversion"
             , nest 2 $ vcat
               [ text "lhs  =" <+> prettyTCM margs
-              , text "rhs  =" <+> prettyTCM args
-              , text "type =" <+> prettyTCM ftype
+              , text "rhs  =" <+> prettyTCM blkArgs
+              , text "type =" <+> prettyTCM fTy
               ]
             ]
           -- 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
+          fs  <- getForcedArgs f
           -- The clause might not give as many patterns as there
           -- are arguments (point-free style definitions).
-          let args' = take (length margs) args
-          compareElims pol ftype (Def f []) margs args'
-{- Andreas, 2011-05-09 allow unsolved constraints as long as progress
-          unless (null cs) $ do
-            reportSDoc "tc.inj.invert" 30 $
-              text "aborting inversion; remaining constraints" <+> prettyTCM cs
-            patternViolation
--}
-          -- Check that we made progress, i.e. the head symbol
-          -- of the original term should be a constructor.
-          org <- reduce org
-          h <- headSymbol org
-          case h of
-            Just h  -> KeepGoing <$ compareTerm cmp a u v
-            Nothing -> do
+          let blkArgs' = take (length margs) blkArgs
+          compareElims pol fs fTy (Def f []) margs blkArgs'
+
+          -- Check that we made progress.
+          r <- runReduceM $ unfoldDefinitionStep False blk f blkArgs
+          case r of
+            YesReduction _ blk' -> do
+              reportSDoc "tc.inj.invert.success" 20 $ hsep [text "Successful inversion of", prettyTCM f, text "at", pretty hd]
+              KeepGoing <$ success blk'
+            NoReduction{}       -> do
               reportSDoc "tc.inj.invert" 30 $ vcat
-                [ text "aborting inversion;" <+> prettyTCM org
-                , text "plainly," <+> text (show org)
-                , text "has TermHead" <+> text (prettyShow h)
-                , text "which does not expose a constructor"
+                [ text "aborting inversion;" <+> prettyTCM blk
+                , text "does not reduce"
                 ]
               return Abort
-
+  where
     maybeAbort m = do
       (a, s) <- localTCStateSaving m
       case a of
         KeepGoing -> put s
-        Abort     -> fallBack
+        Abort     -> fallback
 
     nextMeta = do
       m : ms <- get
@@ -257,9 +372,21 @@
 
     metaArgs args = mapM (traverse $ metaPat . namedThing) args
 
-    metaPat (DotP v)         = dotP v
-    metaPat (VarP _)         = nextMeta
-    metaPat (AbsurdP p)      = metaPat p
-    metaPat (ConP c mt args) = Con c (fromConPatternInfo mt) <$> metaArgs args
+    metaPat (DotP _ v)       = dotP v
+    metaPat (VarP _ _)       = nextMeta
+    metaPat (ConP c mt args) = Con c (fromConPatternInfo mt) . map Apply <$> metaArgs args
     metaPat (LitP l)         = return $ Lit l
     metaPat ProjP{}          = __IMPOSSIBLE__
+
+forcePiUsingInjectivity :: Type -> TCM Type
+forcePiUsingInjectivity t = reduceB t >>= \ case
+    Blocked _ blkTy -> do
+      let blk = unEl blkTy
+      inv <- functionInverse blk
+      blkTy <$ invertFunction CmpEq blk inv PiHead fallback err success
+    NotBlocked _ t -> return t
+  where
+    fallback  = return ()
+    err       = typeError (ShouldBePi t)
+    success _ = return ()
+
diff --git a/src/full/Agda/TypeChecking/Inlining.hs b/src/full/Agda/TypeChecking/Inlining.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Inlining.hs
@@ -0,0 +1,29 @@
+-- | Logic for deciding which functions should be automatically inlined.
+module Agda.TypeChecking.Inlining (autoInline) where
+
+import qualified Data.IntMap as IntMap
+
+import Agda.Interaction.Options
+import Agda.Syntax.Internal
+import Agda.TypeChecking.Monad.Base
+import Agda.TypeChecking.CompiledClause
+import Agda.TypeChecking.Free
+import Agda.Utils.Lens
+
+-- | Mark a definition to be inlined if it satisfies the inlining criterion.
+autoInline :: Defn -> TCM Defn
+autoInline defn = do
+  inlining <- optAutoInline <$> pragmaOptions
+  if | inlining, shouldInline defn -> return $ set funInline True defn
+     | otherwise                   -> return defn
+
+shouldInline :: Defn -> Bool
+shouldInline Function{funCompiled = Just cc} = shouldInline' cc
+shouldInline _ = False
+
+-- Only auto-inline simple definitions (no pattern matching) where no variable
+-- is used more than once, and some variables are not used at all.
+shouldInline' :: CompiledClauses -> Bool
+shouldInline' (Done xs body) = all (< 2) counts && length counts < length xs
+  where counts = IntMap.elems $ varCounts $ freeVars body
+shouldInline' _ = False
diff --git a/src/full/Agda/TypeChecking/InstanceArguments.hs b/src/full/Agda/TypeChecking/InstanceArguments.hs
--- a/src/full/Agda/TypeChecking/InstanceArguments.hs
+++ b/src/full/Agda/TypeChecking/InstanceArguments.hs
@@ -3,6 +3,10 @@
 
 module Agda.TypeChecking.InstanceArguments where
 
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
 import Control.Applicative hiding (empty)
 import Control.Monad.Reader
 import Control.Monad.State
@@ -57,13 +61,13 @@
     getContextVars :: TCM [Candidate]
     getContextVars = do
       ctx <- getContext
-      reportSDoc "tc.instance.cands" 40 $ hang (text "Getting candidates from context") 2 (inTopContext $ prettyTCM ctx)
+      reportSDoc "tc.instance.cands" 40 $ hang (text "Getting candidates from context") 2 (inTopContext $ prettyTCM $ PrettyContext ctx)
           -- Context variables with their types lifted to live in the full context
       let varsAndRaisedTypes = [ (var i, raise (i + 1) t) | (i, t) <- zip [0..] ctx ]
           vars = [ Candidate x t ExplicitStayExplicit (isOverlappable info)
                  | (x, Dom info (_, t)) <- varsAndRaisedTypes
                  , isInstance info
-                 , not (unusableRelevance $ argInfoRelevance info)
+                 , not (unusableRelevance info)
                  ]
 
       -- {{}}-fields of variables are also candidates
@@ -85,7 +89,7 @@
       let lets = [ Candidate v t ExplicitStayExplicit False
                  | (v, Dom info t) <- env
                  , isInstance info
-                 , not (unusableRelevance $ argInfoRelevance info)
+                 , not (unusableRelevance info)
                  ]
       return $ vars ++ fields ++ lets
 
@@ -171,7 +175,7 @@
     -- potential candidates, so we add them to the context to make
     -- initialIFSCandidates pick them up.
     TelV tel t <- telView t
-    cands <- addContext' tel $ initialIFSCandidates t
+    cands <- addContext tel $ initialIFSCandidates t
     case cands of
       Nothing -> do
         reportSLn "tc.instance" 20 "Can't figure out target of instance goal. Postponing constraint."
@@ -251,8 +255,8 @@
 -- | Precondition: type is spine reduced and ends in a Def or a Var.
 insidePi :: Type -> (Type -> TCM a) -> TCM a
 insidePi t ret =
-  case ignoreSharing $ unEl t of
-    Pi a b     -> addContext' (absName b, a) $ insidePi (absBody b) ret
+  case unEl t of
+    Pi a b     -> addContext (absName b, a) $ insidePi (absBody b) ret
     Def{}      -> ret t
     Var{}      -> ret t
     Sort{}     -> __IMPOSSIBLE__
@@ -261,7 +265,6 @@
     Lit{}      -> __IMPOSSIBLE__
     Level{}    -> __IMPOSSIBLE__
     MetaV{}    -> __IMPOSSIBLE__
-    Shared{}   -> __IMPOSSIBLE__
     DontCare{} -> __IMPOSSIBLE__
 
 -- | A meta _M is rigidly constrained if there is a constraint _M us == D vs,
@@ -274,7 +277,7 @@
   where
     isRigid v = do
       bv <- reduceB v
-      case ignoreSharing <$> bv of
+      case bv of
         Blocked{}    -> return False
         NotBlocked _ v -> case v of
           MetaV{}    -> return False
@@ -287,11 +290,10 @@
           Level{}    -> return False
           DontCare{} -> return False
           Lam{}      -> __IMPOSSIBLE__
-          Shared{}   -> __IMPOSSIBLE__
     rigidMetas c =
       case clValue $ theConstraint c of
         ValueCmp _ _ u v ->
-          case (ignoreSharing u, ignoreSharing v) of
+          case (u, v) of
             (MetaV m us, _) | isJust (allApplyElims us) -> ifM (isRigid v) (return $ Just m) (return Nothing)
             (_, MetaV m vs) | isJust (allApplyElims vs) -> ifM (isRigid u) (return $ Just m) (return Nothing)
             _              -> return Nothing
@@ -305,6 +307,9 @@
         IsEmpty{}     -> return Nothing
         CheckSizeLtSat{} -> return Nothing
         FindInScope{} -> return Nothing
+        CheckFunDef{} -> return Nothing
+        HasBiggerSort{} -> return Nothing
+        HasPTSRule{}  -> return Nothing
 
 isRigid :: MetaId -> TCM Bool
 isRigid i = do
@@ -315,7 +320,7 @@
 --   constrained. Note that level metas are never considered rigidly constrained
 --   (#1865).
 areThereNonRigidMetaArguments :: Term -> TCM (Maybe MetaId)
-areThereNonRigidMetaArguments t = case ignoreSharing t of
+areThereNonRigidMetaArguments t = case t of
     Def n args -> do
       TelV tel _ <- telView . defType =<< getConstInfo n
       let varOccs EmptyTel           = []
@@ -339,7 +344,6 @@
     Level{}  -> __IMPOSSIBLE__
     MetaV{}  -> __IMPOSSIBLE__
     Pi{}     -> __IMPOSSIBLE__
-    Shared{} -> __IMPOSSIBLE__
     DontCare{} -> __IMPOSSIBLE__
   where
     areThereNonRigidMetaArgs :: Elims -> TCM (Maybe MetaId)
@@ -350,10 +354,10 @@
 
     isNonRigidMeta :: Term -> TCM (Maybe MetaId)
     isNonRigidMeta v =
-      case ignoreSharing v of
+      case v of
         Def _ es  -> areThereNonRigidMetaArgs es
         Var _ es  -> areThereNonRigidMetaArgs es
-        Con _ _ vs-> areThereNonRigidMetaArgs (map Apply vs)
+        Con _ _ vs-> areThereNonRigidMetaArgs vs
         MetaV i _ -> ifM (isRigid i) (return Nothing) $ do
           -- Ignore unconstrained level and size metas (#1865)
           mlvl <- getBuiltinDefName builtinLevel
@@ -468,7 +472,7 @@
     anyMetaTypes [] = return False
     anyMetaTypes (Candidate _ a _ _ : cands) = do
       a <- instantiate a
-      case ignoreSharing $ unEl a of
+      case unEl a of
         MetaV{} -> return True
         _       -> anyMetaTypes cands
 
@@ -574,11 +578,11 @@
 applyDroppingParameters :: Term -> Args -> TCM Term
 applyDroppingParameters t vs = do
   let fallback = return $ t `apply` vs
-  case ignoreSharing t of
+  case t of
     Con c ci [] -> do
       def <- theDef <$> getConInfo c
       case def of
-        Constructor {conPars = n} -> return $ Con c ci (drop n vs)
+        Constructor {conPars = n} -> return $ Con c ci (map Apply $ drop n vs)
         _ -> __IMPOSSIBLE__
     Def f [] -> do
       mp <- isProjection f
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
@@ -1,11 +1,11 @@
--- {-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE UndecidableInstances #-}
 
 {-| Irrelevant function types.
 -}
 module Agda.TypeChecking.Irrelevance where
 
 import Control.Arrow (first, second)
-import Control.Applicative
 import Control.Monad.Reader
 
 import qualified Data.Map as Map
@@ -16,7 +16,14 @@
 import Agda.Syntax.Internal
 
 import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Substitute.Class
 
+import Agda.Utils.Monad
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
 -- | data 'Relevance'
 --   see "Agda.Syntax.Common".
 
@@ -49,7 +56,9 @@
 -- | Internal workhorse, expects value of --experimental-irrelevance flag
 --   as argument.
 workOnTypes' :: Bool -> TCM a -> TCM a
-workOnTypes' experimental cont = modifyContext (modifyContextEntries $ mapRelevance f) cont
+workOnTypes' experimental =
+  modifyContext (map $ mapRelevance f) .
+  local (\ e -> e { envWorkingOnTypes = True })
   where
     f | experimental = irrToNonStrict . nonStrictToRel
       | otherwise    = nonStrictToRel
@@ -58,13 +67,12 @@
 --   For instance,
 --   in an irrelevant function argument otherwise irrelevant variables
 --   may be used, so they are awoken before type checking the argument.
-applyRelevanceToContext :: Relevance -> TCM a -> TCM a
+applyRelevanceToContext :: (MonadTCM tcm) => Relevance -> tcm a -> tcm a
 applyRelevanceToContext rel =
   case rel of
     Relevant -> id
-    Forced{} -> id
     _        -> local $ \ e -> e
-      { envContext     = modifyContextEntries      (inverseApplyRelevance rel) (envContext e)
+      { envContext     = map                       (inverseApplyRelevance rel) (envContext e)
       , envLetBindings = (Map.map . fmap . second) (inverseApplyRelevance rel) (envLetBindings e)
                                                   -- enable local  irr. defs
       , envRelevance   = composeRelevance rel (envRelevance e)
@@ -81,7 +89,86 @@
 --   irrelevant (issue #2568).
 wakeIrrelevantVars :: TCM a -> TCM a
 wakeIrrelevantVars = local $ \ e -> e
-  { envContext     = modifyContextEntries      (inverseApplyRelevance Irrelevant) (envContext e)
+  { envContext     = map                       (inverseApplyRelevance Irrelevant) (envContext e)
   , envLetBindings = (Map.map . fmap . second) (inverseApplyRelevance Irrelevant) (envLetBindings e)
   }
 
+-- | Check whether something can be used in a position of the given relevance.
+class UsableRelevance a where
+  usableRel :: Relevance -> a -> TCM Bool
+
+instance UsableRelevance Term where
+  usableRel rel u = case u of
+    Var i vs -> do
+      irel <- getRelevance <$> typeOfBV' i
+      let ok = irel `moreRelevant` rel
+      reportSDoc "tc.irr" 50 $
+        text "Variable" <+> prettyTCM (var i) <+>
+        text ("has relevance " ++ show irel ++ ", which is " ++
+              (if ok then "" else "NOT ") ++ "more relevant than " ++ show rel)
+      return ok `and2M` usableRel rel vs
+    Def f vs -> do
+      frel <- relOfConst f
+      return (frel `moreRelevant` rel) `and2M` usableRel rel vs
+    Con c _ vs -> usableRel rel vs
+    Lit l    -> return True
+    Lam _ v  -> usableRel rel v
+    Pi a b   -> usableRel rel (a,b)
+    Sort s   -> usableRel rel s
+    Level l  -> return True
+    MetaV m vs -> do
+      mrel <- getMetaRelevance <$> lookupMeta m
+      return (mrel `moreRelevant` rel) `and2M` usableRel rel vs
+    DontCare _ -> return $ isIrrelevant rel
+
+instance UsableRelevance a => UsableRelevance (Type' a) where
+  usableRel rel (El _ t) = usableRel rel t
+
+instance UsableRelevance Sort where
+  usableRel rel s = case s of
+    Type l -> usableRel rel l
+    Prop   -> return True
+    Inf    -> return True
+    SizeUniv -> return True
+    PiSort s1 s2 -> usableRel rel (s1,s2)
+    UnivSort s -> usableRel rel s
+    MetaS x es -> usableRel rel es
+
+instance UsableRelevance Level where
+  usableRel rel (Max ls) = usableRel rel ls
+
+instance UsableRelevance PlusLevel where
+  usableRel rel ClosedLevel{} = return True
+  usableRel rel (Plus _ l)    = usableRel rel l
+
+instance UsableRelevance LevelAtom where
+  usableRel rel l = case l of
+    MetaLevel m vs -> do
+      mrel <- getMetaRelevance <$> lookupMeta m
+      return (mrel `moreRelevant` rel) `and2M` usableRel rel vs
+    NeutralLevel _ v -> usableRel rel v
+    BlockedLevel _ v -> usableRel rel v
+    UnreducedLevel v -> usableRel rel v
+
+instance UsableRelevance a => UsableRelevance [a] where
+  usableRel rel = andM . map (usableRel rel)
+
+instance (UsableRelevance a, UsableRelevance b) => UsableRelevance (a,b) where
+  usableRel rel (a,b) = usableRel rel a `and2M` usableRel rel b
+
+instance UsableRelevance a => UsableRelevance (Elim' a) where
+  usableRel rel (Apply a) = usableRel rel a
+  usableRel rel (Proj _ p) = do
+    prel <- relOfConst p
+    return $ prel `moreRelevant` rel
+
+instance UsableRelevance a => UsableRelevance (Arg a) where
+  usableRel rel (Arg info u) =
+    let rel' = getRelevance info
+    in  usableRel (rel `composeRelevance` rel') u
+
+instance UsableRelevance a => UsableRelevance (Dom a) where
+  usableRel rel (Dom _ u) = usableRel rel u
+
+instance (Subst t a, UsableRelevance a) => UsableRelevance (Abs a) where
+  usableRel rel abs = underAbstraction_ abs $ \u -> usableRel rel u
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
@@ -2,7 +2,6 @@
 
 module Agda.TypeChecking.Level where
 
-import Control.Applicative
 import Data.Maybe
 import qualified Data.List as List
 import Data.Traversable (Traversable,traverse)
@@ -16,6 +15,7 @@
 import Agda.TypeChecking.Monad.Builtin
 
 import Agda.Utils.Except ( MonadError(catchError) )
+import Agda.Utils.Maybe ( caseMaybeM, allJustM )
 import Agda.Utils.Monad ( tryMaybe )
 
 #include "undefined.h"
@@ -43,10 +43,10 @@
 {-# SPECIALIZE builtinLevelKit :: ReduceM LevelKit #-}
 builtinLevelKit :: (HasBuiltins m) => m LevelKit
 builtinLevelKit = do
-    level@(Def l []) <- ignoreSharing . fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevel
-    zero@(Def z [])  <- ignoreSharing . fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelZero
-    suc@(Def s [])   <- ignoreSharing . fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelSuc
-    max@(Def m [])   <- ignoreSharing . fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelMax
+    level@(Def l []) <- fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevel
+    zero@(Def z [])  <- fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelZero
+    suc@(Def s [])   <- fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelSuc
+    max@(Def m [])   <- fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelMax
     return $ LevelKit
       { lvlType  = level
       , lvlSuc   = \ a -> suc `apply1` a
@@ -62,11 +62,23 @@
 requireLevels :: TCM LevelKit
 requireLevels = builtinLevelKit
 
+-- | Checks whether level kit is fully available.
+haveLevels :: TCM Bool
+haveLevels = caseMaybeM (allJustM $ map getBuiltin' levelBuiltins)
+    (return False)
+    (\ _bs -> return True)
+  where
+  levelBuiltins =
+    [ builtinLevel
+    , builtinLevelZero
+    , builtinLevelSuc
+    , builtinLevelMax
+    ]
+
 {-# SPECIALIZE unLevel :: Term -> TCM Term #-}
 {-# SPECIALIZE unLevel :: Term -> ReduceM Term #-}
 unLevel :: (HasBuiltins m) => Term -> m Term
 unLevel (Level l)  = reallyUnLevelView l
-unLevel (Shared p) = unLevel (derefPtr p)
 unLevel v = return v
 
 {-# SPECIALIZE reallyUnLevelView :: Level -> TCM Term #-}
@@ -112,12 +124,12 @@
 
 levelView' :: Term -> ReduceM Level
 levelView' a = do
-  Def lzero [] <- ignoreSharing . fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelZero
-  Def lsuc  [] <- ignoreSharing . fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelSuc
-  Def lmax  [] <- ignoreSharing . fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelMax
+  Def lzero [] <- fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelZero
+  Def lsuc  [] <- fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelSuc
+  Def lmax  [] <- fromMaybe __IMPOSSIBLE__ <$> getBuiltin' builtinLevelMax
   let view a = do
         a <- reduce' a
-        case ignoreSharing a of
+        case a of
           Level l -> return l
           Def s [Apply arg]
             | s == lsuc  -> inc <$> view (unArg arg)
@@ -131,7 +143,7 @@
   where
     mkAtom a = do
       b <- reduceB' a
-      return $ case ignoreSharing <$> b of
+      return $ case b of
         NotBlocked _ (MetaV m as) -> atom $ MetaLevel m as
         NotBlocked r _            -> atom $ NeutralLevel r $ ignoreBlocking b
         Blocked m _               -> atom $ BlockedLevel m $ ignoreBlocking b
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,6 +3,7 @@
 module Agda.TypeChecking.LevelConstraints ( simplifyLevelConstraint ) where
 
 import qualified Data.List as List
+import Data.Maybe
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Substitute
@@ -18,13 +19,15 @@
 --   The constraints doesn't necessarily have to live in the same context, but
 --   they do need to be universally quanitfied over the context. This function
 --   takes care of renaming variables when checking for matches.
-simplifyLevelConstraint :: Constraint -> [Constraint] -> Constraint
+simplifyLevelConstraint :: Constraint -> [Constraint] -> [Constraint]
 simplifyLevelConstraint new old =
   case inequalities new of
-    [a :=< b] | any (matchLeq (b :=< a)) leqs -> LevelCmp CmpEq (Max [a]) (Max [b])
-    _ -> new
+    Just eqs -> map simpl eqs
+    Nothing  -> [new]
   where
-    leqs = concatMap inequalities old
+    simpl (a :=< b) | any (matchLeq (b :=< a)) leqs = LevelCmp CmpEq  (Max [a]) (Max [b])
+                    | otherwise                     = LevelCmp CmpLeq (Max [a]) (Max [b])
+    leqs = concat $ catMaybes $ map inequalities old
 
 data Leq = PlusLevel :=< PlusLevel
   deriving (Show, Eq)
@@ -49,17 +52,19 @@
 
 -- | Turn a level constraint into a list of level inequalities, if possible.
 
-inequalities :: Constraint -> [Leq]
+inequalities :: Constraint -> Maybe [Leq]
 
-inequalities (LevelCmp CmpLeq (Max as) (Max [b])) = map (:=< b) as  -- Andreas, 2016-09-28
+inequalities (LevelCmp CmpLeq (Max as) (Max [b])) = Just $ map (:=< b) as  -- Andreas, 2016-09-28
   -- Why was this most natural case missing?
   -- See test/Succeed/LevelLeqGeq.agda for where it is useful!
 
 -- These are very special cases only, in no way complete:
-inequalities (LevelCmp CmpEq (Max [a, b]) (Max [c]))
-  | a == c = [b :=< a]
-  | b == c = [a :=< b]
-inequalities (LevelCmp CmpEq (Max [a]) (Max [b, c]))
-  | a == b = [c :=< b]
-  | a == c = [b :=< c]
-inequalities _ = []
+inequalities (LevelCmp CmpEq (Max as) (Max [b])) =
+  case break (== b) as of
+    (as0, _ : as1) -> Just [ a :=< b | a <- as0 ++ as1 ]
+    _              -> Nothing
+inequalities (LevelCmp CmpEq (Max [b]) (Max as)) =
+  case break (== b) as of
+    (as0, _ : as1) -> Just [ a :=< b | a <- as0 ++ as1 ]
+    _              -> Nothing
+inequalities _ = Nothing
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
@@ -1,5 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE NondecreasingIndentation #-}
+{-# LANGUAGE GADTs #-}
 
 module Agda.TypeChecking.MetaVars where
 
@@ -8,9 +9,11 @@
 import Control.Monad.Reader
 
 import Data.Function
+import qualified Data.IntMap as IntMap
 import qualified Data.List as List
 import qualified Data.Map as Map
 import qualified Data.Foldable as Fold
+import qualified Data.Traversable as Trav
 
 import Agda.Syntax.Abstract.Name as A
 import Agda.Syntax.Common
@@ -21,6 +24,7 @@
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Sort
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Constraints
@@ -43,6 +47,7 @@
   , runExceptT
   )
 
+import Agda.Utils.Function
 import Agda.Utils.Lens
 import Agda.Utils.List
 import Agda.Utils.Maybe
@@ -136,7 +141,10 @@
 
 -- | Create a sort meta that cannot be instantiated with 'Inf' (Setω).
 newSortMetaBelowInf :: TCM Sort
-newSortMetaBelowInf = newSortMeta' $ HasType ()
+newSortMetaBelowInf = do
+  x <- newSortMeta
+  hasBiggerSort x
+  return x
 
 -- | Create a sort meta that may be instantiated with 'Inf' (Setω).
 newSortMeta :: TCM Sort
@@ -148,9 +156,8 @@
   ifM hasUniversePolymorphism (newSortMetaCtx' judge =<< getContextArgs)
   -- else (no universe polymorphism)
   $ do i   <- createMetaInfo
-       lvl <- levelType
-       x   <- newMeta i normalMetaPriority (idP 0) $ judge lvl
-       return $ Type $ Max [Plus 0 $ MetaLevel x []]
+       x   <- newMeta i normalMetaPriority (idP 0) $ judge typeDontCare
+       return $ MetaS x []
 
 -- | Create a sort meta that may be instantiated with 'Inf' (Setω).
 newSortMetaCtx :: Args -> TCM Sort
@@ -161,12 +168,11 @@
   ifM typeInType (return $ mkType 0) $ {- else -} do
     i   <- createMetaInfo
     tel <- getContextTelescope
-    lvl <- levelType
-    let t = telePi_ tel lvl
+    let t = telePi_ tel typeDontCare
     x   <- newMeta i normalMetaPriority (idP 0) $ judge t
     reportSDoc "tc.meta.new" 50 $
       text "new sort meta" <+> prettyTCM x <+> text ":" <+> prettyTCM t
-    return $ Type $ Max [Plus 0 $ MetaLevel x $ map Apply vs]
+    return $ MetaS x $ map Apply vs
 
 newTypeMeta :: Sort -> TCM Type
 newTypeMeta s = El s . snd <$> newValueMeta RunMetaOccursCheck (sort s)
@@ -192,7 +198,8 @@
     [ text "new ifs meta:"
     , nest 2 $ prettyTCM vs <+> text "|-"
     ]
-  i0 <- createMetaInfo
+  -- Andreas, 2017-10-04, issue #2753: no metaOccurs check for instance metas
+  i0 <- createMetaInfo' DontRunMetaOccursCheck
   let i = i0 { miNameSuggestion = s }
   TelV tel _ <- telView t
   let perm = idP (size tel)
@@ -253,7 +260,7 @@
     ]
   etaExpandMetaSafe x
   -- Andreas, 2012-09-24: for Metas X : Size< u add constraint X+1 <= u
-  u <- shared $ MetaV x $ map Apply vs
+  let u = MetaV x $ map Apply vs
   boundedSizeMetaHook u tel a
   return (x, u)
 
@@ -280,15 +287,20 @@
 newArgsMetaCtx' :: Condition -> Type -> Telescope -> Permutation -> Args -> TCM Args
 newArgsMetaCtx' condition (El s tm) tel perm ctx = do
   tm <- reduce tm
-  case ignoreSharing tm of
+  case tm of
     Pi dom@(Dom info a) codom | condition dom codom -> do
+      let r    = getRelevance info
+          -- Issue #3031: It's not enough to applyRelevanceToContext, since most (all?)
+          -- of the context lives in tel. Don't forget the arguments in ctx.
+          tel' = telFromList . map (inverseApplyRelevance r) . telToList $ tel
+          ctx' = (map . mapRelevance) (r `inverseComposeRelevance`) ctx
       (_, u) <- applyRelevanceToContext (getRelevance info) $
                {-
                  -- 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 RunMetaOccursCheck a tel perm ctx
+                 newValueMetaCtx RunMetaOccursCheck a tel' perm ctx'
       args <- newArgsMetaCtx' condition (codom `absApp` u) tel perm ctx
       return $ Arg info u : args
     _  -> return []
@@ -306,7 +318,7 @@
   ftel   <- flip apply pars <$> getRecordFieldTypes r
   fields <- newArgsMetaCtx (telePi_ ftel $ sort Prop) tel perm ctx
   con    <- getRecordConstructor r
-  return $ Con con ConOSystem fields
+  return $ Con con ConOSystem (map Apply fields)
 
 newQuestionMark :: InteractionId -> Type -> TCM (MetaId, Term)
 newQuestionMark = newQuestionMark' $ newValueMeta' RunMetaOccursCheck
@@ -371,7 +383,7 @@
 --
 --   Auxiliary function to create a postponed type checking problem.
 unblockedTester :: Type -> TCM Bool
-unblockedTester t = ifBlockedType t (\ m t -> return False) (\ t -> return True)
+unblockedTester t = ifBlockedType t (\ m t -> return False) (\ _ t -> return True)
 
 -- | Create a postponed type checking problem @e : t@ that waits for type @t@
 --   to unblock (become instantiated or its constraints resolved).
@@ -471,51 +483,53 @@
           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     <- telView a
-    -- 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 es) ->
-        ifM (isEtaRecord r) {- then -} (do
-          let ps = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
-          let expand = do
-                u <- withMetaInfo' meta $ newRecordMetaCtx r ps tel (idP $ size tel) $ teleArgs tel
-                inTopContext $ do
-                  verboseS "tc.meta.eta" 15 $ do
-                    du <- prettyTCM u
-                    reportSDoc "tc.meta.eta" 15 $ sep
-                      [ text "eta expanding: " <+> pretty m <+> text " --> "
-                      , nest 2 $ prettyTCM u
-                      ]
-                  -- 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 (telToArgs tel) 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      -> waitFor x
-               Right False -> dontExpand
-               Right True  -> expand
-            else dontExpand
-        ) $ {- else -} 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 (telToArgs tel) (Level $ Max [])
-       ) $ {- else -} dontExpand
-      _ -> dontExpand
+    meta <- lookupMeta m
+    case mvJudgement meta of
+      IsSort{} -> dontExpand
+      HasType _ a -> do
+        TelV tel b <- telView a
+        -- 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 t of
+          lvl@(Def r es) ->
+            ifM (isEtaRecord r) {- then -} (do
+              let ps = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
+              let expand = do
+                    u <- withMetaInfo' meta $ newRecordMetaCtx r ps tel (idP $ size tel) $ teleArgs tel
+                    inTopContext $ do
+                      verboseS "tc.meta.eta" 15 $ do
+                        du <- prettyTCM u
+                        reportSDoc "tc.meta.eta" 15 $ sep
+                          [ text "eta expanding: " <+> pretty m <+> text " --> "
+                          , nest 2 $ prettyTCM u
+                          ]
+                      -- 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 (telToArgs tel) 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      -> waitFor x
+                   Right False -> dontExpand
+                   Right True  -> expand
+                else dontExpand
+            ) $ {- else -} 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 (telToArgs tel) (Level $ Max [])
+           ) $ {- else -} dontExpand
+          _ -> dontExpand
 
 -- | Eta expand blocking metavariables of record type, and reduce the
 -- blocked thing.
@@ -589,9 +603,9 @@
     text "MetaVars.assign: assigning to " <+> prettyTCM v
 
   reportSLn "tc.meta.assign" 75 $
-    "MetaVars.assign: assigning to " ++ show v
+    "MetaVars.assign: assigning meta  " ++ show x ++ "  with args  " ++ show args ++ "  to  " ++ show v
 
-  case (ignoreSharing v, mvJudgement mvar) of
+  case (v, mvJudgement mvar) of
       (Sort Inf, HasType{}) -> typeError SetOmegaNotValidType
       _                     -> return ()
 
@@ -647,14 +661,16 @@
       -- e.g. _1 x (suc x) = suc (_2 x y)
       -- even though the lhs is not a pattern, we can prune the y from _2
 
-      (relVL, irrVL) <- do
+      (relVL, nonstrictVL, irrVL) <- do
         -- Andreas, 2016-11-03 #2211 attempt to do s.th. for unused
         if False -- irrelevant $ getMetaRelevance mvar
           then do
             reportSDoc "tc.meta.assign" 25 $ text "meta is irrelevant or unused"
-            return (Set.toList $ allFreeVars args, empty)
+            return (Set.toList $ allFreeVars args, empty, empty)
           else do
-            let relVL = Set.toList $ allRelevantVars args
+            let vars  = allFreeVarsWithOcc args
+                relVL       = IntMap.keys $ IntMap.filter isRelevant vars
+                nonstrictVL = IntMap.keys $ IntMap.filter isNonStrict vars
             -- 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)
@@ -662,13 +678,12 @@
             let fromIrrVar (Var i [])   = return [i]
                 fromIrrVar (Con c _ vs)   =
                   ifM (isNothing <$> isRecordConstructor (conName c)) (return []) $
-                    concat <$> mapM (fromIrrVar . {- stripDontCare .-} unArg) vs
-                fromIrrVar (Shared p)   = fromIrrVar (derefPtr p)
+                    concat <$> mapM (fromIrrVar . {- stripDontCare .-} unArg) (fromMaybe __IMPOSSIBLE__ (allApplyElims vs))
                 fromIrrVar _ = return []
             irrVL <- concat <$> mapM fromIrrVar
                        [ v | Arg info v <- args, isIrrelevant info ]
                           -- irrelevant (getRelevance info) ]
-            return (relVL, irrVL)
+            return (relVL, nonstrictVL, irrVL)
       reportSDoc "tc.meta.assign" 20 $
           let pr (Var n []) = text (show n)
               pr (Def c []) = prettyTCM c
@@ -676,6 +691,7 @@
           in vcat
                [ text "mvar args:" <+> sep (map (pr . unArg) args)
                , text "fvars lhs (rel):" <+> sep (map (text . show) relVL)
+               , text "fvars lhs (nonstrict):" <+> sep (map (text . show) nonstrictVL)
                , text "fvars lhs (irr):" <+> sep (map (text . show) irrVL)
                ]
 
@@ -684,7 +700,7 @@
       -- Herein, distinguish relevant and irrelevant vars,
       -- since when abstracting irrelevant lhs vars, they may only occur
       -- irrelevantly on rhs.
-      v <- liftTCM $ occursCheck x (relVL, irrVL) v
+      v <- liftTCM $ occursCheck x (relVL, nonstrictVL, irrVL) v
 
       reportSLn "tc.meta.assign" 15 "passed occursCheck"
       verboseS "tc.meta.assign" 30 $ do
@@ -738,6 +754,12 @@
           m <- getContextSize
           assignMeta' m x t (length args) ids v
   where
+    -- | Try to remove meta arguments from lhs that mention variables not occurring on rhs.
+    attemptPruning
+      :: MetaId  -- ^ Meta-variable (lhs)
+      -> Args    -- ^ Meta arguments (lhs)
+      -> FVs     -- ^ Variables occuring on the rhs
+      -> TCM a
     attemptPruning x args fvs = do
       -- non-linear lhs: we cannot solve, but prune
       killResult <- prune x args $ Set.toList fvs
@@ -800,7 +822,7 @@
                 reportSDoc "tc.meta.inert" 30 $ nest 2 $ text "can't do projections from inert"
                 patternViolation
               Just args -> return args
-      case ignoreSharing v of
+      case v of
         Var x elims -> (, Var x . map Apply) <$> typeOfBV x
         Con c ci args  -> notInert -- (, Con c ci) <$> defType <$> getConstInfo (conName c)
         Def f elims -> do
@@ -821,7 +843,6 @@
         Level{}    -> notInert
         MetaV{}    -> notInert
         DontCare{} -> notInert
-        Shared{}   -> __IMPOSSIBLE__
 
     ensureNeutral :: Term -> Term -> TCM ()
     ensureNeutral rhs v = do
@@ -834,7 +855,7 @@
               reportSDoc "tc.meta.inert" 30 $ nest 2 $ text "argument shares head with RHS:" <+> prettyTCM arg
               patternViolation
             | otherwise  = return ()
-      case fmap ignoreSharing b of
+      case b of
         Blocked{}      -> notNeutral v
         NotBlocked r v ->                      -- Andrea(s) 2014-12-06 can r be useful?
           case v of
@@ -848,7 +869,6 @@
             MetaV{}    -> notNeutral v
             Con{}      -> notNeutral v
             Lam{}      -> notNeutral v
-            Shared{}   -> __IMPOSSIBLE__
 -- END UNUSED -}
 
 -- | @assignMeta m x t ids u@ solves @x ids = u@ for meta @x@ of type @t@,
@@ -951,7 +971,7 @@
     caseMaybe mSizeLt fallback $ \ qSizeLt -> do
       -- Check whether v is a SIZELT
       v <- reduce v
-      case ignoreSharing v of
+      case v of
         Def q [Apply (Arg ai u)] | q == qSizeLt -> do
           -- Clone the meta into a new size meta @y@.
           -- To this end, we swap the target of t for Size.
@@ -974,13 +994,21 @@
         _ -> fallback
 
 -- | Eta-expand bound variables like @z@ in @X (fst z)@.
-expandProjectedVars :: (Normalise a, TermLike a, Show a, PrettyTCM a, NoProjectedVar a,
-                        Subst Term a, PrettyTCM b, Subst Term b) =>
-  a -> b -> (a -> b -> TCM c) -> TCM c
+expandProjectedVars
+  :: ( Show a, PrettyTCM a, NoProjectedVar a
+     -- , Normalise a, TermLike a, Subst Term a
+     , ReduceAndEtaContract a
+     , PrettyTCM b, Subst Term b
+     )
+  => a  -- ^ Meta variable arguments.
+  -> b  -- ^ Right hand side.
+  -> (a -> b -> TCM c)
+  -> TCM c
 expandProjectedVars args v ret = loop (args, v) where
   loop (args, v) = do
     reportSDoc "tc.meta.assign.proj" 45 $ text "meta args: " <+> prettyTCM args
-    args <- etaContract =<< normalise args
+    args <- callByName $ reduceAndEtaContract args
+    -- args <- etaContract =<< normalise args
     reportSDoc "tc.meta.assign.proj" 45 $ text "norm args: " <+> prettyTCM args
     reportSDoc "tc.meta.assign.proj" 85 $ text "norm args: " <+> text (show args)
     let done = ret args v
@@ -1011,12 +1039,12 @@
 
 instance NoProjectedVar Term where
   noProjectedVar t =
-    case ignoreSharing t of
+    case t of
       Var i es
         | qs@(_:_) <- takeWhileJust id $ map isProjElim es -> Left $ ProjVarExc i qs
       -- Andreas, 2015-09-12 Issue #1316:
       -- Also look in inductive record constructors
-      Con (ConHead _ Inductive (_:_)) _ vs -> noProjectedVar vs
+      Con (ConHead _ Inductive (_:_)) _ es | Just vs <- allApplyElims es -> noProjectedVar vs
       _ -> return ()
 
 instance NoProjectedVar a => NoProjectedVar (Arg a) where
@@ -1026,6 +1054,29 @@
   noProjectedVar = Fold.mapM_ noProjectedVar
 
 
+-- | Normalize just far enough to be able to eta-contract maximally.
+class (TermLike a, Subst Term a, Reduce a) => ReduceAndEtaContract a where
+  reduceAndEtaContract :: a -> TCM a
+
+  default reduceAndEtaContract
+    :: (Traversable f, TermLike b, Subst Term b, Reduce b, ReduceAndEtaContract b, f b ~ a)
+    => a -> TCM a
+  reduceAndEtaContract = Trav.mapM reduceAndEtaContract
+
+instance ReduceAndEtaContract a => ReduceAndEtaContract [a] where
+instance ReduceAndEtaContract a => ReduceAndEtaContract (Arg a) where
+
+instance ReduceAndEtaContract Term where
+  reduceAndEtaContract u = do
+    reduce u >>= \case
+      -- In case of lambda or record constructor, it makes sense to
+      -- reduce further.
+      Lam ai (Abs x b) -> etaLam ai x =<< reduceAndEtaContract b
+      Con c ci es | Just args <- allApplyElims es -> etaCon c ci args $ \ r c ci args -> do
+        args <- reduceAndEtaContract args
+        etaContractRecord r c ci args
+      v -> return v
+
 {- UNUSED, BUT KEEP!
 -- Wrong attempt at expanding bound variables.
 -- The following code curries meta instead.
@@ -1051,7 +1102,7 @@
 {-
   -- first, strip the leading n domains (which remain unchanged)
   TelV gamma core <- telViewUpTo n t
-  case ignoreSharing $ unEl core of
+  case unEl core of
     -- There should be at least one domain left
     Pi (Dom ai a) b -> do
       -- Eta-expand @dom@ along @qs@ into a telescope @tel@, computing a substitution.
@@ -1133,7 +1184,7 @@
 
     isVarOrIrrelevant :: Res -> (Arg Term, Term) -> ExceptT InvertExcept TCM Res
     isVarOrIrrelevant vars (arg, t) =
-      case ignoreSharing <$> arg of
+      case arg of
         -- i := x
         Arg info (Var i []) -> return $ (Arg info i, t) `cons` vars
 
@@ -1143,20 +1194,25 @@
 
         -- (i, j) := x  becomes  [i := fst x, j := snd x]
         -- Andreas, 2013-09-17 but only if constructor is fully applied
-        Arg info (Con c ci vs) -> do
+        Arg info (Con c ci es) -> do
           let fallback
                | isIrrelevant info = return vars
                | otherwise                              = failure
           isRC <- lift $ isRecordConstructor $ conName c
           case isRC of
             Just (_, Record{ recFields = fs })
-              | length fs == length vs -> do
+              | length fs == length es -> do
                 let aux (Arg _ v) (Arg info' f) = (Arg ai v,) $ t `applyE` [Proj ProjSystem f] where
                      ai = ArgInfo
-                       { argInfoHiding       = min (getHiding info) (getHiding info')
-                       , argInfoRelevance    = max (getRelevance info) (getRelevance info')
-                       , argInfoOrigin       = min (getOrigin info) (getOrigin info')
+                       { argInfoHiding   = min (getHiding info) (getHiding info')
+                       , argInfoModality = Modality
+                         { modRelevance  = max (getRelevance info) (getRelevance info')
+                         , modQuantity   = max (getQuantity  info) (getQuantity  info')
+                         }
+                       , argInfoOrigin   = min (getOrigin info) (getOrigin info')
+                       , argInfoFreeVariables = unknownFreeVariables
                        }
+                    vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
                 res <- loop $ zipWith aux vs fs
                 return $ res `append` vars
               | otherwise -> fallback
@@ -1181,21 +1237,17 @@
         Arg _ Sort{}     -> neutralArg
         Arg _ Level{}    -> neutralArg
 
-        Arg info (Shared p) -> isVarOrIrrelevant vars (Arg info $ derefPtr p, t)
-
     -- managing an assoc list where duplicate indizes cannot be irrelevant vars
     append :: Res -> Res -> Res
     append res vars = foldr cons vars res
 
     -- adding an irrelevant entry only if not present
     cons :: (Arg Nat, Term) -> Res -> Res
-    cons a@(Arg (ArgInfo _ Irrelevant _) i, t) vars
-      | any ((i==) . unArg . fst) vars  = vars
-      | otherwise                       = a : vars
-    -- adding a relevant entry:
-    cons a@(Arg info i, t) vars = a :
-      -- filter out duplicate irrelevants
-      filter (not . (\ a@(Arg info j, t) -> isIrrelevant info && i == j)) vars
+    cons a@(Arg ai i, t) vars
+      | isIrrelevant ai = applyUnless (any ((i==) . unArg . fst) vars) (a :) vars
+      | otherwise       = a :  -- adding a relevant entry
+          -- filter out duplicate irrelevants
+          filter (not . (\ a@(Arg info j, t) -> isIrrelevant info && i == j)) vars
 
 -- UNUSED
 -- -- | Used in 'Agda.Interaction.BasicOps.giveExpr'.
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,8 @@
 module Agda.TypeChecking.MetaVars where
 
 import Agda.Syntax.Common           ( Arg, Dom )
-import Agda.Syntax.Internal         ( MetaId, Term, Type, Args, Abs, Telescope )
-import Agda.Syntax.Internal.Generic ( TermLike )
-import Agda.TypeChecking.Monad.Base ( TCM, RunMetaOccursCheck(..), CompareDirection(..), Candidate )
+import Agda.Syntax.Internal         ( MetaId, Term, Type, Args, Abs, Telescope, Sort )
+import Agda.TypeChecking.Monad.Base ( TCM, RunMetaOccursCheck, CompareDirection )
 
 type Condition = Dom Type -> Abs Type -> Bool
 newArgsMeta'      :: Condition -> Type -> TCM Args
@@ -17,3 +16,4 @@
 newNamedValueMeta :: RunMetaOccursCheck -> String -> Type -> TCM (MetaId, Term)
 newNamedValueMeta':: RunMetaOccursCheck -> String -> Type -> TCM (MetaId, Term)
 newTelMeta        :: Telescope -> TCM Args
+newSortMeta       :: TCM Sort
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
@@ -20,7 +20,6 @@
     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
 
@@ -47,7 +46,9 @@
     Prop       -> False
     Inf        -> False
     SizeUniv   -> False
-    DLub s1 s2 -> mentionsMeta x (s1, s2)
+    PiSort s1 s2 -> mentionsMeta x (s1, s2)
+    UnivSort s -> mentionsMeta x s
+    MetaS m es -> x == m || mentionsMeta x es
 
 instance MentionsMeta t => MentionsMeta (Abs t) where
   mentionsMeta x = mentionsMeta x . unAbs
@@ -89,7 +90,7 @@
 instance MentionsMeta Constraint where
   mentionsMeta x c = case c of
     ValueCmp _ t u v    -> mm (t, u, v)
-    ElimCmp _ t v as bs -> mm ((t, v), (as, bs))
+    ElimCmp _ _ t v as bs -> mm ((t, v), (as, bs))
     LevelCmp _ u v      -> mm (u, v)
     TypeCmp _ a b       -> mm (a, b)
     TelCmp a b _ u v    -> mm ((a, b), (u, v))
@@ -101,6 +102,9 @@
     FindInScope{}       -> True   -- this needs to be woken up for any meta
     IsEmpty r t         -> mm t
     CheckSizeLtSat t    -> mm t
+    CheckFunDef{}       -> True   -- not sure what metas this depends on
+    HasBiggerSort a     -> mm a
+    HasPTSRule a b      -> mm (a, b)
     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
@@ -16,7 +16,6 @@
 
 module Agda.TypeChecking.MetaVars.Occurs where
 
-import Control.Applicative
 import Control.Monad
 import Control.Monad.Reader
 
@@ -134,7 +133,6 @@
   = 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)
 
@@ -149,14 +147,8 @@
 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
 
@@ -170,26 +162,32 @@
   patternViolation
 
 abort :: OccursCtx -> TypeError -> TCM a
-abort Top           err = typeError err
 abort StronglyRigid err = typeError err -- here, throw an uncatchable error (unsolvable constraint)
 abort Flex          err = patternViolation' 70 (show err) -- throws a PatternErr, which leads to delayed constraint
 abort Rigid         err = patternViolation' 70 (show err)
 abort Irrel         err = patternViolation' 70 (show err)
 
--- | Distinguish relevant and irrelevant variables in occurs check.
-type Vars = ([Nat],[Nat])
+-- | Distinguish relevant, irrelevant and nonstrict variables in occurs check.
+type Vars = ([Nat],[Nat],[Nat])
+-- TODO: refactor this into an actual datatype
 
 goIrrelevant :: Vars -> Vars
-goIrrelevant (relVs, irrVs) = (irrVs ++ relVs, [])
+goIrrelevant (relVs, nonstrictVs, irrVs) = (irrVs ++ nonstrictVs ++ relVs, [], [])
 
+goNonStrict :: Vars -> Vars
+goNonStrict (relVs, nonstrictVs, irrVs) = (nonstrictVs ++ relVs, [], irrVs)
+
 allowedVar :: Nat -> Vars -> Bool
-allowedVar i (relVs, irrVs) = i `elem` relVs
+allowedVar i (relVs, nonstrictVs, irrVs) = i `elem` relVs
 
 takeRelevant :: Vars -> [Nat]
-takeRelevant = fst
+takeRelevant (relVs, nonstrictVs, irrVs) = relVs
 
+takeAll :: Vars -> [Nat]
+takeAll (rel, nst, irr) = rel ++ nst ++ irr
+
 liftUnderAbs :: Vars -> Vars
-liftUnderAbs (relVs, irrVs) = (0 : map (1+) relVs, map (1+) irrVs)
+liftUnderAbs (relVs, nonstrictVs, irrVs) = (0 : map (1+) relVs, map (+1) nonstrictVs, map (1+) irrVs)
 
 -- | Extended occurs check.
 class Occurs t where
@@ -203,13 +201,14 @@
   => MetaId -> Vars -> a -> TCM a
 occursCheck m xs v = disableDestructiveUpdate $ Bench.billTo [ Bench.Typing, Bench.OccursCheck ] $ do
   mv <- lookupMeta m
+  let ctx = if isIrrelevant (getMetaRelevance mv) then Irrel else StronglyRigid
   initOccursCheck mv
       -- TODO: Can we do this in a better way?
   let redo m = m -- disableDestructiveUpdate m >> m
   -- First try without normalising the term
-  redo (occurs NoUnfold  Top m xs v) `catchError` \_ -> do
+  redo (occurs NoUnfold  ctx m xs v) `catchError` \_ -> do
     initOccursCheck mv
-    redo (occurs YesUnfold Top m xs v) `catchError` \err -> case err of
+    redo (occurs YesUnfold ctx m xs v) `catchError` \err -> case err of
                             -- Produce nicer error messages
       TypeError _ cl -> case clValue cl of
         MetaOccursInItself{} ->
@@ -233,6 +232,12 @@
                    , text $ "which is not in scope of the metavariable or irrelevant in the metavariable but relevant in the solution"
                    ]
             )
+        MetaIrrelevantSolution _ _ ->
+          typeError . GenericError . show =<<
+            fsep [ text ("Cannot instantiate the metavariable " ++ prettyShow m ++ " to solution")
+                 , prettyTCM v
+                 , text "since (part of) the solution was created in an irrelevant context."
+                 ]
         _ -> throwError err
       _ -> throwError err
 
@@ -269,15 +274,22 @@
                   abort (strongly ctx) $ MetaCannotDependOn m (takeRelevant xs) i
                 -- is a singleton type with unique inhabitant sv
                 Right (Just sv) -> return $ sv `applyE` es
-          Lam h f     -> Lam h <$> occ (leaveTop ctx) f
-          Level l     -> Level <$> occ ctx l  -- stay in Top
+          Lam h f     -> Lam h <$> occ ctx f
+          Level l     -> Level <$> occ ctx l
           Lit l       -> return v
-          DontCare v  -> dontCare <$> occurs red Irrel m (goIrrelevant xs) v
-          Def d es    -> Def d <$> occDef d (leaveTop ctx) es
-          Con c ci vs -> Con c ci <$> 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
+          DontCare v  -> if ctx == Irrel then
+                           dontCare <$> occurs red ctx m xs v
+                         else
+                           abort (strongly ctx) $ MetaIrrelevantSolution m v
+          Def d es    -> do
+            drel <- relOfConst d
+            unless (not (unusableRelevance drel) || ctx == Irrel) $ do
+              reportSDoc "tc.meta.occurs" 35 $ text ("relevance of definition: " ++ show drel)
+              abort ctx $ MetaIrrelevantSolution m $ Def d []
+            Def d <$> occDef d ctx es
+          Con c ci vs -> Con c ci <$> occ ctx vs  -- if strongly rigid, remain so
+          Pi a b      -> uncurry Pi <$> occ ctx (a,b)
+          Sort s      -> Sort <$> occurs red ctx m (goNonStrict xs) s
           MetaV m' es -> do
               -- Check for loop
               --   don't fail hard on this, since we might still be on the top-level
@@ -310,7 +322,7 @@
                     -- Andreas, 2014-03-02, see issue 1070:
                     -- Do not prune when meta is projected!
                     caseMaybe (allApplyElims es) (throwError err) $ \ vs -> do
-                      killResult <- prune m' vs (takeRelevant xs)
+                      killResult <- prune m' vs (takeAll xs)
                       if (killResult == PrunedEverything)
                         -- after successful pruning, restart occurs check
                         then occurs red ctx m xs =<< instantiate (MetaV m' es)
@@ -338,7 +350,6 @@
       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' 50 $ "Found occurrence of " ++ prettyShow m
                   | otherwise -> metaOccurs m vs
 
@@ -376,9 +387,7 @@
 
 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
-    where ctx' | n == 0    = ctx
-               | otherwise = leaveTop ctx  -- we leave Top only if we encounter at least one successor
+  occurs red ctx m xs (Plus n l) = Plus n <$> occurs red ctx m xs l
   metaOccurs m ClosedLevel{} = return ()
   metaOccurs m (Plus n l)    = metaOccurs m l
 
@@ -389,7 +398,7 @@
            NoUnfold  -> instantiate l
     case l of
       MetaLevel m' args -> do
-        MetaV m' args <- ignoreSharing <$> occurs red ctx m xs (MetaV m' args)
+        MetaV m' args <- occurs red ctx m xs (MetaV m' args)
         return $ MetaLevel m' args
       NeutralLevel r v  -> NeutralLevel r  <$> occurs red ctx m xs v
       BlockedLevel m' v -> BlockedLevel m' <$> occurs red Flex m xs v
@@ -415,23 +424,34 @@
             YesUnfold -> reduce s
             NoUnfold  -> instantiate s
     case s' of
-      DLub s1 s2 -> uncurry DLub <$> occurs red (weakly ctx) m xs (s1,s2)
+      PiSort s1 s2 -> uncurry PiSort <$> occurs red (weakly ctx) m xs (s1,s2)
       Type a     -> Type <$> occurs red ctx m xs a
       Prop       -> return s'
       Inf        -> return s'
       SizeUniv   -> return s'
+      UnivSort s -> UnivSort <$> occurs red (weakly ctx) m xs s
+      MetaS x es -> do
+        MetaV x es <- occurs red ctx m xs (MetaV x es)
+        return $ MetaS x es
 
   metaOccurs m s = do
     s <- instantiate s
     case s of
-      DLub s1 s2 -> metaOccurs m (s1,s2)
+      PiSort s1 s2 -> metaOccurs m (s1,s2)
       Type a     -> metaOccurs m a
       Prop       -> return ()
       Inf        -> return ()
       SizeUniv   -> return ()
+      UnivSort s -> metaOccurs m s
+      MetaS x es -> metaOccurs m $ MetaV x es
 
 instance Occurs a => Occurs (Elim' a) where
-  occurs red ctx m xs e@Proj{}  = return e
+  occurs red ctx m xs e@(Proj _ f) = do
+    frel <- relOfConst f
+    unless (not (unusableRelevance frel) || ctx == Irrel) $ do
+      reportSDoc "tc.meta.occurs" 35 $ text ("relevance of projection: " ++ show frel)
+      abort ctx $ MetaIrrelevantSolution m $ Def f []
+    return e
   occurs red ctx m xs (Apply a) = Apply <$> occurs red ctx m xs a
 
   metaOccurs m (Proj{} ) = return ()
@@ -447,6 +467,8 @@
 instance Occurs a => Occurs (Arg a) where
   occurs red ctx m xs (Arg info x) | isIrrelevant info = Arg info <$>
     occurs red Irrel m (goIrrelevant xs) x
+  occurs red ctx m xs (Arg info x) | isNonStrict info  = Arg info <$>
+    occurs red ctx m (goNonStrict xs) x
   occurs red ctx m xs (Arg info x) = Arg info <$>
     occurs red ctx m xs x
 
@@ -510,7 +532,7 @@
   let failure = throwError ()
   tb <- liftTCM $ reduceB t
   let t = ignoreBlocking tb
-  case ignoreSharing t of
+  case t of
     Var x _      -> return $ notElem x xs
     -- Issue 1153: A lambda has to be considered matchable.
     -- Lam _ v    -> hasBadRigid (0 : map (+1) xs) (absBody v)
@@ -530,15 +552,15 @@
     -- offending variables under a constructor could be removed by
     -- the right instantiation of the meta variable.
     -- Thus, they are not rigid.
-    Con c _ args -> do
+    Con c _ es | Just args <- allApplyElims es -> do
       ifM (liftTCM $ isEtaCon (conName c))
         -- in case of a record con, we can in principle prune
         -- (but not this argument; the meta could become a projection!)
         (and <$> mapM (hasBadRigid xs . unArg) args)  -- not andM, we need to force the exceptions!
         failure
+    Con c _ es | otherwise -> failure
     Lit{}        -> failure -- matchable
     MetaV{}      -> failure -- potentially matchable
-    Shared p     -> __IMPOSSIBLE__
 
 -- | Check whether a term @Def f es@ is finally stuck.
 --   Currently, we give only a crude approximation.
@@ -592,13 +614,21 @@
 instance FoldRigid Term where
   foldRigid f t = do
     b <- liftTCM $ reduceB t
-    case ignoreSharing $ ignoreBlocking b of
+    case ignoreBlocking b of
+      -- Upon entry, we are in rigid position, thus,
+      -- bound variables are rigid ones.
       Var i es   -> f i `mappend` fold es
       Lam _ t    -> fold t
       Lit{}      -> mempty
       Def _ es   -> case b of
+        -- If the definition is blocked by a meta, its arguments
+        -- may be in flexible positions.
         Blocked{}                   -> mempty
+        -- If the definition is incomplete, arguments might disappear
+        -- by reductions that come with more clauses, thus, these
+        -- arguments are not rigid.
         NotBlocked MissingClauses _ -> mempty
+        -- _        -> mempty -- breaks: ImproveInertRHS, Issue442, PruneRecord, PruningNonMillerPattern
         _        -> fold es
       Con _ _ ts -> fold ts
       Pi a b     -> fold (a,b)
@@ -606,7 +636,6 @@
       Level l    -> fold l
       MetaV{}    -> mempty
       DontCare{} -> mempty
-      Shared{}   -> __IMPOSSIBLE__
     where fold = foldRigid f
 
 instance FoldRigid Type where
@@ -619,7 +648,9 @@
       Prop       -> mempty
       Inf        -> mempty
       SizeUniv   -> mempty
-      DLub s1 s2 -> fold (s1, s2)
+      PiSort s1 s2 -> fold (s1, s2)
+      UnivSort s -> fold s
+      MetaS{}    -> mempty
     where fold = foldRigid f
 
 instance FoldRigid Level where
@@ -645,6 +676,9 @@
 instance FoldRigid a => FoldRigid (Arg a) where
   foldRigid f a =
     case getRelevance a of
+      -- Irrelevant arguments are definitionally equal to
+      -- values, so the variables there are not considered
+      -- "definitely rigid".
       Irrelevant -> mempty
       _          -> foldRigid f $ unArg a
 
@@ -741,8 +775,10 @@
   -- (de Bruijn level order).
   let perm = Perm n
              [ i | (i, Arg _ False) <- zip [0..] kills ]
-  m' <- newMeta (mvInfo mv) (mvPriority mv) perm
-                (HasType __IMPOSSIBLE__ a)
+      judg = case mvJudgement mv of
+        HasType{} -> HasType __IMPOSSIBLE__ a
+        IsSort{}  -> IsSort  __IMPOSSIBLE__ a
+  m' <- newMeta (mvInfo mv) (mvPriority mv) perm judg
   -- Andreas, 2010-10-15 eta expand new meta variable if necessary
   etaExpandMetaSafe m'
   let -- Arguments to new meta (de Bruijn indices)
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
@@ -6,12 +6,10 @@
     , module Agda.TypeChecking.Monad.Debug
     , module Agda.TypeChecking.Monad.Env
     , module Agda.TypeChecking.Monad.Imports
-    , module Agda.TypeChecking.Monad.Local
     , module Agda.TypeChecking.Monad.MetaVars
     , 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
@@ -27,12 +25,10 @@
 import Agda.TypeChecking.Monad.Debug
 import Agda.TypeChecking.Monad.Env
 import Agda.TypeChecking.Monad.Imports
-import Agda.TypeChecking.Monad.Local
 import Agda.TypeChecking.Monad.MetaVars
 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
@@ -23,11 +23,11 @@
 import Data.Maybe
 import Data.Map (Map)
 import qualified Data.Map as Map -- hiding (singleton, null, empty)
+import Data.Monoid ( Monoid, mempty, mappend )
 import Data.Set (Set)
 import qualified Data.Set as Set -- hiding (singleton, null, empty)
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, Any(..))
+import Data.Semigroup ( Semigroup, (<>), Any(..) )
 import Data.Data (Data, toConstr)
-import Data.Typeable (Typeable)
 import Data.Foldable (Foldable)
 import Data.Traversable
 import Data.IORef
@@ -39,7 +39,8 @@
 import Agda.Syntax.Concrete (TopLevelModuleName)
 import Agda.Syntax.Common
 import qualified Agda.Syntax.Concrete as C
-import Agda.Syntax.Concrete.Definitions (NiceDeclaration, DeclarationWarning)
+import Agda.Syntax.Concrete.Definitions
+  (NiceDeclaration, DeclarationWarning, declarationWarningName)
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Abstract (AllNames)
 import Agda.Syntax.Internal as I
@@ -47,6 +48,7 @@
 import Agda.Syntax.Internal.Generic (TermLike(..))
 import Agda.Syntax.Literal
 import Agda.Syntax.Parser (PM(..), ParseWarning, runPMIO)
+import Agda.Syntax.Parser.Monad (parseWarningName)
 import Agda.Syntax.Treeless (Compiled)
 import Agda.Syntax.Fixity
 import Agda.Syntax.Position
@@ -61,6 +63,7 @@
 
 -- import {-# SOURCE #-} Agda.Interaction.FindFile
 import Agda.Interaction.Options
+import Agda.Interaction.Options.Warnings
 import Agda.Interaction.Response
   (InteractionOutputCallback, defaultInteractionOutputCallback, Response(..))
 import Agda.Interaction.Highlighting.Precise
@@ -82,6 +85,7 @@
 import Agda.Utils.List
 import Agda.Utils.ListT
 import Agda.Utils.Monad
+import Agda.Utils.NonemptyList
 import Agda.Utils.Null
 import Agda.Utils.Permutation
 import Agda.Utils.Pretty hiding ((<>))
@@ -105,9 +109,6 @@
   , stPersistentState :: !PersistentTCState
     -- ^ State which is forever, like a diamond.
   }
-#if __GLASGOW_HASKELL__ <= 708
-  deriving Typeable
-#endif
 
 class Monad m => ReadTCState m where
   getTCState :: m TCState
@@ -142,6 +143,7 @@
     -- ^ @{-# FOREIGN #-}@ code that should be included in the compiled output.
     -- Does not include code for imported modules.
   , stPreFreshInteractionId :: !InteractionId
+  , stPreUserWarnings       :: !(Map A.QName String)
   }
 
 type DisambiguatedNames = IntMap A.QName
@@ -168,8 +170,9 @@
   , stPostSignature           :: !Signature
     -- ^ Declared identifiers of the current file.
     --   These will be serialized after successful type checking.
-  , stPostModuleParameters    :: !ModuleParamDict
-    -- ^ TODO: can these be moved into the @TCEnv@?
+  , stPostModuleCheckpoints   :: !(Map ModuleName CheckpointId)
+    -- ^ For each module remember the checkpoint corresponding to the orignal
+    --   context of the module parameters.
   , stPostImportsDisplayForms :: !DisplayForms
     -- ^ Display forms we add for imported identifiers
   , stPostCurrentModule       :: !(Maybe ModuleName)
@@ -184,10 +187,11 @@
   , stPostLocalBuiltins       :: !(BuiltinThings PrimFun)
   , stPostFreshMetaId         :: !MetaId
   , stPostFreshMutualId       :: !MutualId
-  , stPostFreshCtxId          :: !CtxId
   , stPostFreshProblemId      :: !ProblemId
+  , stPostFreshCheckpointId   :: !CheckpointId
   , stPostFreshInt            :: !Int
   , stPostFreshNameId         :: !NameId
+  , stPostAreWeCaching        :: !Bool
   }
 
 -- | A mutual block of names in the signature.
@@ -283,6 +287,7 @@
   , stPreImportedInstanceDefs = Map.empty
   , stPreForeignCode          = Map.empty
   , stPreFreshInteractionId   = 0
+  , stPreUserWarnings         = Map.empty
   }
 
 initPostScopeState :: PostScopeState
@@ -296,7 +301,7 @@
   , stPostDirty                = False
   , stPostOccursCheckDefs      = Set.empty
   , stPostSignature            = emptySignature
-  , stPostModuleParameters     = Map.empty
+  , stPostModuleCheckpoints    = Map.empty
   , stPostImportsDisplayForms  = HMap.empty
   , stPostCurrentModule        = Nothing
   , stPostInstanceDefs         = (Map.empty , Set.empty)
@@ -306,10 +311,11 @@
   , stPostLocalBuiltins        = Map.empty
   , stPostFreshMetaId          = 0
   , stPostFreshMutualId        = 0
-  , stPostFreshCtxId           = 0
   , stPostFreshProblemId       = 1
+  , stPostFreshCheckpointId    = 1
   , stPostFreshInt             = 0
   , stPostFreshNameId           = NameId 0 0
+  , stPostAreWeCaching         = False
   }
 
 initState :: TCState
@@ -382,6 +388,11 @@
   f (stPreFreshInteractionId (stPreScopeState s)) <&>
   \x -> s {stPreScopeState = (stPreScopeState s) {stPreFreshInteractionId = x}}
 
+stUserWarnings :: Lens' (Map A.QName String) TCState
+stUserWarnings f s =
+  f (stPreUserWarnings (stPreScopeState s)) <&>
+  \ x -> s {stPreScopeState = (stPreScopeState s) {stPreUserWarnings = x}}
+
 stBackends :: Lens' [Backend] TCState
 stBackends f s =
   f (stPersistBackends (stPersistentState s)) <&>
@@ -437,10 +448,10 @@
   f (stPostSignature (stPostScopeState s)) <&>
   \x -> s {stPostScopeState = (stPostScopeState s) {stPostSignature = x}}
 
-stModuleParameters :: Lens' (ModuleParamDict) TCState
-stModuleParameters f s =
-  f (stPostModuleParameters (stPostScopeState s)) <&>
-  \x -> s {stPostScopeState = (stPostScopeState s) {stPostModuleParameters = x}}
+stModuleCheckpoints :: Lens' (Map ModuleName CheckpointId) TCState
+stModuleCheckpoints f s =
+  f (stPostModuleCheckpoints (stPostScopeState s)) <&>
+  \x -> s {stPostScopeState = (stPostScopeState s) {stPostModuleCheckpoints = x}}
 
 stImportsDisplayForms :: Lens' DisplayForms TCState
 stImportsDisplayForms f s =
@@ -497,21 +508,27 @@
   f (stPostFreshMutualId (stPostScopeState s)) <&>
   \x -> s {stPostScopeState = (stPostScopeState s) {stPostFreshMutualId = x}}
 
-stFreshCtxId :: Lens' CtxId TCState
-stFreshCtxId f s =
-  f (stPostFreshCtxId (stPostScopeState s)) <&>
-  \x -> s {stPostScopeState = (stPostScopeState s) {stPostFreshCtxId = x}}
-
 stFreshProblemId :: Lens' ProblemId TCState
 stFreshProblemId f s =
   f (stPostFreshProblemId (stPostScopeState s)) <&>
   \x -> s {stPostScopeState = (stPostScopeState s) {stPostFreshProblemId = x}}
 
+stFreshCheckpointId :: Lens' CheckpointId TCState
+stFreshCheckpointId f s =
+  f (stPostFreshCheckpointId (stPostScopeState s)) <&>
+  \x -> s {stPostScopeState = (stPostScopeState s) {stPostFreshCheckpointId = x}}
+
 stFreshInt :: Lens' Int TCState
 stFreshInt f s =
   f (stPostFreshInt (stPostScopeState s)) <&>
   \x -> s {stPostScopeState = (stPostScopeState s) {stPostFreshInt = x}}
 
+-- use @areWeCaching@ from the Caching module instead.
+stAreWeCaching :: Lens' Bool TCState
+stAreWeCaching f s =
+  f (stPostAreWeCaching (stPostScopeState s)) <&>
+  \x -> s {stPostScopeState = (stPostScopeState s) {stPostAreWeCaching = x}}
+
 stBuiltinThings :: TCState -> BuiltinThings PrimFun
 stBuiltinThings s = (s^.stLocalBuiltins) `Map.union` (s^.stImportedBuiltins)
 
@@ -550,14 +567,11 @@
   -- before caching starts do not overlap with the ones used after.
   nextFresh' = succ . succ
 
-instance HasFresh CtxId where
-  freshLens = stFreshCtxId
-
 instance HasFresh Int where
   freshLens = stFreshInt
 
 newtype ProblemId = ProblemId Nat
-  deriving (Typeable, Data, Eq, Ord, Enum, Real, Integral, Num)
+  deriving (Data, Eq, Ord, Enum, Real, Integral, Num)
 
 -- TODO: 'Show' should output Haskell-parseable representations.
 -- The following instance is deprecated, and Pretty[TCM] should be used
@@ -576,6 +590,18 @@
 instance HasFresh ProblemId where
   freshLens = stFreshProblemId
 
+newtype CheckpointId = CheckpointId Int
+  deriving (Data, Eq, Ord, Enum, Real, Integral, Num)
+
+instance Show CheckpointId where
+  show (CheckpointId n) = show n
+
+instance Pretty CheckpointId where
+  pretty (CheckpointId n) = pretty n
+
+instance HasFresh CheckpointId where
+  freshLens = stFreshCheckpointId
+
 freshName :: MonadState TCState m => Range -> String -> m Name
 freshName r s = do
   i <- fresh
@@ -660,7 +686,7 @@
 type DecodedModules = Map C.TopLevelModuleName Interface
 
 data ForeignCode = ForeignCode Range String
-  deriving (Show, Typeable)
+  deriving Show
 
 data Interface = Interface
   { iSourceHash      :: Hash
@@ -683,6 +709,8 @@
   , iSignature       :: Signature
   , iDisplayForms    :: DisplayForms
     -- ^ Display forms added for imported identifiers.
+  , iUserWarnings    :: Map A.QName String
+    -- ^ User warnings for imported identifiers
   , iBuiltin         :: BuiltinThings (String, QName)
   , iForeignCode     :: Map BackendName [ForeignCode]
   , iHighlighting    :: HighlightingInfo
@@ -691,11 +719,12 @@
   , iPatternSyns     :: A.PatternSynDefns
   , iWarnings        :: [TCWarning]
   }
-  deriving (Typeable, Show)
+  deriving Show
 
 instance Pretty Interface where
-  pretty (Interface sourceH importedM moduleN scope insideS signature display builtin
-                    foreignCode highlighting pragmaO patternS warnings) =
+  pretty (Interface sourceH importedM moduleN scope insideS signature display
+                    userwarn builtin foreignCode highlighting pragmaO patternS
+                    warnings) =
     hang (text "Interface") 2 $ vcat
       [ text "source hash:"         <+> (pretty . show) sourceH
       , text "imported modules:"    <+> (pretty . show) importedM
@@ -704,6 +733,7 @@
       , text "inside scope:"        <+> (pretty . show) insideS
       , text "signature:"           <+> (pretty . show) signature
       , text "display:"             <+> (pretty . show) display
+      , text "user warnings:"       <+> (pretty . show) userwarn
       , text "builtin:"             <+> (pretty . show) builtin
       , text "Foreign code:"        <+> (pretty . show) foreignCode
       , text "highlighting:"        <+> (pretty . show) highlighting
@@ -724,14 +754,10 @@
   { clSignature        :: Signature
   , clEnv              :: TCEnv
   , clScope            :: ScopeInfo
-  , clModuleParameters :: ModuleParamDict
-      -- ^ Since module parameters are currently stored in 'TCState'
-      --   not in 'TCEnv', we save them here.
-      --   The map contains for each 'ModuleName' @M@ with module telescope @Γ_M@
-      --   a substitution @Γ ⊢ ρ_M : Γ_M@ from the current context @Γ = envContext (clEnv)@.
+  , clModuleCheckpoints :: Map ModuleName CheckpointId
   , clValue            :: a
   }
-    deriving (Typeable, Data, Functor, Foldable)
+    deriving (Data, Functor, Foldable)
 
 instance Show a => Show (Closure a) where
   show cl = "Closure { clValue = " ++ show (clValue cl) ++ " }"
@@ -744,8 +770,8 @@
     env   <- ask
     sig   <- use stSignature
     scope <- use stScope
-    pars  <- use stModuleParameters
-    return $ Closure sig env scope pars x
+    cps   <- use stModuleCheckpoints
+    return $ Closure sig env scope cps x
 
 ---------------------------------------------------------------------------
 -- ** Constraints
@@ -757,20 +783,22 @@
   { constraintProblems :: Set ProblemId
   , theConstraint      :: Closure Constraint
   }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 instance HasRange ProblemConstraint where
   getRange = getRange . theConstraint
 
 data Constraint
   = ValueCmp Comparison Type Term Term
-  | ElimCmp [Polarity] Type Term [Elim] [Elim]
+  | ElimCmp [Polarity] [IsForced] Type Term [Elim] [Elim]
   | TypeCmp Comparison Type Type
   | 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'.
+  | HasBiggerSort Sort
+  | HasPTSRule Sort (Abs Sort)
   | UnBlock MetaId
   | Guarded Constraint ProblemId
   | IsEmpty Range Type
@@ -782,7 +810,8 @@
     --   on which the constraint may be blocked on and the third one is the list
     --   of candidates (or Nothing if we haven’t determined the list of
     --   candidates yet)
-  deriving (Typeable, Data, Show)
+  | CheckFunDef Delayed Info.DefInfo QName [A.Clause]
+  deriving (Data, Show)
 
 instance HasRange Constraint where
   getRange (IsEmpty r t) = r
@@ -803,7 +832,7 @@
   freeVars' c =
     case c of
       ValueCmp _ t u v      -> freeVars' (t, (u, v))
-      ElimCmp _ t u es es'  -> freeVars' ((t, u), (es, es'))
+      ElimCmp _ _ t u es es'  -> freeVars' ((t, u), (es, es'))
       TypeCmp _ t t'        -> freeVars' (t, t')
       TelCmp _ _ _ tel tel' -> freeVars' (tel, tel')
       SortCmp _ s s'        -> freeVars' (s, s')
@@ -813,11 +842,14 @@
       IsEmpty _ t           -> freeVars' t
       CheckSizeLtSat u      -> freeVars' u
       FindInScope _ _ cs    -> freeVars' cs
+      CheckFunDef _ _ _ _   -> mempty
+      HasBiggerSort s       -> freeVars' s
+      HasPTSRule s1 s2      -> freeVars' (s1 , s2)
 
 instance TermLike Constraint where
   foldTerm f = \case
       ValueCmp _ t u v       -> foldTerm f (t, u, v)
-      ElimCmp _ t u es es'   -> foldTerm f (t, u, es, es')
+      ElimCmp _ _ t u es es' -> foldTerm f (t, u, es, es')
       TypeCmp _ t t'         -> foldTerm f (t, t')
       LevelCmp _ l l'        -> foldTerm f (l, l')
       IsEmpty _ t            -> foldTerm f t
@@ -827,11 +859,14 @@
       UnBlock _              -> __IMPOSSIBLE__  -- mempty     -- Not yet implemented
       Guarded c _            -> __IMPOSSIBLE__  -- foldTerm c -- Not yet implemented
       FindInScope _ _ cs     -> __IMPOSSIBLE__  -- Not yet implemented
+      CheckFunDef _ _ _ _    -> __IMPOSSIBLE__  -- Not yet implemented
+      HasBiggerSort _        -> __IMPOSSIBLE__  -- Not yet implemented
+      HasPTSRule _ _         -> __IMPOSSIBLE__  -- Not yet implemented
   traverseTermM f c = __IMPOSSIBLE__ -- Not yet implemented
 
 
 data Comparison = CmpEq | CmpLeq
-  deriving (Eq, Typeable, Data, Show)
+  deriving (Eq, Data, Show)
 
 instance Pretty Comparison where
   pretty CmpEq  = text "="
@@ -839,7 +874,7 @@
 
 -- | An extension of 'Comparison' to @>=@.
 data CompareDirection = DirEq | DirLeq | DirGeq
-  deriving (Eq, Typeable, Show)
+  deriving (Eq, Show)
 
 instance Pretty CompareDirection where
   pretty = text . \case
@@ -871,24 +906,11 @@
 ---------------------------------------------------------------------------
 
 -- | A thing tagged with the context it came from.
-data Open a = OpenThing { openThingCtxIds :: [CtxId], openThing :: a }
-    deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
+data Open a = OpenThing { openThingCheckpoint :: CheckpointId, openThing :: a }
+    deriving (Data, Show, Functor, Foldable, Traversable)
 
 instance Decoration Open where
-  traverseF f (OpenThing cxt x) = OpenThing cxt <$> f x
-
-data Local a = Local ModuleName a   -- ^ Local to a given module, the value
-                                    -- should have module parameters as free variables.
-             | Global a             -- ^ Global value, should be closed.
-    deriving (Typeable, Data, Show, Functor, Foldable, Traversable)
-
-isGlobal :: Local a -> Bool
-isGlobal Global{} = True
-isGlobal Local{}  = False
-
-instance Decoration Local where
-  traverseF f (Local m x) = Local m <$> f x
-  traverseF f (Global x)  = Global <$> f x
+  traverseF f (OpenThing cp x) = OpenThing cp <$> f x
 
 ---------------------------------------------------------------------------
 -- * Judgements
@@ -900,7 +922,6 @@
 data Judgement a
   = HasType { jMetaId :: a, jMetaType :: Type }
   | IsSort  { jMetaId :: a, jMetaType :: Type } -- Andreas, 2011-04-26: type needed for higher-order sort metas
-  deriving (Typeable)
 
 instance Show a => Show (Judgement a) where
     show (HasType a t) = show a ++ " : " ++ show t
@@ -922,11 +943,9 @@
                 , mvListeners     :: Set Listener -- ^ meta variables scheduled for eta-expansion but blocked by this one
                 , mvFrozen        :: Frozen -- ^ are we past the point where we can instantiate this meta variable?
                 }
-    deriving (Typeable)
 
 data Listener = EtaExpand MetaId
               | CheckConstraint Nat ProblemConstraint
-  deriving (Typeable)
 
 instance Eq Listener where
   EtaExpand       x   == EtaExpand       y   = x == y
@@ -954,11 +973,15 @@
         | OpenIFS            -- ^ open, to be instantiated as "implicit from scope"
         | BlockedConst Term  -- ^ solution blocked by unsolved constraints
         | PostponedTypeCheckingProblem (Closure TypeCheckingProblem) (TCM Bool)
-    deriving (Typeable)
 
+-- | Solving a 'CheckArgs' constraint may or may not check the target type. If
+--   it did, it returns a handle to any unsolved constraints.
+data CheckedTarget = CheckedTarget (Maybe ProblemId)
+                   | NotCheckedTarget
+
 data TypeCheckingProblem
   = CheckExpr A.Expr Type
-  | CheckArgs ExpandHidden Range [NamedArg A.Expr] Type Type (Args -> Type -> TCM Term)
+  | CheckArgs ExpandHidden Range [NamedArg A.Expr] Type Type (Elims -> Type -> CheckedTarget -> TCM Term)
   | CheckLambda (Arg ([WithHiding Name], Maybe Type)) A.Expr Type
     -- ^ @(λ (xs : t₀) → e) : t@
     --   This is not an instance of 'CheckExpr' as the domain type
@@ -968,7 +991,6 @@
     --   we want to postpone @(λ (y : Fin n) → e) : ?@ where @Fin n@
     --   is a 'Type' rather than an 'A.Expr'.
   | UnquoteTactic Term Term Type   -- ^ First argument is computation and the others are hole and goal type
-  deriving (Typeable)
 
 instance Show MetaInstantiation where
   show (InstV tel t) = "InstV " ++ show tel ++ " (" ++ show t ++ ")"
@@ -983,24 +1005,12 @@
 --
 --   Higher value means higher priority to be instantiated.
 newtype MetaPriority = MetaPriority Int
-    deriving ( Eq
-             , Ord
-             , Show
-#if __GLASGOW_HASKELL__ <= 708
-             , Typeable
-#endif
-             )
+    deriving (Eq , Ord , Show)
 
 data RunMetaOccursCheck
   = RunMetaOccursCheck
   | DontRunMetaOccursCheck
-  deriving (Eq
-           , Ord
-           , Show
-#if __GLASGOW_HASKELL__ <= 708
-           , Typeable
-#endif
-           )
+  deriving (Eq , Ord , Show)
 
 -- | @MetaInfo@ is cloned from one meta to the next during pruning.
 data MetaInfo = MetaInfo
@@ -1011,9 +1021,6 @@
     -- ^ Used for printing.
     --   @Just x@ if meta-variable comes from omitted argument with name @x@.
   }
-#if __GLASGOW_HASKELL__ <= 708
-  deriving Typeable
-#endif
 
 -- | Name suggestion for meta variable.  Empty string means no suggestion.
 type MetaNameSuggestion = String
@@ -1082,9 +1089,6 @@
       -- ^ The clause of the interaction point (if any).
       --   Used for case splitting.
   }
-#if __GLASGOW_HASKELL__ <= 708
-  deriving Typeable
-#endif
 
 instance Eq InteractionPoint where (==) = (==) `on` ipMeta
 
@@ -1101,7 +1105,7 @@
   , ipcClause   :: A.RHS  -- ^ The original AST clause rhs.
   }
   | IPNoClause -- ^ The interaction point is not in the rhs of a clause.
-  deriving (Typeable, Data)
+  deriving Data
 
 instance Eq IPClause where
   IPNoClause     == IPNoClause       = True
@@ -1117,7 +1121,7 @@
       , _sigDefinitions :: Definitions
       , _sigRewriteRules:: RewriteRuleMap  -- ^ The rewrite rules defined in this file.
       }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 sigSections :: Lens' Sections Signature
 sigSections f s =
@@ -1140,7 +1144,7 @@
 type DisplayForms = HashMap QName [LocalDisplayForm]
 
 newtype Section = Section { _secTelescope :: Telescope }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 instance Pretty Section where
   pretty = pretty . _secTelescope
@@ -1177,9 +1181,9 @@
   , dfRHS      :: DisplayTerm
     -- ^ Right hand side, with @n@ free variables.
   }
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
-type LocalDisplayForm = Local DisplayForm
+type LocalDisplayForm = Open DisplayForm
 
 -- | A structured presentation of a 'Term' for reification into
 --   'Abstract.Syntax'.
@@ -1199,7 +1203,7 @@
     -- ^ @.v@.
   | DTerm Term
     -- ^ @v@.
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 
 instance Free DisplayForm where
   freeVars' (Display n ps t) = bind (freeVars' ps) `mappend` bind' n (freeVars' t)
@@ -1232,7 +1236,7 @@
 defaultDisplayForm c = []
 
 defRelevance :: Definition -> Relevance
-defRelevance = argInfoRelevance . defArgInfo
+defRelevance = getRelevance . defArgInfo
 
 -- | Non-linear (non-constructor) first-order pattern.
 data NLPat
@@ -1251,13 +1255,13 @@
     -- ^ Matches @x es@ where x is a lambda-bound variable
   | PTerm Term
     -- ^ Matches the term modulo β (ideally βη).
-  deriving (Typeable, Data, Show)
+  deriving (Data, Show)
 type PElims = [Elim' NLPat]
 
 data NLPType = NLPType
   { nlpTypeLevel :: NLPat  -- always PWild or PVar (with all bound variables in scope)
   , nlpTypeUnEl  :: NLPat
-  } deriving (Typeable, Data, Show)
+  } deriving (Data, Show)
 
 type RewriteRules = [RewriteRule]
 
@@ -1271,7 +1275,7 @@
   , rewRHS     :: Term       -- ^ @Γ ⊢ rhs : t@.
   , rewType    :: Type       -- ^ @Γ ⊢ t@.
   }
-    deriving (Typeable, Data, Show)
+    deriving (Data, Show)
 
 data Definition = Defn
   { defArgInfo        :: ArgInfo -- ^ Hiding should not be used.
@@ -1337,7 +1341,7 @@
     -- ^ Should the def be treated as injective by the pattern matching unifier?
   , theDef            :: Defn
   }
-    deriving (Typeable, Data, Show)
+    deriving (Data, Show)
 
 theDefLens :: Lens' Defn Definition
 theDefLens f d = f (theDef d) <&> \ df -> d { theDef = df }
@@ -1366,7 +1370,7 @@
   | Contravariant  -- ^ antitone
   | Invariant      -- ^ no information (mixed variance)
   | Nonvariant     -- ^ constant
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 instance Pretty Polarity where
   pretty = text . \case
@@ -1375,9 +1379,15 @@
     Invariant     -> "*"
     Nonvariant    -> "_"
 
+-- | Information about whether an argument is forced by the type of a function.
+data IsForced
+  = Forced
+  | NotForced
+  deriving (Data, Show, Eq)
+
 -- | The backends are responsible for parsing their own pragmas.
 data CompilerPragma = CompilerPragma Range String
-  deriving (Typeable, Data, Show, Eq)
+  deriving (Data, Show, Eq)
 
 instance HasRange CompilerPragma where
   getRange (CompilerPragma r _) = r
@@ -1398,9 +1408,13 @@
 
 -- | Additional information for extended lambdas.
 data ExtLamInfo = ExtLamInfo
-  { extLamNumHidden :: Int  -- Number of hidden args to be dropped when printing.
-  , extLamNumNonHid :: Int  -- Number of visible args to be dropped when printing.
-  } deriving (Typeable, Data, Eq, Ord, Show)
+  { extLamModule    :: ModuleName
+    -- ^ For complicated reasons the scope checker decides the QName of a
+    --   pattern lambda, and thus its module. We really need to decide the
+    --   module during type checking though, since if the lambda appears in a
+    --   refined context the module picked by the scope checker has very much
+    --   the wrong parameters.
+  } deriving (Data, Eq, Ord, Show)
 
 -- | Additional information for projection 'Function's.
 data Projection = Projection
@@ -1429,11 +1443,11 @@
     --   (Invariant: the number of abstractions equals 'projIndex'.)
     --   In case of a projection-like function, just the function symbol
     --   is returned as 'Def':  @t = \ pars -> f@.
-  } deriving (Typeable, Data, Show)
+  } deriving (Data, Show)
 
 -- | Abstractions to build projection function (dropping parameters).
 newtype ProjLams = ProjLams { getProjLams :: [Arg ArgName] }
-  deriving (Typeable, Data, Show, Null)
+  deriving (Data, Show, Null)
 
 -- | Building the projection function (which drops the parameters).
 projDropPars :: Projection -> ProjOrigin -> Term
@@ -1456,16 +1470,12 @@
 
 -- | Should a record type admit eta-equality?
 data EtaEquality
-  = Specified !Bool  -- ^ User specifed 'eta-equality' or 'no-eta-equality'.
-  | Inferred !Bool   -- ^ Positivity checker inferred whether eta is safe.
-  deriving (Typeable, Data, Show, Eq)
-
-etaEqualityToBool :: EtaEquality -> Bool
-etaEqualityToBool (Specified b) = b
-etaEqualityToBool (Inferred b) = b
+  = Specified { theEtaEquality :: !HasEta }  -- ^ User specifed 'eta-equality' or 'no-eta-equality'.
+  | Inferred  { theEtaEquality :: !HasEta }  -- ^ Positivity checker inferred whether eta is safe.
+  deriving (Data, Show, Eq)
 
 -- | Make sure we do not overwrite a user specification.
-setEtaEquality :: EtaEquality -> Bool -> EtaEquality
+setEtaEquality :: EtaEquality -> HasEta -> EtaEquality
 setEtaEquality e@Specified{} _ = e
 setEtaEquality _ b = Inferred b
 
@@ -1473,7 +1483,7 @@
   = FunStatic  -- ^ Should calls to this function be normalised at compile-time?
   | FunInline  -- ^ Should calls to this function be inlined by the compiler?
   | FunMacro   -- ^ Is this function a macro?
-  deriving (Typeable, Data, Eq, Ord, Enum, Show)
+  deriving (Data, Eq, Ord, Enum, Show)
 
 data Defn = Axiom
             -- ^ Postulate.
@@ -1517,8 +1527,6 @@
             }
           | Datatype
             { dataPars           :: Nat            -- ^ Number of parameters.
-            , dataSmallPars      :: Permutation    -- ^ Parameters that are maybe small.
-            , dataNonLinPars     :: Drop Permutation  -- ^ Parameters that appear in indices.
             , dataIxs            :: Nat            -- ^ Number of indices.
             , dataInduction      :: Induction      -- ^ @data@ or @codata@ (legacy).
             , dataClause         :: (Maybe Clause) -- ^ This might be in an instantiated module.
@@ -1569,6 +1577,7 @@
             , conData   :: QName       -- ^ Name of datatype or record type.
             , conAbstr  :: IsAbstract
             , conInd    :: Induction   -- ^ Inductive or coinductive?
+            , conForced :: [IsForced]  -- ^ Which arguments are forced (i.e. determined by the type of the constructor)?
             , conErased :: [Bool]      -- ^ Which arguments are erased at runtime (computed during compilation to treeless)
             }
           | Primitive
@@ -1576,12 +1585,14 @@
             , primName  :: String
             , primClauses :: [Clause]
               -- ^ 'null' for primitive functions, @not null@ for builtin functions.
+            , primInv      :: FunctionInverse
+              -- ^ Builtin functions can have inverses. For instance, natural number addition.
             , primCompiled :: Maybe CompiledClauses
               -- ^ 'Nothing' for primitive functions,
               --   @'Just' something@ for builtin functions.
             }
             -- ^ Primitive or builtin functions.
-    deriving (Typeable, Data, Show)
+    deriving (Data, Show)
 
 instance Pretty Definition where
   pretty Defn{..} =
@@ -1620,8 +1631,6 @@
   pretty Datatype{..} =
     text "Datatype {" <?> vcat
       [ text "dataPars       =" <?> pshow dataPars
-      , text "dataSmallPars  =" <?> pshow dataSmallPars
-      , text "dataNonLinPars =" <?> pshow dataNonLinPars
       , text "dataIxs        =" <?> pshow dataIxs
       , text "dataInduction  =" <?> pshow dataInduction
       , text "dataClause     =" <?> pretty dataClause
@@ -1663,8 +1672,8 @@
 recRecursive (Record { recMutual = Just qs }) = not $ null qs
 recRecursive _ = __IMPOSSIBLE__
 
-recEtaEquality :: Defn -> Bool
-recEtaEquality = etaEqualityToBool . recEtaEquality'
+recEtaEquality :: Defn -> HasEta
+recEtaEquality = theEtaEquality . recEtaEquality'
 
 -- | A template for creating 'Function' definitions, with sensible defaults.
 emptyFunction :: Defn
@@ -1727,7 +1736,7 @@
 defConstructors _ = __IMPOSSIBLE__
 
 newtype Fields = Fields [(C.Name, Type)]
-  deriving (Typeable, Null)
+  deriving Null
 
 -- | Did we encounter a simplifying reduction?
 --   In terms of CIC, that would be a iota-reduction.
@@ -1737,7 +1746,7 @@
 --   (unfolding of definitions) does not count as simplifying?
 
 data Simplification = YesSimplification | NoSimplification
-  deriving (Typeable, Data, Eq, Show)
+  deriving (Data, Eq, Show)
 
 instance Null Simplification where
   empty = NoSimplification
@@ -1752,7 +1761,7 @@
   mappend = (<>)
 
 data Reduced no yes = NoReduction no | YesReduction Simplification yes
-    deriving (Typeable, Functor)
+    deriving Functor
 
 -- | Three cases: 1. not reduced, 2. reduced, but blocked, 3. reduced, not blocked.
 data IsReduced
@@ -1775,7 +1784,7 @@
 notReduced x = MaybeRed NotReduced x
 
 reduced :: Blocked (Arg Term) -> MaybeReduced (Arg Term)
-reduced b = case fmap ignoreSharing <$> b of
+reduced b = case b of
   NotBlocked _ (Arg _ (MetaV x _)) -> MaybeRed (Reduced $ Blocked x ()) v
   _                                -> MaybeRed (Reduced $ () <$ b)      v
   where
@@ -1791,7 +1800,7 @@
   | LevelReductions          -- ^ Reduce @'Level'@ terms.
   | UnconfirmedReductions    -- ^ Functions whose termination has not (yet) been confirmed.
   | NonTerminatingReductions -- ^ Functions that have failed termination checking.
-  deriving (Show, Eq, Ord, Enum, Bounded, Typeable, Data)
+  deriving (Show, Eq, Ord, Enum, Bounded, Data)
 
 type AllowedReductions = [AllowedReduction]
 
@@ -1804,7 +1813,6 @@
         , primFunArity          :: Arity
         , primFunImplementation :: [Arg Term] -> ReduceM (Reduced MaybeReducedArgs Term)
         }
-    deriving (Typeable)
 
 defClauses :: Definition -> [Clause]
 defClauses Defn{theDef = Function{funClauses = cs}}        = cs
@@ -1823,6 +1831,11 @@
 defParameters Defn{theDef = Record  {recPars  = n}} = Just n
 defParameters _                                     = Nothing
 
+defInverse :: Definition -> FunctionInverse
+defInverse Defn{theDef = Function { funInv  = inv }} = inv
+defInverse Defn{theDef = Primitive{ primInv = inv }} = inv
+defInverse _                                         = NotInjective
+
 defCompilerPragmas :: BackendName -> Definition -> [CompilerPragma]
 defCompilerPragmas b = reverse . fromMaybe [] . Map.lookup b . defCompiledRep
   -- reversed because we add new pragmas to the front of the list
@@ -1853,34 +1866,49 @@
     Constructor{conAbstr = a} -> a
     Primitive{primAbstr = a}  -> a
 
+defForced :: Definition -> [IsForced]
+defForced d = case theDef d of
+    Constructor{conForced = fs} -> fs
+    Axiom{}                     -> []
+    AbstractDefn{}              -> []
+    Function{}                  -> []
+    Datatype{}                  -> []
+    Record{}                    -> []
+    Primitive{}                 -> []
+
 ---------------------------------------------------------------------------
 -- ** Injectivity
 ---------------------------------------------------------------------------
 
 type FunctionInverse = FunctionInverse' Clause
+type InversionMap c = Map TermHead [c]
 
 data FunctionInverse' c
   = NotInjective
-  | Inverse (Map TermHead c)
-  deriving (Typeable, Data, Show, Functor)
+  | Inverse (InversionMap c)
+  deriving (Data, Show, Functor)
 
 data TermHead = SortHead
               | PiHead
               | ConsHead QName
-  deriving (Typeable, Data, Eq, Ord, Show)
+              | VarHead Nat
+              | UnknownHead
+  deriving (Data, Eq, Ord, Show)
 
 instance Pretty TermHead where
-  pretty = \case
-    SortHead  -> text "SortHead"
-    PiHead    -> text "PiHead"
-    ConsHead q-> text "ConsHead" <+> pretty q
+  pretty = \ case
+    SortHead    -> text "SortHead"
+    PiHead      -> text "PiHead"
+    ConsHead q  -> text "ConsHead" <+> pretty q
+    VarHead i   -> text ("VarHead " ++ show i)
+    UnknownHead -> text "UnknownHead"
 
 ---------------------------------------------------------------------------
 -- ** Mutual blocks
 ---------------------------------------------------------------------------
 
 newtype MutualId = MutId Int32
-  deriving (Typeable, Data, Eq, Ord, Show, Num, Enum)
+  deriving (Data, Eq, Ord, Show, Num, Enum)
 
 ---------------------------------------------------------------------------
 -- ** Statistics
@@ -1904,23 +1932,25 @@
           | IsType_ A.Expr
           | InferVar Name
           | InferDef QName
-          | CheckArguments Range [NamedArg A.Expr] Type Type
+          | CheckArguments Range [NamedArg A.Expr] Type (Maybe Type)
+          | CheckTargetType Range Type Type
           | CheckDataDef Range Name [A.LamBinding] [A.Constructor]
           | CheckRecDef Range Name [A.LamBinding] [A.Constructor]
           | CheckConstructor QName Telescope Sort A.Constructor
-          | CheckFunDef Range Name [A.Clause]
+          | CheckFunDefCall Range Name [A.Clause]
           | CheckPragma Range A.Pragma
           | CheckPrimitive Range Name A.Expr
           | CheckIsEmpty Range Type
           | CheckWithFunctionType A.Expr
           | CheckSectionApplication Range ModuleName A.ModuleApplication
+          | CheckNamedWhere ModuleName
           | ScopeCheckExpr C.Expr
           | ScopeCheckDeclaration NiceDeclaration
           | ScopeCheckLHS C.QName C.Pattern
           | NoHighlighting
           | ModuleContents  -- ^ Interaction command: show module contents.
           | SetRange Range  -- ^ used by 'setCurrentRange'
-    deriving (Typeable, Data)
+    deriving Data
 
 instance Pretty Call where
     pretty CheckClause{}             = text "CheckClause"
@@ -1934,13 +1964,15 @@
     pretty InferVar{}                = text "InferVar"
     pretty InferDef{}                = text "InferDef"
     pretty CheckArguments{}          = text "CheckArguments"
+    pretty CheckTargetType{}         = text "CheckTargetType"
     pretty CheckDataDef{}            = text "CheckDataDef"
     pretty CheckRecDef{}             = text "CheckRecDef"
     pretty CheckConstructor{}        = text "CheckConstructor"
-    pretty CheckFunDef{}             = text "CheckFunDef"
+    pretty CheckFunDefCall{}         = text "CheckFunDefCall"
     pretty CheckPragma{}             = text "CheckPragma"
     pretty CheckPrimitive{}          = text "CheckPrimitive"
     pretty CheckWithFunctionType{}   = text "CheckWithFunctionType"
+    pretty CheckNamedWhere{}         = text "CheckNamedWhere"
     pretty ScopeCheckExpr{}          = text "ScopeCheckExpr"
     pretty ScopeCheckDeclaration{}   = text "ScopeCheckDeclaration"
     pretty ScopeCheckLHS{}           = text "ScopeCheckLHS"
@@ -1964,13 +1996,15 @@
     getRange (InferVar x)                    = getRange x
     getRange (InferDef f)                    = getRange f
     getRange (CheckArguments r _ _ _)        = r
+    getRange (CheckTargetType r _ _)         = r
     getRange (CheckDataDef i _ _ _)          = getRange i
     getRange (CheckRecDef i _ _ _)           = getRange i
     getRange (CheckConstructor _ _ _ c)      = getRange c
-    getRange (CheckFunDef i _ _)             = getRange i
+    getRange (CheckFunDefCall i _ _)         = getRange i
     getRange (CheckPragma r _)               = r
     getRange (CheckPrimitive i _ _)          = getRange i
     getRange CheckWithFunctionType{}         = noRange
+    getRange (CheckNamedWhere m)             = getRange m
     getRange (ScopeCheckExpr e)              = getRange e
     getRange (ScopeCheckDeclaration d)       = getRange d
     getRange (ScopeCheckLHS _ p)             = getRange p
@@ -2023,7 +2057,7 @@
 data Builtin pf
         = Builtin Term
         | Prim pf
-    deriving (Typeable, Show, Functor, Foldable, Traversable)
+    deriving (Show, Functor, Foldable, Traversable)
 
 ---------------------------------------------------------------------------
 -- * Highlighting levels
@@ -2038,7 +2072,7 @@
     -- ^ This includes both non-interactive highlighting and
     -- interactive highlighting of the expression that is currently
     -- being type-checked.
-    deriving (Eq, Ord, Show, Read, Typeable, Data)
+    deriving (Eq, Ord, Show, Read, Data)
 
 -- | How should highlighting be sent to the user interface?
 
@@ -2047,7 +2081,7 @@
     -- ^ Via stdout.
   | Indirect
     -- ^ Both via files and via stdout.
-    deriving (Eq, Show, Read, Typeable, Data)
+    deriving (Eq, Show, Read, Data)
 
 -- | @ifTopLevelAndHighlightingLevelIs l b m@ runs @m@ when we're
 -- type-checking the top-level module and either the highlighting
@@ -2074,18 +2108,6 @@
 -- * Type checking environment
 ---------------------------------------------------------------------------
 
-data ModuleParameters = ModuleParams
-  { mpSubstitution :: Substitution
-      -- ^ @Δ ⊢ σ : Γ@ for a @module M Γ@ where @Δ@ is the current context @envContext@.
-  } deriving (Typeable, Data, Show)
-
-defaultModuleParameters :: ModuleParameters
-defaultModuleParameters = ModuleParams IdS
-
-type ModuleParamDict = Map ModuleName ModuleParameters
-  -- ^ The map contains for each 'ModuleName' @M@ with module telescope @Γ_M@
-  --   a substitution @Γ ⊢ ρ_M : Γ_M@ from the current context @Γ = envContext (clEnv)@.
-
 data TCEnv =
     TCEnv { envContext             :: Context
           , envLetBindings         :: LetBindings
@@ -2103,6 +2125,8 @@
           , envCheckingWhere       :: Bool
                 -- ^ Have we stepped into the where-declarations of a clause?
                 --   Everything under a @where@ will be checked with this flag on.
+          , envWorkingOnTypes      :: Bool
+                -- ^ Are we working on types? Turned on by 'workOnTypes'.
           , envAssignMetas         :: Bool
             -- ^ Are we allowed to assign metas?
           , envActiveProblems      :: Set ProblemId
@@ -2155,6 +2179,10 @@
                 -- ^ Did we encounter a simplification (proper match)
                 --   during the current reduction process?
           , envAllowedReductions :: AllowedReductions
+          , envInjectivityDepth :: Int
+                -- ^ Injectivity can cause non-termination for unsolvable contraints
+                --   (#431, #3067). Keep a limit on the nesting depth of injectivity
+                --   uses.
           , envCompareBlocked :: Bool
                 -- ^ Can we compare blocked things during conversion?
                 --   No by default.
@@ -2174,8 +2202,22 @@
           , envInstanceDepth :: !Int
                 -- ^ Until we get a termination checker for instance search (#1743) we
                 --   limit the search depth to ensure termination.
+          , envIsDebugPrinting :: Bool
+          , envPrintingPatternLambdas :: [QName]
+                -- ^ #3004: pattern lambdas with copatterns may refer to themselves. We
+                --   don't have a good story for what to do in this case, but at least
+                --   printing shouldn't loop. Here we keep track of which pattern lambdas
+                --   we are currently in the process of printing.
+          , envCallByNeed :: Bool
+                -- ^ Use call-by-need evaluation for reductions.
+          , envCurrentCheckpoint :: CheckpointId
+                -- ^ Checkpoints track the evolution of the context as we go
+                -- under binders or refine it by pattern matching.
+          , envCheckpoints :: Map CheckpointId Substitution
+                -- ^ Keeps the substitution from each previous checkpoint to
+                --   the current context.
           }
-    deriving (Typeable, Data)
+    deriving Data
 
 initEnv :: TCEnv
 initEnv = TCEnv { envContext             = []
@@ -2189,6 +2231,7 @@
                 , envSolvingConstraints  = False
                 , envCheckingWhere       = False
                 , envActiveProblems      = Set.empty
+                , envWorkingOnTypes      = False
                 , envAssignMetas         = True
                 , envAbstractMode        = ConcreteMode
   -- Andreas, 2013-02-21:  This was 'AbstractMode' until now.
@@ -2213,12 +2256,18 @@
                 , envAppDef                 = Nothing
                 , envSimplification         = NoSimplification
                 , envAllowedReductions      = allReductions
+                , envInjectivityDepth       = 0
                 , envCompareBlocked         = False
                 , envPrintDomainFreePi      = False
                 , envPrintMetasBare         = False
                 , envInsideDotPattern       = False
                 , envUnquoteFlags           = defaultUnquoteFlags
                 , envInstanceDepth          = 0
+                , envIsDebugPrinting        = False
+                , envPrintingPatternLambdas = []
+                , envCallByNeed             = True
+                , envCurrentCheckpoint      = 0
+                , envCheckpoints            = Map.singleton 0 IdS
                 }
 
 disableDestructiveUpdate :: TCM a -> TCM a
@@ -2226,7 +2275,7 @@
 
 data UnquoteFlags = UnquoteFlags
   { _unquoteNormalise :: Bool }
-  deriving (Typeable, Data)
+  deriving Data
 
 defaultUnquoteFlags :: UnquoteFlags
 defaultUnquoteFlags = UnquoteFlags
@@ -2271,6 +2320,9 @@
 eCheckingWhere :: Lens' Bool TCEnv
 eCheckingWhere f e = f (envCheckingWhere e) <&> \ x -> e { envCheckingWhere = x }
 
+eWorkingOnTypes :: Lens' Bool TCEnv
+eWorkingOnTypes f e = f (envWorkingOnTypes e) <&> \ x -> e { envWorkingOnTypes = x }
+
 eAssignMetas :: Lens' Bool TCEnv
 eAssignMetas f e = f (envAssignMetas e) <&> \ x -> e { envAssignMetas = x }
 
@@ -2319,6 +2371,9 @@
 eAllowedReductions :: Lens' AllowedReductions TCEnv
 eAllowedReductions f e = f (envAllowedReductions e) <&> \ x -> e { envAllowedReductions = x }
 
+eInjectivityDepth :: Lens' Int TCEnv
+eInjectivityDepth f e = f (envInjectivityDepth e) <&> \ x -> e { envInjectivityDepth = x }
+
 eCompareBlocked :: Lens' Bool TCEnv
 eCompareBlocked f e = f (envCompareBlocked e) <&> \ x -> e { envCompareBlocked = x }
 
@@ -2334,19 +2389,28 @@
 eInstanceDepth :: Lens' Int TCEnv
 eInstanceDepth f e = f (envInstanceDepth e) <&> \ x -> e { envInstanceDepth = x }
 
+eIsDebugPrinting :: Lens' Bool TCEnv
+eIsDebugPrinting f e = f (envIsDebugPrinting e) <&> \ x -> e { envIsDebugPrinting = x }
+
+ePrintingPatternLambdas :: Lens' [QName] TCEnv
+ePrintingPatternLambdas f e = f (envPrintingPatternLambdas e) <&> \ x -> e { envPrintingPatternLambdas = x }
+
+eCallByNeed :: Lens' Bool TCEnv
+eCallByNeed f e = f (envCallByNeed e) <&> \ x -> e { envCallByNeed = x }
+
+eCurrentCheckpoint :: Lens' CheckpointId TCEnv
+eCurrentCheckpoint f e = f (envCurrentCheckpoint e) <&> \ x -> e { envCurrentCheckpoint = x }
+
+eCheckpoints :: Lens' (Map CheckpointId Substitution) TCEnv
+eCheckpoints f e = f (envCheckpoints e) <&> \ x -> e { envCheckpoints = x }
+
 ---------------------------------------------------------------------------
 -- ** Context
 ---------------------------------------------------------------------------
 
 -- | The @Context@ is a stack of 'ContextEntry's.
 type Context      = [ContextEntry]
-data ContextEntry = Ctx { ctxId    :: CtxId
-                        , ctxEntry :: Dom (Name, Type)
-                        }
-  deriving (Typeable, Data)
-
-newtype CtxId     = CtxId Nat
-  deriving (Typeable, Data, Eq, Ord, Show, Enum, Real, Integral, Num)
+type ContextEntry = Dom (Name, Type)
 
 ---------------------------------------------------------------------------
 -- ** Let bindings
@@ -2362,7 +2426,7 @@
   = 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, Show, Eq)
+  deriving (Data, Show, Eq)
 
 aDefToMode :: IsAbstract -> AbstractMode
 aDefToMode AbstractDef = AbstractMode
@@ -2380,12 +2444,12 @@
 data ExpandHidden
   = ExpandLast      -- ^ Add implicit arguments in the end until type is no longer hidden 'Pi'.
   | DontExpandLast  -- ^ Do not append implicit arguments.
-  deriving (Eq, Typeable, Data)
+  deriving (Eq, Data)
 
 data ExplicitToInstance
   = ExplicitToInstance    -- ^ Explicit arguments are considered as instance arguments
   | ExplicitStayExplicit
-    deriving (Eq, Show, Typeable, Data)
+    deriving (Eq, Show, Data)
 
 -- | A candidate solution for an instance meta is a term with its type.
 --   It may be the case that the candidate is not fully applied yet or
@@ -2395,7 +2459,7 @@
                             , candidateEti  :: ExplicitToInstance
                             , candidateOverlappable :: Bool
                             }
-  deriving (Show, Typeable, Data)
+  deriving (Show, Data)
 
 instance Free Candidate where
   freeVars' (Candidate t u _ _) = freeVars' (t, u)
@@ -2408,7 +2472,7 @@
 -- checking the document further and interacting with the user.
 
 data Warning
-  = NicifierIssue            [DeclarationWarning]
+  = NicifierIssue            DeclarationWarning
   | TerminationIssue         [TerminationError]
   | UnreachableClauses       QName [[NamedArg DeBruijnPattern]]
   | CoverageIssue            QName [(Telescope, [NamedArg DeBruijnPattern])]
@@ -2428,6 +2492,8 @@
     --   (See issue #2377.)
   | UselessInline            QName
   -- Generic warnings for one-off things
+  | InversionDepthReached    QName
+  -- ^ The --inversion-max-depth was reached.
   | GenericWarning           Doc
     -- ^ Harmless generic warning (not an error)
   | GenericNonFatalError     Doc
@@ -2444,13 +2510,40 @@
   | DeprecationWarning String String String
     -- ^ `DeprecationWarning old new version`:
     --   `old` is deprecated, use `new` instead. This will be an error in Agda `version`.
-  deriving ( Show
-           , Data
-#if __GLASGOW_HASKELL__ <= 708
-           , Typeable
-#endif
-           )
+  | UserWarning String
+    -- ^ User-defined warning (e.g. to mention that a name is deprecated)
+  deriving (Show , Data)
 
+
+warningName :: Warning -> WarningName
+warningName w = case w of
+  NicifierIssue dw           -> declarationWarningName dw
+  ParseWarning pw            -> parseWarningName pw
+  OldBuiltin{}               -> OldBuiltin_
+  EmptyRewritePragma         -> EmptyRewritePragma_
+  UselessPublic              -> UselessPublic_
+  UnreachableClauses{}       -> UnreachableClauses_
+  UselessInline{}            -> UselessInline_
+  GenericWarning{}           -> GenericWarning_
+  DeprecationWarning{}       -> DeprecationWarning_
+  InversionDepthReached{}    -> InversionDepthReached_
+  TerminationIssue{}         -> TerminationIssue_
+  CoverageIssue{}            -> CoverageIssue_
+  CoverageNoExactSplit{}     -> CoverageNoExactSplit_
+  NotStrictlyPositive{}      -> NotStrictlyPositive_
+  UnsolvedMetaVariables{}    -> UnsolvedMetaVariables_
+  UnsolvedInteractionMetas{} -> UnsolvedInteractionMetas_
+  UnsolvedConstraints{}      -> UnsolvedConstraints_
+  GenericNonFatalError{}     -> GenericNonFatalError_
+  SafeFlagPostulate{}        -> SafeFlagPostulate_
+  SafeFlagPragma{}           -> SafeFlagPragma_
+  SafeFlagNonTerminating     -> SafeFlagNonTerminating_
+  SafeFlagTerminating        -> SafeFlagTerminating_
+  SafeFlagPrimTrustMe        -> SafeFlagPrimTrustMe_
+  SafeFlagNoPositivityCheck  -> SafeFlagNoPositivityCheck_
+  SafeFlagPolarity           -> SafeFlagPolarity_
+  UserWarning{}              -> UserWarning_
+
 data TCWarning
   = TCWarning
     { tcWarningRange :: Range
@@ -2459,13 +2552,12 @@
         -- ^ The warning itself
     , tcWarningPrintedWarning :: Doc
         -- ^ The warning printed in the state and environment where it was raised
+    , tcWarningCached :: Bool
+        -- ^ Should the warning be affected by caching.
     }
-  deriving ( Show
-#if __GLASGOW_HASKELL__ <= 708
-           , Typeable
-#endif
-           )
+  deriving Show
 
+
 tcWarningOrigin :: TCWarning -> SrcFile
 tcWarningOrigin = rangeFile . tcWarningRange
 
@@ -2503,7 +2595,7 @@
     -- ^ Range of the target function.
   , callInfoCall :: Closure Term
     -- ^ To be formatted representation of the call.
-  } deriving (Typeable, Data, Show)
+  } deriving (Data, Show)
 
 -- no Eq, Ord instances: too expensive! (see issues 851, 852)
 
@@ -2536,7 +2628,7 @@
     -- automatically generated functions.)
   , termErrCalls :: [CallInfo]
     -- ^ The problematic call sites.
-  } deriving (Typeable, Data, Show)
+  } deriving (Data, Show)
 
 -- | Error when splitting a pattern variable into possible constructor patterns.
 data SplitError
@@ -2621,10 +2713,10 @@
         | RelevanceMismatch Relevance Relevance
             -- ^ The given relevance does not correspond to the expected relevane.
         | UninstantiatedDotPattern A.Expr
+        | ForcedConstructorNotInstantiated A.Pattern
         | IlltypedPattern A.Pattern Type
         | IllformedProjectionPattern A.Pattern
         | CannotEliminateWithPattern (NamedArg A.Pattern) Type
-        | TooManyArgumentsInLHS Type
         | WrongNumberOfConstructorArguments QName Nat Nat
         | ShouldBeEmpty Type [DeBruijnPattern]
         | ShouldBeASort Type
@@ -2643,7 +2735,8 @@
         | FunctionTypeInSizeUniv Term
             -- ^ This term, a function type constructor, lives in
             --   @SizeUniv@, which is not allowed.
-        | SplitOnIrrelevant A.Pattern (Dom Type)
+        | SplitOnIrrelevant (Dom Type)
+        | SplitOnNonVariable Term Type
         | DefinitionIsIrrelevant QName
         | VariableIsIrrelevant Name
 --        | UnequalLevel Comparison Term Term  -- UNUSED
@@ -2661,6 +2754,7 @@
             -- ^ The arguments are the meta variable, the parameters it can
             --   depend on and the paratemeter that it wants to depend on.
         | MetaOccursInItself MetaId
+        | MetaIrrelevantSolution MetaId Term
         | GenericError String
         | GenericDocError Doc
         | BuiltinMustBeConstructor String A.Expr
@@ -2711,8 +2805,8 @@
         | AbstractConstructorNotInScope A.QName
         | NotInScope [C.QName]
         | NoSuchModule C.QName
-        | AmbiguousName C.QName [A.QName]
-        | AmbiguousModule C.QName [A.ModuleName]
+        | AmbiguousName C.QName (NonemptyList A.QName)
+        | AmbiguousModule C.QName (NonemptyList A.ModuleName)
         | UninstantiatedModule C.QName
         | ClashingDefinition C.QName A.QName
         | ClashingModule A.ModuleName A.ModuleName
@@ -2733,8 +2827,9 @@
         | NothingAppliedToHiddenArg C.Expr
         | NothingAppliedToInstanceArg C.Expr
     -- Pattern synonym errors
-        | BadArgumentsToPatternSynonym A.QName
-        | TooFewArgumentsToPatternSynonym A.QName
+        | BadArgumentsToPatternSynonym A.AmbiguousQName
+        | TooFewArgumentsToPatternSynonym A.AmbiguousQName
+        | CannotResolveAmbiguousPatternSynonym (NonemptyList (A.QName, A.PatternSynDefn))
         | UnusedVariableInPatternSynonym
     -- Operator errors
         | NoParseForApplication [C.Expr]
@@ -2759,7 +2854,7 @@
         | NonFatalErrors [TCWarning]
     -- Instance search errors
         | InstanceSearchDepthExhausted Term Type Int
-          deriving (Typeable, Show)
+          deriving Show
 
 -- | Distinguish error message when parsing lhs or pattern synonym, resp.
 data LHSOrPatSyn = IsLHS | IsPatSyn deriving (Eq, Show)
@@ -2781,7 +2876,6 @@
       -- ^ The exception which is usually caught.
       --   Raised for pattern violations during unification ('assignV')
       --   but also in other situations where we want to backtrack.
-  deriving (Typeable)
 
 instance Error TCErr where
   strMsg = Exception noRange . text . strMsg
@@ -2862,9 +2956,19 @@
             -> ReduceEnv
 mapRedEnvSt f g (ReduceEnv e s) = ReduceEnv (f e) (g s)
 
+-- Lenses
+reduceEnv :: Lens' TCEnv ReduceEnv
+reduceEnv f s = f (redEnv s) <&> \ e -> s { redEnv = e }
+
+reduceSt :: Lens' TCState ReduceEnv
+reduceSt f s = f (redSt s) <&> \ e -> s { redSt = e }
+
 newtype ReduceM a = ReduceM { unReduceM :: ReduceEnv -> a }
 --  deriving (Functor, Applicative, Monad)
 
+onReduceEnv :: (ReduceEnv -> ReduceEnv) -> ReduceM a -> ReduceM a
+onReduceEnv f (ReduceM m) = ReduceM (m . f)
+
 fmapReduce :: (a -> b) -> ReduceM a -> ReduceM b
 fmapReduce f (ReduceM m) = ReduceM $ \ e -> f $! m e
 {-# INLINE fmapReduce #-}
@@ -2905,8 +3009,8 @@
   return $ \x -> unReduceM (f x) (ReduceEnv e s)
 
 instance MonadReader TCEnv ReduceM where
-  ask = ReduceM redEnv
-  local f (ReduceM m) = ReduceM (m . mapRedEnv f)
+  ask   = ReduceM redEnv
+  local = onReduceEnv . mapRedEnv
 
 ---------------------------------------------------------------------------
 -- * Type checking monad transformer
@@ -3199,9 +3303,6 @@
     killRange12 Defn ai name t pols occs displ mut compiled inst copy ma inj def
     -- TODO clarify: Keep the range in the defName field?
 
-instance KillRange CtxId where
-  killRange (CtxId x) = killRange1 CtxId x
-
 instance KillRange NLPat where
   killRange (PVar x y) = killRange2 PVar x y
   killRange (PWild)    = PWild
@@ -3226,7 +3327,7 @@
   killRange = id
 
 instance KillRange ExtLamInfo where
-  killRange = id
+  killRange (ExtLamInfo m) = killRange1 ExtLamInfo m
 
 instance KillRange FunctionFlag where
   killRange = id
@@ -3238,10 +3339,10 @@
       AbstractDefn{} -> __IMPOSSIBLE__ -- only returned by 'getConstInfo'!
       Function cls comp tt inv mut isAbs delayed proj flags term extlam with copat ->
         killRange13 Function cls comp tt inv mut isAbs delayed proj flags term extlam with copat
-      Datatype a b c d e f g h i j   -> killRange10 Datatype a b c d e f g h i j
+      Datatype a b c d e f g h       -> killRange8 Datatype a b c d e f g h
       Record a b c d e f g h i j     -> killRange10 Record a b c d e f g h i j
-      Constructor a b c d e f g      -> killRange7 Constructor a b c d e f g
-      Primitive a b c d              -> killRange4 Primitive a b c d
+      Constructor a b c d e f g h    -> killRange8 Constructor a b c d e f g h
+      Primitive a b c d e            -> killRange5 Primitive a b c d e
 
 instance KillRange MutualId where
   killRange = id
@@ -3254,6 +3355,8 @@
   killRange SortHead     = SortHead
   killRange PiHead       = PiHead
   killRange (ConsHead q) = ConsHead $ killRange q
+  killRange h@VarHead{}  = h
+  killRange UnknownHead  = UnknownHead
 
 instance KillRange Projection where
   killRange (Projection a b c d e) = killRange5 Projection a b c d e
@@ -3264,14 +3367,13 @@
 instance KillRange a => KillRange (Open a) where
   killRange = fmap killRange
 
-instance KillRange a => KillRange (Local a) where
-  killRange (Local a b) = killRange2 Local a b
-  killRange (Global a)  = killRange1 Global a
-
 instance KillRange DisplayForm where
   killRange (Display n es dt) = killRange3 Display n es dt
 
 instance KillRange Polarity where
+  killRange = id
+
+instance KillRange IsForced where
   killRange = id
 
 instance KillRange DisplayTerm where
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
@@ -2,7 +2,6 @@
 
 module Agda.TypeChecking.Monad.Builtin where
 
-import Control.Applicative
 import Control.Monad.State
 import Control.Monad.Trans.Maybe
 
@@ -37,6 +36,7 @@
     _ <- primZero
     when (n > 0) $ void $ primSuc
     el <$> primNat
+  LitWord64 _ _ -> el <$> primWord64
   LitFloat _ _  -> el <$> primFloat
   LitChar _ _   -> el <$> primChar
   LitString _ _ -> el <$> primString
@@ -72,8 +72,8 @@
 getBuiltin' :: HasBuiltins m => String -> m (Maybe Term)
 getBuiltin' x = do
     builtin <- getBuiltinThing x
-    case builtin of         -- ignore sharing to make sure zero isn't reduced to Lit 0
-        Just (Builtin t) -> return $ Just $ ignoreSharing $ killRange t
+    case builtin of
+        Just (Builtin t) -> return $ Just $ killRange t
         _                -> return Nothing
 
 getPrimitive' :: HasBuiltins m => String -> m (Maybe PrimFun)
@@ -92,7 +92,7 @@
 
 constructorForm' :: Applicative m => m Term -> m Term -> Term -> m Term
 constructorForm' pZero pSuc v =
-  case ignoreSharing v of
+  case v of
     Lit (LitNat r n)
       | n == 0    -> pZero
       | n > 0     -> (`apply1` Lit (LitNat r $ n - 1)) <$> pSuc
@@ -108,6 +108,8 @@
     primList, primNil, primCons, primIO, primNat, primSuc, primZero,
     primNatPlus, primNatMinus, primNatTimes, primNatDivSucAux, primNatModSucAux,
     primNatEquality, primNatLess,
+    -- Machine words
+    primWord64,
     primSizeUniv, primSize, primSizeLt, primSizeSuc, primSizeInf, primSizeMax,
     primInf, primSharp, primFlat,
     primEquality, primRefl,
@@ -124,7 +126,7 @@
     primAssoc, primAssocLeft, primAssocRight, primAssocNon,
     primPrecedence, primPrecRelated, primPrecUnrelated,
     primFixity, primFixityFixity,
-    primAgdaLiteral, primAgdaLitNat, primAgdaLitFloat, primAgdaLitString, primAgdaLitChar, primAgdaLitQName, primAgdaLitMeta,
+    primAgdaLiteral, primAgdaLitNat, primAgdaLitWord64, primAgdaLitFloat, primAgdaLitString, primAgdaLitChar, primAgdaLitQName, primAgdaLitMeta,
     primAgdaSort, primAgdaSortSet, primAgdaSortLit, primAgdaSortUnsupported,
     primAgdaDefinition, primAgdaDefinitionFunDef, primAgdaDefinitionDataDef, primAgdaDefinitionRecordDef,
     primAgdaDefinitionPostulate, primAgdaDefinitionPrimitive, primAgdaDefinitionDataConstructor,
@@ -137,7 +139,7 @@
     primAgdaTCMTypeError, primAgdaTCMInferType, primAgdaTCMCheckType,
     primAgdaTCMNormalise, primAgdaTCMReduce,
     primAgdaTCMCatchError, primAgdaTCMGetContext, primAgdaTCMExtendContext, primAgdaTCMInContext,
-    primAgdaTCMFreshName, primAgdaTCMDeclareDef, primAgdaTCMDefineFun,
+    primAgdaTCMFreshName, primAgdaTCMDeclareDef, primAgdaTCMDeclarePostulate, primAgdaTCMDefineFun,
     primAgdaTCMGetType, primAgdaTCMGetDefinition,
     primAgdaTCMQuoteTerm, primAgdaTCMUnquoteTerm,
     primAgdaTCMBlockOnMeta, primAgdaTCMCommit, primAgdaTCMIsMacro,
@@ -169,6 +171,7 @@
 primNatModSucAux = getBuiltin builtinNatModSucAux
 primNatEquality  = getBuiltin builtinNatEquals
 primNatLess      = getBuiltin builtinNatLess
+primWord64       = getBuiltin builtinWord64
 primSizeUniv     = getBuiltin builtinSizeUniv
 primSize         = getBuiltin builtinSize
 primSizeLt       = getBuiltin builtinSizeLt
@@ -232,6 +235,7 @@
 primAgdaErrorPartName   = getBuiltin builtinAgdaErrorPartName
 primAgdaLiteral   = getBuiltin builtinAgdaLiteral
 primAgdaLitNat    = getBuiltin builtinAgdaLitNat
+primAgdaLitWord64 = getBuiltin builtinAgdaLitWord64
 primAgdaLitFloat  = getBuiltin builtinAgdaLitFloat
 primAgdaLitChar   = getBuiltin builtinAgdaLitChar
 primAgdaLitString = getBuiltin builtinAgdaLitString
@@ -270,6 +274,7 @@
 primAgdaTCMInContext     = getBuiltin builtinAgdaTCMInContext
 primAgdaTCMFreshName     = getBuiltin builtinAgdaTCMFreshName
 primAgdaTCMDeclareDef    = getBuiltin builtinAgdaTCMDeclareDef
+primAgdaTCMDeclarePostulate   = getBuiltin builtinAgdaTCMDeclarePostulate
 primAgdaTCMDefineFun     = getBuiltin builtinAgdaTCMDefineFun
 primAgdaTCMGetType            = getBuiltin builtinAgdaTCMGetType
 primAgdaTCMGetDefinition      = getBuiltin builtinAgdaTCMGetDefinition
@@ -284,6 +289,7 @@
 builtinNat, builtinSuc, builtinZero, builtinNatPlus, builtinNatMinus,
   builtinNatTimes, builtinNatDivSucAux, builtinNatModSucAux, builtinNatEquals,
   builtinNatLess, builtinInteger, builtinIntegerPos, builtinIntegerNegSuc,
+  builtinWord64,
   builtinFloat, builtinChar, builtinString, builtinUnit, builtinUnitUnit,
   builtinBool, builtinTrue, builtinFalse,
   builtinList, builtinNil, builtinCons, builtinIO,
@@ -306,7 +312,7 @@
   builtinAgdaTermDef, builtinAgdaTermCon, builtinAgdaTermPi,
   builtinAgdaTermSort, builtinAgdaTermLit, builtinAgdaTermUnsupported, builtinAgdaTermMeta,
   builtinAgdaErrorPart, builtinAgdaErrorPartString, builtinAgdaErrorPartTerm, builtinAgdaErrorPartName,
-  builtinAgdaLiteral, builtinAgdaLitNat, builtinAgdaLitFloat,
+  builtinAgdaLiteral, builtinAgdaLitNat, builtinAgdaLitWord64, builtinAgdaLitFloat,
   builtinAgdaLitChar, builtinAgdaLitString, builtinAgdaLitQName, builtinAgdaLitMeta,
   builtinAgdaClause, builtinAgdaClauseClause, builtinAgdaClauseAbsurd, builtinAgdaPattern,
   builtinAgdaPatVar, builtinAgdaPatCon, builtinAgdaPatDot, builtinAgdaPatLit,
@@ -321,7 +327,7 @@
   builtinAgdaTCMCheckType, builtinAgdaTCMNormalise, builtinAgdaTCMReduce,
   builtinAgdaTCMCatchError,
   builtinAgdaTCMGetContext, builtinAgdaTCMExtendContext, builtinAgdaTCMInContext,
-  builtinAgdaTCMFreshName, builtinAgdaTCMDeclareDef, builtinAgdaTCMDefineFun,
+  builtinAgdaTCMFreshName, builtinAgdaTCMDeclareDef, builtinAgdaTCMDeclarePostulate, builtinAgdaTCMDefineFun,
   builtinAgdaTCMGetType, builtinAgdaTCMGetDefinition,
   builtinAgdaTCMQuoteTerm, builtinAgdaTCMUnquoteTerm,
   builtinAgdaTCMBlockOnMeta, builtinAgdaTCMCommit, builtinAgdaTCMIsMacro,
@@ -338,6 +344,7 @@
 builtinNatModSucAux                  = "NATMODSUCAUX"
 builtinNatEquals                     = "NATEQUALS"
 builtinNatLess                       = "NATLESS"
+builtinWord64                        = "WORD64"
 builtinInteger                       = "INTEGER"
 builtinIntegerPos                    = "INTEGERPOS"
 builtinIntegerNegSuc                 = "INTEGERNEGSUC"
@@ -416,6 +423,7 @@
 builtinAgdaErrorPartName             = "AGDAERRORPARTNAME"
 builtinAgdaLiteral                   = "AGDALITERAL"
 builtinAgdaLitNat                    = "AGDALITNAT"
+builtinAgdaLitWord64                 = "AGDALITWORD64"
 builtinAgdaLitFloat                  = "AGDALITFLOAT"
 builtinAgdaLitChar                   = "AGDALITCHAR"
 builtinAgdaLitString                 = "AGDALITSTRING"
@@ -454,6 +462,7 @@
 builtinAgdaTCMInContext     = "AGDATCMINCONTEXT"
 builtinAgdaTCMFreshName     = "AGDATCMFRESHNAME"
 builtinAgdaTCMDeclareDef    = "AGDATCMDECLAREDEF"
+builtinAgdaTCMDeclarePostulate    = "AGDATCMDECLAREPOSTULATE"
 builtinAgdaTCMDefineFun     = "AGDATCMDEFINEFUN"
 builtinAgdaTCMGetType       = "AGDATCMGETTYPE"
 builtinAgdaTCMGetDefinition = "AGDATCMGETDEFINITION"
@@ -498,9 +507,9 @@
 
 coinductionKit' :: TCM CoinductionKit
 coinductionKit' = do
-  Def inf   _ <- ignoreSharing <$> primInf
-  Def sharp _ <- ignoreSharing <$> primSharp
-  Def flat  _ <- ignoreSharing <$> primFlat
+  Def inf   _ <- primInf
+  Def sharp _ <- primSharp
+  Def flat  _ <- primFlat
   return $ CoinductionKit
     { nameOfInf   = inf
     , nameOfSharp = sharp
@@ -528,15 +537,10 @@
   -- 2. type polymorphic only
   -- 3. monomorphic.
   let lamV (Lam i b)  = mapFst (getHiding i :) $ lamV (unAbs b)
-      lamV (Shared p) = lamV (derefPtr p)
       lamV v          = ([], v)
   return $ case lamV eq of
     (_, Def equality _) -> equality
-  -- OLD:
-  --   ([Hidden, Hidden], Def equality _) -> equality
-  --   ([Hidden],         Def equality _) -> equality
-  --   ([],               Def equality _) -> equality
-    _                                  -> __IMPOSSIBLE__
+    _                   -> __IMPOSSIBLE__
 
 -- | Check whether the type is actually an equality (lhs ≡ rhs)
 --   and extract lhs, rhs, and their type.
@@ -546,7 +550,7 @@
 equalityView :: Type -> TCM EqualityView
 equalityView t0@(El s t) = do
   equality <- primEqualityName
-  case ignoreSharing t of
+  case t of
     Def equality' es | equality' == equality -> do
       let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
       let n = length vs
diff --git a/src/full/Agda/TypeChecking/Monad/Caching.hs b/src/full/Agda/TypeChecking/Monad/Caching.hs
--- a/src/full/Agda/TypeChecking/Monad/Caching.hs
+++ b/src/full/Agda/TypeChecking/Monad/Caching.hs
@@ -11,6 +11,7 @@
     -- * Activating/deactivating
   , activateLoadedFileCache
   , cachingStarts
+  , areWeCaching
   , noCacheForImportedModule
 
     -- * Restoring the 'PostScopeState'
@@ -22,9 +23,11 @@
 
 import Agda.Syntax.Common
 
+import Agda.Interaction.Options
+
 import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Monad.Debug
-import Agda.TypeChecking.Monad.Options
+import {-# SOURCE #-} Agda.TypeChecking.Monad.Options
 
 import Agda.Utils.Lens
 import Agda.Utils.Monad
@@ -37,7 +40,11 @@
 cachingStarts = do
     NameId _ m <- use stFreshNameId
     stFreshNameId .= NameId 1 m
+    stAreWeCaching .= True
 
+areWeCaching :: TCM Bool
+areWeCaching = use stAreWeCaching
+
 -- | Writes a 'TypeCheckAction' to the current log, using the current
 -- 'PostScopeState'
 writeToCurrentLog :: TypeCheckAction -> TCM ()
@@ -51,12 +58,19 @@
   reportSLn "cache" 10 $ "restorePostScopeState"
   modify $ \s ->
     let ipoints = s^.stInteractionPoints
-        pss' = pss{stPostInteractionPoints = stPostInteractionPoints pss `mergeIPMap` ipoints}
+        ws = s^.stTCWarnings
+        pss' = pss{stPostInteractionPoints = stPostInteractionPoints pss `mergeIPMap` ipoints
+                  ,stPostTCWarnings = stPostTCWarnings pss `mergeWarnings` ws
+                  }
     in  s{stPostScopeState = pss'}
   where
     mergeIPMap lm sm = Map.mapWithKey (\k v -> maybe v (`mergeIP` v) (Map.lookup k lm)) sm
-    mergeIP li si = si {ipMeta = ipMeta li}
+    -- see #1338 on why we need to use the new ranges.
+    mergeIP li si = li { ipRange = ipRange si }
 
+    mergeWarnings loading current = [ w | w <- current, not $ tcWarningCached w ]
+                                 ++ [ w | w <- loading,       tcWarningCached w ]
+
 modifyCache
   :: (Maybe LoadedFileCache -> Maybe LoadedFileCache)
   -> TCM ()
@@ -108,10 +122,10 @@
 activateLoadedFileCache :: TCM ()
 activateLoadedFileCache = do
   reportSLn "cache" 10 $ "activateLoadedFileCache"
-  b <- enableCaching
-  if not b then return ()
-     else do
-       modifyCache $ \mbLfc -> case mbLfc of
+
+  whenM (optGHCiInteraction <$> commandLineOptions) $
+    whenM enableCaching $ do
+      modifyCache $ \case
          Nothing                          -> Just $ LoadedFileCache [] []
          Just lfc | null (lfcCurrent lfc) -> Just lfc
          _                                -> __IMPOSSIBLE__
diff --git a/src/full/Agda/TypeChecking/Monad/Closure.hs b/src/full/Agda/TypeChecking/Monad/Closure.hs
--- a/src/full/Agda/TypeChecking/Monad/Closure.hs
+++ b/src/full/Agda/TypeChecking/Monad/Closure.hs
@@ -6,12 +6,14 @@
 import Agda.TypeChecking.Monad.Env
 import Agda.TypeChecking.Monad.State
 import Agda.TypeChecking.Monad.Context
+import Agda.Utils.Lens
 
 enterClosure :: Closure a -> (a -> TCM b) -> TCM b
-enterClosure (Closure sig env scope pars x) k =
-    withScope_ scope
-    $ withEnv env
-    $ withModuleParameters pars
+enterClosure (Closure sig env scope cps x) k = do
+  isDbg <- view eIsDebugPrinting
+  withScope_ scope
+    $ locallyState stModuleCheckpoints (const cps)
+    $ withEnv env{ envIsDebugPrinting = isDbg }
     $ k x
 
 withClosure :: Closure a -> (a -> TCM b) -> TCM (Closure b)
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
@@ -3,10 +3,10 @@
 module Agda.TypeChecking.Monad.Constraints where
 
 import Control.Arrow ((&&&))
-import Control.Applicative
 import Control.Monad.State
 import Control.Monad.Reader
 
+import qualified Data.Foldable as Fold
 import qualified Data.List as List
 import Data.Set (Set)
 import qualified Data.Set as Set
@@ -43,13 +43,12 @@
 solvingProblems :: Set ProblemId -> TCM a -> TCM a
 solvingProblems pids m = verboseBracket "tc.constr.solve" 50 ("working on problems " ++ show (Set.toList pids)) $ do
   x <- local (\e -> e { envActiveProblems = pids `Set.union` envActiveProblems e }) m
-  sequence_
-    [ ifNotM (isProblemSolved pid)
+  Fold.forM_ pids $ \ pid -> do
+    ifNotM (isProblemSolved pid)
         (reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was not solved.")
       $ {- else -} do
         reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was solved!"
         wakeConstraints (return . blockedOn pid . clValue . theConstraint)
-    | pid <- Set.toList pids ]
   return x
   where
     blockedOn pid (Guarded _ pid') = pid == pid'
@@ -166,6 +165,9 @@
     isBlocking FindInScope{} = False
     isBlocking IsEmpty{}     = True
     isBlocking CheckSizeLtSat{} = True
+    isBlocking CheckFunDef{} = True
+    isBlocking HasBiggerSort{} = False
+    isBlocking HasPTSRule{}  = False
 
 -- | Add already awake constraints
 addAwakeConstraints :: Constraints -> TCM ()
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
@@ -1,12 +1,7 @@
-{-# LANGUAGE CPP               #-}
-
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE OverlappingInstances #-}
-#endif
+{-# LANGUAGE CPP #-}
 
 module Agda.TypeChecking.Monad.Context where
 
-import Control.Applicative
 import Control.Monad.Reader
 import Control.Monad.State
 
@@ -30,33 +25,35 @@
 import Agda.Utils.Functor
 import Agda.Utils.Lens
 import Agda.Utils.List ((!!!), downFrom)
+import Agda.Utils.Maybe
+import Agda.Utils.Monad
 import Agda.Utils.Pretty
 import Agda.Utils.Size
 
--- * Modifying the context
-
--- | Modify the 'ctxEntry' field of a 'ContextEntry'.
-modifyContextEntry :: (Dom (Name, Type) -> Dom (Name, Type)) -> ContextEntry -> ContextEntry
-modifyContextEntry f ce = ce { ctxEntry = f (ctxEntry ce) }
+import Agda.Utils.Impossible
+#include "undefined.h"
 
--- | Modify all 'ContextEntry's.
-modifyContextEntries :: (Dom (Name, Type) -> Dom (Name, Type)) -> Context -> Context
-modifyContextEntries f = map (modifyContextEntry f)
+-- * Modifying the context
 
 -- | Modify a 'Context' in a computation.
 {-# SPECIALIZE modifyContext :: (Context -> Context) -> TCM a -> TCM a #-}
 modifyContext :: MonadTCM tcm => (Context -> Context) -> tcm a -> tcm a
 modifyContext f = local $ \e -> e { envContext = f $ envContext e }
 
-{-# 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 to top (=empty) context. Resets the checkpoints.
+{-# SPECIALIZE inTopContext :: TCM a -> TCM a #-}
+safeInTopContext :: MonadTCM tcm => tcm a -> tcm a
+safeInTopContext cont = do
+  locals <- liftTCM $ getLocalVars
+  liftTCM $ setLocalVars []
+  a <- modifyContext (const [])
+        $ locally eCurrentCheckpoint (const 0)
+        $ locally eCheckpoints (const $ Map.singleton 0 IdS) cont
+  liftTCM $ setLocalVars locals
+  return a
 
--- | Change to top (=empty) context.
---
---   TODO: currently, this makes the @ModuleParamDict@ ill-formed!
+-- | Change to top (=empty) context, but don't update the checkpoints. Totally
+--   not safe!
 {-# SPECIALIZE inTopContext :: TCM a -> TCM a #-}
 inTopContext :: MonadTCM tcm => tcm a -> tcm a
 inTopContext cont = do
@@ -68,73 +65,71 @@
 
 -- | Delete the last @n@ bindings from the context.
 --
---   TODO: currently, this makes the @ModuleParamDict@ ill-formed!
+--   Doesn't update checkpoints!! Use `updateContext rho (drop n)` instead,
+--   for an appropriate substitution `rho`.
 {-# SPECIALIZE escapeContext :: Int -> TCM a -> TCM a #-}
 escapeContext :: MonadTCM tcm => Int -> tcm a -> tcm a
 escapeContext n = modifyContext $ drop n
 
--- * Manipulating module parameters --
-
--- | Locally set module parameters for a computation.
-
-withModuleParameters :: ModuleParamDict -> TCM a -> TCM a
-withModuleParameters mp ret = do
-  old <- use stModuleParameters
-  stModuleParameters .= mp
-  x <- ret
-  stModuleParameters .= old
-  return x
-
--- | Apply a substitution to all module parameters.
+-- * Manipulating checkpoints --
 
-updateModuleParameters :: (MonadTCM tcm, MonadDebug tcm)
-                       => Substitution -> tcm a -> tcm a
-updateModuleParameters sub ret = do
-  pm <- use stModuleParameters
-  let showMP pref mps = List.intercalate "\n" $
-        [ p ++ show m ++ " : " ++ show (mpSubstitution mp)
-        | (p, (m, mp)) <- zip (pref : repeat (map (const ' ') pref))
-                              (Map.toList mps)
-        ]
-  verboseS "tc.cxt.param" 105 $ do
-    cxt <- reverse <$> getContext
-    reportSLn "tc.cxt.param" 105 $ unlines $
-      [ "updatingModuleParameters"
-      , "  sub = " ++ show sub
-      , "  cxt (last added last in list) = " ++ unwords (map (show . fst . unDom) cxt)
-      , showMP "  old = " pm
+-- | Add a new checkpoint. Do not use directly!
+checkpoint :: (MonadDebug tcm, MonadTCM tcm) => Substitution -> tcm a -> tcm a
+checkpoint sub k = do
+  unlessDebugPrinting $ reportSLn "tc.cxt.checkpoint" 105 $ "New checkpoint {"
+  old     <- view eCurrentCheckpoint
+  oldMods <- use  stModuleCheckpoints
+  chkpt <- fresh
+  unlessDebugPrinting $ verboseS "tc.cxt.checkpoint" 105 $ do
+    cxt <- getContextTelescope
+    cps <- view eCheckpoints
+    let cps' = Map.insert chkpt IdS $ fmap (applySubst sub) cps
+        prCps cps = vcat [ pshow c <+> text ": " <+> pretty s | (c, s) <- Map.toList cps ]
+    reportSDoc "tc.cxt.checkpoint" 105 $ return $ nest 2 $ vcat
+      [ text "old =" <+> pshow old
+      , text "new =" <+> pshow chkpt
+      , text "sub =" <+> pretty sub
+      , text "cxt =" <+> pretty cxt
+      , text "old substs =" <+> prCps cps
+      , text "new substs =" <?> prCps cps'
       ]
-  let pm' = applySubst sub pm
-  reportSLn "tc.cxt.param" 105 $ showMP "  new = " pm'
-  stModuleParameters .= pm'
-  x <- ret              -- We need to keep introduced modules around
-  pm1 <- use stModuleParameters
-  let pm'' = Map.union pm (defaultModuleParameters <$ Map.difference pm1 pm)
-  stModuleParameters .= pm''
-  reportSLn "tc.cxt.param" 105 $ showMP "  restored = " pm''
+  x <- flip local k $ \ env -> env
+    { envCurrentCheckpoint = chkpt
+    , envCheckpoints       = Map.insert chkpt IdS $
+                              fmap (applySubst sub) (envCheckpoints env)
+    }
+  newMods <- use stModuleCheckpoints
+  -- Set the checkpoint for introduced modules to the old checkpoint when the
+  -- new one goes out of scope. #2897: This isn't actually sound for modules
+  -- created under refined parent parameters, but as long as those modules
+  -- aren't named we shouldn't look at the checkpoint. The right thing to do
+  -- would be to not store these modules in the checkpoint map, but todo..
+  stModuleCheckpoints .= Map.union oldMods (old <$ Map.difference newMods oldMods)
+  unlessDebugPrinting $ reportSLn "tc.cxt.checkpoint" 105 "}"
   return x
 
--- | Since the @ModuleParamDict@ is relative to the current context,
---   this function should be called everytime the context is extended.
---
-weakenModuleParameters :: (MonadTCM tcm, MonadDebug tcm)
-                       => Nat -> tcm a -> tcm a
-weakenModuleParameters n = updateModuleParameters (raiseS n)
+-- | Update the context. Requires a substitution from the old context to the
+--   new.
+updateContext :: (MonadDebug tcm, MonadTCM tcm) => Substitution -> (Context -> Context) -> tcm a -> tcm a
+updateContext sub f = modifyContext f . checkpoint sub
 
+-- | Get the substitution from the context at a given checkpoint to the current context.
+checkpointSubstitution :: MonadReader TCEnv tcm => CheckpointId -> tcm Substitution
+checkpointSubstitution chkpt =
+  caseMaybeM (view (eCheckpoints . key chkpt)) __IMPOSSIBLE__ return
+
 -- | Get substitution @Γ ⊢ ρ : Γm@ where @Γ@ is the current context
 --   and @Γm@ is the module parameter telescope of module @m@.
 --
---   In case the current 'ModuleParamDict' does not know @m@,
---   we return the identity substitution.
---   This is ok for instance if we are outside module @m@
---   (in which case we have to supply all module parameters to any
---   symbol defined within @m@ we want to refer).
-getModuleParameterSub :: (Functor m, ReadTCState m) => ModuleName -> m Substitution
+--   In case the we don't have a checkpoint for @m@ we return the identity
+--   substitution.
+--   This is ok for instance if we are outside module @m@ (in which case we
+--   have to supply all module parameters to any symbol defined within @m@ we
+--   want to refer).
+getModuleParameterSub :: (MonadReader TCEnv m, ReadTCState m) => ModuleName -> m Substitution
 getModuleParameterSub m = do
-  r <- (^. stModuleParameters) <$> getTCState
-  case Map.lookup m r of
-    Nothing -> return IdS
-    Just mp -> return $ mpSubstitution mp
+  mcp <- (^. stModuleCheckpoints . key m) <$> getTCState
+  maybe (return IdS) checkpointSubstitution mcp
 
 
 -- * Adding to the context
@@ -145,43 +140,36 @@
 --
 --   Warning: Does not update module parameter substitution!
 {-# SPECIALIZE addCtx :: Name -> Dom Type -> TCM a -> TCM a #-}
-addCtx :: MonadTCM tcm => Name -> Dom Type -> tcm a -> tcm a
+addCtx :: (MonadDebug tcm, MonadTCM tcm) => Name -> Dom Type -> tcm a -> tcm a
 addCtx x a ret = do
-  ce <- mkContextEntry $ (x,) <$> a
-  modifyContext (ce :) ret
+  let ce = (x,) <$> a
+  updateContext (raiseS 1) (ce :) ret
       -- let-bindings keep track of own their context
 
+-- | Pick a concrete name that doesn't shadow anything in the given list.
+unshadowedName :: [Name] -> Name -> Name
+unshadowedName xs x = head $ filter (notTaken $ map nameConcrete xs)
+                           $ iterate nextName x
+  where
+    notTaken xs x = isNoName x || nameConcrete x `notElem` xs
+
 -- | Pick a concrete name that doesn't shadow anything in the context.
 unshadowName :: MonadTCM tcm => Name -> tcm Name
 unshadowName x = do
-  ctx <- map (nameConcrete . fst . unDom) <$> getContext
-  return $ head $ filter (notTaken ctx) $ iterate nextName x
-  where
-    notTaken xs x = isNoName x || nameConcrete x `notElem` xs
+  ctx <- map (fst . unDom) <$> getContext
+  return $ unshadowedName ctx x
 
 -- | Various specializations of @addCtx@.
 {-# SPECIALIZE addContext :: b -> TCM a -> TCM a #-}
 class AddContext b where
-  addContext  :: MonadTCM tcm => b -> tcm a -> tcm a
+  addContext :: (MonadTCM tcm, MonadDebug tcm) => b -> tcm a -> tcm a
   contextSize :: b -> Nat
 
--- | Since the module parameter substitution is relative to
---   the current context, we need to weaken it when we
---   extend the context.  This function takes care of that.
---
-addContext' :: (MonadTCM tcm, MonadDebug tcm, AddContext b)
-            => b -> tcm a -> tcm a
-addContext' cxt = addContext cxt . weakenModuleParameters (contextSize cxt)
-
--- | Wrapper to tell 'addContext' not to 'unshadowName's. Used when adding a
+-- | Wrapper to tell 'addContext not to 'unshadowName's. Used when adding a
 --   user-provided, but already type checked, telescope to the context.
 newtype KeepNames a = KeepNames a
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} AddContext a => AddContext [a] where
-#else
-instance AddContext a => AddContext [a] where
-#endif
   addContext = flip (foldr addContext)
   contextSize = sum . map contextSize
 
@@ -228,11 +216,7 @@
   addContext x = addContext (x, dummyDom)
   contextSize _ = 1
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} AddContext String where
-#else
-instance AddContext String where
-#endif
   addContext s = addContext (s, dummyDom)
   contextSize _ = 1
 
@@ -245,7 +229,7 @@
 instance AddContext Telescope where
   addContext tel ret = loop tel where
     loop EmptyTel          = ret
-    loop (ExtendTel t tel) = underAbstraction t tel loop
+    loop (ExtendTel t tel) = underAbstraction' id t tel loop
   contextSize = size
 
 -- | Context entries without a type have this dummy type.
@@ -254,19 +238,19 @@
 
 -- | Go under an abstraction.
 {-# SPECIALIZE underAbstraction :: Subst t a => Dom Type -> Abs a -> (a -> TCM b) -> TCM b #-}
-underAbstraction :: (Subst t a, MonadTCM tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b
+underAbstraction :: (Subst t a, MonadTCM tcm, MonadDebug tcm) => Dom Type -> Abs a -> (a -> tcm b) -> tcm b
 underAbstraction = underAbstraction' id
 
-underAbstraction' :: (Subst t a, MonadTCM tcm, AddContext (name, Dom Type)) =>
+underAbstraction' :: (Subst t a, MonadTCM tcm, MonadDebug tcm, AddContext (name, Dom Type)) =>
                      (String -> name) -> Dom Type -> Abs a -> (a -> tcm b) -> tcm b
 underAbstraction' _ _ (NoAbs _ v) k = k v
-underAbstraction' wrap t a        k = addContext (wrap $ realName $ absName a, t) $ k $ absBody a
+underAbstraction' wrap t a k = addContext (wrap $ realName $ absName a, t) $ k $ absBody a
   where
     realName s = if isNoName s then "x" else argNameToString s
 
 -- | Go under an abstract without worrying about the type to add to the context.
 {-# SPECIALIZE underAbstraction_ :: Subst t a => Abs a -> (a -> TCM b) -> TCM b #-}
-underAbstraction_ :: (Subst t a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b
+underAbstraction_ :: (Subst t a, MonadTCM tcm, MonadDebug tcm) => Abs a -> (a -> tcm b) -> tcm b
 underAbstraction_ = underAbstraction dummyDom
 
 -- | Add a let bound variable.
@@ -283,7 +267,7 @@
 -- | Get the current context.
 {-# SPECIALIZE getContext :: TCM [Dom (Name, Type)] #-}
 getContext :: MonadReader TCEnv m => m [Dom (Name, Type)]
-getContext = asks $ map ctxEntry . envContext
+getContext = asks envContext
 
 -- | Get the size of the current context.
 {-# SPECIALIZE getContextSize :: TCM Nat #-}
@@ -306,11 +290,6 @@
 getContextTelescope :: (Applicative m, MonadReader TCEnv m) => m Telescope
 getContextTelescope = telFromList' nameToArgName . reverse <$> getContext
 
--- | Check if we are in a compatible context, i.e. an extension of the given context.
-{-# SPECIALIZE getContextId :: TCM [CtxId] #-}
-getContextId :: MonadReader TCEnv m => m [CtxId]
-getContextId = asks $ map ctxId . envContext
-
 -- | Get the names of all declarations in the context.
 {-# SPECIALIZE getContextNames :: TCM [Name] #-}
 getContextNames :: (Applicative m, MonadReader TCEnv m) => m [Name]
@@ -342,13 +321,7 @@
 --   variable the deBruijn index is returned and if it is a let bound variable
 --   its definition is returned.
 {-# SPECIALIZE getVarInfo :: Name -> TCM (Term, Dom Type) #-}
-getVarInfo
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Applicative m, MonadReader TCEnv m)
-#else
-  :: MonadReader TCEnv m
-#endif
-  => Name -> m (Term, Dom Type)
+getVarInfo :: MonadReader TCEnv m => Name -> m (Term, Dom Type)
 getVarInfo x =
     do  ctx <- getContext
         def <- asks envLetBindings
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
@@ -4,9 +4,7 @@
 
 import Control.Monad.Reader
 
-import Agda.Syntax.Common (Dom)
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad.Base
 
-getContext   :: MonadReader TCEnv m => m [Dom (Name, Type)]
-getContextId :: MonadReader TCEnv m => m [CtxId]
+checkpointSubstitution :: MonadReader TCEnv tcm => CheckpointId -> tcm Substitution
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
@@ -2,7 +2,6 @@
 
 module Agda.TypeChecking.Monad.Debug where
 
-import Control.Applicative
 import Control.Monad.IO.Class (MonadIO, liftIO)
 import Control.Monad.Reader
 import Control.Monad.State
@@ -10,7 +9,8 @@
 import Control.Monad.Writer
 
 import Data.Maybe
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, Any(..))
+import Data.Monoid ( Monoid, mempty, mappend )
+import Data.Semigroup ( Semigroup, (<>), Any(..) )
 import Data.Traversable
 
 import {-# SOURCE #-} Agda.TypeChecking.Errors
@@ -79,24 +79,27 @@
 
 -- | Conditionally print debug string.
 {-# SPECIALIZE reportS :: VerboseKey -> Int -> String -> TCM () #-}
-reportS :: (HasOptions m, MonadDebug m)
+reportS :: (HasOptions m, MonadDebug m, MonadReader TCEnv m)
         => VerboseKey -> Int -> String -> m ()
 reportS k n s = verboseS k n $ displayDebugMessage n s
 
 -- | Conditionally println debug string.
 {-# SPECIALIZE reportSLn :: VerboseKey -> Int -> String -> TCM () #-}
-reportSLn :: (HasOptions m, MonadDebug m)
+reportSLn :: (HasOptions m, MonadDebug m, MonadReader TCEnv m)
           => VerboseKey -> Int -> String -> m ()
 reportSLn k n s = verboseS k n $
   displayDebugMessage n (s ++ "\n")
 
 -- | Conditionally render debug 'Doc' and print it.
 {-# SPECIALIZE reportSDoc :: VerboseKey -> Int -> TCM Doc -> TCM () #-}
-reportSDoc :: (HasOptions m, MonadDebug m)
+reportSDoc :: (HasOptions m, MonadDebug m, MonadReader TCEnv m)
            => VerboseKey -> Int -> TCM Doc -> m ()
 reportSDoc k n d = verboseS k n $ do
-  displayDebugMessage n . (++ "\n") =<< formatDebugMessage k n d
+  displayDebugMessage n . (++ "\n") =<< formatDebugMessage k n (locally eIsDebugPrinting (const True) d)
 
+unlessDebugPrinting :: MonadTCM m => m () -> m ()
+unlessDebugPrinting = unlessM (asks envIsDebugPrinting)
+
 traceSLn :: (HasOptions m, MonadDebug m)
          => VerboseKey -> Int -> String -> m a -> m a
 traceSLn k n s cont = ifNotM (hasVerbosity k n) cont $ {- else -} do
@@ -106,7 +109,7 @@
 traceSDoc :: (HasOptions m, MonadDebug m)
           => VerboseKey -> Int -> TCM Doc -> m a -> m a
 traceSDoc k n d cont = ifNotM (hasVerbosity k n) cont $ {- else -} do
-  s <- formatDebugMessage k n d
+  s <- formatDebugMessage k n $ locally eIsDebugPrinting (const True) d
   traceDebugMessage n (s ++ "\n") cont
 
 -- | Print brackets around debug messages issued by a computation.
diff --git a/src/full/Agda/TypeChecking/Monad/Debug.hs-boot b/src/full/Agda/TypeChecking/Monad/Debug.hs-boot
--- a/src/full/Agda/TypeChecking/Monad/Debug.hs-boot
+++ b/src/full/Agda/TypeChecking/Monad/Debug.hs-boot
@@ -1,7 +1,7 @@
 module Agda.TypeChecking.Monad.Debug where
 
-import Control.Applicative
 import Control.Monad.IO.Class (MonadIO)
+import Control.Monad.Reader
 
 import Agda.TypeChecking.Monad.Base
 import {-# SOURCE #-} Agda.TypeChecking.Monad.Options
@@ -19,10 +19,10 @@
 
 instance (MonadIO m) => MonadDebug (TCMT m)
 
-reportS :: (HasOptions m, MonadDebug m)
+reportS :: (HasOptions m, MonadDebug m, MonadReader TCEnv m)
         => VerboseKey -> Int -> String -> m ()
-reportSLn :: (HasOptions m, MonadDebug m)
+reportSLn :: (HasOptions m, MonadDebug m, MonadReader TCEnv m)
           => VerboseKey -> Int -> String -> m ()
-reportSDoc :: (HasOptions m, MonadDebug m)
+reportSDoc :: (HasOptions m, MonadDebug m, MonadReader TCEnv m)
            => VerboseKey -> Int -> TCM Doc -> m ()
 
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
@@ -109,3 +109,8 @@
 
 isInsideDotPattern :: TCM Bool
 isInsideDotPattern = asks envInsideDotPattern
+
+-- | Don't use call-by-need evaluation for the given computation.
+callByName :: TCM a -> TCM a
+callByName = local $ \ e -> e { envCallByNeed = False }
+
diff --git a/src/full/Agda/TypeChecking/Monad/Local.hs b/src/full/Agda/TypeChecking/Monad/Local.hs
deleted file mode 100644
--- a/src/full/Agda/TypeChecking/Monad/Local.hs
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# LANGUAGE CPP #-}
-module Agda.TypeChecking.Monad.Local where
-
-import Control.Applicative
-import Control.Monad
-import Data.Monoid
-
-import Agda.Syntax.Internal
-import Agda.TypeChecking.Substitute
-import Agda.TypeChecking.Monad.Base
-import Agda.TypeChecking.Monad.Context
-import Agda.TypeChecking.Monad.Debug
-import Agda.TypeChecking.Monad.Env
-import Agda.TypeChecking.Monad.Options
-import Agda.TypeChecking.Free
-import {-# SOURCE #-} Agda.TypeChecking.Monad.Signature (inFreshModuleIfFreeParams, lookupSection)
-
-import Agda.Utils.Size
-import Agda.Utils.Impossible
-#include "undefined.h"
-
--- | Precondition: must not be called if the module parameter of the current
---   module have been refined or (touched at all).
-makeLocal :: Free a => a -> TCM (Local a)
-makeLocal x | closed x = return $ Global x
-            | otherwise = inFreshModuleIfFreeParams $ do
-  m <- currentModule
-  return (Local m x)
-
-makeGlobal :: Free a => a -> TCM (Local a)
-makeGlobal x | closed x  = return $ Global x
-             | otherwise = __IMPOSSIBLE__
-
-getLocal :: Subst Term a => Local a -> TCM (Maybe a)
-getLocal (Global x) = return (Just x)
-getLocal l@(Local m x) = do
-  m' <- currentModule
-  if m' == m || isSubModuleOf m' m
-    then Just . (`applySubst` x) <$> getModuleParameterSub m
-    else return Nothing
-
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
@@ -118,12 +118,12 @@
 instance IsInstantiatedMeta Term where
   isInstantiatedMeta = loop where
    loop v =
-    case ignoreSharing v of
+    case v of
       MetaV x _  -> isInstantiatedMeta x
       DontCare v -> loop v
       Level l    -> isInstantiatedMeta l
       Lam _ b    -> isInstantiatedMeta b
-      Con _ _ vs -> isInstantiatedMeta vs
+      Con _ _ es | Just vs <- allApplyElims es -> isInstantiatedMeta vs
       _          -> __IMPOSSIBLE__
 
 instance IsInstantiatedMeta Level where
@@ -191,7 +191,7 @@
 
 setValueMetaName :: Term -> MetaNameSuggestion -> TCM ()
 setValueMetaName v s = do
-  case ignoreSharing v of
+  case v of
     MetaV mi _ -> setMetaNameSuggestion mi s
     u          -> do
       reportSLn "tc.meta.name" 70 $
@@ -226,7 +226,10 @@
 registerInteractionPoint :: Bool -> Range -> Maybe Nat -> TCM InteractionId
 registerInteractionPoint preciseRange r maybeId = do
   m <- use stInteractionPoints
-  if not preciseRange then continue m else do
+  -- If we're given an interaction id we shouldn't look up by range.
+  -- This is important when doing 'refine', since all interaction points
+  -- created by the refine gets the same range.
+  if not preciseRange || isJust maybeId then continue m else do
     -- If the range does not come from a file, it is not
     -- precise, so ignore it.
     Strict.caseMaybe (rangeFile r) (continue m) $ \ _ -> do
@@ -331,7 +334,13 @@
 newMeta' inst mi p perm j = do
   x <- fresh
   let j' = j { jMetaId = x }  -- fill the identifier part of the judgement
-      mv = MetaVar mi p perm j' inst Set.empty Instantiable
+      mv = MetaVar{ mvInfo             = mi
+                  , mvPriority         = p
+                  , mvPermutation      = perm
+                  , mvJudgement        = j'
+                  , mvInstantiation    = inst
+                  , mvListeners        = Set.empty
+                  , mvFrozen           = Instantiable }
   -- printing not available (import cycle)
   -- reportSDoc "tc.meta.new" 50 $ text "new meta" <+> prettyTCM j'
   stMetaStore %= Map.insert x mv
@@ -455,7 +464,6 @@
   unfreezeMeta (El s t) = unfreezeMeta s >> unfreezeMeta t
 
 instance UnFreezeMeta Term where
-  unfreezeMeta (Shared p)    = unfreezeMeta $ derefPtr p
   unfreezeMeta (MetaV x _)   = unfreezeMeta x
   unfreezeMeta (Sort s)      = unfreezeMeta s
   unfreezeMeta (Level l)     = unfreezeMeta l
@@ -464,7 +472,7 @@
   unfreezeMeta _             = return ()
 
 instance UnFreezeMeta Sort where
-  unfreezeMeta (Type l)      = unfreezeMeta l
+  unfreezeMeta (MetaS x _)   = unfreezeMeta x
   unfreezeMeta _             = return ()
 
 instance UnFreezeMeta Level where
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
@@ -2,53 +2,43 @@
 
 module Agda.TypeChecking.Monad.Open
         ( makeOpen
-        , makeClosed, isClosed
         , getOpen
-        , tryOpen
+        , tryGetOpen
+        , isClosed
         ) where
 
-import Control.Applicative
 import Control.Monad
 import Control.Monad.Reader
 import qualified Data.List as List
 
+import Agda.Syntax.Internal
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Monad.Base
 
 import {-# SOURCE #-} Agda.TypeChecking.Monad.Context
 
+import Agda.Utils.Lens
+import Agda.Utils.Maybe
 import Agda.Utils.Except ( MonadError(catchError) )
 
 -- | Create an open term in the current context.
 makeOpen :: a -> TCM (Open a)
 makeOpen x = do
-    ctx <- getContextId
-    return $ OpenThing ctx x
-
--- | Create an open term which is closed.
-makeClosed :: a -> Open a
-makeClosed = OpenThing []
+    cp <- view eCurrentCheckpoint
+    return $ OpenThing cp x
 
--- | Check if an 'Open' is closed.
-isClosed :: Open a -> Bool
-isClosed (OpenThing cxt _) = null cxt
+-- | Extract the value from an open term. The checkpoint at which it was
+--   created must be in scope.
+getOpen :: (Subst Term a, MonadReader TCEnv m) => Open a -> m a
+getOpen (OpenThing cp x) = do
+  sub <- checkpointSubstitution cp
+  return $ applySubst sub x
 
--- | Extract the value from an open term. Must be done in an extension of the
---   context in which the term was created.
-getOpen :: (Subst t a, MonadReader TCEnv m) => Open a -> m a
-getOpen (OpenThing []  x) = return x
-getOpen (OpenThing ctx x) = do
-  ctx' <- getContextId
-  unless (ctx `List.isSuffixOf` ctx') $ fail $ "thing out of context (" ++ show ctx ++ " is not a sub context of " ++ show ctx' ++ ")"
-  return $ raise (length ctx' - length ctx) x
+-- | Extract the value from an open term. Returns `Nothing` if the checkpoint
+--   at which it was created is not in scope.
+tryGetOpen :: (Subst Term a, MonadReader TCEnv m) => Open a -> m (Maybe a)
+tryGetOpen (OpenThing cp x) = fmap (`applySubst` x) <$> view (eCheckpoints . key cp)
 
--- | Try to use an 'Open' the current context.
---   Returns 'Nothing' if current context is not an extension of the
---   context in which the 'Open' was created.
-tryOpen :: (Subst t a, MonadReader TCEnv m) => Open a -> m (Maybe a)
-tryOpen (OpenThing []  x) = return $ Just x
-tryOpen (OpenThing ctx x) = do
-  ctx' <- getContextId
-  if (ctx `List.isSuffixOf` ctx')
-    then return $ Just $ raise (length ctx' - length ctx) x
-    else return Nothing
+-- | An 'Open' is closed if it has checkpoint 0.
+isClosed :: Open a -> Bool
+isClosed (OpenThing cp _) = cp == 0
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
@@ -4,7 +4,6 @@
 
 import Prelude hiding (mapM)
 
-import Control.Applicative
 import Control.Monad.Reader hiding (mapM)
 import Control.Monad.State  hiding (mapM)
 
@@ -269,22 +268,8 @@
 hasUniversePolymorphism :: HasOptions m => m Bool
 hasUniversePolymorphism = optUniversePolymorphism <$> pragmaOptions
 
-{-# SPECIALIZE sharedFun :: TCM (Term -> Term) #-}
-sharedFun :: HasOptions m => m (Term -> Term)
-sharedFun = do
-  sharing <- optSharing <$> commandLineOptions
-  return $ if sharing then shared_ else id
-
-{-# SPECIALIZE shared :: Term -> TCM Term #-}
-shared :: HasOptions m => Term -> m Term
-shared v = ($ v) <$> sharedFun
-
-{-# SPECIALIZE sharedType :: Type -> TCM Type #-}
-sharedType :: HasOptions m => Type -> m Type
-sharedType (El s v) = El s <$> shared v
-
 enableCaching :: TCM Bool
-enableCaching = optCaching <$> commandLineOptions
+enableCaching = optCaching <$> pragmaOptions
 
 showImplicitArguments :: TCM Bool
 showImplicitArguments = optShowImplicit <$> pragmaOptions
@@ -333,6 +318,9 @@
 maxInstanceSearchDepth :: TCM Int
 maxInstanceSearchDepth = optInstanceSearchDepth <$> pragmaOptions
 
+maxInversionDepth :: TCM Int
+maxInversionDepth = optInversionMaxDepth <$> pragmaOptions
+
 ------------------------------------------------------------------------
 -- Verbosity
 
@@ -350,6 +338,9 @@
 
 type VerboseKey = String
 
+parseVerboseKey :: VerboseKey -> [String]
+parseVerboseKey = wordsBy (`elem` ".:")
+
 -- | Check whether a certain verbosity level is activated.
 --
 --   Precondition: The level must be non-negative.
@@ -358,7 +349,7 @@
 hasVerbosity k n | n < 0     = __IMPOSSIBLE__
                  | otherwise = do
     t <- getVerbosity
-    let ks = wordsBy (`elem` ".:") k
+    let ks = parseVerboseKey k
         m  = last $ 0 : Trie.lookupPath ks t
     return (n <= m)
 
@@ -367,7 +358,7 @@
 {-# SPECIALIZE hasExactVerbosity :: VerboseKey -> Int -> TCM Bool #-}
 hasExactVerbosity :: HasOptions m => VerboseKey -> Int -> m Bool
 hasExactVerbosity k n =
-  (Just n ==) . Trie.lookup (wordsBy (`elem` ".:") k) <$> getVerbosity
+  (Just n ==) . Trie.lookup (parseVerboseKey k) <$> getVerbosity
 
 -- | Run a computation if a certain verbosity level is activated (exact match).
 
@@ -381,5 +372,16 @@
 {-# SPECIALIZE verboseS :: VerboseKey -> Int -> TCM () -> TCM () #-}
 -- {-# SPECIALIZE verboseS :: MonadIO m => VerboseKey -> Int -> TCMT m () -> TCMT m () #-} -- RULE left-hand side too complicated to desugar
 {-# SPECIALIZE verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm () #-}
-verboseS :: HasOptions m => VerboseKey -> Int -> m () -> m ()
-verboseS k n action = whenM (hasVerbosity k n) action
+verboseS :: (MonadReader TCEnv m, HasOptions m) => VerboseKey -> Int -> m () -> m ()
+verboseS k n action = whenM (hasVerbosity k n) $ locally eIsDebugPrinting (const True) action
+
+-- | Verbosity lens.
+verbosity :: VerboseKey -> Lens' Int TCState
+verbosity k = stPragmaOptions . verbOpt . Trie.valueAt (parseVerboseKey k) . defaultTo 0
+  where
+    verbOpt :: Lens' (Trie String Int) PragmaOptions
+    verbOpt f opts = f (optVerbose opts) <&> \ v -> opts { optVerbose = v }
+
+    defaultTo :: Eq a => a -> Lens' a (Maybe a)
+    defaultTo x f m = f (fromMaybe x m) <&> \ v -> if v == x then Nothing else Just v
+
diff --git a/src/full/Agda/TypeChecking/Monad/Options.hs-boot b/src/full/Agda/TypeChecking/Monad/Options.hs-boot
--- a/src/full/Agda/TypeChecking/Monad/Options.hs-boot
+++ b/src/full/Agda/TypeChecking/Monad/Options.hs-boot
@@ -1,16 +1,15 @@
 module Agda.TypeChecking.Monad.Options where
 
-import Control.Applicative
-import Control.Monad.Trans
+import Control.Monad.Reader
 
-import Agda.Interaction.Options
 import Agda.TypeChecking.Monad.Base
 import Agda.Utils.FileName
-import Agda.Utils.Pretty
 
 getIncludeDirs :: TCM [AbsolutePath]
 
 type VerboseKey = String
 
 hasVerbosity :: HasOptions m => VerboseKey -> Int -> m Bool
-verboseS :: HasOptions m => VerboseKey -> Int -> m () -> m ()
+verboseS :: (MonadReader TCEnv m, HasOptions m) => VerboseKey -> Int -> m () -> m ()
+
+enableCaching :: TCM Bool
diff --git a/src/full/Agda/TypeChecking/Monad/Sharing.hs b/src/full/Agda/TypeChecking/Monad/Sharing.hs
deleted file mode 100644
--- a/src/full/Agda/TypeChecking/Monad/Sharing.hs
+++ /dev/null
@@ -1,60 +0,0 @@
-{-# LANGUAGE CPP              #-}
-
-module Agda.TypeChecking.Monad.Sharing where
-
-import Control.Applicative
-import Control.Monad.Reader
-import qualified Data.List as List
-import Data.Function
-import Data.Traversable
-
-import Agda.Syntax.Internal
-import Agda.TypeChecking.Monad.Base
-import Agda.TypeChecking.Monad.Debug
-import Agda.TypeChecking.Monad.Options
-import Agda.Utils.Monad
-
-#include "undefined.h"
-import Agda.Utils.Impossible
-
-updateSharedTerm :: MonadReader TCEnv m => (Term -> m Term) -> Term -> m Term
-updateSharedTerm f v =
-  ifM (asks envAllowDestructiveUpdate)
-      (updateSharedM f v)
-      (f $ ignoreSharing v)
-
-updateSharedTermF
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Applicative m, MonadReader TCEnv m, Traversable f)
-#else
-  :: (MonadReader TCEnv m, Traversable f)
-#endif
-  => (Term -> m (f Term)) -> Term -> m (f Term)
-updateSharedTermF f v =
-  ifM (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 $ (List.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 u v = reportSLn "tc.ptr" 50 $ "setting " ++ show u ++ "\n     to " ++ show v
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
@@ -9,6 +9,7 @@
 import Control.Applicative hiding (empty)
 import Control.Monad.State
 import Control.Monad.Reader
+import Control.Monad.Writer
 import Control.Monad.Trans.Maybe
 
 import qualified Data.List as List
@@ -34,9 +35,9 @@
 import Agda.TypeChecking.Monad.Env
 import Agda.TypeChecking.Monad.Mutual
 import Agda.TypeChecking.Monad.Open
-import Agda.TypeChecking.Monad.Local
 import Agda.TypeChecking.Monad.State
 import Agda.TypeChecking.Monad.Trace
+import Agda.TypeChecking.DropArgs
 import Agda.TypeChecking.Warnings
 import Agda.TypeChecking.Positivity.Occurrence
 import Agda.TypeChecking.Substitute
@@ -171,8 +172,8 @@
 markStatic :: QName -> TCM ()
 markStatic = setFunctionFlag FunStatic True
 
-markInline :: QName -> TCM ()
-markInline = setFunctionFlag FunInline True
+markInline :: Bool -> QName -> TCM ()
+markInline b = setFunctionFlag FunInline b
 
 markInjective :: QName -> TCM ()
 markInjective q = modifyGlobalDefinition q $ \def -> def { defInjective = True }
@@ -207,12 +208,14 @@
       reportSLn "impossible" 60 $ "with content " ++ prettyShow sec
       __IMPOSSIBLE__
   -- Add the new section.
-  setDefaultModuleParameters m
+  setModuleCheckpoint m
   modifySignature $ over sigSections $ Map.insert m sec
 
-setDefaultModuleParameters :: ModuleName -> TCM ()
-setDefaultModuleParameters m =
-  stModuleParameters %= Map.insert m defaultModuleParameters
+-- | Sets the checkpoint for the given module to the current checkpoint.
+setModuleCheckpoint :: ModuleName -> TCM ()
+setModuleCheckpoint m = do
+  chkpt <- view eCurrentCheckpoint
+  stModuleCheckpoints %= Map.insert m chkpt
 
 -- | Get a section.
 --
@@ -370,13 +373,22 @@
     copyDef ts (x, y) = do
       def <- getConstInfo x
       np  <- argsToUse (qnameModule x)
-      copyDef' np def
+      -- Issue #3083: We need to use the hiding from the telescope of the
+      -- original module. This can be different than the hiding for the common
+      -- parent in the case of record modules.
+      hidings <- map getHiding . telToList <$> lookupSection (qnameModule x)
+      let ts' = zipWith setHiding hidings ts
+      commonTel <- lookupSection (commonParentModule old $ qnameModule x)
+      reportSLn "tc.mod.apply" 80 $ init $ unlines
+        [ "copyDef " ++ prettyShow x ++ " -> " ++ prettyShow y
+        , "ts' = " ++ prettyShow ts' ]
+      copyDef' ts' np def
       where
-        copyDef' np d = do
+        copyDef' ts np d = do
           reportSLn "tc.mod.apply" 60 $ "making new def for " ++ prettyShow y ++ " from " ++ prettyShow x ++ " with " ++ show np ++ " args " ++ show (defAbstract d)
-          reportSLn "tc.mod.apply" 80 $
-            "args = " ++ show ts' ++ "\n" ++
-            "old type = " ++ prettyShow (defType d)
+          reportSLn "tc.mod.apply" 80 $ init $ unlines
+            [ "args = " ++ show ts'
+            , "old type = " ++ prettyShow (defType d) ]
           reportSLn "tc.mod.apply" 80 $
             "new type = " ++ prettyShow t
           addConstant y =<< nd y
@@ -427,7 +439,7 @@
             -- Even if we apply the record argument (must be @var 0@), we stay a projection.
             -- This is because we may abstract the record argument later again.
             -- See succeed/ProjectionNotNormalized.agda
-            isVar0 t = case ignoreSharing $ unArg t of Var 0 [] -> True; _ -> False
+            isVar0 t = case unArg t of Var 0 [] -> True; _ -> False
             proj   = case oldDef of
               Function{funProjection = Just p@Projection{projIndex = n}}
                 | size ts' < n || (size ts' == n && maybe True isVar0 (lastMaybe ts'))
@@ -475,13 +487,17 @@
                         , clauseFullRange = getRange $ defClauses d
                         , clauseTel       = EmptyTel
                         , namedClausePats = []
-                        , clauseBody      = Just $ case oldDef of
+                        , clauseBody      = Just $ dropArgs pars $ case oldDef of
                             Function{funProjection = Just p} -> projDropParsApply p ProjSystem ts'
                             _ -> Def x $ map Apply ts'
                         , clauseType      = Just $ defaultArg t
                         , clauseCatchall  = False
                         , clauseUnreachable = Just False -- definitely not unreachable
                         }
+              where
+                -- The number of remaining parameters. We need to drop the
+                -- lambdas corresponding to these from the clause body above.
+                pars = max 0 $ maybe 0 (pred . projIndex) proj
 
     {- Example
 
@@ -528,7 +544,7 @@
 -- | Add a display form to a definition (could be in this or imported signature).
 addDisplayForm :: QName -> DisplayForm -> TCM ()
 addDisplayForm x df = do
-  d <- makeLocal df
+  d <- makeOpen df
   let add = updateDefinition x $ \ def -> def{ defDisplay = d : defDisplay def }
   ifM (isLocal x)
     {-then-} (modifySignature add)
@@ -573,7 +589,6 @@
   where
     can body = canonicalName $ extract $ fromMaybe __IMPOSSIBLE__ body
     extract (Def x _)  = x
-    extract (Shared p) = extract $ derefPtr p
     extract _          = __IMPOSSIBLE__
 
 sameDef :: QName -> QName -> TCM (Maybe QName)
@@ -621,7 +636,7 @@
   SigUnknown s -> f s
   SigAbstract  -> a
 
-class (Functor m, Applicative m, Monad m, HasOptions m, MonadDebug m) => HasConstInfo m where
+class (Functor m, Applicative m, Monad m, HasOptions m, MonadDebug m, MonadReader TCEnv m) => HasConstInfo m where
   -- | Lookup the definition of a name. The result is a closed thing, all free
   --   variables have been abstracted over.
   getConstInfo :: QName -> m Definition
@@ -665,7 +680,7 @@
       Left SigAbstract      -> notInScope $ qnameToConcrete q
 
 defaultGetConstInfo
-  :: (HasOptions m, MonadDebug m)
+  :: (HasOptions m, MonadDebug m, MonadReader TCEnv m)
   => TCState -> TCEnv -> QName -> m (Either SigError Definition)
 defaultGetConstInfo st env q = do
     let defs  = st^.(stSignature . sigDefinitions)
@@ -701,6 +716,10 @@
   getConstInfo' = lift . getConstInfo'
   getRewriteRulesFor = lift . getRewriteRulesFor
 
+instance (Monoid w, HasConstInfo m) => HasConstInfo (WriterT w m) where
+  getConstInfo' = lift . getConstInfo'
+  getRewriteRulesFor = lift . getRewriteRulesFor
+
 {-# INLINE getConInfo #-}
 getConInfo :: MonadTCM tcm => ConHead -> tcm Definition
 getConInfo = liftTCM . getConstInfo . conName
@@ -722,6 +741,10 @@
     "Setting polarity of " ++ prettyShow q ++ " to " ++ prettyShow pol ++ "."
   modifySignature $ updateDefinition q $ updateDefPolarity $ const pol
 
+-- | Look up the forced arguments of a definition.
+getForcedArgs :: QName -> TCM [IsForced]
+getForcedArgs q = defForced <$> getConstInfo q
+
 -- | Get argument occurrence info for argument @i@ of definition @d@ (never fails).
 getArgOccurrence :: QName -> Nat -> TCM Occurrence
 getArgOccurrence d i = do
@@ -810,6 +833,15 @@
 getCurrentModuleFreeVars :: TCM Nat
 getCurrentModuleFreeVars = size <$> (lookupSection =<< currentModule)
 
+--   For annoying reasons the qnameModule of a pattern lambda is not correct
+--   (#2883), so make sure to grab the right module for those.
+getDefModule :: HasConstInfo m => QName -> m ModuleName
+getDefModule f = do
+  def <- getConstInfo f
+  return $ case theDef def of
+    Function{ funExtLam = Just (ExtLamInfo m) } -> m
+    _                                           -> qnameModule f
+
 -- | Compute the number of free variables of a defined name. This is the sum of
 --   number of parameters shared with the current module and the number of
 --   anonymous variables (if the name comes from a let-bound module).
@@ -839,7 +871,7 @@
 --   We have to insert the module telescope of the common prefix
 --   of the current module and the module where the definition comes from.
 --   (Properly raised to the current context.)
---y
+--
 --   Example:
 --   @
 --      module M₁ Γ where
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
@@ -6,8 +6,6 @@
 
 module Agda.TypeChecking.Monad.SizedTypes where
 
-import Control.Applicative
-
 import Agda.Interaction.Options
 
 import Agda.Syntax.Common
@@ -23,6 +21,7 @@
 
 import Agda.Utils.Except ( MonadError(catchError) )
 import Agda.Utils.List
+import Agda.Utils.Maybe
 import Agda.Utils.Monad
 
 #include "undefined.h"
@@ -62,10 +61,10 @@
     let testType (Def d [])        | Just d == size   = Just BoundedNo
         testType (Def d [Apply v]) | Just d == sizelt = Just $ BoundedLt $ unArg v
         testType _                                    = Nothing
-    return $ testType . ignoreSharing
+    return testType
 
 getBuiltinDefName :: String -> TCM (Maybe QName)
-getBuiltinDefName s = fromDef . fmap ignoreSharing <$> getBuiltin' s
+getBuiltinDefName s = fromDef <$> getBuiltin' s
   where
     fromDef (Just (Def d [])) = Just d
     fromDef _                 = Nothing
@@ -90,12 +89,16 @@
 --   the size built-ins are defined.
 haveSizedTypes :: TCM Bool
 haveSizedTypes = do
-    Def _ [] <- ignoreSharing <$> primSize
-    Def _ [] <- ignoreSharing <$> primSizeInf
-    Def _ [] <- ignoreSharing <$> primSizeSuc
+    Def _ [] <- primSize
+    Def _ [] <- primSizeInf
+    Def _ [] <- primSizeSuc
     optSizedTypes <$> pragmaOptions
   `catchError` \_ -> return False
 
+-- | Test whether the SIZELT builtin is defined.
+haveSizeLt :: TCM Bool
+haveSizeLt = isJust <$> getBuiltinDefName builtinSizeLt
+
 -- | Add polarity info to a SIZE builtin.
 builtinSizeHook :: String -> QName -> Type -> TCM ()
 builtinSizeHook s q t = do
@@ -138,14 +141,14 @@
 sizeSucName :: TCM (Maybe QName)
 sizeSucName = do
   ifM (not . optSizedTypes <$> pragmaOptions) (return Nothing) $ tryMaybe $ do
-    Def x [] <- ignoreSharing <$> primSizeSuc
+    Def x [] <- primSizeSuc
     return x
 
 sizeSuc :: Nat -> Term -> TCM Term
 sizeSuc n v | n < 0     = __IMPOSSIBLE__
             | n == 0    = return v
             | otherwise = do
-  Def suc [] <- ignoreSharing <$> primSizeSuc
+  Def suc [] <- primSizeSuc
   return $ case iterate (sizeSuc_ suc) v !!! n of
              Nothing -> __IMPOSSIBLE__
              Just t  -> t
@@ -173,9 +176,9 @@
 -- | Expects argument to be 'reduce'd.
 sizeView :: Term -> TCM SizeView
 sizeView v = do
-  Def inf [] <- ignoreSharing <$> primSizeInf
-  Def suc [] <- ignoreSharing <$> primSizeSuc
-  case ignoreSharing v of
+  Def inf [] <- primSizeInf
+  Def suc [] <- primSizeSuc
+  case v of
     Def x []        | x == inf -> return SizeInf
     Def x [Apply u] | x == suc -> return $ SizeSuc (unArg u)
     _                          -> return $ OtherSize v
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
@@ -6,7 +6,6 @@
 module Agda.TypeChecking.Monad.State where
 
 import Control.Arrow (first)
-import Control.Applicative
 import qualified Control.Exception as E
 import Control.Monad.Reader (asks)
 import Control.Monad.State (put, get, gets, modify, modify')
@@ -18,6 +17,7 @@
 import Data.Monoid
 import Data.Set (Set)
 import qualified Data.Set as Set
+import Data.Traversable (traverse)
 
 import Agda.Benchmarking
 
@@ -29,6 +29,7 @@
 import Agda.Syntax.Scope.Base
 import qualified Agda.Syntax.Concrete.Name as C
 import Agda.Syntax.Abstract (PatternSynDefn, PatternSynDefns)
+import Agda.Syntax.Abstract.PatternSynonyms
 import Agda.Syntax.Abstract.Name
 import Agda.Syntax.Internal
 
@@ -43,6 +44,7 @@
 import qualified Agda.Utils.HashMap as HMap
 import Agda.Utils.Lens
 import Agda.Utils.Monad (bracket_)
+import Agda.Utils.NonemptyList
 import Agda.Utils.Pretty
 import Agda.Utils.Tuple
 
@@ -377,8 +379,19 @@
 getPatternSynImports :: TCM PatternSynDefns
 getPatternSynImports = use stPatternSynImports
 
-lookupPatternSyn :: QName -> TCM PatternSynDefn
-lookupPatternSyn x = do
+-- | Get both local and imported pattern synonyms
+getAllPatternSyns :: TCM PatternSynDefns
+getAllPatternSyns = Map.union <$> getPatternSyns <*> getPatternSynImports
+
+lookupPatternSyn :: AmbiguousQName -> TCM PatternSynDefn
+lookupPatternSyn (AmbQ xs) = do
+  defs <- traverse lookupSinglePatternSyn xs
+  case mergePatternSynDefs defs of
+    Just def   -> return def
+    Nothing    -> typeError $ CannotResolveAmbiguousPatternSynonym (zipNe xs defs)
+
+lookupSinglePatternSyn :: QName -> TCM PatternSynDefn
+lookupSinglePatternSyn x = do
     s <- getPatternSyns
     case Map.lookup x s of
         Just d  -> return d
diff --git a/src/full/Agda/TypeChecking/Monad/Statistics.hs b/src/full/Agda/TypeChecking/Monad/Statistics.hs
--- a/src/full/Agda/TypeChecking/Monad/Statistics.hs
+++ b/src/full/Agda/TypeChecking/Monad/Statistics.hs
@@ -5,6 +5,7 @@
     ) where
 
 import qualified Data.Map as Map
+import Control.DeepSeq
 
 import qualified Text.PrettyPrint.Boxes as Boxes
 
@@ -51,19 +52,23 @@
     -- Or use insertLookupWithKey?
     -- update m = old `seq` m' where
     --   (old, m') = Map.insertLookupWithKey (\ _ new old -> f old) x dummy m
-    force m = sum (Map.elems m) `seq` m
+    -- Ulf, 2018-04-10: Neither of these approaches are strict enough in the
+    -- map (nor are they less hacky). It's not enough to be strict in the
+    -- values stored in the map, we also need to be strict in the *structure*
+    -- of the map. A less hacky solution is to deepseq the map.
+    force m = rnf m `seq` m
     update  = Map.insertWith (\ new old -> f old) x dummy
     dummy   = f 0
 
--- | Print the given statistics if verbosity "profile" is given.
+-- | Print the given statistics if verbosity "profile.ticks" is given.
 printStatistics :: Int -> Maybe C.TopLevelModuleName -> Statistics -> TCM ()
-printStatistics vl mmname stats = verboseS "profile" vl $ do
+printStatistics vl mmname stats = verboseS "profile.ticks" vl $ do
   unlessNull (Map.toList stats) $ \ stats -> do
     let -- First column (left aligned) is accounts.
         col1 = Boxes.vcat Boxes.left  $ map (Boxes.text . fst) stats
         -- Second column (right aligned) is numbers.
         col2 = Boxes.vcat Boxes.right $ map (Boxes.text . showThousandSep . snd) stats
         table = Boxes.hsep 1 Boxes.left [col1, col2]
-    reportSLn "profile" 1 $ caseMaybe mmname "Accumlated statistics" $ \ mname ->
+    reportSLn "profile" 1 $ caseMaybe mmname "Accumulated statistics" $ \ mname ->
       "Statistics for " ++ prettyShow mname
     reportSLn "profile" 1 $ Boxes.render table
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
@@ -90,15 +90,17 @@
     InferVar{}                -> True
     InferDef{}                -> True
     CheckArguments{}          -> True
+    CheckTargetType{}         -> False
     CheckDataDef{}            -> True
     CheckRecDef{}             -> True
     CheckConstructor{}        -> True
-    CheckFunDef{}             -> True
+    CheckFunDefCall{}         -> True
     CheckPragma{}             -> True
     CheckPrimitive{}          -> True
     CheckIsEmpty{}            -> True
     CheckWithFunctionType{}   -> True
     CheckSectionApplication{} -> True
+    CheckNamedWhere{}         -> False
     ScopeCheckExpr{}          -> False
     ScopeCheckDeclaration{}   -> False
     ScopeCheckLHS{}           -> False
@@ -110,24 +112,12 @@
   isNoHighlighting NoHighlighting{} = True
   isNoHighlighting _                = False
 
--- RULE left-hand side too complicated to desugar
--- {-# SPECIALIZE traceCallCPS :: Call -> (r -> TCM a) -> ((r -> TCM a) -> TCM b) -> TCM b #-}
-traceCallCPS :: (MonadTCM tcm, MonadDebug tcm)
-             => Call -> (r -> tcm a) -> ((r -> tcm a) -> tcm b) -> tcm b
-traceCallCPS mkCall ret cc = traceCall mkCall (cc ret)
-
--- RULE left-hand side too complicated to desugar
--- {-# SPECIALIZE traceCallCPS_ :: Call -> TCM a -> (TCM a -> TCM b) -> TCM b #-}
-traceCallCPS_ :: (MonadTCM tcm, MonadDebug tcm)
-              => Call -> tcm a -> (tcm a -> tcm b) -> tcm b
-traceCallCPS_ mkCall ret cc =
-    traceCallCPS mkCall (const ret) (\k -> cc $ k ())
-
-getCurrentRange :: TCM Range
+getCurrentRange :: (MonadTCM tcm, MonadDebug tcm) => tcm Range
 getCurrentRange = asks envRange
 
 -- | Sets the current range (for error messages etc.) to the range
 --   of the given object, if it has a range (i.e., its range is not 'noRange').
-setCurrentRange :: HasRange x => x -> TCM a -> TCM a
+setCurrentRange :: (MonadTCM tcm, MonadDebug tcm, HasRange x)
+                => x -> tcm a -> tcm a
 setCurrentRange x = applyUnless (null r) $ traceCall $ SetRange r
   where r = getRange x
diff --git a/src/full/Agda/TypeChecking/Patterns/Abstract.hs b/src/full/Agda/TypeChecking/Patterns/Abstract.hs
--- a/src/full/Agda/TypeChecking/Patterns/Abstract.hs
+++ b/src/full/Agda/TypeChecking/Patterns/Abstract.hs
@@ -30,23 +30,23 @@
 
 -- | Expand literal integer pattern into suc/zero constructor patterns.
 --
-expandLitPattern :: NamedArg A.Pattern -> TCM (NamedArg A.Pattern)
-expandLitPattern p = traverse (traverse expand) p
+expandLitPattern :: A.Pattern -> TCM A.Pattern
+expandLitPattern p = case asView p of
+  (xs, A.LitP (LitNat r n))
+    | n < 0     -> negLit -- Andreas, issue #2365, negative literals not yet supported.
+    | n > 20    -> tooBig
+    | otherwise -> do
+      Con z _ _ <- primZero
+      Con s _ _ <- primSuc
+      let zero  = A.ConP cinfo (unambiguous $ setRange r $ conName z) []
+          suc p = A.ConP cinfo (unambiguous $ setRange r $ conName s) [defaultNamedArg p]
+          info  = A.PatRange r
+          cinfo = A.ConPatInfo ConOCon info False
+          p'    = foldr ($) zero $ List.genericReplicate n suc
+      return $ foldr (A.AsP info . A.BindName) p' xs
+  _ -> return p
+
   where
-    expand p = case asView p of
-      (xs, A.LitP (LitNat r n))
-        | n < 0     -> negLit -- Andreas, issue #2365, negative literals not yet supported.
-        | n > 20    -> tooBig
-        | otherwise -> do
-          Con z _ _ <- ignoreSharing <$> primZero
-          Con s _ _ <- ignoreSharing <$> primSuc
-          let zero  = A.ConP cinfo (A.AmbQ [setRange r $ conName z]) []
-              suc p = A.ConP cinfo (A.AmbQ [setRange r $ conName s]) [defaultNamedArg p]
-              info  = A.PatRange r
-              cinfo = A.ConPatInfo ConOCon info
-              p'    = foldr ($) zero $ List.genericReplicate n suc
-          return $ foldr (A.AsP info) p' xs
-      _ -> return p
     tooBig = typeError $ GenericError $
       "Matching on natural number literals is done by expanding " ++
       "the literal to the corresponding constructor pattern, so " ++
@@ -73,7 +73,7 @@
 -- As a workaround, we define this function only for a = A.Exp, p = A.Pattern'
 -- and keep the type class ExpandPatternSynonyms (which would otherwise be superfluous).
 
-expandPatternSynonyms' :: A.Pattern -> TCM A.Pattern
+expandPatternSynonyms' :: forall e. A.Pattern' e -> TCM (A.Pattern' e)
 expandPatternSynonyms' = postTraverseAPatternM $ \case
 
   A.PatternSynP i x as -> setCurrentRange i $ do
@@ -81,12 +81,14 @@
 
     -- Must expand arguments before instantiating otherwise pattern
     -- synonyms could get into dot patterns (which is __IMPOSSIBLE__).
-    p :: A.Pattern <- expandPatternSynonyms' (vacuous p :: A.Pattern)
+    p <- expandPatternSynonyms' (vacuous p :: A.Pattern' e)
 
     case A.insertImplicitPatSynArgs (A.WildP . PatRange) (getRange x) ns as of
       Nothing       -> typeError $ BadArgumentsToPatternSynonym x
       Just (_, _:_) -> typeError $ TooFewArgumentsToPatternSynonym x
-      Just (s, [])  -> return $ setRange (getRange i) $ A.substPattern s p
+      Just (s, [])  -> do
+        let subE _ = __IMPOSSIBLE__   -- No dot patterns in p
+        return $ setRange (getRange i) $ substPattern' subE s p
 
   p -> return p
 
@@ -103,5 +105,5 @@
 instance ExpandPatternSynonyms a => ExpandPatternSynonyms (Named n a)          where
 instance ExpandPatternSynonyms a => ExpandPatternSynonyms (FieldAssignment' a) where
 
-instance ExpandPatternSynonyms A.Pattern where
+instance ExpandPatternSynonyms (A.Pattern' e) where
   expandPatternSynonyms = expandPatternSynonyms'
diff --git a/src/full/Agda/TypeChecking/Patterns/Internal.hs b/src/full/Agda/TypeChecking/Patterns/Internal.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Patterns/Internal.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+-- | Tools to manipulate patterns in internal syntax
+--   in the TCM (type checking monad).
+
+module Agda.TypeChecking.Patterns.Internal where
+
+import Control.Monad
+
+import Data.Maybe
+
+import Agda.Syntax.Common
+import Agda.Syntax.Internal
+import Agda.Syntax.Internal.Pattern
+
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin
+import Agda.TypeChecking.Reduce (reduce, normalise, instantiate, instantiateFull)
+import Agda.TypeChecking.Substitute.DeBruijn
+
+import Agda.Utils.Pretty
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
+-- | Convert a term (from a dot pattern) to a DeBruijn pattern.
+
+class TermToPattern a b where
+  termToPattern :: a -> TCM b
+
+  default termToPattern :: (TermToPattern a' b', Traversable f, a ~ f a', b ~ f b') => a -> TCM b
+  termToPattern = traverse termToPattern
+
+instance TermToPattern a b => TermToPattern [a] [b] where
+instance TermToPattern a b => TermToPattern (Arg a) (Arg b) where
+instance TermToPattern a b => TermToPattern (Named c a) (Named c b) where
+
+instance (DeBruijn (Pattern' a)) => TermToPattern Term (Pattern' a) where
+  termToPattern t = (reduce >=> constructorForm) t >>= \case
+    -- Constructors.
+    Con c _ args -> ConP c noConPatternInfo . map (fmap unnamed) <$> termToPattern (fromMaybe __IMPOSSIBLE__ $ allApplyElims args)
+    Var i []    -> return $ deBruijnVar i
+    Lit l       -> return $ LitP l
+    t           -> return $ dotP t
+
+dotPatternsToPatterns :: forall a. (DeBruijn (Pattern' a))
+                      => Pattern' a -> TCM (Pattern' a)
+dotPatternsToPatterns = postTraversePatternM dotToPat
+  where
+    dotToPat :: Pattern' a -> TCM (Pattern' a)
+    dotToPat = \case
+      DotP o t -> termToPattern t
+      p        -> return p
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
@@ -98,7 +98,7 @@
 -- upon failure, no further matching is performed.
 
 foldMatch
-  :: forall p v . (p -> v -> ReduceM (Match Term, v))
+  :: forall p v . IsProjP p => (p -> v -> ReduceM (Match Term, v))
   -> [p] -> [v] -> ReduceM (Match Term, [v])
 foldMatch match = loop where
   loop :: [p] -> [v] -> ReduceM (Match Term, [v])
@@ -108,7 +108,21 @@
       (p : ps, v : vs) -> do
         (r, v') <- match p v
         case r of
-          No         -> return (No        , v' : vs)
+          No | Just{} <- isProjP p -> return (No, v' : vs)
+          No         -> do
+            -- Issue 2964: Even when the first pattern doesn't match we should
+            -- continue to the next patterns (and potentially block on them)
+            -- because the splitting order in the case tree may not be
+            -- left-to-right.
+            (r', _vs') <- loop ps vs
+            -- Issue 2968: do not use vs' here, because it might
+            -- contain ill-typed terms due to eta-expansion at wrong
+            -- type.
+            let vs1 = v' : vs
+            case r' of
+              Yes s' us' -> return (No         , vs1)
+              No         -> return (No         , vs1)
+              DontKnow m -> return (DontKnow m , vs1)
           DontKnow m -> return (DontKnow m, v' : vs)
           Yes s us   -> do
             (r', vs') <- loop ps vs
@@ -154,8 +168,9 @@
   q         <- getOriginalProjection q
   return $ if p == q then (Yes YesSimplification empty, elim)
                      else (No,                          elim)
-matchCopattern ProjP{} Apply{}   = __IMPOSSIBLE__
-matchCopattern _       Proj{}    = __IMPOSSIBLE__
+-- The following two cases are not impossible, see #2964
+matchCopattern ProjP{} elim@Apply{}   = return (No , elim)
+matchCopattern _       elim@Proj{}    = return (No , elim)
 matchCopattern p       (Apply v) = mapSnd Apply <$> matchPattern p v
 
 matchPatterns :: [NamedArg DeBruijnPattern]
@@ -178,14 +193,13 @@
              -> ReduceM (Match Term, Arg Term)
 matchPattern p u = case (p, u) of
   (ProjP{}, _            ) -> __IMPOSSIBLE__
-  (VarP x , arg          ) -> return (Yes NoSimplification entry, arg)
+  (VarP _ x , arg          ) -> return (Yes NoSimplification entry, arg)
     where entry = singleton (dbPatVarIndex x, arg)
-  (DotP _ , arg@(Arg _ v)) -> return (Yes NoSimplification empty, arg)
-  (AbsurdP _ , arg@(Arg _ v)) -> return (Yes NoSimplification empty, arg)
+  (DotP _ _ , arg@(Arg _ v)) -> return (Yes NoSimplification empty, arg)
   (LitP l , arg@(Arg _ v)) -> do
     w <- reduceB' v
     let arg' = arg $> ignoreBlocking w
-    case ignoreSharing <$> w of
+    case w of
       NotBlocked _ (Lit l')
           | l == l'            -> return (Yes YesSimplification empty , arg')
           | otherwise          -> return (No                          , arg')
@@ -204,7 +218,7 @@
         -- This case is necessary if we want to use the clauses before
         -- record pattern translation (e.g., in type-checking definitions by copatterns).
         unless (size fs == size ps) __IMPOSSIBLE__
-        mapSnd (Arg info . Con c (fromConPatternInfo cpi)) <$> do
+        mapSnd (Arg info . Con c (fromConPatternInfo cpi) . map Apply) <$> do
           matchPatterns ps $ for fs $ \ (Arg ai f) -> Arg ai $ v `applyE` [Proj ProjSystem f]
     where
     isEtaRecordCon :: QName -> ReduceM (Maybe [Arg QName])
@@ -212,7 +226,7 @@
       (theDef <$> getConstInfo c) >>= \case
         Constructor{ conData = d } -> do
           (theDef <$> getConstInfo d) >>= \case
-            r@Record{ recFields = fs } | recEtaEquality r -> return $ Just fs
+            r@Record{ recFields = fs } | YesEta <- recEtaEquality r -> return $ Just fs
             _ -> return Nothing
         _ -> __IMPOSSIBLE__
 
@@ -226,7 +240,7 @@
         --    an axiom at this stage (if we are checking the
         --    projection functions for a record type).
 {-
-        w <- case ignoreSharing <$> w of
+        w <- case w of
                NotBlocked r (Def f es) ->   -- Andreas, 2014-06-12 TODO: r == ReallyNotBlocked sufficient?
                  unfoldDefinitionE True reduceB' (Def f []) f es
                    -- reduceB is used here because some constructors
@@ -241,11 +255,11 @@
                _ -> return w
         let v = ignoreBlocking w
             arg = Arg info v  -- the reduced argument
-        case ignoreSharing <$> w of
+        case w of
           NotBlocked _ (Con c' ci vs)
             | c == c'               -> do
-                (m, vs) <- yesSimplification <$> matchPatterns ps vs
-                return (m, Arg info $ Con c' ci vs)
+                (m, vs) <- yesSimplification <$> matchPatterns ps (fromMaybe __IMPOSSIBLE__ $ allApplyElims vs)
+                return (m, Arg info $ Con c' ci (map Apply vs))
             | otherwise             -> return (No                          , arg)
           NotBlocked _ (MetaV x vs) -> return (DontKnow $ Blocked x ()     , arg)
           Blocked x _               -> return (DontKnow $ Blocked x ()     , arg)
diff --git a/src/full/Agda/TypeChecking/Patterns/Match.hs-boot b/src/full/Agda/TypeChecking/Patterns/Match.hs-boot
--- a/src/full/Agda/TypeChecking/Patterns/Match.hs-boot
+++ b/src/full/Agda/TypeChecking/Patterns/Match.hs-boot
@@ -6,7 +6,6 @@
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad
-import {-# SOURCE #-} Agda.TypeChecking.Pretty (PrettyTCM)
 import Agda.TypeChecking.Substitute (DeBruijn)
 
 import Agda.Utils.Empty
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
@@ -2,7 +2,6 @@
 
 module Agda.TypeChecking.Polarity where
 
-import Control.Applicative
 import Control.Monad.State
 
 import Data.Maybe
@@ -199,7 +198,7 @@
   t <- reduce $ unEl t
   reportSDoc "tc.polarity.dep" 20 $ text "dependentPolarity t = " <+> prettyTCM t
   reportSDoc "tc.polarity.dep" 70 $ text "dependentPolarity t = " <+> (text . show) t
-  case ignoreSharing t of
+  case t of
     Pi dom b -> do
       ps <- underAbstraction dom b $ \ c -> dependentPolarity c qs ps
       let fallback = ifM (isJust <$> isSizeType (unDom dom)) (return p) (return q)
@@ -221,7 +220,7 @@
 relevantInIgnoringNonvariant i t []     = return $ i `relevantInIgnoringSortAnn` t
 relevantInIgnoringNonvariant i t (p:ps) = do
   t <- reduce $ unEl t
-  case ignoreSharing t of
+  case 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
@@ -302,7 +301,7 @@
     , text "  is data type " <+> prettyTCM d
     , text "  and has size index (successor(s) of) " <+> prettyTCM (var i)
     ]
-  case ignoreSharing $ unEl a of
+  case unEl a of
     Def d0 es -> do
       whenNothingM (sameDef d d0) __IMPOSSIBLE__
       s <- deepSizeView $ unArg ix
@@ -370,7 +369,6 @@
     Pi a b     -> (++) <$> (map neg <$> polarities i a) <*> polarities i b
     Sort s     -> return [] -- polarities i s -- return []
     MetaV _ ts -> map (const Invariant) <$> polarities i ts
-    Shared p   -> polarities i $ derefPtr p
     DontCare t -> polarities i t -- return []
 
 instance HasPolarity Level where
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
@@ -5,7 +5,11 @@
 -- | Check that a datatype is strictly positive.
 module Agda.TypeChecking.Positivity where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
 import Control.Applicative hiding (empty)
 import Control.DeepSeq
@@ -62,7 +66,7 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
-type Graph n e = Graph.Graph n n e
+type Graph n e = Graph.Graph n e
 
 -- | Check that the datatypes in the mutual block containing the given
 --   declarations are strictly positive.
@@ -222,17 +226,20 @@
     -- Set the polarity of the arguments to a couple of definitions
     setArgOccs :: Set QName -> [QName] -> Graph Node Occurrence -> TCM ()
     setArgOccs qset qs g = do
-      -- Compute a map from each name in q to the maximal argument index
-      let maxs = Map.fromListWith max
-           [ (q, i) | ArgNode q i <- Set.toList $ Graph.sourceNodes g, q `Set.member` qset ]
+      -- Andreas, 2018-05-11, issue #3049: we need to be pessimistic about
+      -- argument polarity beyond the formal arity of the function.
+      --
+      -- -- Compute a map from each name in q to the maximal argument index
+      -- let maxs = Map.fromListWith max
+      --      [ (q, i) | ArgNode q i <- Set.toList $ Graph.nodes g, q `Set.member` qset ]
       forM_ qs $ \ q -> inConcreteOrAbstractMode q $ \ def -> do
         reportSDoc "tc.pos.args" 10 $ text "checking args of" <+> prettyTCM q
         n <- getDefArity def
         -- If there is no outgoing edge @ArgNode q i@, all @n@ arguments are @Unused@.
         -- Otherwise, we obtain the occurrences from the Graph.
         let findOcc i = fromMaybe Unused $ Graph.lookup (ArgNode q i) (DefNode q) g
-            args = caseMaybe (Map.lookup q maxs) (replicate n Unused) $ \ m ->
-              map findOcc [0 .. max m (n - 1)]
+            args = -- caseMaybe (Map.lookup q maxs) (replicate n Unused) $ \ m ->
+              map findOcc [0 .. n-1]  -- [0 .. max m (n - 1)] -- triggers issue #3049
         reportSDoc "tc.pos.args" 10 $ sep
           [ text "args of" <+> prettyTCM q <+> text "="
           , nest 2 $ prettyList $ map prettyTCM args
@@ -243,16 +250,14 @@
         setArgOccurrences q $!! args
 
 getDefArity :: Definition -> TCM Int
-getDefArity def = case theDef def of
-  defn@Function{} -> do
-    let dropped = projectionArgs defn
-    -- TODO: instantiateFull followed by arity could perhaps be
-    -- optimised, presumably the instantiation can be performed
-    -- lazily.
-    subtract dropped . arity <$> instantiateFull (defType def)
-  Datatype{ dataPars = n } -> return n
-  Record{ recPars = n }    -> return n
-  _                        -> return 0
+getDefArity def = do
+  let dropped = case theDef def of
+        defn@Function{} -> projectionArgs defn
+        _ -> 0
+  -- TODO: instantiateFull followed by arity could perhaps be
+  -- optimised, presumably the instantiation can be performed
+  -- lazily.
+  subtract dropped . arity <$> instantiateFull (defType def)
 
 -- Operations on occurrences -------------------------------------------
 
@@ -288,7 +293,7 @@
                           [prettyTCM q]
         UnderInf     -> pwords "under" ++
                         [do -- this cannot fail if an 'UnderInf' has been generated
-                            Def inf _ <- ignoreSharing <$> primInf
+                            Def inf _ <- primInf
                             prettyTCM inf]
         VarArg       -> pwords "in an argument to a bound variable"
         MetaArg      -> pwords "in an argument to a metavariable"
@@ -505,7 +510,6 @@
     Lit{}        -> return emptyOB
     Sort{}       -> return emptyOB
     DontCare _   -> return emptyOB -- Andreas, 2011-09-09: do we need to check for negative occurrences in irrelevant positions?
-    Shared p     -> occurrences $ derefPtr p
 
 instance ComputeOccurrences Level where
   occurrences (Max as) = occurrences as
@@ -680,10 +684,10 @@
 -- expensive. (See 'computeEdges' for an example.)
 buildOccurrenceGraph :: Set QName -> TCM (Graph Node Edge)
 buildOccurrenceGraph qs =
-  Graph.fromListWith oplus . concat <$>
+  Graph.fromEdgesWith oplus . concat <$>
     mapM defGraph (Set.toList qs)
   where
-    defGraph :: QName -> TCM [Graph.Edge Node Node Edge]
+    defGraph :: QName -> TCM [Graph.Edge Node Edge]
     defGraph q = inConcreteOrAbstractMode q $ \ _def -> do
       occs <- computeOccurrences' q
 
@@ -750,7 +754,7 @@
   -> QName
      -- ^ The current name.
   -> OccurrencesBuilder
-  -> TCM [Graph.Edge Node Node Edge]
+  -> TCM [Graph.Edge Node Edge]
 computeEdges muts q ob =
   ($ []) <$> mkEdge __IMPOSSIBLE__ StrictPos (preprocess ob)
   where
diff --git a/src/full/Agda/TypeChecking/Positivity/Occurrence.hs b/src/full/Agda/TypeChecking/Positivity/Occurrence.hs
--- a/src/full/Agda/TypeChecking/Positivity/Occurrence.hs
+++ b/src/full/Agda/TypeChecking/Positivity/Occurrence.hs
@@ -12,7 +12,6 @@
   , productOfEdgesInBoundedWalk
   ) where
 
-import Control.Applicative
 import Control.DeepSeq
 import Control.Monad
 
@@ -24,7 +23,6 @@
 import qualified Data.Map.Strict as Map
 import Data.Sequence (Seq)
 import qualified Data.Sequence as Seq
-import Data.Typeable (Typeable)
 
 import Agda.Syntax.Common
 import Agda.Syntax.Abstract.Name
@@ -51,7 +49,7 @@
   | Known Range (Seq Where)
     -- ^ The elements of the sequence, from left to right, explain how
     -- to get to the occurrence.
-  deriving (Show, Eq, Ord, Typeable, Data)
+  deriving (Show, Eq, Ord, Data)
 
 -- | One part of the description of an occurrence.
 data Where
@@ -65,7 +63,7 @@
   | InClause Nat     -- ^ in the nth clause of a defined function
   | Matched          -- ^ matched against in a clause of a defined function
   | InDefOf QName    -- ^ in the definition of a constant
-  deriving (Show, Eq, Ord, Typeable, Data)
+  deriving (Show, Eq, Ord, Data)
 
 -- | Subterm occurrences for positivity checking.
 --   The constructors are listed in increasing information they provide:
@@ -78,7 +76,7 @@
   | StrictPos -- ^ Strictly positive occurrence.
   | GuardPos  -- ^ Guarded strictly positive occurrence (i.e., under ∞).  For checking recursive records.
   | Unused    --  ^ No occurrence.
-  deriving (Typeable, Data, Show, Eq, Ord, Enum, Bounded)
+  deriving (Data, Show, Eq, Ord, Enum, Bounded)
 
 -- * Pretty instances
 
@@ -187,11 +185,11 @@
     )
   ]
 
--- | @productOfEdgesInBoundedWalk occ g u v bound@ returns @'Just' e@
--- iff there is a walk @c@ (a list of edges) in @g@, from @u@ to @v@,
--- for which the product @'foldr1' 'otimes' ('map' occ c) '<=' bound@.
--- In this case the returned value @e@ is the product @'foldr1'
--- 'otimes' c@ for one such walk.
+-- | @productOfEdgesInBoundedWalk occ g u v bound@ returns a value
+-- distinct from 'Nothing' iff there is a walk @c@ (a list of edges)
+-- in @g@, from @u@ to @v@, for which the product @'foldr1' 'otimes'
+-- ('map' occ c) '<=' bound@. In this case the returned value is
+-- @'Just' ('foldr1' 'otimes' c)@ for one such walk @c@.
 --
 -- Preconditions: @u@ and @v@ must belong to @g@, and @bound@ must
 -- belong to the domain of @boundToEverySome@.
@@ -201,12 +199,15 @@
 
 productOfEdgesInBoundedWalk ::
   (SemiRing e, Ord n) =>
-  (e -> Occurrence) -> Graph n n e -> n -> n -> Occurrence -> Maybe e
+  (e -> Occurrence) -> Graph n e -> n -> n -> Occurrence -> Maybe e
 productOfEdgesInBoundedWalk occ g u v bound =
   case Map.lookup bound boundToEverySome of
     Nothing  -> __IMPOSSIBLE__
     Just ess ->
-      case msum [ Graph.walkSatisfying (every . occ) (some . occ) g u v
+      case msum [ Graph.walkSatisfying
+                    (every . occ . Graph.label)
+                    (some . occ . Graph.label)
+                    g u v
                 | (every, some) <- ess
                 ] of
         Just es@(_ : _) -> Just (foldr1 otimes (map Graph.label es))
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
@@ -1,20 +1,23 @@
 {-# LANGUAGE CPP                  #-}
 {-# LANGUAGE UndecidableInstances #-}
 
--- To define <>, we will probably need to add:
---import Prelude hiding ((<>))
--- but using that now gives warnings and doesn't silence -Wsemigroup
-#if __GLASGOW_HASKELL__ >= 800
-{-# OPTIONS_GHC -Wno-semigroup    #-}
-#endif
-
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE OverlappingInstances #-}
+-- To define <>, we need to add with GHC >= 8.4
+--
+--   import Prelude hiding ((<>))
+--
+-- but using that gives warnings and doesn't silence -Wsemigroup in
+-- some versions of GHC.
+#if __GLASGOW_HASKELL__ >= 800 && __GLASGOW_HASKELL__ < 804
+{-# OPTIONS_GHC -Wno-semigroup #-}
 #endif
 
 module Agda.TypeChecking.Pretty where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
 import Control.Applicative hiding (empty)
 import Control.Monad
@@ -27,6 +30,7 @@
 
 import Agda.Syntax.Position
 import Agda.Syntax.Common
+import Agda.Syntax.Fixity
 import Agda.Syntax.Internal
 import Agda.Syntax.Literal
 import Agda.Syntax.Translation.InternalToAbstract
@@ -41,6 +45,7 @@
 import Agda.Syntax.Concrete.Pretty (bracesAndSemicolons)
 import qualified Agda.Syntax.Concrete.Pretty as CP
 import qualified Agda.Syntax.Info as A
+import Agda.Syntax.Scope.Monad (withContextPrecedence)
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin (equalityUnview)
@@ -143,6 +148,10 @@
 class PrettyTCM a where
   prettyTCM :: a -> TCM Doc
 
+-- | Pretty print with a given context precedence
+prettyTCMCtx :: PrettyTCM a => Precedence -> a -> TCM Doc
+prettyTCMCtx p = withContextPrecedence p . prettyTCM
+
 instance PrettyTCM Bool        where prettyTCM = pretty
 instance PrettyTCM C.Name      where prettyTCM = pretty
 instance PrettyTCM C.QName     where prettyTCM = pretty
@@ -151,6 +160,7 @@
 instance PrettyTCM Nat         where prettyTCM = pretty
 instance PrettyTCM ProblemId   where prettyTCM = pretty
 instance PrettyTCM Range       where prettyTCM = pretty
+instance PrettyTCM CheckpointId where prettyTCM = pretty
 -- instance PrettyTCM Interval where prettyTCM = pretty
 -- instance PrettyTCM Position where prettyTCM = pretty
 
@@ -176,8 +186,10 @@
 instance PrettyTCM Level        where prettyTCM = prettyA <=< reify . Level
 instance PrettyTCM Permutation  where prettyTCM = text . show
 instance PrettyTCM Polarity     where prettyTCM = text . show
+instance PrettyTCM IsForced     where prettyTCM = text . show
 instance PrettyTCM R.Term       where prettyTCM = prettyA <=< toAbstractWithoutImplicit
 
+
 instance (Pretty a, PrettyTCM a, Subst a a) => PrettyTCM (Substitution' a) where
   prettyTCM IdS        = text "idS"
   prettyTCM (Wk m IdS) = text "wkS" <+> pretty m
@@ -187,9 +199,6 @@
       (rho1, rho2) = splitS 1 rho
       u            = lookupS rho2 0
 
-instance PrettyTCM ModuleParameters where
-  prettyTCM = prettyTCM . mpSubstitution
-
 instance PrettyTCM Clause where
   prettyTCM cl = do
     x <- qualify_ <$> freshName_ "<unnamedclause>"
@@ -221,11 +230,7 @@
   prettyTCM m = text "Map" <> braces (sep $ punctuate comma
     [ hang (prettyTCM k <+> text "=") 2 (prettyTCM v) | (k, v) <- Map.toList m ])
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} PrettyTCM ArgName where
-#else
-instance PrettyTCM ArgName where
-#endif
   prettyTCM = text . P.prettyShow
 
 -- instance (Reify a e, ToConcrete e c, P.Pretty c, PrettyTCM a) => PrettyTCM (Elim' a) where
@@ -249,7 +254,6 @@
   prettyTCM Irrelevant = text "."
   prettyTCM NonStrict  = text ".."
   prettyTCM Relevant   = empty
-  prettyTCM Forced{}   = empty
 
 instance PrettyTCM ProblemConstraint where
   prettyTCM (PConstr pids c)
@@ -258,48 +262,20 @@
 
 instance PrettyTCM Constraint where
     prettyTCM c = case c of
-        ValueCmp cmp ty s t ->
-            sep [ sep [ prettyTCM s
-                      , prettyTCM cmp <+> prettyTCM t
-                      ]
-                , nest 2 $ text ":" <+> prettyTCM ty
-                ]
-        ElimCmp cmps t v us vs ->
-          sep [ sep [ prettyTCM us
-                    , nest 2 $ text "~~" <+> prettyTCM vs
-                    ]
-              , text ":" <+> prettyTCM t ]
-        LevelCmp cmp a b ->
-            sep [ prettyTCM a
-                , prettyTCM cmp <+> prettyTCM b
-                ]
-        TypeCmp cmp a b ->
-            sep [ prettyTCM a
-                , prettyTCM cmp <+> prettyTCM b
-                ]
-        TelCmp a b cmp tela telb ->
-            sep [ prettyTCM tela
-                , prettyTCM cmp <+> prettyTCM telb
-                ]
-        SortCmp cmp s1 s2 ->
-            sep [ prettyTCM s1
-                , prettyTCM cmp <+> prettyTCM s2
-                ]
-        Guarded c pid ->
-            sep [ prettyTCM c
-                , nest 2 $ brackets $ text "blocked on problem" <+> prettyTCM pid
-                ]
+        ValueCmp cmp ty s t      -> prettyCmp (prettyTCM cmp) s t <?> (text ":" <+> prettyTCMCtx TopCtx ty)
+        ElimCmp cmps fs t v us vs -> prettyCmp (text "~~") us vs   <?> (text ":" <+> prettyTCMCtx TopCtx t)
+        LevelCmp cmp a b         -> prettyCmp (prettyTCM cmp) a b
+        TypeCmp cmp a b          -> prettyCmp (prettyTCM cmp) a b
+        TelCmp a b cmp tela telb -> prettyCmp (prettyTCM cmp) tela telb
+        SortCmp cmp s1 s2        -> prettyCmp (prettyTCM cmp) s1 s2
+        Guarded c pid            -> prettyTCM c <?> (brackets $ text "blocked on problem" <+> prettyTCM pid)
         UnBlock m   -> do
             -- BlockedConst t <- mvInstantiation <$> lookupMeta m
             mi <- mvInstantiation <$> lookupMeta m
             case mi of
-              BlockedConst t ->
-                sep [ pretty m <+> text ":="
-                    , nest 2 $ prettyTCM t
-                    ]
+              BlockedConst t -> prettyCmp (text ":=") m t
               PostponedTypeCheckingProblem cl _ -> enterClosure cl $ \p ->
-                sep [ pretty m <+> text ":="
-                    , nest 2 $ prettyTCM p ]
+                prettyCmp (text ":=") m p
               Open{}  -> __IMPOSSIBLE__
               OpenIFS{}  -> __IMPOSSIBLE__
               InstV{} -> empty
@@ -316,8 +292,8 @@
               --   __IMPOSSIBLE__
         FindInScope m mb mcands -> do
             t <- getMetaType m
-            sep [ hang (text "Resolve instance argument" <+> blk) 2 $
-                  hang (pretty m <+> text ":") 2 $ prettyTCM t
+            sep [ text "Resolve instance argument" <+> blk
+                    <?> prettyCmp (text ":") m t
                 , cands
                 ]
           where
@@ -334,10 +310,22 @@
               where overlap c | candidateOverlappable c = text "overlap"
                               | otherwise               = empty
         IsEmpty r t ->
-            sep [ text "Is empty:", nest 2 $ prettyTCM t ]
+            text "Is empty:" <?> prettyTCMCtx TopCtx t
         CheckSizeLtSat t ->
-            sep [ text "Is not empty type of sizes:", nest 2 $ prettyTCM t ]
+            text "Is not empty type of sizes:" <?> prettyTCMCtx TopCtx t
+        CheckFunDef d i q cs -> do
+            t <- defType <$> getConstInfo q
+            prettyTCM q <+> text ":" <+> prettyTCM t
+        HasBiggerSort a -> text "Has bigger sort:" <+> prettyTCM a
+        HasPTSRule a b -> text "Has PTS rule:" <+> case b of
+          NoAbs _ b -> prettyTCM (a,b)
+          Abs x b   -> text "(" <> prettyTCM a <+> text "," <+> addContext x (prettyTCM b) <> text ")"
 
+      where
+        prettyCmp :: (PrettyTCM a, PrettyTCM b) => TCM Doc -> a -> b -> TCM Doc
+        prettyCmp cmp x y = prettyTCMCtx TopCtx x <?> (cmp <+> prettyTCMCtx TopCtx y)
+
+
 instance PrettyTCM TypeCheckingProblem where
   prettyTCM (CheckExpr e a) =
     sep [ prettyA e <+> text ":?", prettyTCM a ]
@@ -360,8 +348,7 @@
         ]
   prettyTCM (UnquoteTactic v _ _) = do
     e <- reify v
-    let noInfo = A.exprNoRange
-    prettyTCM (A.App noInfo (A.Unquote noInfo) (defaultNamedArg e))
+    prettyTCM (A.App A.defaultAppInfo_ (A.Unquote A.exprNoRange) (defaultNamedArg e))
 
 instance PrettyTCM a => PrettyTCM (WithHiding a) where
   prettyTCM (WithHiding h a) = CP.prettyHiding h id <$> prettyTCM a
@@ -387,25 +374,18 @@
 newtype PrettyContext = PrettyContext Context
 
 instance PrettyTCM PrettyContext where
-  prettyTCM (PrettyContext ctx) = prettyTCM $ telFromList' nameToArgName $ map ctxEntry $ reverse ctx
-
-instance PrettyTCM Context where
-  prettyTCM = prettyTCM . PrettyContext
-
-instance PrettyTCM CtxId where
-  prettyTCM (CtxId x) = prettyTCM x
+  prettyTCM (PrettyContext ctx) = prettyTCM $ telFromList' nameToArgName $ reverse ctx
 
 instance PrettyTCM DBPatVar where
   prettyTCM = prettyTCM . var . dbPatVarIndex
 
 instance PrettyTCM a => PrettyTCM (Pattern' a) where
-  prettyTCM (VarP x)      = prettyTCM x
-  prettyTCM (DotP t)      = text ".(" <> prettyTCM t <> text ")"
-  prettyTCM (AbsurdP _)   = text absurdPatternName
+  prettyTCM (VarP _ x)    = prettyTCM x
+  prettyTCM (DotP _ t)    = text ".(" <> prettyTCM t <> text ")"
   prettyTCM (ConP c i ps) = (if b then braces else parens) $ prTy $
         prettyTCM c <+> fsep (map (prettyTCM . namedArg) ps)
         where
-        b = maybe False (/= ConOCon) $ conPRecord i
+        b = maybe False (/= PatOCon) $ conPRecord i
         showRec :: TCM Doc
         showRec = sep
           [ text "record"
@@ -477,7 +457,7 @@
 instance PrettyTCM n => PrettyTCM (WithNode n Occurrence) where
   prettyTCM (WithNode n o) = prettyTCM o <+> prettyTCM n
 
-instance (PrettyTCM n, PrettyTCM (WithNode n e)) => PrettyTCM (Graph n n e) where
+instance (PrettyTCM n, PrettyTCM (WithNode n e)) => PrettyTCM (Graph n e) where
   prettyTCM g = vcat $ map pr $ Map.assocs $ Graph.graph g
     where
       pr (n, es) = sep
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
@@ -13,7 +13,6 @@
 module Agda.TypeChecking.Primitive where
 
 import Control.Monad
-import Control.Applicative
 import Control.Monad.Reader (asks)
 
 import Data.Char
@@ -22,8 +21,7 @@
 import Data.Maybe
 import Data.Traversable (traverse)
 import Data.Monoid (mempty)
-
-import Numeric.IEEE ( IEEE(identicalIEEE) )
+import Data.Word
 
 import Agda.Interaction.Options
 import qualified Agda.Interaction.Options.Lenses as Lens
@@ -57,6 +55,7 @@
 import Agda.Utils.Pretty (pretty, prettyShow)
 import Agda.Utils.Size
 import Agda.Utils.String ( Str(Str), unStr )
+import Agda.Utils.Float
 
 #include "undefined.h"
 import Agda.Utils.Impossible
@@ -104,6 +103,7 @@
 
 class    PrimTerm a       where primTerm :: a -> TCM Term
 instance PrimTerm Integer where primTerm _ = primInteger
+instance PrimTerm Word64  where primTerm _ = primWord64
 instance PrimTerm Bool    where primTerm _ = primBool
 instance PrimTerm Char    where primTerm _ = primChar
 instance PrimTerm Double  where primTerm _ = primFloat
@@ -131,6 +131,7 @@
   toTermR = (pure .) <$> toTerm
 
 instance ToTerm Nat     where toTerm = return $ Lit . LitNat noRange . toInteger
+instance ToTerm Word64  where toTerm = return $ Lit . LitWord64 noRange
 instance ToTerm Lvl     where toTerm = return $ Level . Max . (:[]) . ClosedLevel . unLvl
 instance ToTerm Double  where toTerm = return $ Lit . LitFloat noRange
 instance ToTerm Char    where toTerm = return $ Lit . LitChar noRange
@@ -182,7 +183,6 @@
           Relevant   -> rel
           Irrelevant -> irr
           NonStrict  -> rel
-          Forced{}   -> irr
       ]
 
 instance ToTerm Fixity' where
@@ -243,22 +243,22 @@
 
 instance FromTerm Integer where
   fromTerm = do
-    Con pos _    [] <- ignoreSharing <$> primIntegerPos
-    Con negsuc _ [] <- ignoreSharing <$> primIntegerNegSuc
+    Con pos _    [] <- primIntegerPos
+    Con negsuc _ [] <- primIntegerNegSuc
     toNat         <- fromTerm :: TCM (FromTermFunction Nat)
     return $ \ v -> do
       b <- reduceB' v
       let v'  = ignoreBlocking b
           arg = (<$ v')
-      case ignoreSharing $ unArg (ignoreBlocking b) of
-        Con c ci [u]
+      case unArg (ignoreBlocking b) of
+        Con c ci [Apply u]
           | c == pos    ->
             redBind (toNat u)
-              (\ u' -> notReduced $ arg $ Con c ci [ignoreReduced u']) $ \ n ->
+              (\ u' -> notReduced $ arg $ Con c ci [Apply $ ignoreReduced u']) $ \ n ->
             redReturn $ fromIntegral n
           | c == negsuc ->
             redBind (toNat u)
-              (\ u' -> notReduced $ arg $ Con c ci [ignoreReduced u']) $ \ n ->
+              (\ u' -> notReduced $ arg $ Con c ci [Apply $ ignoreReduced u']) $ \ n ->
             redReturn $ fromIntegral $ -n - 1
         _ -> return $ NoReduction (reduced b)
 
@@ -267,6 +267,11 @@
     LitNat _ n -> Just $ fromInteger n
     _          -> Nothing
 
+instance FromTerm Word64 where
+  fromTerm = fromLiteral $ \ case
+    LitWord64 _ n -> Just n
+    _             -> Nothing
+
 instance FromTerm Lvl where
   fromTerm = fromReducedTerm $ \l -> case l of
     Level (Max [ClosedLevel n]) -> Just $ Lvl n
@@ -306,7 +311,7 @@
                 | t =?= false -> Just False
                 | otherwise   -> Nothing
         where
-            a =?= b = ignoreSharing a === ignoreSharing b
+            a =?= b = a === b
             Def x [] === Def y []   = x == y
             Con x _ [] === Con y _ [] = x == y
             Var n [] === Var m []   = n == m
@@ -324,23 +329,22 @@
     where
       isCon (Lam _ b)  = isCon $ absBody b
       isCon (Con c _ _)= return c
-      isCon (Shared p) = isCon (derefPtr p)
       isCon v          = __IMPOSSIBLE__
 
       mkList nil cons toA fromA t = do
         b <- reduceB' t
         let t = ignoreBlocking b
         let arg = (<$ t)
-        case ignoreSharing $ unArg t of
+        case unArg t of
           Con c ci []
             | c == nil  -> return $ YesReduction NoSimplification []
-          Con c ci [x,xs]
-            | c == cons ->
+          Con c ci es
+            | c == cons, Just [x,xs] <- allApplyElims es ->
               redBind (toA x)
-                  (\x' -> notReduced $ arg $ Con c ci [ignoreReduced x',xs]) $ \y ->
+                  (\x' -> notReduced $ arg $ Con c ci (map Apply [ignoreReduced x',xs])) $ \y ->
               redBind
                   (mkList nil cons toA fromA xs)
-                  (fmap $ \xs' -> arg $ Con c ci [defaultArg $ fromA y, xs']) $ \ys ->
+                  (fmap $ \xs' -> arg $ Con c ci (map Apply [defaultArg $ fromA y, xs'])) $ \ys ->
               redReturn (y : ys)
           _ -> return $ NoReduction (reduced b)
 
@@ -359,7 +363,7 @@
 fromReducedTerm :: (Term -> Maybe a) -> TCM (FromTermFunction a)
 fromReducedTerm f = return $ \t -> do
     b <- reduceB' t
-    case f $ ignoreSharing $ unArg (ignoreBlocking b) of
+    case f $ unArg (ignoreBlocking b) of
         Just x  -> return $ YesReduction NoSimplification x
         Nothing -> return $ NoReduction (reduced b)
 
@@ -379,7 +383,7 @@
   eqTy <- defType <$> getConstInfo eq
   -- E.g. @eqTy = eqTel → Set a@ where @eqTel = {a : Level} {A : Set a} (x y : A)@.
   TelV eqTel eqCore <- telView eqTy
-  let eqSort = case ignoreSharing $ unEl eqCore of
+  let eqSort = case unEl eqCore of
         Sort s -> s
         _      -> __IMPOSSIBLE__
 
@@ -389,10 +393,10 @@
 
   -- BUILTIN REFL maybe a constructor with one (the principal) argument or only parameters.
   -- Get the ArgInfo of the principal argument of refl.
-  con@(Con rf ci []) <- ignoreSharing <$> primRefl
+  con@(Con rf ci []) <- primRefl
   minfo <- fmap (setOrigin Inserted) <$> getReflArgInfo rf
   let (refl :: Arg Term -> Term) = case minfo of
-        Just ai -> Con rf ci . (:[]) . setArgInfo ai
+        Just ai -> Con rf ci . (:[]) . Apply . setArgInfo ai
         Nothing -> const con
 
   -- The implementation of primTrustMe:
@@ -446,7 +450,7 @@
         u <- reduceB' u
         let isWHNF Blocked{} = return False
             isWHNF (NotBlocked _ u) =
-              case ignoreSharing $ unArg u of
+              case unArg u of
                 Lit{}      -> return True
                 Con{}      -> return True
                 Lam{}      -> return True
@@ -462,7 +466,6 @@
                     _          -> False
                 MetaV{}    -> return False
                 Var{}      -> return False
-                Shared{}   -> __IMPOSSIBLE__
 
         ifM (isWHNF u)
             (redReturn $ ret (unArg f) (ignoreBlocking u))
@@ -615,15 +618,15 @@
 garr f a b = do
   a' <- a
   b' <- b
-  return $ El (getSort a' `sLub` getSort b') $
+  return $ El (funSort (getSort a') (getSort b')) $
            Pi (Dom (mapRelevance f defaultArgInfo) a') (NoAbs "_" b')
 
 gpi :: ArgInfo -> String -> TCM Type -> TCM Type -> TCM Type
 gpi info name a b = do
   a <- a
-  b <- addContext' (name, Dom info a) b
+  b <- addContext (name, Dom info a) b
   let y = stringToArgName name
-  return $ El (getSort a `dLub` Abs y (getSort b))
+  return $ El (piSort (getSort a) (Abs y (getSort b)))
               (Pi (Dom info a) (Abs y b))
 
 hPi, nPi :: String -> TCM Type -> TCM Type -> TCM Type
@@ -657,9 +660,6 @@
 tset :: TCM Type
 tset = return $ sort (mkType 0)
 
-tSetOmega :: TCM Type
-tSetOmega = return $ sort Inf
-
 sSizeUniv :: Sort
 sSizeUniv = mkType 0
 -- Andreas, 2016-04-14 switching off SizeUniv, unfixing issue #1428
@@ -731,6 +731,10 @@
   , "primNatEquality"     |-> mkPrimFun2 ((==) :: Rel Nat)
   , "primNatLess"         |-> mkPrimFun2 ((<)  :: Rel Nat)
 
+  -- Machine words
+  , "primWord64ToNat"     |-> mkPrimFun1 (fromIntegral :: Word64 -> Nat)
+  , "primWord64FromNat"   |-> mkPrimFun1 (fromIntegral :: Nat -> Word64)
+
   -- Level functions
   , "primLevelZero"       |-> mkPrimLevelZero
   , "primLevelSuc"        |-> mkPrimLevelSuc
@@ -747,8 +751,9 @@
   -- because Haskell's Eq, which equates 0.0 and -0.0, allows to prove
   -- a contradiction (see Issue #2169).
   , "primFloatEquality"   |-> mkPrimFun2 (floatEq         :: Rel Double)
+  , "primFloatLess"       |-> mkPrimFun2 (floatLt         :: Rel Double)
   , "primFloatNumericalEquality" |-> mkPrimFun2 ((==)     :: Rel Double)
-  , "primFloatNumericalLess"     |-> mkPrimFun2 (floatLt  :: Rel Double)
+  , "primFloatNumericalLess"     |-> mkPrimFun2 ((<)      :: Rel Double)
   , "primFloatSqrt"       |-> mkPrimFun1 (sqrt            :: Double -> Double)
   , "primRound"           |-> mkPrimFun1 (round           :: Double -> Integer)
   , "primFloor"           |-> mkPrimFun1 (floor           :: Double -> Integer)
@@ -803,27 +808,6 @@
   where
     (|->) = (,)
 
-floatEq :: Double -> Double -> Bool
-floatEq x y = identicalIEEE x y || (isNaN x && isNaN y)
-
-floatLt :: Double -> Double -> Bool
-floatLt x y =
-  case compareFloat x y of
-    LT -> True
-    _  -> False
-  where
-    -- Also implemented in the GHC/UHC backends
-    compareFloat :: Double -> Double -> Ordering
-    compareFloat x y
-      | identicalIEEE x y          = EQ
-      | isNegInf x                 = LT
-      | isNegInf y                 = GT
-      | isNaN x && isNaN y         = EQ
-      | isNaN x                    = LT
-      | isNaN y                    = GT
-      | otherwise                  = compare x y
-    isNegInf z = z < 0 && isInfinite z
-
 lookupPrimitiveFunction :: String -> TCM PrimitiveImpl
 lookupPrimitiveFunction x =
   fromMaybe (typeError $ NoSuchPrimitiveFunction x)
@@ -842,7 +826,7 @@
   where
   getName v = do
     v <- reduce v
-    case unSpine $ ignoreSharing v of
+    case unSpine $ v of
       Def x _   -> return x
       Con x _ _ -> return $ conName x
       Lam _ b   -> getName $ unAbs b
diff --git a/src/full/Agda/TypeChecking/ProjectionLike.hs b/src/full/Agda/TypeChecking/ProjectionLike.hs
--- a/src/full/Agda/TypeChecking/ProjectionLike.hs
+++ b/src/full/Agda/TypeChecking/ProjectionLike.hs
@@ -116,7 +116,7 @@
 projView :: HasConstInfo m => Term -> m ProjectionView
 projView v = do
   let fallback = return $ NoProjection v
-  case ignoreSharing v of
+  case v of
     Def f es -> caseMaybeM (isProjection f) fallback $ \ isP -> do
       if projIndex isP <= 0 then fallback else do
         case es of
@@ -251,8 +251,9 @@
         ifM recursive (reportSLn "tc.proj.like" 30 $ "  recursive functions are not considered for projection-likeness") $ do
           {- else -}
           case lastMaybe (filter (checkOccurs cls . snd) ps0) of
-            Nothing -> reportSLn "tc.proj.like" 50 $
-              "  occurs check failed\n    clauses = " ++ show cls
+            Nothing -> reportSDoc "tc.proj.like" 50 $ nest 2 $ vcat
+              [ text "occurs check failed"
+              , nest 2 $ text "clauses =" <?> vcat (map pretty cls) ]
             Just (d, n) -> do
               -- Yes, we are projection-like!
               reportSDoc "tc.proj.like" 10 $ sep
@@ -293,7 +294,16 @@
       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"
+    Function{funMutual = Just (_:_)} ->
+      reportSLn "tc.proj.like" 30 $ "  mutual functions can't be projections"
+    Function{funMutual = Nothing} ->
+      reportSLn "tc.proj.like" 30 $ "  mutuality check has not run yet"
+    Axiom          -> reportSLn "tc.proj.like" 30 $ "  not a function, but Axiom"
+    AbstractDefn{} -> reportSLn "tc.proj.like" 30 $ "  not a function, but AbstractDefn"
+    Constructor{}  -> reportSLn "tc.proj.like" 30 $ "  not a function, but Constructor"
+    Datatype{}     -> reportSLn "tc.proj.like" 30 $ "  not a function, but Datatype"
+    Primitive{}    -> reportSLn "tc.proj.like" 30 $ "  not a function, but Primitive"
+    Record{}       -> reportSLn "tc.proj.like" 30 $ "  not a function, but Record"
   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).
@@ -339,7 +349,6 @@
         noMatch ProjP{}= False
         noMatch VarP{} = True
         noMatch DotP{} = True
-        noMatch AbsurdP{} = True
 
     -- Make sure non of the parameters occurs in the body of the function.
     checkBody m n b = not . getAny $ runFree badVar IgnoreNot b
@@ -358,9 +367,9 @@
     --
     candidateArgs :: [Term] -> Type -> [(Arg QName, Int)]
     candidateArgs vs t =
-      case ignoreSharing $ unEl t of
+      case unEl t of
         Pi a b
-          | Def d es <- ignoreSharing $ unEl $ unDom a,
+          | Def d es <- unEl $ unDom a,
             Just us  <- allApplyElims es,
             vs == map unArg us -> (d <$ argFromDom a, length vs) : candidateRec b
           | otherwise          -> candidateRec b
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
@@ -2,7 +2,6 @@
 
 module Agda.TypeChecking.Quote where
 
-import Control.Applicative
 import Control.Arrow ((&&&))
 import Control.Monad
 import Control.Monad.State (runState, get, put)
@@ -41,6 +40,7 @@
 import Agda.Utils.VarSet (VarSet)
 import qualified Agda.Utils.VarSet as Set
 import Agda.Utils.FileName
+import Agda.Utils.Size
 
 #include "undefined.h"
 
@@ -76,6 +76,7 @@
   meta            <- primAgdaTermMeta
   lit             <- primAgdaTermLit
   litNat          <- primAgdaLitNat
+  litWord64       <- primAgdaLitNat
   litFloat        <- primAgdaLitFloat
   litChar         <- primAgdaLitChar
   litString       <- primAgdaLitString
@@ -95,8 +96,8 @@
   sucLevel        <- primLevelSuc
   lub             <- primLevelMax
   lkit            <- requireLevels
-  Con z _ _       <- ignoreSharing <$> primZero
-  Con s _ _       <- ignoreSharing <$> primSuc
+  Con z _ _       <- primZero
+  Con s _ _       <- primSuc
   unsupported     <- primAgdaTermUnsupported
 
   agdaDefinitionFunDef          <- primAgdaDefinitionFunDef
@@ -124,13 +125,15 @@
       quoteRelevance Relevant   = pure relevant
       quoteRelevance Irrelevant = pure irrelevant
       quoteRelevance NonStrict  = pure relevant
-      quoteRelevance Forced{}   = pure relevant
 
+      -- TODO: quote Quanity
       quoteArgInfo :: ArgInfo -> ReduceM Term
-      quoteArgInfo (ArgInfo h r _) = arginfo !@ quoteHiding h @@ quoteRelevance r
+      quoteArgInfo (ArgInfo h m _ _) =
+        arginfo !@ quoteHiding h @@ quoteRelevance (getRelevance m)
 
       quoteLit :: Literal -> ReduceM Term
       quoteLit l@LitNat{}    = litNat    !@! Lit l
+      quoteLit l@LitWord64{} = litWord64 !@! Lit l
       quoteLit l@LitFloat{}  = litFloat  !@! Lit l
       quoteLit l@LitChar{}   = litChar   !@! Lit l
       quoteLit l@LitString{} = litString !@! Lit l
@@ -149,7 +152,9 @@
       quoteSort Prop     = pure unsupportedSort
       quoteSort Inf      = pure unsupportedSort
       quoteSort SizeUniv = pure unsupportedSort
-      quoteSort DLub{}   = pure unsupportedSort
+      quoteSort PiSort{} = pure unsupportedSort
+      quoteSort UnivSort{} = pure unsupportedSort
+      quoteSort (MetaS x es) = quoteTerm $ MetaV x es
 
       quoteType :: Type -> ReduceM Term
       quoteType (El _ t) = quoteTerm t
@@ -161,9 +166,10 @@
       quotePats ps = list $ map (quoteArg quotePat . fmap namedThing) ps
 
       quotePat :: DeBruijnPattern -> ReduceM Term
-      quotePat (AbsurdP x)       = pure absurdP
-      quotePat (VarP x)          = varP !@! quoteString (dbPatVarName x)
-      quotePat (DotP _)          = pure dotP
+      quotePat p
+       | patternOrigin p == Just PatOAbsurd = pure absurdP
+      quotePat (VarP o x)        = varP !@! quoteString (dbPatVarName x)
+      quotePat (DotP _ _)        = pure dotP
       quotePat (ConP c _ ps)     = conP !@ quoteQName (conName c) @@ quotePats ps
       quotePat (LitP l)          = litP !@ quoteLit l
       quotePat (ProjP _ x)       = projP !@ quoteQName x
@@ -211,31 +217,26 @@
             let
               conOrProjPars = defParameters defn
               ts = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
-              qx Function{ funExtLam = Just (ExtLamInfo h nh), funClauses = cs } = do
+              qx Function{ funExtLam = Just (ExtLamInfo m), funClauses = cs } = do
                     -- An extended lambda should not have any extra parameters!
                     unless (null conOrProjPars) __IMPOSSIBLE__
-                    -- Andreas, 2017-01-23 quoting Ulf
-                    -- "One would hope that @n@ includes the @h + nh@ parameters of the ext.lam."
-                    -- Let's see!
-                    -- unless (n >= h + nh) __IMPOSSIBLE__
-                    -- Actually, no, it does not!  ExtLam is not touched by module application.
-                    -- TODO: fixe me!  See #2404.
-                    extlam !@ list (map (quoteClause . (`apply` (take (h + nh) ts))) cs)
+                    n <- size <$> lookupSection m
+                    extlam !@ list (map (quoteClause . (`apply` (take n ts))) cs)
               qx Function{ funCompiled = Just Fail, funClauses = [cl] } =
                     extlam !@ list [quoteClause $ dropArgs (length (namedClausePats cl) - 1) cl]
               qx _ = def !@! quoteName x
             qx (theDef defn) @@ list (drop n $ conOrProjPars ++ map (quoteArg quoteTerm) ts)
-          Con x ci ts -> do
+          Con x ci es | Just ts <- allApplyElims es -> do
             cDef <- getConstInfo (conName x)
             n    <- getDefFreeVars (conName x)
             let args = list $ drop n $ defParameters cDef ++ map (quoteArg quoteTerm) ts
             con !@! quoteConName x @@ args
+          Con x ci es -> pure unsupported
           Pi t u     -> pi !@  quoteDom quoteType t
                             @@ quoteAbs quoteType u
           Level l    -> quoteTerm (unlevelWithKit lkit l)
           Lit l      -> lit !@ quoteLit l
           Sort s     -> sort !@ quoteSort s
-          Shared p   -> quoteTerm $ derefPtr p
           MetaV x es -> meta !@! quoteMeta currentFile x @@ quoteArgs vs
             where vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
           DontCare{} -> pure unsupported -- could be exposed at some point but we have to take care
diff --git a/src/full/Agda/TypeChecking/ReconstructParameters.hs b/src/full/Agda/TypeChecking/ReconstructParameters.hs
--- a/src/full/Agda/TypeChecking/ReconstructParameters.hs
+++ b/src/full/Agda/TypeChecking/ReconstructParameters.hs
@@ -7,7 +7,6 @@
 
 module Agda.TypeChecking.ReconstructParameters where
 
-import Control.Applicative
 import Data.Traversable
 
 import Agda.Syntax.Common
@@ -55,7 +54,7 @@
   return v
   where
     reconstruct a v = do
-      case ignoreSharing v of
+      case v of
         Con h ci vs -> do
           TelV tel a <- telView a
           let under = size tel  -- under-applied when under > 0
@@ -63,10 +62,10 @@
             sep [ text "reconstructing"
                 , nest 2 $ sep [ prettyTCM v <+> text ":"
                                , nest 2 $ prettyTCM a ] ]
-          case ignoreSharing (unEl a) of
+          case (unEl a) of
             Def d es -> do
               Just n <- defParameters <$> getConstInfo d
-              let Just ps = applySubst (strengthenS __IMPOSSIBLE__ under) . take n <$> allApplyElims es
+              let ps = applySubst (strengthenS __IMPOSSIBLE__ under) . take n $ es
               reportSLn "tc.with.reconstruct" 50 $ show n ++ " parameters"
               -- TODO: the reconstructed parameters are not reconstructed recursively!
               return $ Con h ci (ps ++ vs)
@@ -77,7 +76,7 @@
 dropParameters = traverseTermM dropPars
   where
     dropPars v =
-      case ignoreSharing v of
+      case v of
         Con c ci vs -> do
           Constructor{ conData = d } <- theDef <$> getConstInfo (conName c)
           Just n <- defParameters <$> getConstInfo d
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
@@ -11,7 +11,6 @@
   , recordPatternToProjections
   ) where
 
-import Control.Applicative
 import Control.Arrow (first, second)
 import Control.Monad.Fix
 import Control.Monad.Reader
@@ -20,11 +19,13 @@
 import qualified Data.List as List
 import Data.Maybe
 import qualified Data.Map as Map
-import qualified Data.Traversable as Trav
+import qualified Data.Traversable
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal as I
 import Agda.Syntax.Internal.Pattern as I
+import Agda.Syntax.Literal
+
 import Agda.TypeChecking.CompiledClause
 import Agda.TypeChecking.Coverage.SplitTree
 import Agda.TypeChecking.EtaContract
@@ -36,6 +37,8 @@
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Telescope
 
+import Agda.Interaction.Options
+
 import Agda.Utils.Either
 import Agda.Utils.Functor
 import Agda.Utils.List
@@ -65,12 +68,16 @@
     VarP{}       -> return [ \ x -> x ]
     LitP{}       -> typeError $ ShouldBeRecordPattern p
     DotP{}       -> typeError $ ShouldBeRecordPattern p
-    AbsurdP{}    -> typeError $ ShouldBeRecordPattern p
     ConP c ci ps -> do
       whenNothing (conPRecord ci) $
         typeError $ ShouldBeRecordPattern p
-      t <- reduce $ fromMaybe __IMPOSSIBLE__ $ conPType ci
-      fields <- getRecordTypeFields (unArg t)
+      let t = unArg $ fromMaybe __IMPOSSIBLE__ $ conPType ci
+      reportSDoc "tc.rec" 45 $ vcat
+        [ text "recordPatternToProjections: "
+        , nest 2 $ text "constructor pattern " <+> prettyTCM p <+> text " has type " <+> prettyTCM t
+        ]
+      reportSLn "tc.rec" 70 $ "  type raw: " ++ show t
+      fields <- getRecordTypeFields t
       concat <$> zipWithM comb (map proj fields) (map namedArg ps)
     ProjP{}      -> __IMPOSSIBLE__ -- copattern cannot appear here
   where
@@ -114,11 +121,13 @@
       (mid , last) = splitAt n rest
   in  (init, mid, last)
 
-getEtaAndArity :: QName -> TCM (Bool, Nat)
-getEtaAndArity c =
+getEtaAndArity :: SplitTag -> TCM (Bool, Nat)
+getEtaAndArity (SplitCon c) =
   for (getConstructorInfo c) $ \case
     DataCon n        -> (False, n)
     RecordCon eta fs -> (eta == YesEta, size fs)
+getEtaAndArity (SplitLit l) = return (False, 0)
+getEtaAndArity SplitCatchall = return (False, 1)
 
 translateCompiledClauses :: CompiledClauses -> TCM CompiledClauses
 translateCompiledClauses cc = do
@@ -126,90 +135,58 @@
     [ text "translate record patterns in compiled clauses"
     , nest 2 $ return $ pretty cc
     ]
-  cc <- snd <$> loop cc
+  cc <- loop cc
   reportSDoc "tc.cc.record" 20 $ vcat
     [ text "translated compiled clauses (no eta record patterns):"
     , nest 2 $ return $ pretty cc
     ]
+  cc <- recordExpressionsToCopatterns cc
+  reportSDoc "tc.cc.record" 20 $ vcat
+    [ text "translated compiled clauses (record expressions to copatterns):"
+    , nest 2 $ return $ pretty cc
+    ]
   return cc
   where
 
-    loop :: CompiledClauses -> TCM ([Bool], CompiledClauses)
+    loop :: CompiledClauses -> TCM (CompiledClauses)
     loop cc = case cc of
-      Fail      -> return (repeat True, cc)
-      Done xs t -> return (map (const True) xs, cc)
+      Fail      -> return cc
+      Done{}    -> return cc
       Case i cs -> loops i cs
 
     loops :: Arg Int              -- ^ split variable
           -> Case CompiledClauses -- ^ original split tree
-          -> TCM ([Bool], CompiledClauses)
-    loops i cs@Branches{ projPatterns   = cop
+          -> TCM CompiledClauses
+    loops i cs@Branches{ projPatterns   = comatch
                        , conBranches    = conMap
+                       , etaBranch      = eta
                        , litBranches    = litMap
-                       , catchAllBranch = catchAll } = do
-
-      -- recurse on and compute variable status of catch-all clause
-      (xssa, catchAll) <- unzipMaybe <$> Trav.mapM loop catchAll
-      let xsa = fromMaybe (repeat True) xssa
-
-      -- recurse on compute variable status of literal clauses
-      (xssl, litMap)   <- Map.unzip <$> Trav.mapM loop litMap
-      let xsl = conjColumns (xsa : insertColumn (unArg 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 <- do
-            isProj <- isProjection c
-            case isProj of
-              Nothing -> do
-                i <- getConstructorInfo c
-                case i of
-                  DataCon n           -> return $ Left n
-                  RecordCon NoEta fs  -> return $ Left (size fs)
-                  RecordCon YesEta fs -> return $ Right fs
-              Just{}  -> return $ Left 0
-          let (isRC, n)   = either (False,) ((True,) . size) dataOrRecCon
-              (xs0, rest) = splitAt (unArg i) xs
-              (xs1, xs2 ) = splitAt n rest
-              -- if all dropped variables (xs1) 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 etaContract [replaceByProjections i (map unArg fs) cc]
-                      else return []
-
-          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
-                  { projPatterns = cop
-                  , conBranches = conMap
-                  , litBranches = litMap
-                  , catchAllBranch = catchAll })
-
-        -- case: translated away one record pattern
-        [cc] -> do
-                -- Andreas, 2013-03-22
-                -- Due to catch-all-expansion this is actually possible:
-                -- -- we cannot have a catch-all if we had a record pattern
-                -- whenJust catchAll __IMPOSSIBLE__
-                -- We just drop the catch-all clause.  This is safe because
-                -- for record patterns we have expanded all the catch-alls.
-                return (xs, cc) -- mergeCatchAll cc catchAll)
+                       , catchAllBranch = catchAll
+                       , lazyMatch      = lazy } = do
 
-        -- case: more than one record patterns (impossible)
-        _    -> __IMPOSSIBLE__
+      catchAll <- traverse loop catchAll
+      litMap   <- traverse loop litMap
+      (conMap, eta) <- do
+        let noEtaCase = (, Nothing) <$> (traverse . traverse) loop conMap
+            yesEtaCase ch b = (Map.empty,) . Just . (ch,) <$> traverse loop b
+        case Map.toList conMap of
+              -- This is already an eta match. Still need to recurse though.
+              -- This can happen (#2981) when we
+              -- 'revisitRecordPatternTranslation' in Rules.Decl, due to
+              -- inferred eta.
+          _ | Just (ch, b) <- eta -> yesEtaCase ch b
+          [(c, b)] | not comatch -> -- possible eta-match
+            getConstructorInfo c >>= \ case
+              RecordCon YesEta fs ->
+                let ch = ConHead c Inductive $ map unArg fs in
+                yesEtaCase ch b
+              _ -> noEtaCase
+          _ -> noEtaCase
+      return $ Case i cs{ conBranches    = conMap
+                        , etaBranch      = eta
+                        , litBranches    = litMap
+                        , catchAllBranch = catchAll
+                        }
 
 {- UNUSED
 instance Monoid CompiledClauses where
@@ -227,6 +204,31 @@
 -}
 -}
 
+-- | Transform definitions returning record expressions to use copatterns
+--   instead. This prevents terms from blowing up when reduced.
+recordExpressionsToCopatterns :: CompiledClauses -> TCM CompiledClauses
+recordExpressionsToCopatterns cc =
+  case cc of
+    Case i bs -> Case i <$> traverse recordExpressionsToCopatterns bs
+    Fail      -> return cc
+    Done xs (Con c i es) | i == ConORec -> do  -- don't translate if using the record constructor
+      Constructor{conData = d, conArity = ar} <- theDef <$> getConstInfo (conName c)
+      ddef <- theDef <$> getConstInfo d
+      irrProj <- optIrrelevantProjections <$> pragmaOptions
+      getConstructorInfo (conName c) >>= \ case
+        RecordCon YesEta fs
+          | ar <- length fs, ar > 0,                   -- only for eta-records with at least one field
+            length es == ar,                           -- where the constructor application is saturated
+            irrProj || not (any isIrrelevant fs) -> do -- and irrelevant projections (if any) are allowed
+              let body (Apply v) = WithArity 0 $ Done xs (unArg v)
+                  body _ = __IMPOSSIBLE__
+                  bs     = Branches True (Map.fromList $ zip (map unArg fs) (map body es))
+                                    Nothing Map.empty Nothing False
+              -- translate new cases recursively (there might be nested record expressions)
+              Case (defaultArg $ length xs) <$> traverse recordExpressionsToCopatterns bs
+        _ -> return cc
+    Done{} -> return cc
+
 -- | @replaceByProjections i projs cc@ replaces variables @i..i+n-1@
 --   (counted from left) by projections @projs_1 i .. projs_n i@.
 --
@@ -268,15 +270,13 @@
         Fail -> Fail
 
       loops :: Int -> Case CompiledClauses -> Case CompiledClauses
-      loops i Branches{ projPatterns   = cop
-                      , conBranches    = conMap
-                      , litBranches    = litMap
-                      , catchAllBranch = catchAll } =
-        Branches{ projPatterns   = cop
-                , conBranches    = fmap (\ (WithArity n c) -> WithArity n $ loop (i + n - 1) c) conMap
-                , litBranches    = fmap (loop (i - 1)) litMap
-                , catchAllBranch = fmap (loop i) catchAll
-                }
+      loops i bs@Branches{ conBranches    = conMap
+                         , litBranches    = litMap
+                         , catchAllBranch = catchAll } =
+        bs{ 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
@@ -300,7 +300,8 @@
 
 -- | Split tree annotation.
 data RecordSplitNode = RecordSplitNode
-  { splitCon           :: QName  -- ^ Constructor name for this branch.
+  { splitTag           :: SplitTag
+                                 -- ^ Constructor name/literal for this branch.
   , splitArity         :: Int    -- ^ Arity of the constructor.
   , splitRecordPattern :: Bool   -- ^ Should we translate this split away?
   }
@@ -699,7 +700,7 @@
 translatePattern :: Pattern -> RecPatM (Pattern, [Term], Changes)
 translatePattern p@(ConP c ci ps)
   -- Andreas, 2015-05-28 only translate implicit record patterns
-  | Just ConOSystem <- conPRecord ci = do
+  | Just PatOSystem <- conPRecord ci = do
       r <- recordTree p
       case r of
         Left  r -> r
@@ -709,7 +710,6 @@
       return (ConP c ci ps, s, cs)
 translatePattern p@VarP{} = removeTree (Leaf p)
 translatePattern p@DotP{} = removeTree (Leaf p)
-translatePattern p@AbsurdP{} = removeTree (Leaf p)
 translatePattern p@LitP{} = return (p, [], [])
 translatePattern p@ProjP{}= return (p, [], [])
 
@@ -736,7 +736,7 @@
   Pattern ->
   RecPatM (Either (RecPatM (Pattern, [Term], Changes)) RecordTree)
 -- Andreas, 2015-05-28 only translate implicit record patterns
-recordTree (ConP c ci ps) | Just ConOSystem <- conPRecord ci = do
+recordTree p@(ConP c ci ps) | Just PatOSystem <- conPRecord ci = do
   let t = fromMaybe __IMPOSSIBLE__ $ conPType ci
   rs <- mapM (recordTree . namedArg) ps
   case allRight rs of
@@ -747,14 +747,19 @@
                 concat ss, concat cs)
     Just ts -> liftTCM $ do
       t <- reduce t
-      fields <- getRecordTypeFields (unArg t)
+      reportSDoc "tc.rec" 45 $ vcat
+        [ text "recordTree: "
+        , nest 2 $ text "constructor pattern " <+> prettyTCM p <+> text " has type " <+> prettyTCM t
+        ]
+      -- Andreas, 2018-03-03, see #2989:
+      -- The content of an @Arg@ might not be reduced (if @Arg@ is @Irrelevant@).
+      fields <- getRecordTypeFields =<< reduce (unArg t)
 --      let proj p = \x -> Def (unArg p) [defaultArg x]
       let proj p = (`applyE` [Proj ProjSystem $ unArg p])
       return $ Right $ RecCon t $ zip (map proj fields) ts
 recordTree p@(ConP _ ci _) = return $ Left $ translatePattern p
 recordTree p@VarP{} = return (Right (Leaf p))
 recordTree p@DotP{} = return (Right (Leaf p))
-recordTree p@AbsurdP{} = return (Right (Leaf p))
 recordTree p@LitP{} = return $ Left $ translatePattern p
 recordTree p@ProjP{}= return $ Left $ translatePattern p
 
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
@@ -3,8 +3,12 @@
 
 module Agda.TypeChecking.Records where
 
--- import Control.Applicative
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
 import Control.Monad
+import Control.Monad.Trans.Maybe
 
 import Data.Function
 import qualified Data.List as List
@@ -42,6 +46,9 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
+mkCon :: ConHead -> ConInfo -> Args -> Term
+mkCon h info args = Con h info (map Apply args)
+
 -- | Order the fields of a record construction.
 --   Use the second argument for missing fields.
 orderFields :: QName -> a -> [C.Name] -> [(C.Name, a)] -> TCM [a]
@@ -147,9 +154,12 @@
 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
+getRecordTypeFields
+  :: Type  -- ^ Record type.  Need not be reduced.
+  -> TCM [Arg QName]
+getRecordTypeFields t = do
+  t <- reduce t  -- Andreas, 2018-03-03, fix for #2989.
+  case unEl t of
     Def r _ -> do
       rDef <- theDef <$> getConstInfo r
       case rDef of
@@ -183,10 +193,10 @@
 --   Succeeds only if type is not blocked by a meta var.
 --   If yes, return its name, parameters, and definition.
 --   If no, return the reduced type (unless it is blocked).
-tryRecordType :: Type -> TCM (Either (Maybe Type) (QName, Args, Defn))
-tryRecordType t = ifBlockedType t (\ _ _ -> return $ Left Nothing) $ \ t -> do
-  let no = return $ Left $ Just t
-  case ignoreSharing $ unEl t of
+tryRecordType :: Type -> TCM (Either (Blocked Type) (QName, Args, Defn))
+tryRecordType t = ifBlockedType t (\ m a -> return $ Left $ Blocked m a) $ \ nb t -> do
+  let no = return $ Left $ NotBlocked nb t
+  case unEl t of
     Def r es -> do
       let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
       caseMaybeM (isRecord r) no $ \ def -> return $ Right (r,vs,def)
@@ -238,7 +248,7 @@
                 | otherwise = n - 1
       reportSLn "tc.deftype" 20 $ "projIndex    = " ++ show n
       -- we get the parameters from type @t@
-      case ignoreSharing $ unEl t of
+      case unEl t of
         Def d es -> do
           -- Andreas, 2013-10-22
           -- we need to check this @Def@ is fully reduced.
@@ -320,7 +330,7 @@
 {-# SPECIALIZE isEtaRecord :: QName -> TCM Bool #-}
 {-# SPECIALIZE isEtaRecord :: QName -> ReduceM Bool #-}
 isEtaRecord :: HasConstInfo m => QName -> m Bool
-isEtaRecord r = maybe False recEtaEquality <$> isRecord r
+isEtaRecord r = maybe False ((YesEta ==) . recEtaEquality) <$> isRecord r
 
 isEtaCon :: HasConstInfo m => QName -> m Bool
 isEtaCon c = getConstInfo' c >>= \case
@@ -332,11 +342,11 @@
 
 -- | 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 /= Just CoInductive || not (recRecursive d)) <$> isRecord r
+isInductiveRecord r = maybe False (\ d -> recInduction d /= Just CoInductive) <$> 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 a = case ignoreSharing $ unEl a of
+isEtaRecordType a = case unEl a of
   Def d es -> do
     let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
     ifM (isEtaRecord d) (return $ Just (d, vs)) (return Nothing)
@@ -367,7 +377,7 @@
 --   Projections do not preserve guardedness.
 unguardedRecord :: QName -> TCM ()
 unguardedRecord q = modifySignature $ updateDefinition q $ updateTheDef $ \case
-  r@Record{} -> r { recEtaEquality' = setEtaEquality (recEtaEquality' r) False }
+  r@Record{} -> r { recEtaEquality' = setEtaEquality (recEtaEquality' r) NoEta }
   _ -> __IMPOSSIBLE__
 
 -- | Turn on eta for inductive guarded recursive records.
@@ -379,7 +389,7 @@
     r@Record{ recInduction = ind, recEtaEquality' = eta } ->
       r { recEtaEquality' = eta' }
       where
-      eta' | ok, eta == Inferred False, ind /= Just CoInductive = Inferred True
+      eta' | ok, eta == Inferred NoEta, ind /= Just CoInductive = Inferred YesEta
            | otherwise = eta
     _ -> __IMPOSSIBLE__
 
@@ -388,9 +398,9 @@
 nonRecursiveRecord q = whenM etaEnabled $ do
   -- Do nothing if eta is disabled by option.
   modifySignature $ updateDefinition q $ updateTheDef $ \case
-    r@Record{ recInduction = ind, recEtaEquality' = Inferred False }
+    r@Record{ recInduction = ind, recEtaEquality' = Inferred NoEta }
       | ind /= Just CoInductive ->
-      r { recEtaEquality' = Inferred True }
+      r { recEtaEquality' = Inferred YesEta }
     r@Record{} -> r
     _          -> __IMPOSSIBLE__
 
@@ -438,7 +448,7 @@
           text " is not a record type"
         return Nothing
   caseMaybeM (isRecordType a) failure $ \ (r, pars, def) -> do
-    if not (recEtaEquality def) then return Nothing else Just <$> do
+    if recEtaEquality def == NoEta then return Nothing else Just <$> do
       -- Get the record fields @Γ₁ ⊢ tel@ (@tel = Γ'@).
       -- TODO: compose argInfo ai with tel.
       let tel = recTel def `apply` pars
@@ -446,7 +456,7 @@
           fs  = recFields def
       -- Construct the record pattern @Γ₁, Γ' ⊢ u := c ys@.
           ys  = zipWith (\ f i -> f $> var i) fs $ downFrom m
-          u   = Con (recConHead def) ConOSystem ys
+          u   = mkCon (recConHead def) ConOSystem ys
       -- @Γ₁, Γ' ⊢ τ₀ : Γ₁, x:_@
           tau0 = consS u $ raiseS m
       -- @Γ₁, Γ', Γ₂ ⊢ τ₀ : Γ₁, x:_, Γ₂@
@@ -498,7 +508,7 @@
 curryAt t n = do
   -- first, strip the leading n domains (which remain unchanged)
   TelV gamma core <- telViewUpTo n t
-  case ignoreSharing $ unEl core of
+  case unEl core of
     -- There should be at least one domain left
     Pi (Dom ai a) b -> do
       -- Eta-expand @dom@ along @qs@ into a telescope @tel@, computing a substitution.
@@ -506,13 +516,13 @@
       -- This might trigger another call to @etaExpandProjectedVar@ later.
       -- A more efficient version does all the eta-expansions at once here.
       (r, pars, def) <- fromMaybe __IMPOSSIBLE__ <$> isRecordType a
-      unless (recEtaEquality def) __IMPOSSIBLE__
+      when (recEtaEquality def == NoEta) __IMPOSSIBLE__
       -- TODO: compose argInfo ai with tel.
       let tel = recTel def `apply` pars
           m   = size tel
           fs  = recFields def
           ys  = zipWith (\ f i -> f $> var i) fs $ downFrom m
-          u   = Con (recConHead def) ConOSystem ys
+          u   = mkCon (recConHead def) ConOSystem ys
           b'  = raise m b `absApp` u
           t'  = gamma `telePi` (tel `telePi` b')
           gammai = map domInfo $ telToList gamma
@@ -562,13 +572,14 @@
             , recFields      = xs
             , recTel         = tel
             } = def
-      eta = recEtaEquality def
       tel' = apply tel pars
-  unless (eta || forceEta) __IMPOSSIBLE__ -- make sure we do not expand non-eta records (unless forced to)
-  case ignoreSharing u of
+  -- Make sure we do not expand non-eta records (unless forced to):
+  unless (recEtaEquality def == YesEta || forceEta) __IMPOSSIBLE__
+  case u of
 
     -- Already expanded.
-    Con con_ ci args -> do
+    Con con_ ci es -> do
+      let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
       when (con /= con_) $ do
         reportSDoc "impossible" 10 $ vcat
           [ text "etaExpandRecord_: the following two constructors should be identical"
@@ -596,16 +607,19 @@
 etaExpandAtRecordType t u = do
   (r, pars, def) <- fromMaybe __IMPOSSIBLE__ <$> isRecordType t
   (tel, con, ci, args) <- etaExpandRecord_ r pars def u
-  return (tel, Con con ci args)
+  return (tel, mkCon con ci args)
 
 -- | The fields should be eta contracted already.
 --
 --   We can eta contract if all fields @f = ...@ are irrelevant
 --   or all fields @f@ are the projection @f v@ of the same value @v@,
 --   but we need at least one relevant field to find the value @v@.
---
---   TODO: this can be moved out of TCM (but only if ConHead
---   stores also the Arg-decoration of the record fields.
+
+--   TODO: this can be moved out of TCM.
+--   Andreas, 2018-01-28: attempted just that, but Auto does not
+--   put the conFields there (it does not run in TCM).
+--   If we get rid of Auto, we can do this.  (Tests not involving Auto pass.)
+
 {-# SPECIALIZE etaContractRecord :: QName -> ConHead -> ConInfo -> Args -> TCM Term #-}
 {-# SPECIALIZE etaContractRecord :: QName -> ConHead -> ConInfo -> Args -> ReduceM Term #-}
 etaContractRecord :: HasConstInfo m => QName -> ConHead -> ConInfo -> Args -> m Term
@@ -623,7 +637,7 @@
           (_, Just (h, es)) | Proj _o f <- last es, unArg ax == f
                             -> Just $ Just $ h $ init es
           _                 -> Nothing
-      fallBack = return (Con c ci args)
+      fallBack = return (mkCon c ci args)
   case compare (length args) (length xs) of
     LT -> fallBack       -- Not fully applied
     GT -> __IMPOSSIBLE__ -- Too many arguments. Impossible.
@@ -655,7 +669,7 @@
 isSingletonRecord' regardIrrelevance r ps = do
   reportSLn "tc.meta.eta" 30 $ "Is " ++ prettyShow r ++ " a singleton record type?"
   def <- getRecordDef r
-  emap (Con (recConHead def) ConOSystem) <$> check (recTel def `apply` ps)
+  emap (mkCon (recConHead def) ConOSystem) <$> check (recTel def `apply` ps)
   where
   check :: Telescope -> TCM (Either MetaId (Maybe [Arg Term]))
   check tel = do
@@ -691,13 +705,80 @@
 isSingletonType' :: Bool -> Type -> TCM (Either MetaId (Maybe Term))
 isSingletonType' regardIrrelevance t = do
     TelV tel t <- telView t
-    ifBlockedType t (\ m _ -> return $ Left m) $ \ t -> do
+    ifBlockedType t (\ m _ -> return $ Left m) $ \ _ t -> do
       res <- isRecordType t
       case res of
-        Just (r, ps, def) | recEtaEquality def -> do
+        Just (r, ps, def) | YesEta <- recEtaEquality def -> do
           emap (abstract tel) <$> isSingletonRecord' regardIrrelevance r ps
         _ -> return $ Right Nothing
 
+-- | Checks whether the given term (of the given type) is beta-eta-equivalent
+--   to a variable. Returns just the de Bruijn-index of the variable if it is,
+--   or nothing otherwise.
+isEtaVar :: Term -> Type -> TCM (Maybe Int)
+isEtaVar u a = runMaybeT $ isEtaVarG u a Nothing []
+  where
+    -- Checks whether the term u (of type a) is beta-eta-equivalent to
+    -- `Var i es`, and returns i if it is. If the argument mi is `Just i'`,
+    -- then i and i' are also required to be equal (else Nothing is returned).
+    isEtaVarG :: Term -> Type -> Maybe Int -> [Elim' Int] -> MaybeT TCM Int
+    isEtaVarG u a mi es = do
+      (u, a) <- liftTCM $ reduce (u, a)
+      liftTCM $ reportSDoc "tc.lhs" 80 $ text "isEtaVarG" <+> nest 2 (vcat
+        [ text "u  = " <+> text (show u)
+        , text "a  = " <+> prettyTCM a
+        , text "mi = " <+> text (show mi)
+        , text "es = " <+> prettyList (map (text . show) es)
+        ])
+      case (u, unEl a) of
+        (Var i' es', _) -> do
+          guard $ mi == (i' <$ mi)
+          b <- liftTCM $ typeOfBV i'
+          areEtaVarElims (var i') b es' es
+          return i'
+        (_, Def d pars) -> do
+          guard =<< do liftTCM $ isEtaRecord d
+          fs <- liftTCM $ map unArg . recFields . theDef <$> getConstInfo d
+          is <- forM fs $ \f -> do
+            let o = ProjSystem
+            (_, _, fa) <- MaybeT $ projectTyped u a o f
+            isEtaVarG (u `applyE` [Proj o f]) fa mi (es ++ [Proj o f])
+          case (mi, is) of
+            (Just i, _)     -> return i
+            (Nothing, [])   -> mzero
+            (Nothing, i:is) -> guard (all (==i) is) >> return i
+        (_, Pi dom cod) -> addContext dom $ do
+          let u'  = raise 1 u `apply` [argFromDom dom $> var 0]
+              a'  = absBody cod
+              mi' = fmap (+1) mi
+              es' = (fmap . fmap) (+1) es ++ [Apply $ argFromDom dom $> 0]
+          (-1+) <$> isEtaVarG u' a' mi' es'
+        _ -> mzero
+
+    -- `areEtaVarElims u a es es'` checks whether the given elims es (as applied
+    -- to the term u of type a) are beta-eta-equal to either projections or
+    -- variables with de Bruijn indices given by es'.
+    areEtaVarElims :: Term -> Type -> Elims -> [Elim' Int] -> MaybeT TCM ()
+    areEtaVarElims u a []    []    = return ()
+    areEtaVarElims u a []    (_:_) = mzero
+    areEtaVarElims u a (_:_) []    = mzero
+    areEtaVarElims u a (Proj o f : es) (Proj _ f' : es') = do
+      guard $ f == f'
+      a       <- liftTCM $ reduce a
+      (_, _, fa) <- MaybeT $ projectTyped u a o f
+      areEtaVarElims (u `applyE` [Proj o f]) fa es es'
+    -- These two cases can occur only when we're looking at two different
+    -- variables (i.e. one of function type and the other of record type) so
+    -- it's definitely not the variable we're looking for (or someone is playing
+    -- Jedi mind tricks on us)
+    areEtaVarElims u a (Proj{}  : _ ) (Apply _ : _  ) = mzero
+    areEtaVarElims u a (Apply _ : _ ) (Proj{}  : _  ) = mzero
+    areEtaVarElims u a (Apply v : es) (Apply i : es') = do
+      ifNotPiType a (const mzero) $ \dom cod -> do
+      _ <- isEtaVarG (unArg v) (unDom dom) (Just $ unArg i) []
+      areEtaVarElims (u `apply` [fmap var i]) (cod `absApp` var (unArg i)) es es'
+
+
 -- | Auxiliary function.
 emap :: (a -> b) -> Either c (Maybe a) -> Either c (Maybe b)
 emap = mapRight . fmap
@@ -724,7 +805,6 @@
 instance NormaliseProjP (Pattern' x) where
   normaliseProjP p@VarP{}        = return p
   normaliseProjP p@DotP{}        = return p
-  normaliseProjP p@AbsurdP{}     = return p
   normaliseProjP (ConP c cpi ps) = ConP c cpi <$> normaliseProjP ps
   normaliseProjP p@LitP{}        = return p
   normaliseProjP (ProjP o d0)    = ProjP o <$> getOriginalProjection d0
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
@@ -6,9 +6,9 @@
 
 import Prelude hiding (mapM)
 import Control.Monad.Reader hiding (mapM)
-import Control.Applicative
 
 import qualified Data.List as List
+import Data.List ((\\))
 import Data.Maybe
 import Data.Map (Map)
 import Data.Traversable
@@ -42,6 +42,7 @@
 
 import Agda.Utils.Function
 import Agda.Utils.Functor
+import Agda.Utils.Lens
 import Agda.Utils.Monad
 import Agda.Utils.HashMap (HashMap)
 import Agda.Utils.Size
@@ -105,9 +106,7 @@
       BlockedConst _                   -> return t
       PostponedTypeCheckingProblem _ _ -> return t
   instantiate' (Level l) = levelTm <$> instantiate' l
-  instantiate' (Sort s) = sortTm <$> instantiate' s
-  instantiate' v@Shared{} =
-    updateSharedTerm instantiate' v
+  instantiate' (Sort s) = Sort <$> instantiate' s
   instantiate' t = return t
 
 instance Instantiate Level where
@@ -121,7 +120,7 @@
   instantiate' l = case l of
     MetaLevel m vs -> do
       v <- instantiate' (MetaV m vs)
-      case ignoreSharing v of
+      case v of
         MetaV m vs -> return $ MetaLevel m vs
         _          -> return $ UnreducedLevel v
     UnreducedLevel l -> UnreducedLevel <$> instantiate' l
@@ -143,8 +142,11 @@
 
 instance Instantiate Sort where
   instantiate' s = case s of
-    Type l -> levelSort <$> instantiate' l
-    _      -> return s
+    MetaS x es -> instantiate' (MetaV x es) >>= \case
+      Sort s'      -> return s'
+      MetaV x' es' -> return $ MetaS x' es'
+      _            -> __IMPOSSIBLE__
+    _ -> return s
 
 instance Instantiate Elim where
   instantiate' (Apply v) = Apply <$> instantiate' v
@@ -183,8 +185,8 @@
   instantiate' (ValueCmp cmp t u v) = do
     (t,u,v) <- instantiate' (t,u,v)
     return $ ValueCmp cmp t u v
-  instantiate' (ElimCmp cmp t v as bs) =
-    ElimCmp cmp <$> instantiate' t <*> instantiate' v <*> instantiate' as <*> instantiate' bs
+  instantiate' (ElimCmp cmp fs t v as bs) =
+    ElimCmp cmp fs <$> instantiate' t <*> instantiate' v <*> instantiate' as <*> instantiate' bs
   instantiate' (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> instantiate' (u,v)
   instantiate' (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> instantiate' (a,b)
   instantiate' (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp)  <$> instantiate' (tela,telb)
@@ -194,6 +196,9 @@
   instantiate' (FindInScope m b args) = FindInScope m b <$> mapM instantiate' args
   instantiate' (IsEmpty r t)        = IsEmpty r <$> instantiate' t
   instantiate' (CheckSizeLtSat t)   = CheckSizeLtSat <$> instantiate' t
+  instantiate' c@CheckFunDef{}      = return c
+  instantiate' (HasBiggerSort a)    = HasBiggerSort <$> instantiate' a
+  instantiate' (HasPTSRule a b)     = uncurry HasPTSRule <$> instantiate' (a,b)
 
 instance Instantiate e => Instantiate (Map k e) where
     instantiate' = traverse instantiate'
@@ -218,19 +223,25 @@
 
 -- | Case on whether a term is blocked on a meta (or is a meta).
 --   That means it can change its shape when the meta is instantiated.
-ifBlocked :: MonadTCM tcm =>  Term -> (MetaId -> Term -> tcm a) -> (Term -> tcm a) -> tcm a
+ifBlocked :: MonadTCM tcm =>  Term -> (MetaId -> Term -> tcm a) -> (NotBlocked -> Term -> tcm a) -> tcm a
 ifBlocked t blocked unblocked = do
   t <- liftTCM $ reduceB t
-  case ignoreSharing <$> t of
+  case t of
     Blocked m _              -> blocked m (ignoreBlocking t)
     NotBlocked _ (MetaV m _) -> blocked m (ignoreBlocking t)
-    NotBlocked{}             -> unblocked (ignoreBlocking t)
+    NotBlocked nb _          -> unblocked nb (ignoreBlocking t)
 
+isBlocked :: MonadTCM tcm => Term -> tcm (Maybe MetaId)
+isBlocked t = ifBlocked t (\m _ -> return $ Just m) (\_ _ -> return Nothing)
+
 -- | Case on whether a type is blocked on a meta (or is a meta).
-ifBlockedType :: MonadTCM tcm => Type -> (MetaId -> Type -> tcm a) -> (Type -> tcm a) -> tcm a
+ifBlockedType :: MonadTCM tcm => Type -> (MetaId -> Type -> tcm a) -> (NotBlocked -> Type -> tcm a) -> tcm a
 ifBlockedType (El s t) blocked unblocked =
-  ifBlocked t (\ m v -> blocked m $ El s v) (\ v -> unblocked $ El s v)
+  ifBlocked t (\ m v -> blocked m $ El s v) (\ nb v -> unblocked nb $ El s v)
 
+isBlockedType :: MonadTCM tcm => Type -> tcm (Maybe MetaId)
+isBlockedType t = ifBlockedType t (\m _ -> return $ Just m) (\_ _ -> return Nothing)
+
 class Reduce t where
     reduce'  :: t -> ReduceM t
     reduceB' :: t -> ReduceM (Blocked t)
@@ -249,15 +260,17 @@
         red s = do
           s <- instantiate' s
           case s of
-            DLub s1 s2 -> do
-              s <- dLub <$> reduce' s1 <*> reduce' s2
-              case s of
-                DLub{}  -> return s
-                _       -> reduce' s   -- TODO: not so nice
+            PiSort s1 s2 -> do
+              (s1,s2) <- reduce' (s1,s2)
+              maybe (return $ PiSort s1 s2) reduce' $ piSort' s1 s2
+            UnivSort s' -> do
+              s' <- reduce' s'
+              maybe (return $ UnivSort s') reduce' $ univSort' s'
             Prop       -> return s
-            Type s'    -> levelSort <$> reduce' s'
+            Type s'    -> Type <$> reduce' s'
             Inf        -> return Inf
             SizeUniv   -> return SizeUniv
+            MetaS x es -> return s
 
 instance Reduce Elim where
   reduce' (Apply v) = Apply <$> reduce' v
@@ -282,7 +295,7 @@
       fromTm v = do
         bv <- reduceB' v
         let v = ignoreBlocking bv
-        case ignoreSharing <$> bv of
+        case bv of
           NotBlocked r (MetaV m vs) -> return $ NotBlocked r $ MetaLevel m vs
           Blocked m _               -> return $ Blocked m    $ BlockedLevel m v
           NotBlocked r _            -> return $ NotBlocked r $ NeutralLevel r v
@@ -298,8 +311,9 @@
 
 instance Reduce t => Reduce (Arg t) where
     reduce' a = case getRelevance a of
-                 Irrelevant -> return a             -- Don't reduce' irr. args!?
-                 _          -> traverse reduce' a
+      Irrelevant -> return a             -- Don't reduce' irr. args!?
+                                         -- Andreas, 2018-03-03, caused #2989.
+      _          -> traverse reduce' a
 
     reduceB' t = traverse id <$> traverse reduceB' t
 
@@ -317,18 +331,28 @@
 instance Reduce Term where
   reduceB' = {-# SCC "reduce'<Term>" #-} maybeFastReduceTerm
 
+shouldTryFastReduce :: ReduceM Bool
+shouldTryFastReduce = do
+  allowed <- asks envAllowedReductions
+  let optionalReductions = [NonTerminatingReductions, UnconfirmedReductions]
+      requiredReductions = allReductions \\ optionalReductions
+  return $ (allowed \\ optionalReductions) == requiredReductions
+
 maybeFastReduceTerm :: Term -> ReduceM (Blocked Term)
 maybeFastReduceTerm v = do
   let tryFast = case v of
-                  Def{} -> True
-                  Con{} -> True
-                  _     -> False
+                  Def{}   -> True
+                  Con{}   -> True
+                  MetaV{} -> True
+                  _       -> False
   if not tryFast then slowReduceTerm v
-                 else do
-    s <- optSharing   <$> commandLineOptions
-    allowed <- asks envAllowedReductions
-    let notAll = List.delete NonTerminatingReductions allowed /= allReductions
-    if s || notAll then slowReduceTerm v else fastReduce (elem NonTerminatingReductions allowed) v
+                 else
+    case v of
+      MetaV x _ -> ifM (isOpen x) (return $ notBlocked v) (maybeFast v)
+      _         -> maybeFast v
+  where
+    isOpen x = isOpenMeta . mvInstantiation <$> lookupMeta x
+    maybeFast v = ifM shouldTryFastReduce (fastReduce v) (slowReduceTerm v)
 
 slowReduceTerm :: Term -> ReduceM (Blocked Term)
 slowReduceTerm v = do
@@ -340,12 +364,13 @@
 --      MetaV x args -> notBlocked . MetaV x <$> reduce' args
       MetaV x es -> done
       Def f es   -> unfoldDefinitionE False reduceB' (Def f []) f es
-      Con c ci args -> do
+      Con c ci es -> do
+          let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
           -- Constructors can reduce' when they come from an
           -- instantiated module.
           v <- unfoldDefinition False reduceB' (Con c ci []) (conName c) args
           traverse reduceNat v
-      Sort s   -> fmap sortTm <$> reduceB' s
+      Sort s   -> fmap Sort <$> reduceB' s
       Level l  -> ifM (elem LevelReductions <$> asks envAllowedReductions)
                     {- then -} (fmap levelTm <$> reduceB' l)
                     {- else -} done
@@ -354,24 +379,22 @@
       Var _ _  -> done
       Lam _ _  -> done
       DontCare _ -> done
-      Shared{}   -> updateSharedTermF reduceB' v
     where
       -- NOTE: reduceNat can traverse the entire term.
-      reduceNat v@Shared{} = updateSharedTerm reduceNat v
       reduceNat v@(Con c ci []) = do
         mz  <- getBuiltin' builtinZero
         case v of
           _ | Just v == mz  -> return $ Lit $ LitNat (getRange c) 0
           _                 -> return v
-      reduceNat v@(Con c ci [a]) | visible a && isRelevant a = do
-        ms  <- fmap ignoreSharing <$> getBuiltin' builtinSuc
+      reduceNat v@(Con c ci [Apply a]) | visible a && isRelevant a = do
+        ms  <- getBuiltin' builtinSuc
         case v of
           _ | Just (Con c ci []) == ms -> inc <$> reduce' (unArg a)
           _                         -> return v
           where
-            inc w = case ignoreSharing w of
+            inc w = case w of
               Lit (LitNat r n) -> Lit (LitNat (fuseRange c r) $ n + 1)
-              _                -> Con c ci [defaultArg w]
+              _                -> Con c ci [Apply $ defaultArg w]
       reduceNat v = return v
 
 -- Andreas, 2013-03-20 recursive invokations of unfoldCorecursion
@@ -384,12 +407,8 @@
 unfoldCorecursion :: Term -> ReduceM (Blocked Term)
 unfoldCorecursion v = do
   v <- instantiate' v
-  case compressPointerChain v of
+  case v of
     Def f es -> unfoldDefinitionE True unfoldCorecursion (Def f []) f es
-    v@(Shared p) ->
-      case derefPtr p of
-        Def{} -> updateSharedFM unfoldCorecursion v
-        _     -> slowReduceTerm v
     _ -> slowReduceTerm v
 
 -- | If the first argument is 'True', then a single delayed clause may
@@ -494,7 +513,7 @@
           debugReduce ev
           return ev
       where
-      defaultResult = noReduction $ NotBlocked AbsurdMatch vfull
+      defaultResult = noReduction $ NotBlocked ReallyNotBlocked vfull
       vfull         = v0 `applyE` map ignoreReduced es
       debugReduce ev = verboseS "tc.reduce" 90 $ do
         case ev of
@@ -542,7 +561,7 @@
   -- first, possibly rewrite literal v to constructor form
   v <- constructorForm v
   traceSDoc "tc.inj.reduce" 30 (text "reduceHead" <+> prettyTCM v) $ do
-  case ignoreSharing v of
+  case v of
     Def f es -> do
 
       abstractMode <- envAbstractMode <$> ask
@@ -568,6 +587,24 @@
         _                               -> return $ notBlocked v
     _ -> return $ notBlocked v
 
+-- | Unfold a single inlined function.
+unfoldInlined :: Term -> TCM Term
+unfoldInlined = runReduceM . unfoldInlined'
+
+unfoldInlined' :: Term -> ReduceM Term
+unfoldInlined' v = do
+  inTypes <- view eWorkingOnTypes
+  case v of
+    _ | inTypes -> return v -- Don't inline in types (to avoid unfolding of goals)
+    Def f es -> do
+      def <- theDef <$> getConstInfo f
+      case def of   -- Only for simple definitions with no pattern matching (TODO: maybe copatterns?)
+        Function{ funCompiled = Just Done{}, funDelayed = NotDelayed }
+          | def ^. funInline ->
+          ignoreBlocking <$> unfoldDefinitionE False (return . notBlocked) (Def f []) f es
+        _ -> return v
+    _ -> return v
+
 -- | Apply a definition using the compiled clauses, or fall back to
 --   ordinary clauses if no compiled clauses exist.
 appDef_ :: QName -> Term -> [Clause] -> Maybe CompiledClauses -> RewriteRules -> MaybeReducedArgs -> ReduceM (Reduced (Blocked Term) Term)
@@ -644,8 +681,8 @@
   reduce' (ValueCmp cmp t u v) = do
     (t,u,v) <- reduce' (t,u,v)
     return $ ValueCmp cmp t u v
-  reduce' (ElimCmp cmp t v as bs) =
-    ElimCmp cmp <$> reduce' t <*> reduce' v <*> reduce' as <*> reduce' bs
+  reduce' (ElimCmp cmp fs t v as bs) =
+    ElimCmp cmp fs <$> 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' (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp)  <$> reduce' (tela,telb)
@@ -655,6 +692,9 @@
   reduce' (FindInScope m b cands) = FindInScope m b <$> mapM reduce' cands
   reduce' (IsEmpty r t)         = IsEmpty r <$> reduce' t
   reduce' (CheckSizeLtSat t)    = CheckSizeLtSat <$> reduce' t
+  reduce' c@CheckFunDef{}       = return c
+  reduce' (HasBiggerSort a)     = HasBiggerSort <$> reduce' a
+  reduce' (HasPTSRule a b)      = uncurry HasPTSRule <$> reduce' (a,b)
 
 instance Reduce e => Reduce (Map k e) where
     reduce' = traverse reduce'
@@ -689,7 +729,7 @@
       Def f vs   -> do
         let keepGoing simp v = return (simp, notBlocked v)
         (simpl, v) <- unfoldDefinition' False keepGoing (Def f []) f vs
-        traceSDoc "tc.simplify'" 20 (
+        traceSDoc "tc.simplify'" 90 (
           text ("simplify': unfolding definition returns " ++ show simpl)
             <+> prettyTCM (ignoreBlocking v)) $ do
         case simpl of
@@ -697,14 +737,13 @@
           NoSimplification  -> Def f <$> simplify' vs
       MetaV x vs -> MetaV x  <$> simplify' vs
       Con c ci vs-> Con c ci <$> simplify' vs
-      Sort s     -> sortTm   <$> simplify' s
+      Sort s     -> Sort     <$> simplify' s
       Level l    -> levelTm  <$> simplify' l
       Pi a b     -> Pi       <$> simplify' a <*> simplify' b
       Lit l      -> return v
       Var i vs   -> Var i    <$> simplify' vs
       Lam h v    -> Lam h    <$> simplify' v
       DontCare v -> dontCare <$> simplify' v
-      Shared{}   -> updateSharedTerm simplify' v
 
 simplifyBlocked' :: Simplify t => Blocked t -> ReduceM t
 simplifyBlocked' (Blocked _ t) = return t
@@ -720,11 +759,13 @@
 instance Simplify Sort where
     simplify' s = do
       case s of
-        DLub s1 s2 -> dLub <$> simplify' s1 <*> simplify' s2
-        Type s     -> levelSort <$> simplify' s
+        PiSort s1 s2 -> piSort <$> simplify' s1 <*> simplify' s2
+        UnivSort s -> univSort <$> simplify' s
+        Type s     -> Type <$> simplify' s
         Prop       -> return s
         Inf        -> return s
         SizeUniv   -> return s
+        MetaS x es -> MetaS x <$> simplify' es
 
 instance Simplify Level where
   simplify' (Max as) = levelMax <$> simplify' as
@@ -788,8 +829,8 @@
   simplify' (ValueCmp cmp t u v) = do
     (t,u,v) <- simplify' (t,u,v)
     return $ ValueCmp cmp t u v
-  simplify' (ElimCmp cmp t v as bs) =
-    ElimCmp cmp <$> simplify' t <*> simplify' v <*> simplify' as <*> simplify' bs
+  simplify' (ElimCmp cmp fs t v as bs) =
+    ElimCmp cmp fs <$> simplify' t <*> simplify' v <*> simplify' as <*> simplify' bs
   simplify' (LevelCmp cmp u v)    = uncurry (LevelCmp cmp) <$> simplify' (u,v)
   simplify' (TypeCmp cmp a b)     = uncurry (TypeCmp cmp) <$> simplify' (a,b)
   simplify' (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp) <$> simplify' (tela,telb)
@@ -799,6 +840,9 @@
   simplify' (FindInScope m b cands) = FindInScope m b <$> mapM simplify' cands
   simplify' (IsEmpty r t)         = IsEmpty r <$> simplify' t
   simplify' (CheckSizeLtSat t)    = CheckSizeLtSat <$> simplify' t
+  simplify' c@CheckFunDef{}       = return c
+  simplify' (HasBiggerSort a)     = HasBiggerSort <$> simplify' a
+  simplify' (HasPTSRule a b)      = uncurry HasPTSRule <$> simplify' (a,b)
 
 instance Simplify Bool where
   simplify' = return
@@ -844,32 +888,33 @@
     normalise' s = do
       s <- reduce' s
       case s of
-        DLub s1 s2 -> dLub <$> normalise' s1 <*> normalise' s2
+        PiSort s1 s2 -> piSort <$> normalise' s1 <*> normalise' s2
+        UnivSort s -> univSort <$> normalise' s
         Prop       -> return s
-        Type s     -> levelSort <$> normalise' s
+        Type s     -> Type <$> normalise' s
         Inf        -> return Inf
         SizeUniv   -> return SizeUniv
+        MetaS x es -> return s
 
 instance Normalise Type where
     normalise' (El s t) = El <$> normalise' s <*> normalise' t
 
 instance Normalise Term where
-    normalise' = ignoreBlocking <.> (reduceB' >=> traverse normaliseArgs)
-      where
-        normaliseArgs :: Term -> ReduceM Term
-        normaliseArgs v = case v of
-                Var n vs    -> Var n <$> normalise' vs
-                Con c ci vs -> Con c ci <$> normalise' vs
-                Def f vs    -> Def f <$> normalise' vs
-                MetaV x vs  -> MetaV x <$> normalise' vs
-                Lit _       -> return v
-                Level l     -> levelTm <$> normalise' l
-                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
+    normalise' v = ifM shouldTryFastReduce (fastNormalise v) (slowNormaliseArgs =<< reduce' v)
 
+slowNormaliseArgs :: Term -> ReduceM Term
+slowNormaliseArgs v = case v of
+  Var n vs    -> Var n      <$> normalise' vs
+  Con c ci vs -> Con c ci   <$> normalise' vs
+  Def f vs    -> Def f      <$> normalise' vs
+  MetaV x vs  -> MetaV x    <$> normalise' vs
+  Lit _       -> return v
+  Level l     -> levelTm    <$> normalise' l
+  Lam h b     -> Lam h      <$> normalise' b
+  Sort s      -> Sort       <$> normalise' s
+  Pi a b      -> uncurry Pi <$> normalise' (a, b)
+  DontCare _  -> return v
+
 instance Normalise Elim where
   normalise' (Apply v) = Apply <$> normalise' v
   normalise' (Proj o f)= pure $ Proj o f
@@ -931,8 +976,8 @@
   normalise' (ValueCmp cmp t u v) = do
     (t,u,v) <- normalise' (t,u,v)
     return $ ValueCmp cmp t u v
-  normalise' (ElimCmp cmp t v as bs) =
-    ElimCmp cmp <$> normalise' t <*> normalise' v <*> normalise' as <*> normalise' bs
+  normalise' (ElimCmp cmp fs t v as bs) =
+    ElimCmp cmp fs <$> 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' (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp) <$> normalise' (tela,telb)
@@ -942,6 +987,9 @@
   normalise' (FindInScope m b cands) = FindInScope m b <$> mapM normalise' cands
   normalise' (IsEmpty r t)         = IsEmpty r <$> normalise' t
   normalise' (CheckSizeLtSat t)    = CheckSizeLtSat <$> normalise' t
+  normalise' c@CheckFunDef{}       = return c
+  normalise' (HasBiggerSort a)     = HasBiggerSort <$> normalise' a
+  normalise' (HasPTSRule a b)      = uncurry HasPTSRule <$> normalise' (a,b)
 
 instance Normalise Bool where
   normalise' = return
@@ -953,18 +1001,17 @@
   normalise' = return
 
 instance Normalise ConPatternInfo where
-  normalise' (ConPatternInfo mr mt) = ConPatternInfo mr <$> normalise' mt
+  normalise' i = normalise' (conPType i) <&> \ t -> i { conPType = t }
 
 instance Normalise DBPatVar where
   normalise' = return
 
 instance Normalise a => Normalise (Pattern' a) where
   normalise' p = case p of
-    VarP x       -> VarP <$> normalise' x
+    VarP o x     -> VarP o <$> normalise' x
     LitP _       -> return p
     ConP c mt ps -> ConP c <$> normalise' mt <*> normalise' ps
-    DotP v       -> DotP <$> normalise' v
-    AbsurdP x    -> AbsurdP <$> normalise' x
+    DotP o v     -> DotP o <$> normalise' v
     ProjP{}      -> return p
 
 instance Normalise DisplayForm where
@@ -1006,11 +1053,13 @@
     instantiateFull' s = do
         s <- instantiate' s
         case s of
-            Type n     -> levelSort <$> instantiateFull' n
+            Type n     -> Type <$> instantiateFull' n
             Prop       -> return s
-            DLub s1 s2 -> dLub <$> instantiateFull' s1 <*> instantiateFull' s2
+            PiSort s1 s2 -> piSort <$> instantiateFull' s1 <*> instantiateFull' s2
+            UnivSort s -> univSort <$> instantiateFull' s
             Inf        -> return s
             SizeUniv   -> return s
+            MetaS x es -> MetaS x <$> instantiateFull' es
 
 instance (InstantiateFull a) => InstantiateFull (Type' a) where
     instantiateFull' (El s t) =
@@ -1028,9 +1077,8 @@
           Lit _       -> return v
           Level l     -> levelTm <$> instantiateFull' l
           Lam h b     -> Lam h <$> instantiateFull' b
-          Sort s      -> sortTm <$> instantiateFull' s
+          Sort s      -> Sort <$> instantiateFull' s
           Pi a b      -> uncurry Pi <$> instantiateFull' (a,b)
-          Shared{}    -> updateSharedTerm instantiateFull' v
           DontCare v  -> dontCare <$> instantiateFull' v
 
 instance InstantiateFull Level where
@@ -1044,7 +1092,7 @@
   instantiateFull' l = case l of
     MetaLevel m vs -> do
       v <- instantiateFull' (MetaV m vs)
-      case ignoreSharing v of
+      case v of
         MetaV m vs -> return $ MetaLevel m vs
         _          -> return $ UnreducedLevel v
     NeutralLevel r v -> NeutralLevel r <$> instantiateFull' v
@@ -1072,15 +1120,14 @@
     instantiateFull' = return
 
 instance InstantiateFull ConPatternInfo where
-  instantiateFull' (ConPatternInfo mr mt) = ConPatternInfo mr <$> instantiateFull' mt
+    instantiateFull' i = instantiateFull' (conPType i) <&> \ t -> i { conPType = t }
 
 instance InstantiateFull DBPatVar where
     instantiateFull' = return
 
 instance InstantiateFull a => InstantiateFull (Pattern' a) where
-    instantiateFull' (VarP x)       = VarP <$> instantiateFull' x
-    instantiateFull' (DotP t)       = DotP <$> instantiateFull' t
-    instantiateFull' (AbsurdP p)    = AbsurdP <$> instantiateFull' p
+    instantiateFull' (VarP o x)     = VarP o <$> instantiateFull' x
+    instantiateFull' (DotP o t)     = DotP o <$> instantiateFull' t
     instantiateFull' (ConP n mt ps) = ConP n <$> instantiateFull' mt <*> instantiateFull' ps
     instantiateFull' l@LitP{}       = return l
     instantiateFull' p@ProjP{}      = return p
@@ -1122,8 +1169,8 @@
     ValueCmp cmp t u v -> do
       (t,u,v) <- instantiateFull' (t,u,v)
       return $ ValueCmp cmp t u v
-    ElimCmp cmp t v as bs ->
-      ElimCmp cmp <$> instantiateFull' t <*> instantiateFull' v <*> instantiateFull' as <*> instantiateFull' bs
+    ElimCmp cmp fs t v as bs ->
+      ElimCmp cmp fs <$> 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)
     TelCmp a b cmp tela telb -> uncurry (TelCmp a b cmp) <$> instantiateFull' (tela,telb)
@@ -1133,6 +1180,9 @@
     FindInScope m b cands -> FindInScope m b <$> mapM instantiateFull' cands
     IsEmpty r t         -> IsEmpty r <$> instantiateFull' t
     CheckSizeLtSat t    -> CheckSizeLtSat <$> instantiateFull' t
+    c@CheckFunDef{}     -> return c
+    HasBiggerSort a     -> HasBiggerSort <$> instantiateFull' a
+    HasPTSRule a b      -> uncurry HasPTSRule <$> instantiateFull' (a,b)
 
 instance (InstantiateFull a) => InstantiateFull (Elim' a) where
   instantiateFull' (Apply v) = Apply <$> instantiateFull' v
@@ -1194,9 +1244,6 @@
 instance InstantiateFull a => InstantiateFull (Open a) where
   instantiateFull' (OpenThing n a) = OpenThing n <$> instantiateFull' a
 
-instance InstantiateFull a => InstantiateFull (Local a) where
-  instantiateFull' = traverseF instantiateFull'
-
 instance InstantiateFull DisplayForm where
   instantiateFull' (Display n ps v) = uncurry (Display n) <$> instantiateFull' (ps, v)
 
@@ -1235,11 +1282,13 @@
   instantiateFull' (WithArity n a) = WithArity n <$> instantiateFull' a
 
 instance InstantiateFull a => InstantiateFull (Case a) where
-  instantiateFull' (Branches cop cs ls m) =
+  instantiateFull' (Branches cop cs eta ls m lz) =
     Branches cop
       <$> instantiateFull' cs
+      <*> instantiateFull' eta
       <*> instantiateFull' ls
       <*> instantiateFull' m
+      <*> pure lz
 
 instance InstantiateFull CompiledClauses where
   instantiateFull' Fail        = return Fail
@@ -1257,11 +1306,12 @@
 
 instance InstantiateFull Interface where
     instantiateFull' (Interface h ms mod scope inside
-                               sig display b foreignCode
+                               sig display userwarn b foreignCode
                                highlighting pragmas patsyns warnings) =
         Interface h ms mod scope inside
             <$> instantiateFull' sig
             <*> instantiateFull' display
+            <*> return userwarn
             <*> instantiateFull' b
             <*> return foreignCode
             <*> return highlighting
@@ -1274,6 +1324,9 @@
     instantiateFull' (Prim x)   = Prim <$> instantiateFull' x
 
 instance InstantiateFull QName where
+  instantiateFull' = return
+
+instance InstantiateFull ConHead where
   instantiateFull' = return
 
 instance InstantiateFull a => InstantiateFull (Maybe a) where
diff --git a/src/full/Agda/TypeChecking/Reduce/Fast.hs b/src/full/Agda/TypeChecking/Reduce/Fast.hs
--- a/src/full/Agda/TypeChecking/Reduce/Fast.hs
+++ b/src/full/Agda/TypeChecking/Reduce/Fast.hs
@@ -1,536 +1,1372 @@
 {-# LANGUAGE CPP           #-}
 {-# LANGUAGE BangPatterns  #-}
 {-# LANGUAGE PatternGuards #-}
-
-
-{-|
-
-This module contains an optimised implementation of the reduction algorithm
-from 'Agda.TypeChecking.Reduce' and 'Agda.TypeChecking.CompiledClause.Match'.
-It runs roughly an order of magnitude faster than the original implementation.
-
-The differences are the following:
-
-- Only applies when we don't have --sharing and when all reductions are
-  allowed.
-
-  This means we can skip a number of checks that would otherwise be performed
-  at each reduction step.
-
-- Does not track whether simplifications were made.
-
-  This information is only used when trying to simplify terms, so the
-  simplifier runs the slow implementation.
-
-- Precomputes primZero and primSuc.
-
-  Since all the functions involved in reduction are implemented in this module
-  in a single where block, we can look up zero and suc once instead of once for
-  each reduction step.
-
-- Run outside ReduceM
-
-  ReduceM is already just a plain reader monad, but pulling out the environment
-  and doing all reduction non-monadically saves a significant amount of time.
-
-- Memoise getConstInfo.
-
-  A big chunk of the time during reduction is spent looking up definitions in
-  the signature. Any long-running reduction will use only a handful definitions
-  though, so memoising getConstInfo is a big win.
-
-- Optimised case trees.
-
-  Since we memoise getConstInfo we can do some preprocessing of the
-  definitions, returning a 'CompactDef' instead of a 'Definition'. In
-  particular we streamline the case trees used for matching in a few ways:
-
-    - Drop constructor arity information.
-    - Use NameId instead of QName as map keys.
-    - Special branch for natural number successor.
-
-  None of these changes would make sense to incorporate into the actual case
-  trees. The first two loses information that we need in other places and the
-  third would complicate a lot of code working with case trees.
-
-- Optimised parallel substitution.
-
-  When substituting arguments into function bodies we always have a complete
-  (a term for every free variable) parallel substitution. We run an specialised
-  substitution for this case that falls back to normal substitution when it
-  hits a binder.
-
--}
-module Agda.TypeChecking.Reduce.Fast
-  ( fastReduce ) where
-
-import Control.Applicative
-import Control.Monad.Reader
-
-import Data.Map (Map)
-import qualified Data.Map as Map
-import Data.Traversable (traverse)
-
-import System.IO.Unsafe
-import Data.IORef
-
-import Agda.Syntax.Internal
-import Agda.Syntax.Common
-import Agda.Syntax.Position
-import Agda.Syntax.Literal
-
-import Agda.TypeChecking.CompiledClause
-import Agda.TypeChecking.Monad
-import Agda.TypeChecking.Pretty
-import Agda.TypeChecking.Reduce as R
-import Agda.TypeChecking.Rewriting (rewrite)
-import Agda.TypeChecking.Reduce.Monad as RedM
-import Agda.TypeChecking.Substitute
-import Agda.TypeChecking.Monad.Builtin hiding (constructorForm)
-import Agda.TypeChecking.CompiledClause.Match
-
-import Agda.Interaction.Options
-
-import Agda.Utils.Maybe
-import Agda.Utils.Memo
-import Agda.Utils.Function
-import Agda.Utils.Functor
-
-#include "undefined.h"
-import Agda.Utils.Impossible
-
--- Compact definitions ----------------------------------------------------
-
--- This is what the memoised getConstInfo returns. We essentially pick out only the
--- information needed for fast reduction from the definition.
-
-data CompactDef =
-  CompactDef { cdefDelayed        :: Bool
-             , cdefNonterminating :: Bool
-             , cdefDef            :: CompactDefn
-             , cdefRewriteRules   :: RewriteRules
-             }
-
-data CompactDefn
-  = CFun  { cfunCompiled  :: FastCompiledClauses, cfunProjection :: Maybe QName }
-  | CCon  { cconSrcCon    :: ConHead }
-  | CForce  -- ^ primForce
-  | CTyCon  -- ^ Datatype or record type. Need to know this for primForce.
-  | COther  -- ^ In this case we fall back to slow reduction
-
-compactDef :: Maybe ConHead -> Maybe ConHead -> Maybe QName -> Definition -> RewriteRules -> ReduceM CompactDef
-compactDef z s pf def rewr = do
-  cdefn <-
-    case theDef def of
-      _ | Just (defName def) == pf -> pure CForce
-      Constructor{conSrcCon = c} -> pure CCon{cconSrcCon = c}
-      Function{funCompiled = Just cc, funClauses = _:_, funProjection = proj} ->
-        pure CFun{ cfunCompiled   = fastCompiledClauses z s cc
-                 , cfunProjection = projOrig <$> proj }
-      Datatype{dataClause = Nothing} -> pure CTyCon
-      Record{recClause = Nothing} -> pure CTyCon
-      _ -> pure COther
-  return $
-    CompactDef { cdefDelayed        = defDelayed def == Delayed
-               , cdefNonterminating = defNonterminating def
-               , cdefDef            = cdefn
-               , cdefRewriteRules   = rewr
-               }
-
--- Faster case trees ------------------------------------------------------
-
-data FastCase c = FBranches
-  { fprojPatterns   :: Bool
-    -- ^ We are constructing a record here (copatterns).
-    --   'conBranches' lists projections.
-  , fconBranches    :: Map NameId c
-    -- ^ Map from constructor (or projection) names to their arity
-    --   and the case subtree.  (Projections have arity 0.)
-  , fsucBranch      :: Maybe c
-  , flitBranches    :: Map Literal c
-    -- ^ Map from literal to case subtree.
-  , fcatchAllBranch :: Maybe c
-    -- ^ (Possibly additional) catch-all clause.
-  }
-
--- | Case tree with bodies.
-
-data FastCompiledClauses
-  = FCase Int (FastCase FastCompiledClauses)
-    -- ^ @Case n bs@ stands for a match on the @n@-th argument
-    -- (counting from zero) with @bs@ as the case branches.
-    -- If the @n@-th argument is a projection, we have only 'conBranches'
-    -- with arity 0.
-  | FDone [Arg ArgName] Term
-    -- ^ @Done xs b@ stands for the body @b@ where the @xs@ contains hiding
-    --   and name suggestions for the free variables. This is needed to build
-    --   lambdas on the right hand side for partial applications which can
-    --   still reduce.
-  | FFail
-    -- ^ Absurd case.
-
-type FastStack = [(FastCompiledClauses, MaybeReducedElims, Elims -> Elims)]
-
-fastCompiledClauses :: Maybe ConHead -> Maybe ConHead -> CompiledClauses -> FastCompiledClauses
-fastCompiledClauses z s cc =
-  case cc of
-    Fail              -> FFail
-    Done xs b         -> FDone xs b
-    Case (Arg _ n) bs -> FCase n (fastCase z s bs)
-
-fastCase :: Maybe ConHead -> Maybe ConHead -> Case CompiledClauses -> FastCase FastCompiledClauses
-fastCase z s (Branches proj con lit wild) =
-  FBranches
-    { fprojPatterns   = proj
-    , fconBranches    = Map.mapKeysMonotonic (nameId . qnameName) $ fmap (fastCompiledClauses z s . content) con
-    , fsucBranch      = fmap (fastCompiledClauses z s . content) $ flip Map.lookup con . conName =<< s
-    , flitBranches    = fmap (fastCompiledClauses z s) lit
-    , fcatchAllBranch = fmap (fastCompiledClauses z s) wild }
-
-{-# INLINE lookupCon #-}
-lookupCon :: QName -> FastCase c -> Maybe c
-lookupCon c (FBranches _ cons _ _ _) = Map.lookup (nameId $ qnameName c) cons
-
--- QName memo -------------------------------------------------------------
-
-{-# NOINLINE memoQName #-}
-memoQName :: (QName -> a) -> (QName -> a)
-memoQName f = unsafePerformIO $ do
-  tbl <- newIORef Map.empty
-  return (unsafePerformIO . f' tbl)
-  where
-    f' tbl x = do
-      let i = nameId (qnameName x)
-      m <- readIORef tbl
-      case Map.lookup i m of
-        Just y  -> return y
-        Nothing -> do
-          let y = f x
-          writeIORef tbl (Map.insert i y m)
-          return y
-
--- Faster substitution ----------------------------------------------------
-
--- Precondition: All free variables of the term are assigned values in the
--- list.
--- Reverts to normal substitution if it hits a binder or other icky stuff (like
--- levels). It's strict in the shape of the result to avoid creating huge
--- thunks for accumulator arguments.
-strictSubst :: Bool -> [Term] -> Term -> Term
-strictSubst strict us
-  | not strict = applySubst rho
-  | otherwise  = go 0
-  where
-    rho = parallelS us
-    go k v =
-      case v of
-        Var x es
-          | x < k     -> Var x $! map' (goE k) es
-          | otherwise -> applyE (raise k $ us !! (x - k)) $! map' (goE k) es
-        Def f es -> defApp f [] $! map' (goE k) es
-        Con c ci vs -> Con c ci $! map' (mapArg' $ go k) vs
-        Lam i b  -> Lam i $! goAbs k b
-        Lit{}    -> v
-        _        -> applySubst (liftS k rho) v
-
-    goE k (Apply v) = Apply $! mapArg' (go k) v
-    goE _ p         = p
-
-    goAbs k (Abs   x v) = Abs   x $! go (k + 1) v
-    goAbs k (NoAbs x v) = NoAbs x $! go k v
-
-map' :: (a -> b) -> [a] -> [b]
-map' f []       = []
-map' f (x : xs) = ((:) $! f x) $! map' f xs
-
-mapArg' :: (a -> b) -> Arg a -> Arg b
-mapArg' f (Arg i x) = Arg i $! f x
-
-
--- Fast reduction ---------------------------------------------------------
-
--- | First argument: allow non-terminating reductions.
-fastReduce :: Bool -> Term -> ReduceM (Blocked Term)
-fastReduce allowNonTerminating v = do
-  let name (Con c _ _) = c
-      name _         = __IMPOSSIBLE__
-  z  <- fmap name <$> getBuiltin' builtinZero
-  s  <- fmap name <$> getBuiltin' builtinSuc
-  pf <- fmap primFunName <$> getPrimitive' "primForce"
-  rwr <- optRewriting <$> pragmaOptions
-  constInfo <- unKleisli $ \f -> do
-    info <- getConstInfo f
-    rewr <- instantiateRewriteRules =<< getRewriteRulesFor f
-    compactDef z s pf info rewr
-  ReduceM $ \ env -> reduceTm env (memoQName constInfo) allowNonTerminating rwr z s v
-
-unKleisli :: (a -> ReduceM b) -> ReduceM (a -> b)
-unKleisli f = ReduceM $ \ env x -> unReduceM (f x) env
-
-reduceTm :: ReduceEnv -> (QName -> CompactDef) -> Bool -> Bool -> Maybe ConHead -> Maybe ConHead -> Term -> Blocked Term
-reduceTm env !constInfo allowNonTerminating hasRewriting zero suc = reduceB' 0
-  where
-    -- Force substitutions every nth step to avoid memory leaks. Doing it in
-    -- every is too expensive (issue 2215).
-    strictEveryNth = 1000
-
-    runReduce m = unReduceM m env
-    conNameId = nameId . qnameName . conName
-    isZero =
-      case zero of
-        Nothing -> const False
-        Just z  -> (conNameId z ==) . conNameId
-
-    isSuc  =
-      case suc of
-        Nothing -> const False
-        Just s  -> (conNameId s ==) . conNameId
-
-    reduceB' steps v =
-      case v of
-        Def f es -> unfoldDefinitionE steps False reduceB' (Def f []) f es
-        Con c ci vs ->
-          -- Constructors can reduce' when they come from an
-          -- instantiated module.
-          case unfoldDefinition steps False reduceB' (Con c ci []) (conName c) vs of
-            NotBlocked r v -> NotBlocked r $ reduceNat v
-            b              -> b
-        Lit{} -> done
-        Var{} -> done
-        _     -> runReduce (slowReduceTerm v)
-      where
-        done = notBlocked v
-
-        reduceNat v@(Con c ci [])
-          | isZero c = Lit $ LitNat (getRange c) 0
-        reduceNat v@(Con c ci [a])
-          | isSuc c  = inc . ignoreBlocking $ reduceB' 0 (unArg a)
-          where
-            inc (Lit (LitNat r n)) = Lit (LitNat noRange $ n + 1)
-            inc w                  = Con c ci [defaultArg w]
-        reduceNat v = v
-
-    originalProjection :: QName -> QName
-    originalProjection q =
-      case cdefDef $ constInfo q of
-        CFun{ cfunProjection = Just p } -> p
-        _                               -> __IMPOSSIBLE__
-
-    -- Andreas, 2013-03-20 recursive invokations of unfoldCorecursion
-    -- need also to instantiate metas, see Issue 826.
-    unfoldCorecursionE :: Elim -> Blocked Elim
-    unfoldCorecursionE (Proj o p)           = notBlocked $ Proj o $ originalProjection p
-    unfoldCorecursionE (Apply (Arg info v)) = fmap (Apply . Arg info) $
-      unfoldCorecursion 0 v
-
-    unfoldCorecursion :: Int -> Term -> Blocked Term
-    unfoldCorecursion steps (Def f es) = unfoldDefinitionE steps True unfoldCorecursion (Def f []) f es
-    unfoldCorecursion steps v          = reduceB' steps v
-
-    -- | If the first argument is 'True', then a single delayed clause may
-    -- be unfolded.
-    unfoldDefinition ::
-      Int -> Bool -> (Int -> Term -> Blocked Term) ->
-      Term -> QName -> Args -> Blocked Term
-    unfoldDefinition steps unfoldDelayed keepGoing v f args =
-      unfoldDefinitionE steps unfoldDelayed keepGoing v f (map Apply args)
-
-    unfoldDefinitionE ::
-      Int -> Bool -> (Int -> Term -> Blocked Term) ->
-      Term -> QName -> Elims -> Blocked Term
-    unfoldDefinitionE steps unfoldDelayed keepGoing v f es =
-      case unfoldDefinitionStep steps unfoldDelayed (constInfo f) v f es of
-        NoReduction v    -> v
-        YesReduction _ v -> (keepGoing $! steps + 1) v
-
-    unfoldDefinitionStep :: Int -> Bool -> CompactDef -> Term -> QName -> Elims -> Reduced (Blocked Term) Term
-    unfoldDefinitionStep steps unfoldDelayed CompactDef{cdefDelayed = delayed, cdefNonterminating = nonterm, cdefDef = def, cdefRewriteRules = rewr} v0 f es =
-      let v = v0 `applyE` es
-          -- Non-terminating functions
-          -- (i.e., those that failed the termination check)
-          -- and delayed definitions
-          -- are not unfolded unless explicitely permitted.
-          dontUnfold =
-               (not allowNonTerminating && nonterm)
-            || (not unfoldDelayed       && delayed)
-      in case def of
-        CCon{cconSrcCon = c} ->
-          if hasRewriting then
-            runReduce $ rewrite (notBlocked ()) (Con c ConOSystem []) rewr es
-          else
-            NoReduction $ notBlocked $ Con c ConOSystem [] `applyE` es
-        CFun{cfunCompiled = cc} ->
-          reduceNormalE steps v0 f (map notReduced es) dontUnfold cc
-        CForce -> reduceForce unfoldDelayed v0 f es
-        CTyCon -> if hasRewriting then
-                    runReduce $ rewrite (notBlocked ()) v0 rewr es
-                  else
-                    NoReduction $ notBlocked v
-        COther -> runReduce $ R.unfoldDefinitionStep unfoldDelayed v0 f es
-      where
-        yesReduction = YesReduction NoSimplification
-
-        reduceForce :: Bool -> Term -> QName -> Elims -> Reduced (Blocked Term) Term
-        reduceForce unfoldDelayed v0 pf (Apply a : Apply b : Apply s : Apply t : Apply u : Apply f : es) =
-          case reduceB' 0 (unArg u) of
-            ub@Blocked{}        -> noGo ub
-            ub@(NotBlocked _ u)
-              | isWHNF u  -> yesReduction $ unArg f `applyE` (Apply (defaultArg u) : es)
-              | otherwise -> noGo ub
-          where
-            noGo ub = NoReduction $ ub <&> \ u -> Def pf (Apply a : Apply b : Apply s : Apply t : Apply (defaultArg u) : Apply f : es)
-
-            isWHNF u = case u of
-              Lit{}      -> True
-              Con{}      -> True
-              Lam{}      -> True
-              Pi{}       -> True
-              Sort{}     -> True
-              Level{}    -> True
-              DontCare{} -> True
-              MetaV{}    -> False
-              Var{}      -> False
-              Def q _    -> isTyCon q
-              Shared{}   -> __IMPOSSIBLE__
-
-            isTyCon q =
-              case cdefDef $ constInfo q of
-                CTyCon -> True
-                _      -> False
-
-        -- TODO: partially applied to u
-        reduceForce unfoldDelayed v0 pf es = runReduce $ R.unfoldDefinitionStep unfoldDelayed v0 f es
-
-        reduceNormalE :: Int -> Term -> QName -> [MaybeReduced Elim] -> Bool -> FastCompiledClauses -> Reduced (Blocked Term) Term
-        reduceNormalE steps v0 f es dontUnfold cc
-          | dontUnfold = defaultResult  -- non-terminating or delayed
-          | otherwise  =
-            case match' steps f [(cc, es, id)] of
-              YesReduction s u -> YesReduction s u
-              NoReduction es'  -> if hasRewriting then
-                                    runReduce $ rewrite (void es') v0 rewr (ignoreBlocking es')
-                                  else
-                                    NoReduction $ applyE v0 <$> es'
-          where defaultResult = if hasRewriting then
-                                  runReduce $ rewrite (NotBlocked AbsurdMatch ()) v0 rewr (map ignoreReduced es)
-                                else
-                                  NoReduction $ NotBlocked AbsurdMatch vfull
-                vfull         = v0 `applyE` map ignoreReduced es
-
-        match' :: Int -> QName -> FastStack -> Reduced (Blocked Elims) Term
-        match' steps f ((c, es, patch) : stack) =
-          let no blocking es = NoReduction $ blocking $ patch $ map ignoreReduced es
-              yes t          = yesReduction t
-
-          in case c of
-
-            -- impossible case
-            FFail -> no (NotBlocked AbsurdMatch) es
-
-            -- done matching
-            FDone xs t
-              -- common case: exact number of arguments
-              | m == n    -> {-# SCC match'Done #-} yes $ doSubst es t
-              -- if the function was partially applied, return a lambda
-              | m < n     -> yes $ doSubst es $ foldr lam t (drop m xs)
-              -- otherwise, just apply instantiation to body
-              -- apply the result to any extra arguments
-              | otherwise -> yes $ doSubst es0 t `applyE` map ignoreReduced es1
-              where
-                n = length xs
-                m = length es
-                useStrictSubst = rem steps strictEveryNth == 0
-                doSubst es t = strictSubst useStrictSubst (reverse $ map (unArg . argFromElim . ignoreReduced) es) t
-                (es0, es1) = splitAt n es
-                lam x t    = Lam (argInfo x) (Abs (unArg x) t)
-
-            -- splitting on the @n@th elimination
-            FCase n bs -> {-# SCC "match'Case" #-}
-              case splitAt n es of
-                -- if the @n@th elimination is not supplied, no match
-                (_, []) -> no (NotBlocked Underapplied) es
-                -- if the @n@th elimination is @e0@
-                (es0, MaybeRed red e0 : es1) ->
-                  -- get the reduced form of @e0@
-                  let eb = case red of
-                             Reduced b  -> e0 <$ b
-                             NotReduced -> unfoldCorecursionE e0
-                      e = ignoreBlocking eb
-                      -- replace the @n@th argument by its reduced form
-                      es' = es0 ++ [MaybeRed (Reduced $ () <$ eb) e] ++ es1
-                      -- if a catch-all clause exists, put it on the stack
-                      catchAllFrame stack = maybe stack (\c -> (c, es', patch) : stack) (fcatchAllBranch bs)
-                      -- If our argument is @Lit l@, we push @litFrame l@ onto the stack.
-                      litFrame l stack =
-                        case Map.lookup l (flitBranches bs) of
-                          Nothing -> stack
-                          Just cc -> (cc, es0 ++ es1, patchLit) : stack
-                      -- If our argument (or its constructor form) is @Con c ci vs@
-                      -- we push @conFrame c ci vs@ onto the stack.
-                      conFrame c ci vs stack =
-                        case lookupCon (conName c) bs of
-                          Nothing -> stack
-                          Just cc -> ( cc
-                                     , es0 ++ map (MaybeRed NotReduced . Apply) vs ++ es1
-                                     , patchCon c ci (length vs)
-                                     ) : stack
-
-                      sucFrame n stack =
-                        case fsucBranch bs of
-                          Nothing -> stack
-                          Just cc -> (cc, es0 ++ [v] ++ es1, patchCon (fromJust suc) ConOSystem 1)
-                                     : stack
-                        where v = MaybeRed (Reduced $ notBlocked ()) $ Apply $ defaultArg $ Lit $ LitNat noRange n
-
-                      -- If our argument is @Proj p@, we push @projFrame p@ onto the stack.
-                      projFrame p stack =
-                        case lookupCon p bs of
-                          Nothing -> stack
-                          Just cc -> (cc, es0 ++ es1, patchLit) : stack
-                      -- The new patch function restores the @n@th argument to @v@:
-                      -- In case we matched a literal, just put @v@ back.
-                      patchLit es = patch (es0 ++ [e] ++ es1)
-                        where (es0, es1) = splitAt n es
-                      -- In case we matched constructor @c@ with @m@ arguments,
-                      -- contract these @m@ arguments @vs@ to @Con c ci vs@.
-                      patchCon c ci m es = patch (es0 ++ [Con c ci vs <$ e] ++ es2)
-                        where (es0, rest) = splitAt n es
-                              (es1, es2)  = splitAt m rest
-                              vs          = map argFromElim es1
-                  -- Now do the matching on the @n@ths argument:
-                  in case eb of
-                    Blocked x _       -> no (Blocked x) es'
-                    NotBlocked blk elim ->
-                      case elim of
-                        Apply (Arg info v) ->
-                          case v of
-                            MetaV x _ -> no (Blocked x) es'
-
-                            -- In case of a natural number literal, try also its constructor form
-                            Lit l@(LitNat r n) ->
-                              let cFrame stack
-                                    | n > 0                  = sucFrame (n - 1) stack
-                                    | n == 0, Just z <- zero = conFrame z ConOSystem [] stack
-                                    | otherwise              = stack
-                              in match' steps f $ litFrame l $ cFrame $ catchAllFrame stack
-
-                            Lit l    -> match' steps f $ litFrame l    $ catchAllFrame stack
-                            Con c ci vs -> match' steps f $ conFrame c ci vs $ catchAllFrame $ stack
-
-                            -- Otherwise, we are stuck.  If we were stuck before,
-                            -- we keep the old reason, otherwise we give reason StuckOn here.
-                            _ -> no (NotBlocked $ stuckOn elim blk) es'
-
-                        -- In case of a projection, push the projFrame
-                        Proj _ p -> match' steps f $ projFrame p stack
-
-
-        -- If we reach the empty stack, then pattern matching was incomplete
-        match' _ f [] = runReduce $ do
-          pds <- getPartialDefs
-          if f `elem` pds
-          then return (NoReduction $ NotBlocked MissingClauses es)
-          else do
-            traceSLn "impossible" 10
-              ("Incomplete pattern matching when applying " ++ show f)
-              __IMPOSSIBLE__
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE TypeFamilies  #-}
+
+{-|
+
+This module implements the Agda Abstract Machine used for compile-time reduction. It's a
+call-by-need environment machine with an implicit heap maintained using 'STRef's. See the 'AM' type
+below for a description of the machine.
+
+Some other tricks that improves performance:
+
+- Memoise getConstInfo.
+
+  A big chunk of the time during reduction is spent looking up definitions in the signature. Any
+  long-running reduction will use only a handful definitions though, so memoising getConstInfo is a
+  big win.
+
+- Optimised case trees.
+
+  Since we memoise getConstInfo we can do some preprocessing of the definitions, returning a
+  'CompactDef' instead of a 'Definition'. In particular we streamline the case trees used for
+  matching in a few ways:
+
+    - Drop constructor arity information.
+    - Use NameId instead of QName as map keys.
+    - Special branch for natural number successor.
+
+  None of these changes would make sense to incorporate into the actual case trees. The first two
+  loses information that we need in other places and the third would complicate a lot of code
+  working with case trees.
+
+  'CompactDef' also has a special representation for built-in/primitive
+  functions that can be implemented as pure functions from 'Literal's.
+
+-}
+module Agda.TypeChecking.Reduce.Fast
+  ( fastReduce, fastNormalise ) where
+
+import Control.Arrow (first, second)
+import Control.Applicative hiding (empty)
+import Control.Monad.Reader
+import Control.Monad.ST
+import Control.Monad.ST.Unsafe (unsafeSTToIO, unsafeInterleaveST)
+
+import Data.Map (Map)
+import qualified Data.Map as Map
+import qualified Data.IntSet as IntSet
+import qualified Data.List as List
+import Data.Traversable (traverse)
+import Data.Coerce
+import Data.Semigroup ((<>))
+
+import System.IO.Unsafe (unsafePerformIO)
+import Data.IORef
+import Data.STRef
+import Data.Char
+
+import Debug.Trace (trace)
+
+import Agda.Syntax.Internal
+import Agda.Syntax.Common
+import Agda.Syntax.Position
+import Agda.Syntax.Literal
+
+import Agda.TypeChecking.CompiledClause
+import Agda.TypeChecking.Monad hiding (Closure(..))
+import Agda.TypeChecking.Reduce as R
+import Agda.TypeChecking.Rewriting (rewrite)
+import Agda.TypeChecking.Reduce.Monad as RedM
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Monad.Builtin hiding (constructorForm)
+import Agda.TypeChecking.CompiledClause.Match ()
+import Agda.TypeChecking.Free.Precompute
+
+import Agda.Interaction.Options
+
+import Agda.Utils.Float
+import Agda.Utils.Lens
+import Agda.Utils.List
+import Agda.Utils.Maybe
+import Agda.Utils.Memo
+import Agda.Utils.Null (empty)
+import Agda.Utils.Function
+import Agda.Utils.Functor
+import Agda.Utils.Pretty hiding ((<>))
+import Agda.Utils.Size
+import Agda.Utils.Zipper
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
+import Debug.Trace
+
+-- * Compact definitions
+
+-- This is what the memoised getConstInfo returns. We essentially pick out only the
+-- information needed for fast reduction from the definition.
+
+data CompactDef =
+  CompactDef { cdefDelayed        :: Bool
+             , cdefNonterminating :: Bool
+             , cdefUnconfirmed    :: Bool
+             , cdefDef            :: CompactDefn
+             , cdefRewriteRules   :: RewriteRules
+             }
+
+data CompactDefn
+  = CFun  { cfunCompiled  :: FastCompiledClauses, cfunProjection :: Maybe QName }
+  | CCon  { cconSrcCon :: ConHead, cconArity :: Int }
+  | CForce   -- ^ primForce
+  | CTrustMe -- ^ primTrustMe
+  | CTyCon   -- ^ Datatype or record type. Need to know this for primForce.
+  | CAxiom   -- ^ Axiom or abstract defn
+  | CPrimOp Int ([Literal] -> Term) (Maybe FastCompiledClauses)
+            -- ^ Literals in reverse argument order
+  | COther  -- ^ In this case we fall back to slow reduction
+
+data BuiltinEnv = BuiltinEnv
+  { bZero, bSuc, bTrue, bFalse, bRefl :: Maybe ConHead
+  , bPrimForce, bPrimTrustMe  :: Maybe QName }
+
+-- | Compute a 'CompactDef' from a regular definition.
+compactDef :: BuiltinEnv -> Definition -> RewriteRules -> ReduceM CompactDef
+compactDef bEnv def rewr = do
+  cdefn <-
+    case theDef def of
+      _ | Just (defName def) == bPrimForce bEnv   -> pure CForce
+      _ | Just (defName def) == bPrimTrustMe bEnv ->
+          case telView' (defType def) of
+            TelV tel _ | size tel == 4 -> pure CTrustMe
+                       | otherwise     -> pure COther
+                          -- Non-standard equality. Fall back to slow reduce.
+      Constructor{conSrcCon = c, conArity = n} -> pure CCon{cconSrcCon = c, cconArity = n}
+      Function{funCompiled = Just cc, funClauses = _:_, funProjection = proj} ->
+        pure CFun{ cfunCompiled   = fastCompiledClauses bEnv cc
+                 , cfunProjection = projOrig <$> proj }
+      Function{funClauses = []}      -> pure CAxiom
+      Function{}                     -> pure COther -- Incomplete definition
+      Datatype{dataClause = Nothing} -> pure CTyCon
+      Record{recClause = Nothing}    -> pure CTyCon
+      Datatype{}                     -> pure COther -- TODO
+      Record{}                       -> pure COther -- TODO
+      Axiom{}                        -> pure CAxiom
+      AbstractDefn{}                 -> pure CAxiom
+      Primitive{ primName = name, primCompiled = cc } ->
+        case name of
+          -- "primShowInteger" -- integers are not literals
+
+          -- Natural numbers
+          "primNatPlus"                -> mkPrim 2 $ natOp (+)
+          "primNatMinus"               -> mkPrim 2 $ natOp (\ x y -> max 0 (x - y))
+          "primNatTimes"               -> mkPrim 2 $ natOp (*)
+          "primNatDivSucAux"           -> mkPrim 4 $ natOp4 divAux
+          "primNatModSucAux"           -> mkPrim 4 $ natOp4 modAux
+          "primNatLess"                -> mkPrim 2 $ natRel (<)
+          "primNatEquality"            -> mkPrim 2 $ natRel (==)
+
+          -- Word64
+          "primWord64ToNat"            -> mkPrim 1 $ \ [LitWord64 _ a] -> nat (fromIntegral a)
+          "primWord64FromNat"          -> mkPrim 1 $ \ [LitNat _ a]    -> word (fromIntegral a)
+
+          -- Levels are not literals
+          -- "primLevelZero"
+          -- "primLevelSuc"
+          -- "primLevelMax"
+
+          -- Floats
+          "primNatToFloat"             -> mkPrim 1 $ \ [LitNat _ a] -> float (fromIntegral a)
+          "primFloatPlus"              -> mkPrim 2 $ floatOp (+)
+          "primFloatMinus"             -> mkPrim 2 $ floatOp (-)
+          "primFloatTimes"             -> mkPrim 2 $ floatOp (*)
+          "primFloatNegate"            -> mkPrim 1 $ floatFun negate
+          "primFloatDiv"               -> mkPrim 2 $ floatOp (/)
+          "primFloatEquality"          -> mkPrim 2 $ floatRel floatEq
+          "primFloatLess"              -> mkPrim 2 $ floatRel floatLt
+          "primFloatNumericalEquality" -> mkPrim 2 $ floatRel (==)
+          "primFloatNumericalLess"     -> mkPrim 2 $ floatRel (<)
+          "primFloatSqrt"              -> mkPrim 1 $ floatFun sqrt
+          -- "primRound"    -- Integers are not literals
+          -- "primFloor"
+          -- "primCeiling"
+          "primExp"                    -> mkPrim 1 $ floatFun exp
+          "primLog"                    -> mkPrim 1 $ floatFun log
+          "primSin"                    -> mkPrim 1 $ floatFun sin
+          "primCos"                    -> mkPrim 1 $ floatFun cos
+          "primTan"                    -> mkPrim 1 $ floatFun tan
+          "primASin"                   -> mkPrim 1 $ floatFun asin
+          "primACos"                   -> mkPrim 1 $ floatFun acos
+          "primATan"                   -> mkPrim 1 $ floatFun atan
+          "primATan2"                  -> mkPrim 2 $ floatOp atan2
+          "primShowFloat"              -> mkPrim 1 $ \ [LitFloat _ a] -> string (show a)
+
+          -- Characters
+          "primCharEquality"           -> mkPrim 2 $ charRel (==)
+          "primIsLower"                -> mkPrim 1 $ charPred isLower
+          "primIsDigit"                -> mkPrim 1 $ charPred isDigit
+          "primIsAlpha"                -> mkPrim 1 $ charPred isAlpha
+          "primIsSpace"                -> mkPrim 1 $ charPred isSpace
+          "primIsAscii"                -> mkPrim 1 $ charPred isAscii
+          "primIsLatin1"               -> mkPrim 1 $ charPred isLatin1
+          "primIsPrint"                -> mkPrim 1 $ charPred isPrint
+          "primIsHexDigit"             -> mkPrim 1 $ charPred isHexDigit
+          "primToUpper"                -> mkPrim 1 $ charFun toUpper
+          "primToLower"                -> mkPrim 1 $ charFun toLower
+          "primCharToNat"              -> mkPrim 1 $ \ [LitChar _ a] -> nat (fromIntegral (fromEnum a))
+          "primNatToChar"              -> mkPrim 1 $ \ [LitNat  _ a] -> char (toEnum $ fromIntegral $ a `mod` 0x110000)
+          "primShowChar"               -> mkPrim 1 $ \ a -> string (show $ pretty a)
+
+          -- Strings
+          -- "primStringToList"     -- We don't have the list builtins (but could have, TODO)
+          -- "primStringFromList"   -- and they are not literals
+          "primStringAppend"           -> mkPrim 2 $ \ [LitString _ a, LitString _ b] -> string (b ++ a)
+          "primStringEquality"         -> mkPrim 2 $ \ [LitString _ a, LitString _ b] -> bool (b == a)
+          "primShowString"             -> mkPrim 1 $ \ a -> string (show $ pretty a)
+
+          -- "primTrustMe"
+          -- "primForce"
+          -- "primForceLemma"
+          "primQNameEquality"          -> mkPrim 2 $ \ [LitQName _ a, LitQName _ b] -> bool (b == a)
+          "primQNameLess"              -> mkPrim 2 $ \ [LitQName _ a, LitQName _ b] -> bool (b < a)
+          "primShowQName"              -> mkPrim 1 $ \ [LitQName _ a] -> string (show a)
+          -- "primQNameFixity"  -- We don't have fixity builtins (TODO)
+          "primMetaEquality"           -> mkPrim 2 $ \ [LitMeta _ _ a, LitMeta _ _ b] -> bool (b == a)
+          "primMetaLess"               -> mkPrim 2 $ \ [LitMeta _ _ a, LitMeta _ _ b] -> bool (b < a)
+          "primShowMeta"               -> mkPrim 1 $ \ [LitMeta _ _ a] -> string (show (pretty a))
+
+          _                            -> pure COther
+        where
+          fcc = fastCompiledClauses bEnv <$> cc
+          mkPrim n op = pure $ CPrimOp n op fcc
+
+          divAux k m n j = k + div (max 0 $ n + m - j) (m + 1)
+          modAux k m n j | n > j     = mod (n - j - 1) (m + 1)
+                         | otherwise = k + n
+
+          ~(Just true)  = bTrue  bEnv <&> \ c -> Con c ConOSystem []
+          ~(Just false) = bFalse bEnv <&> \ c -> Con c ConOSystem []
+
+          bool   a = if a then true else false
+          nat    a = Lit . LitNat    noRange $! a
+          word   a = Lit . LitWord64 noRange $! a
+          float  a = Lit . LitFloat  noRange $! a
+          string a = Lit . LitString noRange $! a
+          char   a = Lit . LitChar   noRange $! a
+
+          -- Remember reverse order!
+          natOp f [LitNat _ a, LitNat _ b] = nat (f b a)
+          natOp _ _ = __IMPOSSIBLE__
+
+          natOp4 f [LitNat _ a, LitNat _ b, LitNat _ c, LitNat _ d] = nat (f d c b a)
+          natOp4 _ _ = __IMPOSSIBLE__
+
+          natRel f [LitNat _ a, LitNat _ b] = bool (f b a)
+          natRel _ _ = __IMPOSSIBLE__
+
+          floatFun f [LitFloat _ a] = float (f a)
+          floatFun _ _ = __IMPOSSIBLE__
+
+          floatOp f [LitFloat _ a, LitFloat _ b] = float (f b a)
+          floatOp _ _ = __IMPOSSIBLE__
+
+          floatRel f [LitFloat _ a, LitFloat _ b] = bool (f b a)
+          floatRel _ _ = __IMPOSSIBLE__
+
+          charFun f [LitChar _ a] = char (f a)
+          charFun _ _ = __IMPOSSIBLE__
+
+          charPred f [LitChar _ a] = bool (f a)
+          charPred _ _ = __IMPOSSIBLE__
+
+          charRel f [LitChar _ a, LitChar _ b] = bool (f b a)
+          charRel _ _ = __IMPOSSIBLE__
+
+  return $
+    CompactDef { cdefDelayed        = defDelayed def == Delayed
+               , cdefNonterminating = defNonterminating def
+               , cdefUnconfirmed    = defTerminationUnconfirmed def
+               , cdefDef            = cdefn
+               , cdefRewriteRules   = rewr
+               }
+
+-- Faster case trees ------------------------------------------------------
+
+data FastCase c = FBranches
+  { fprojPatterns   :: Bool
+    -- ^ We are constructing a record here (copatterns).
+    --   'conBranches' lists projections.
+  , fconBranches    :: Map NameId c
+    -- ^ Map from constructor (or projection) names to their arity
+    --   and the case subtree.  (Projections have arity 0.)
+  , fsucBranch      :: Maybe c
+  , flitBranches    :: Map Literal c
+    -- ^ Map from literal to case subtree.
+  , fcatchAllBranch :: Maybe c
+    -- ^ (Possibly additional) catch-all clause.
+  }
+
+noBranches :: FastCase a
+noBranches = FBranches{ fprojPatterns   = False
+                      , fconBranches    = Map.empty
+                      , fsucBranch      = Nothing
+                      , flitBranches    = Map.empty
+                      , fcatchAllBranch = Nothing }
+
+-- | Case tree with bodies.
+
+data FastCompiledClauses
+  = FCase Int (FastCase FastCompiledClauses)
+    -- ^ @Case n bs@ stands for a match on the @n@-th argument
+    -- (counting from zero) with @bs@ as the case branches.
+    -- If the @n@-th argument is a projection, we have only 'conBranches'
+    -- with arity 0.
+  | FEta Int [QName] FastCompiledClauses (Maybe FastCompiledClauses)
+    -- ^ Match on record constructor. Can still have a catch-all though. Just
+    --   contains the fields, not the actual constructor.
+  | FDone [Arg ArgName] Term
+    -- ^ @Done xs b@ stands for the body @b@ where the @xs@ contains hiding
+    --   and name suggestions for the free variables. This is needed to build
+    --   lambdas on the right hand side for partial applications which can
+    --   still reduce.
+  | FFail
+    -- ^ Absurd case.
+
+fastCompiledClauses :: BuiltinEnv -> CompiledClauses -> FastCompiledClauses
+fastCompiledClauses bEnv cc =
+  case cc of
+    Fail              -> FFail
+    Done xs b         -> FDone xs b
+    Case (Arg _ n) Branches{ etaBranch = Just (c, cc), catchAllBranch = ca } ->
+      FEta n (conFields c) (fastCompiledClauses bEnv $ content cc) (fastCompiledClauses bEnv <$> ca)
+    Case (Arg _ n) bs -> FCase n (fastCase bEnv bs)
+
+fastCase :: BuiltinEnv -> Case CompiledClauses -> FastCase FastCompiledClauses
+fastCase env (Branches proj con _ lit wild _) =
+  FBranches
+    { fprojPatterns   = proj
+    , fconBranches    = Map.mapKeysMonotonic (nameId . qnameName) $ fmap (fastCompiledClauses env . content) (stripSuc con)
+    , fsucBranch      = fmap (fastCompiledClauses env . content) $ flip Map.lookup con . conName =<< bSuc env
+    , flitBranches    = fmap (fastCompiledClauses env) lit
+    , fcatchAllBranch = fmap (fastCompiledClauses env) wild }
+  where
+    stripSuc | Just c <- bSuc env = Map.delete (conName c)
+             | otherwise          = id
+
+
+{-# INLINE lookupCon #-}
+lookupCon :: QName -> FastCase c -> Maybe c
+lookupCon c (FBranches _ cons _ _ _) = Map.lookup (nameId $ qnameName c) cons
+
+-- QName memo -------------------------------------------------------------
+
+{-# NOINLINE memoQName #-}
+memoQName :: (QName -> a) -> (QName -> a)
+memoQName f = unsafePerformIO $ do
+  tbl <- newIORef Map.empty
+  return (unsafePerformIO . f' tbl)
+  where
+    f' tbl x = do
+      let i = nameId (qnameName x)
+      m <- readIORef tbl
+      case Map.lookup i m of
+        Just y  -> return y
+        Nothing -> do
+          let y = f x
+          writeIORef tbl (Map.insert i y m)
+          return y
+
+-- * Fast reduction
+
+data Normalisation = WHNF | NF
+  deriving (Eq)
+
+data ReductionFlags = ReductionFlags
+  { allowNonTerminating :: Bool
+  , allowUnconfirmed    :: Bool
+  , hasRewriting        :: Bool }
+
+-- | The entry point to the reduction machine.
+fastReduce :: Term -> ReduceM (Blocked Term)
+fastReduce = fastReduce' WHNF
+
+fastNormalise :: Term -> ReduceM Term
+fastNormalise v = ignoreBlocking <$> fastReduce' NF v
+
+fastReduce' :: Normalisation -> Term -> ReduceM (Blocked Term)
+fastReduce' norm v = do
+  let name (Con c _ _) = c
+      name _         = __IMPOSSIBLE__
+  zero    <- fmap name <$> getBuiltin' builtinZero
+  suc     <- fmap name <$> getBuiltin' builtinSuc
+  true    <- fmap name <$> getBuiltin' builtinTrue
+  false   <- fmap name <$> getBuiltin' builtinFalse
+  refl    <- fmap name <$> getBuiltin' builtinRefl
+  force   <- fmap primFunName <$> getPrimitive' "primForce"
+  trustme <- fmap primFunName <$> getPrimitive' "primTrustMe"
+  let bEnv = BuiltinEnv { bZero = zero, bSuc = suc, bTrue = true, bFalse = false, bRefl = refl,
+                          bPrimForce = force, bPrimTrustMe = trustme }
+  allowedReductions <- asks envAllowedReductions
+  rwr <- optRewriting <$> pragmaOptions
+  constInfo <- unKleisli $ \f -> do
+    info <- getConstInfo f
+    rewr <- if rwr then instantiateRewriteRules =<< getRewriteRulesFor f
+                   else return []
+    compactDef bEnv info rewr
+  let flags = ReductionFlags{ allowNonTerminating = elem NonTerminatingReductions allowedReductions
+                            , allowUnconfirmed    = elem UnconfirmedReductions allowedReductions
+                            , hasRewriting        = rwr }
+  ReduceM $ \ redEnv -> reduceTm redEnv bEnv (memoQName constInfo) norm flags v
+
+unKleisli :: (a -> ReduceM b) -> ReduceM (a -> b)
+unKleisli f = ReduceM $ \ env x -> unReduceM (f x) env
+
+-- * Closures
+
+-- | The abstract machine represents terms as closures containing a 'Term', an environment, and a
+--   spine of eliminations. Note that the environment doesn't necessarily bind all variables in the
+--   term. The variables in the context in which the abstract machine is started are free in
+--   closures. The 'IsValue' argument tracks whether the closure is in weak-head normal form.
+data Closure s = Closure IsValue Term (Env s) (Spine s)
+                 -- ^ The environment applies to the 'Term' argument. The spine contains closures
+                 --   with their own environments.
+
+-- | Used to track if a closure is @Unevaluated@ or a @Value@ (in weak-head normal form), and if so
+--   why it cannot reduce further.
+data IsValue = Value Blocked_ | Unevaled
+
+-- | The spine is a list of eliminations. Application eliminations contain pointers.
+type Spine s = [Elim' (Pointer s)]
+
+isValue :: Closure s -> IsValue
+isValue (Closure isV _ _ _) = isV
+
+setIsValue :: IsValue -> Closure s -> Closure s
+setIsValue isV (Closure _ t env spine) = Closure isV t env spine
+
+-- | Apply a closure to a spine of eliminations. Note that this does not preserve the 'IsValue'
+--   field.
+clApply :: Closure s -> Spine s -> Closure s
+clApply c [] = c
+clApply (Closure _ t env es) es' = Closure Unevaled t env (es <> es')
+
+-- | Apply a closure to a spine, preserving the 'IsValue' field. Use with care, since usually
+--   eliminations do not preserve the value status.
+clApply_ :: Closure s -> Spine s -> Closure s
+clApply_ c [] = c
+clApply_ (Closure b t env es) es' = Closure b t env (es <> es')
+
+-- * Pointers and thunks
+
+-- | Spines and environments contain pointers to closures to enable call-by-need evaluation.
+data Pointer s = Pure (Closure s)
+                 -- ^ Not a pointer. Used for closures that do not need to be shared to avoid
+                 --   unnecessary updates.
+               | Pointer {-# UNPACK #-} !(STPointer s)
+                 -- ^ An actual pointer is an 'STRef' to a 'Thunk'. The thunk is set to 'BlackHole'
+                 --   during the evaluation of its contents to make debugging loops easier.
+
+type STPointer s = STRef s (Thunk (Closure s))
+
+-- | A thunk is either a black hole or contains a value.
+data Thunk a = BlackHole | Thunk a
+  deriving (Functor)
+
+derefPointer :: Pointer s -> ST s (Thunk (Closure s))
+derefPointer (Pure x)      = return (Thunk x)
+derefPointer (Pointer ptr) = readSTRef ptr
+
+-- | In most cases pointers that we dereference do not contain black holes.
+derefPointer_ :: Pointer s -> ST s (Closure s)
+derefPointer_ ptr = do
+  Thunk cl <- derefPointer ptr
+  return cl
+
+-- | Only use for debug printing!
+unsafeDerefPointer :: Pointer s -> Thunk (Closure s)
+unsafeDerefPointer (Pure x)    = Thunk x
+unsafeDerefPointer (Pointer p) = unsafePerformIO (unsafeSTToIO (readSTRef p))
+
+readPointer :: STPointer s -> ST s (Thunk (Closure s))
+readPointer = readSTRef
+
+storePointer :: STPointer s -> Closure s -> ST s ()
+storePointer ptr !cl = writeSTRef ptr (Thunk cl)
+    -- Note the strict match. To prevent leaking memory in case of unnecessary updates.
+
+blackHole :: STPointer s -> ST s ()
+blackHole ptr = writeSTRef ptr BlackHole
+
+-- | Create a thunk. If the closure is a naked variable we can reuse the pointer from the
+--   environment to avoid creating long pointer chains.
+createThunk :: Closure s -> ST s (Pointer s)
+createThunk (Closure _ (Var x []) env spine)
+  | null spine, Just p <- lookupEnv x env = return p
+createThunk cl = Pointer <$> newSTRef (Thunk cl)
+
+-- | Create a thunk that is not shared or updated.
+pureThunk :: Closure s -> Pointer s
+pureThunk = Pure
+
+-- * Environments
+
+-- | The environment of a closure binds pointers to deBruijn indicies.
+newtype Env s = Env [Pointer s]
+
+emptyEnv :: Env s
+emptyEnv = Env []
+
+isEmptyEnv :: Env s -> Bool
+isEmptyEnv (Env xs) = null xs
+
+envSize :: Env s -> Int
+envSize (Env xs) = length xs
+
+envToList :: Env s -> [Pointer s]
+envToList (Env xs) = xs
+
+extendEnv :: Pointer s -> Env s -> Env s
+extendEnv p (Env xs) = Env (p : xs)
+
+-- | Unsafe.
+lookupEnv_ :: Int -> Env s -> Pointer s
+lookupEnv_ i (Env e) = e !! i
+
+lookupEnv :: Int -> Env s -> Maybe (Pointer s)
+lookupEnv i e | i < n     = Just (lookupEnv_ i e)
+              | otherwise = Nothing
+  where n = envSize e
+
+-- * The Agda Abstract Machine
+
+-- | The abstract machine state has two states 'Eval' and 'Match' that determine what the machine is
+--   currently working on: evaluating a closure in the Eval state and matching a spine against a
+--   case tree in the Match state. Both states contain a 'ControlStack' of continuations for what to
+--   do next. The heap is maintained implicitly using 'STRef's, hence the @s@ parameter.
+data AM s = Eval (Closure s) !(ControlStack s)
+            -- ^ Evaluate the given closure (the focus) to weak-head normal form. If the 'IsValue'
+            --   field of the closure is 'Value' we look at the control stack for what to do. Being
+            --   strict in the control stack is important! We can spend a lot of steps with
+            --   unevaluated closures (where we update, but don't look at the control stack). For
+            --   instance, long chains of 'suc' constructors.
+          | Match QName FastCompiledClauses (Spine s) (MatchStack s) (ControlStack s)
+            -- ^ @Match f cc spine stack ctrl@ Match the arguments @spine@ against the case tree
+            --   @cc@. The match stack contains a (possibly empty) list of 'CatchAll' frames and a
+            --   closure to return in case of a stuck match.
+
+-- | The control stack contains a list of continuations, i.e. what to do with
+--   the result of the current focus.
+type ControlStack s = [ControlFrame s]
+
+-- | The control stack for matching. Contains a list of CatchAllFrame's and the closure to return in
+--   case of a stuck match.
+data MatchStack s = [CatchAllFrame s] :> Closure s
+infixr 2 :>, >:
+
+(>:) :: CatchAllFrame s -> MatchStack s -> MatchStack s
+c >: cs :> cl = c : cs :> cl
+
+data CatchAllFrame s = CatchAll FastCompiledClauses (Spine s)
+                        -- ^ @CatchAll cc spine@. Case trees are not fully expanded, that is,
+                        --   inner matches can be partial and covered by a catch-all at a higher
+                        --   level. This catch-all is represented on the match stack as a
+                        --   @CatchAll@. @cc@ is the case tree in the catch-all case and @spine@ is
+                        --   the value of the pattern variables at the point of the catch-all.
+
+-- An Elim' with a hole.
+data ElimZipper a = ApplyCxt ArgInfo
+  deriving (Eq, Ord, Show, Functor, Foldable, Traversable)
+
+instance Zipper (ElimZipper a) where
+  type Carrier (ElimZipper a) = Elim' a
+  type Element (ElimZipper a) = a
+  firstHole (Apply arg)   = Just (unArg arg, ApplyCxt (argInfo arg))
+  firstHole Proj{}        = Nothing
+  plugHole x (ApplyCxt i) = Apply (Arg i x)
+  nextHole x c            = Left (plugHole x c)
+
+-- | A spine with a single hole for a pointer.
+type SpineContext s = ComposeZipper (ListZipper (Elim' (Pointer s)))
+                                    (ElimZipper (Pointer s))
+
+-- | Control frames are continuations that act on value closures.
+data ControlFrame s = CaseK QName ArgInfo (FastCase FastCompiledClauses) (Spine s) (Spine s) (MatchStack s)
+                        -- ^ @CaseK f i bs spine0 spine1 stack@. Pattern match on the focus (with
+                        --   arg info @i@) using the @bs@ case tree. @f@ is the name of the function
+                        --   doing the matching, and @spine0@ and @spine1@ are the values bound to
+                        --   the pattern variables to the left and right (respectively) of the
+                        --   focus. The match stack contains catch-all cases we need to consider if
+                        --   this match fails.
+                    | ArgK (Closure s) (SpineContext s)
+                        -- ^ @ArgK cl cxt@. Used when computing full normal forms. The closure is
+                        --   the head and the context is the spine with the current focus removed.
+                    | NormaliseK
+                        -- ^ Indicates that the focus should be evaluated to full normal form.
+                    | ForceK QName (Spine s) (Spine s)
+                        -- ^ @ForceK f spine0 spine1@. Evaluating @primForce@ of the focus. @f@ is
+                        --   the name of @primForce@ and is used to build the result if evaluation
+                        --   gets stuck. @spine0@ are the level and type arguments and @spine1@
+                        --   contains (if not empty) the continuation and any additional
+                        --   eliminations.
+                    | TrustMeK QName (Spine s) (Spine s) (Spine s)
+                        -- ^ @TrustMeK f spine0 spine1 spine2 @. Evaluating @primTrustMe@. The first
+                        --   spine contain the level and type arguments. @spine1@ and @spine2@
+                        --   contain at most one argument between them. If in @spine1@ it's the
+                        --   value closure of the first argument to be compared and if in @spine2@
+                        --   it's the unevaluated closure of the second argument.
+                    | NatSucK Integer
+                        -- ^ @NatSucK n@. Add @n@ to the focus. If the focus computes to a natural
+                        --   number literal this returns a new literal, otherwise it constructs @n@
+                        --   calls to @suc@.
+                    | PrimOpK QName ([Literal] -> Term) [Literal] [Pointer s] (Maybe FastCompiledClauses)
+                        -- ^ @PrimOpK f op lits es cc@. Evaluate the primitive function @f@ using
+                        --   the Haskell function @op@. @op@ gets a list of literal values in
+                        --   reverse order for the arguments of @f@ and computes the result as a
+                        --   term. The already computed arguments (in reverse order) are @lits@ and
+                        --   @es@ are the arguments that should be computed after the current focus.
+                        --   In case of built-in functions with corresponding Agda implementations,
+                        --   @cc@ contains the case tree.
+                    | UpdateThunk [STPointer s]
+                        -- ^ @UpdateThunk ps@. Update the pointers @ps@ with the value of the
+                        --   current focus.
+                    | ApplyK (Spine s)
+                        -- ^ @ApplyK spine@. Apply the current focus to the eliminations in @spine@.
+                        --   This is used when a thunk needs to be updated with a partial
+                        --   application of a function.
+
+-- * Compilation and decoding
+
+-- | The initial abstract machine state. Wrap the term to be evaluated in an empty closure. Note
+--   that free variables of the term are treated as constants by the abstract machine. If computing
+--   full normal form we start off the control stack with a 'NormaliseK' continuation.
+compile :: Normalisation -> Term -> AM s
+compile nf t = Eval (Closure Unevaled t emptyEnv []) [NormaliseK | nf == NF]
+
+-- | The abstract machine treats uninstantiated meta-variables as blocked, but the rest of Agda does
+--   not.
+topMetaIsNotBlocked :: Blocked Term -> Blocked Term
+topMetaIsNotBlocked (Blocked _ t@MetaV{}) = notBlocked t
+topMetaIsNotBlocked b = b
+
+decodePointer :: Pointer s -> ST s Term
+decodePointer p = decodeClosure_ =<< derefPointer_ p
+
+-- | Note: it's important to be lazy in the spine and environment when decoding. Hence the
+--   'unsafeInterleaveST' here and in 'decodeEnv', and the special version of 'parallelS' in
+--   'decodeClosure'.
+decodeSpine :: Spine s -> ST s Elims
+decodeSpine spine = unsafeInterleaveST $ (traverse . traverse) decodePointer spine
+
+decodeEnv :: Env s -> ST s [Term]
+decodeEnv env = unsafeInterleaveST $ traverse decodePointer (envToList env)
+
+decodeClosure_ :: Closure s -> ST s Term
+decodeClosure_ = ignoreBlocking <.> decodeClosure
+
+-- | Turning an abstract machine closure back into a term. This happens in three cases:
+--    * when reduction is finished and we return the weak-head normal term to the outside world.
+--    * when the abstract machine encounters something it cannot handle and falls back to the slow
+--      reduction engine
+--    * when there are rewrite rules to apply
+decodeClosure :: Closure s -> ST s (Blocked Term)
+decodeClosure (Closure isV t env spine) = do
+    vs <- decodeEnv env
+    es <- decodeSpine spine
+    return $ topMetaIsNotBlocked (applyE (applySubst (parS vs) t) es <$ b)
+  where
+    parS = foldr (:#) IdS  -- parallelS is too strict
+    b    = case isV of
+             Value b  -> b
+             Unevaled -> notBlocked ()  -- only when falling back to slow reduce in which case the
+                                        -- blocking tag is immediately discarded
+
+-- | Turn a list of internal syntax eliminations into a spine. This builds closures and allocates
+--   thunks for all the 'Apply' elims.
+elimsToSpine :: Env s -> Elims -> ST s (Spine s)
+elimsToSpine env es = do
+    spine <- mapM thunk es
+    forceSpine spine `seq` return spine
+  where
+    -- Need to be strict in mkClosure to avoid memory leak
+    forceSpine = foldl (\ () -> forceEl) ()
+    forceEl (Apply (Arg _ (Pure Closure{}))) = ()
+    forceEl (Apply (Arg _ (Pointer{})))      = ()
+    forceEl _                                = ()
+
+    -- We don't preserve free variables of closures (in the sense of their
+    -- decoding), since we freely add things to the spines.
+    unknownFVs = setFreeVariables unknownFreeVariables
+
+    thunk (Apply (Arg i t)) = Apply . Arg (unknownFVs i) <$> createThunk (closure (getFreeVariables i) t)
+    thunk (Proj o f)        = return (Proj o f)
+
+    -- Going straight for a value for literals is mostly to make debug traces
+    -- less verbose and doesn't really buy anything performance-wise.
+    closure _ t@Lit{} = Closure (Value $ notBlocked ()) t emptyEnv []
+    closure fv t      = env' `seq` Closure Unevaled t env' []
+      where env' = trimEnvironment fv env
+
+-- | Trim unused entries from an environment. Currently only trims closed terms for performance
+--   reasons.
+trimEnvironment :: FreeVariables -> Env s -> Env s
+trimEnvironment UnknownFVs env = env
+trimEnvironment (KnownFVs fvs) env
+  | IntSet.null fvs = emptyEnv
+    -- Environment trimming is too expensive (costs 50% on some benchmarks), and while it does make
+    -- some cases run in constant instead of linear space you need quite contrived examples to
+    -- notice the effect.
+  | otherwise       = env -- Env $ trim 0 $ envToList env
+  where
+    -- Important: strict enough that the trimming actually happens
+    trim _ [] = []
+    trim i (p : ps)
+      | IntSet.member i fvs = (p :)             $! trim (i + 1) ps
+      | otherwise           = (unusedPointer :) $! trim (i + 1) ps
+
+-- | Build an environment for a body with some given free variables from a spine of arguments.
+--   Returns a triple containing
+--    * the left-over variable names (in case of partial application)
+--    * the environment
+--    * the remaining spine (in case of over-application)
+buildEnv :: [Arg String] -> Spine s -> ([Arg String], Env s, Spine s)
+buildEnv xs spine = go xs spine emptyEnv
+  where
+    go [] sp env = ([], env, sp)
+    go xs0@(x : xs) sp env =
+      case sp of
+        []           -> (xs0, env, sp)
+        Apply c : sp -> go xs sp (unArg c `extendEnv` env)
+        _            -> __IMPOSSIBLE__
+
+unusedPointerString :: String
+unusedPointerString = show (Impossible __FILE__ __LINE__)
+
+unusedPointer :: Pointer s
+unusedPointer = Pure (Closure (Value $ notBlocked ())
+                     (Lit (LitString noRange unusedPointerString)) emptyEnv [])
+
+-- * Running the abstract machine
+
+-- | Evaluating a term in the abstract machine. It gets the type checking state and environment in
+--   the 'ReduceEnv' argument, some precomputed built-in mappings in 'BuiltinEnv', the memoised
+--   'getConstInfo' function, a couple of flags (allow non-terminating function unfolding, and
+--   whether rewriting is enabled), and a term to reduce. The result is the weak-head normal form of
+--   the term with an attached blocking tag.
+reduceTm :: ReduceEnv -> BuiltinEnv -> (QName -> CompactDef) -> Normalisation -> ReductionFlags -> Term -> Blocked Term
+reduceTm rEnv bEnv !constInfo normalisation ReductionFlags{..} =
+    compileAndRun . traceDoc (text "-- fast reduce --")
+  where
+    -- Helpers to get information from the ReduceEnv.
+    metaStore      = redSt rEnv ^. stMetaStore
+    getMeta m      = maybe __IMPOSSIBLE__ mvInstantiation (Map.lookup m metaStore)
+    partialDefs    = runReduce getPartialDefs
+    rewriteRules f = cdefRewriteRules (constInfo f)
+    callByNeed     = envCallByNeed (redEnv rEnv)
+
+    runReduce :: ReduceM a -> a
+    runReduce m = unReduceM m rEnv
+
+    -- Debug output. Taking care that we only look at the verbosity level once.
+    hasVerb tag lvl = unReduceM (hasVerbosity tag lvl) rEnv
+    doDebug = hasVerb "tc.reduce.fast" 110
+    traceDoc :: Doc -> a -> a
+    traceDoc
+      | doDebug   = trace . show
+      | otherwise = const id
+
+    -- Checking for built-in zero and suc
+    BuiltinEnv{ bZero = zero, bSuc = suc, bRefl = refl0 } = bEnv
+    conNameId = nameId . qnameName . conName
+    isZero = case zero of
+               Nothing -> const False
+               Just z  -> (conNameId z ==) . conNameId
+    isSuc  = case suc of
+               Nothing -> const False
+               Just s  -> (conNameId s ==) . conNameId
+
+    -- If there's a non-standard equality (for instance doubly-indexed) we fall back to slow reduce
+    -- for primTrustMe and "unbind" refl.
+    refl = refl0 >>= \ c -> if cconArity (cdefDef $ constInfo $ conName c) == 0
+                            then Just c else Nothing
+
+    -- The entry point of the machine.
+    compileAndRun :: Term -> Blocked Term
+    compileAndRun t = runST (runAM (compile normalisation t))
+
+    -- Run the machine in a given state. Prints the state if the right verbosity level is active.
+    runAM :: AM s -> ST s (Blocked Term)
+    runAM = if doDebug then \ s -> trace (prettyShow s) (runAM' s)
+                       else runAM'
+
+    -- The main function. This is where the stuff happens!
+    runAM' :: AM s -> ST s (Blocked Term)
+
+    -- Base case: The focus is a value closure and the control stack is empty. Decode and return.
+    runAM' (Eval cl@(Closure Value{} _ _ _) []) = decodeClosure cl
+
+    -- Unevaluated closure: inspect the term and take the appropriate action. For instance,
+    --  - Change to the 'Match' state if a definition
+    --  - Look up in the environment if variable
+    --  - Perform a beta step if lambda and application elimination in the spine
+    --  - Perform a record beta step if record constructor and projection elimination in the spine
+    runAM' s@(Eval cl@(Closure Unevaled t env spine) !ctrl) = {-# SCC "runAM.Eval" #-}
+      case t of
+
+        -- Case: definition. Enter 'Match' state if defined function or shift to evaluating an
+        -- argument and pushing the appropriate control frame for primitive functions. Fall back to
+        -- slow reduce for unsupported definitions.
+        Def f [] ->
+          let CompactDef{ cdefDelayed        = delayed
+                        , cdefNonterminating = nonterm
+                        , cdefUnconfirmed    = unconf
+                        , cdefDef            = def } = constInfo f
+              dontUnfold = (nonterm && not allowNonTerminating) ||
+                           (unconf  && not allowUnconfirmed)    ||
+                           (delayed && not (unfoldDelayed ctrl))
+          in case def of
+            CFun{ cfunCompiled = cc }
+              | dontUnfold -> rewriteAM done
+              | otherwise  -> runAM (Match f cc spine ([] :> cl) ctrl)
+            CAxiom         -> rewriteAM done
+            CTyCon         -> rewriteAM done
+            CCon{}         -> runAM done   -- Only happens for builtinSharp (which is a Def when you bind it)
+            CForce | (spine0, Apply v : spine1) <- splitAt 4 spine ->
+              evalPointerAM (unArg v) [] (ForceK f spine0 spine1 : ctrl)
+            CForce -> runAM done -- partially applied
+            CTrustMe | (spine0, Apply v : spine1) <- splitAt 2 spine ->
+              evalPointerAM (unArg v) [] (TrustMeK f spine0 [] spine1 : ctrl)
+            CTrustMe -> runAM done -- partially applied
+            CPrimOp n op cc | length spine == n,                      -- PrimOps can't be over-applied. They don't
+                              Just (v : vs) <- allApplyElims spine -> -- return functions or records.
+              evalPointerAM (unArg v) [] (PrimOpK f op [] (map unArg vs) cc : ctrl)
+            CPrimOp{} -> runAM done  -- partially applied
+            COther    -> fallbackAM s
+
+        -- Case: zero. Return value closure with literal 0.
+        Con c i [] | isZero c ->
+          runAM (evalTrueValue (Lit (LitNat noRange 0)) emptyEnv spine ctrl)
+
+        -- Case: suc. Suc is strict in its argument to make sure we return a literal whenever
+        -- possible. Push a 'NatSucK' frame on the control stack and evaluate the argument.
+        Con c i [] | isSuc c, Apply v : _ <- spine ->
+          evalPointerAM (unArg v) [] (sucCtrl ctrl)
+
+        -- Case: constructor. Perform beta reduction if projected from, otherwise return a value.
+        Con c i [] ->
+          case splitAt ar spine of
+            (args, Proj _ p : spine') -> evalPointerAM (unArg arg) spine' ctrl
+              where
+                fields    = conFields c
+                Just n    = List.elemIndex p fields
+                Apply arg = args !! n
+            _ -> rewriteAM (evalTrueValue (Con c' i []) env spine ctrl)
+          where CCon{cconSrcCon = c', cconArity = ar} = cdefDef (constInfo (conName c))
+
+        -- Case: variable. Look up the variable in the environment and evaluate the resulting
+        -- pointer. If the variable is not in the environment it's a free variable and we adjust the
+        -- deBruijn index appropriately.
+        Var x []   ->
+          case lookupEnv x env of
+            Nothing -> runAM (evalValue (notBlocked ()) (Var (x - envSize env) []) emptyEnv spine ctrl)
+            Just p  -> evalPointerAM p spine ctrl
+
+        -- Case: lambda. Perform the beta reduction if applied. Otherwise it's a value.
+        Lam h b ->
+          case spine of
+            Apply v : spine' ->
+              case b of
+                Abs   _ b -> runAM (evalClosure b (unArg v `extendEnv` env) spine' ctrl)
+                NoAbs _ b -> runAM (evalClosure b env spine' ctrl)
+            [] -> runAM done
+            _ -> __IMPOSSIBLE__
+
+        -- Case: values. Literals and function types are already in weak-head normal form.
+        -- We throw away the environment for literals mostly to make debug printing less verbose.
+        -- And we know the spine is empty since literals cannot be applied or projected.
+        Lit{} -> runAM (evalTrueValue t emptyEnv [] ctrl)
+        Pi{}  -> runAM done
+
+        -- Case: non-empty spine. If the focused term has a non-empty spine, we shift the
+        -- eliminations onto the spine.
+        Def f   es -> shiftElims (Def f   []) emptyEnv env es
+        Con c i es -> shiftElims (Con c i []) emptyEnv env es
+        Var x   es -> shiftElims (Var x   []) env      env es
+
+        -- Case: metavariable. If it's instantiated evaluate the value. Meta instantiations are open
+        -- terms with a specified list of free variables. buildEnv constructs the appropriate
+        -- environment for the closure. Avoiding shifting spines for open metas
+        -- save a bit of performance.
+        MetaV m es ->
+          case getMeta m of
+            InstV xs t -> do
+              spine' <- elimsToSpine env es
+              let (zs, env, !spine'') = buildEnv xs (spine' <> spine)
+              runAM (evalClosure (lams zs t) env spine'' ctrl)
+            _ -> runAM (Eval (mkValue (blocked m ()) cl) ctrl)
+
+        -- Case: unsupported. These terms are not handled by the abstract machine, so we fall back
+        -- to slowReduceTerm for these.
+        Level{}    -> fallbackAM s
+        Sort{}     -> fallbackAM s
+        DontCare{} -> fallbackAM s
+
+      where done = Eval (mkValue (notBlocked ()) cl) ctrl
+            shiftElims t env0 env es = do
+              spine' <- elimsToSpine env es
+              runAM (evalClosure t env0 (spine' <> spine) ctrl)
+
+    -- If the current focus is a value closure, we look at the control stack.
+
+    -- Case NormaliseK: The focus is a weak-head value that should be fully normalised.
+    runAM' s@(Eval cl@(Closure b t env spine) (NormaliseK : ctrl)) =
+      case t of
+        Def _   [] -> normaliseArgsAM (Closure b t emptyEnv []) spine ctrl
+        Con _ _ [] -> normaliseArgsAM (Closure b t emptyEnv []) spine ctrl
+        Var _   [] -> normaliseArgsAM (Closure b t emptyEnv []) spine ctrl
+        MetaV _ [] -> normaliseArgsAM (Closure b t emptyEnv []) spine ctrl
+
+        Lit{} -> runAM done
+
+        -- We might get these from fallbackAM
+        Def f   es -> shiftElims (Def f   []) emptyEnv env es
+        Con c i es -> shiftElims (Con c i []) emptyEnv env es
+        Var x   es -> shiftElims (Var x   []) env      env es
+        MetaV m es -> shiftElims (MetaV m []) emptyEnv env es
+
+        _ -> fallbackAM s -- fallbackAM knows about NormaliseK
+
+      where done = Eval (mkValue (notBlocked ()) cl) ctrl
+            shiftElims t env0 env es = do
+              spine' <- elimsToSpine env es
+              runAM (Eval (Closure b t env0 (spine' <> spine)) (NormaliseK : ctrl))
+
+    -- Case: ArgK: We successfully normalised an argument. Start on the next argument, or if there
+    -- isn't one we're done.
+    runAM' (Eval cl (ArgK cl0 cxt : ctrl)) =
+      case nextHole (pureThunk cl) cxt of
+        Left spine      -> runAM (Eval (clApply_ cl0 spine) ctrl)
+        Right (p, cxt') -> evalPointerAM p [] (NormaliseK : ArgK cl0 cxt' : ctrl)
+
+    -- Case: NatSucK m
+
+    -- If literal add m to the literal,
+    runAM' (Eval cl@(Closure Value{} (Lit (LitNat r n)) _ _) (NatSucK m : ctrl)) =
+      runAM (evalTrueValue (Lit $! LitNat r $! m + n) emptyEnv [] ctrl)
+
+    -- otherwise apply 'suc' m times.
+    runAM' (Eval cl (NatSucK m : ctrl)) =
+        runAM (Eval (mkValue (notBlocked ()) $ plus m cl) ctrl)
+      where
+        plus 0 cl = cl
+        plus n cl =
+          trueValue (Con (fromMaybe __IMPOSSIBLE__ suc) ConOSystem []) emptyEnv $
+                     Apply (defaultArg arg) : []
+          where arg = pureThunk (plus (n - 1) cl)
+
+    -- Case: PrimOpK
+
+    -- If literal apply the primitive function if no more arguments, otherwise
+    -- store the literal in the continuation and evaluate the next argument.
+    runAM' (Eval (Closure _ (Lit a) _ _) (PrimOpK f op vs es cc : ctrl)) =
+      case es of
+        []      -> runAM (evalTrueValue (op (a : vs)) emptyEnv [] ctrl)
+        e : es' -> evalPointerAM e [] (PrimOpK f op (a : vs) es' cc : ctrl)
+
+    -- If not a literal we use the case tree if there is one, otherwise we are stuck.
+    runAM' (Eval cl@(Closure (Value blk) _ _ _) (PrimOpK f _ vs es mcc : ctrl)) =
+      case mcc of
+        Nothing -> rewriteAM (Eval stuck ctrl)
+        Just cc -> runAM (Match f cc spine ([] :> notstuck) ctrl)
+      where
+        p         = pureThunk cl
+        lits      = map (pureThunk . litClos) (reverse vs)
+        spine     = fmap (Apply . defaultArg) $ lits <> [p] <> es
+        stuck     = Closure (Value blk) (Def f []) emptyEnv spine
+        notstuck  = Closure Unevaled    (Def f []) emptyEnv spine
+        litClos l = trueValue (Lit l) emptyEnv []
+
+    -- Case: ForceK. Here we need to check if the argument is a canonical form (i.e. not a variable
+    -- or stuck function call) and if so apply the function argument to the value. If it's not
+    -- canonical we are stuck.
+    runAM' (Eval arg@(Closure (Value blk) t _ _) (ForceK pf spine0 spine1 : ctrl))
+      | isCanonical t =
+        case spine1 of
+          Apply k : spine' ->
+            evalPointerAM (unArg k) (elim : spine') ctrl
+          [] -> -- Partial application of primForce to canonical argument, return λ k → k arg.
+            runAM (evalTrueValue (lam (defaultArg "k") $ Var 0 [Apply $ defaultArg $ Var 1 []])
+                                 (argPtr `extendEnv` emptyEnv) [] ctrl)
+          _ -> __IMPOSSIBLE__
+      | otherwise = rewriteAM (Eval stuck ctrl)
+      where
+        argPtr = pureThunk arg
+        elim   = Apply (defaultArg argPtr)
+        spine' = spine0 <> [elim] <> spine1
+        stuck  = Closure (Value blk) (Def pf []) emptyEnv spine'
+
+        isCanonical u = case u of
+          Lit{}      -> True
+          Con{}      -> True
+          Lam{}      -> True
+          Pi{}       -> True
+          Sort{}     -> True
+          Level{}    -> True
+          DontCare{} -> True
+          MetaV{}    -> False
+          Var{}      -> False
+          Def q _  -- Type constructors (data/record) are considered canonical for 'primForce'.
+            | CTyCon <- cdefDef (constInfo q) -> True
+            | otherwise                       -> False
+
+    -- Case: TrustMeK. We evaluate both arguments to values, then do a simple check for the easy
+    -- cases and otherwise fall back to slow reduce.
+    runAM' (Eval cl2@(Closure Value{} arg2 _ _) (TrustMeK f spine0 [Apply p1] _ : ctrl)) = do
+      cl1@(Closure _ arg1 _ sp1) <- derefPointer_ (unArg p1)
+      case (arg1, arg2) of
+        (Lit l1, Lit l2) | l1 == l2, isJust refl ->
+          runAM (evalTrueValue (Con (fromJust refl) ConOSystem []) emptyEnv [] ctrl)
+        _ ->
+          fallbackAM (evalClosure (Def f []) emptyEnv (spine0 ++ map (Apply . hide . defaultArg . pureThunk) [cl1, cl2]) ctrl)
+    runAM' (Eval cl1@(Closure Value{} _ _ _) (TrustMeK f spine0 [] [Apply p2] : ctrl)) =
+      evalPointerAM (unArg p2) [] (TrustMeK f spine0 [Apply $ hide $ defaultArg $ pureThunk cl1] [] : ctrl)
+    runAM' (Eval _ (TrustMeK{} : _)) =
+      __IMPOSSIBLE__
+
+    -- Case: UpdateThunk. Write the value to the pointers in the UpdateThunk frame.
+    runAM' (Eval cl@(Closure Value{} _ _ _) (UpdateThunk ps : ctrl)) =
+      mapM_ (`storePointer` cl) ps >> runAM (Eval cl ctrl)
+
+    -- Case: ApplyK. Application after thunk update. Add the spine from the control frame to the
+    -- closure.
+    runAM' (Eval cl@(Closure Value{} _ _ _) (ApplyK spine : ctrl)) =
+      runAM (Eval (clApply cl spine) ctrl)
+
+    -- Case: CaseK. Pattern matching against a value. If it's a stuck value the pattern match is
+    -- stuck and we return the closure from the match stack (see stuckMatch). Otherwise we need to
+    -- find a matching branch switch to the Match state. If there is no matching branch we look for
+    -- a CatchAll in the match stack, or fail if there isn't one (see failedMatch). If the current
+    -- branches contain a catch-all case we need to push a CatchAll on the match stack if picking
+    -- one of the other branches.
+    runAM' (Eval cl@(Closure (Value blk) t env spine) ctrl0@(CaseK f i bs spine0 spine1 stack : ctrl)) =
+      {-# SCC "runAM.CaseK" #-}
+      case blk of
+        Blocked{}    -> stuck -- we might as well check the blocking tag first
+        NotBlocked{} -> case t of
+          -- Case: suc constructor
+          Con c ci [] | isSuc c -> matchSuc $ matchCatchall $ failedMatch f stack ctrl
+
+          -- Case: constructor
+          Con c ci [] -> matchCon c ci (length spine) $ matchCatchall $ failedMatch f stack ctrl
+
+          -- Case: non-empty elims. We can get here from a fallback (which builds a value without
+          -- shifting arguments onto spine)
+          Con c ci es -> do
+            spine' <- elimsToSpine env es
+            runAM (evalValue blk (Con c ci []) emptyEnv (spine' <> spine) ctrl0)
+
+          -- Case: natural number literals. Literal natural number patterns are translated to
+          -- suc-matches, so there is no need to try matchLit.
+          Lit (LitNat _ 0) -> matchLitZero  $ matchCatchall $ failedMatch f stack ctrl
+          Lit (LitNat _ n) -> matchLitSuc n $ matchCatchall $ failedMatch f stack ctrl
+
+          -- Case: literal
+          Lit l -> matchLit l $ matchCatchall $ failedMatch f stack ctrl
+
+          -- Case: not constructor or literal. In this case we are stuck.
+          _ -> stuck
+      where
+        stuck = do
+            -- Compute new reason for being stuck. See Agda.Syntax.Internal.stuckOn for the logic.
+            blk' <- case blk of
+                      Blocked{}      -> return blk
+                      NotBlocked r _ -> decodeClosure_ cl <&> \ v -> NotBlocked (stuckOn (Apply $ Arg i v) r) ()
+            stuckMatch blk' stack ctrl
+
+        -- This the spine at this point in the matching. A catch-all match doesn't change the spine.
+        catchallSpine = spine0 <> [Apply $ Arg i p] <> spine1
+          where p = pureThunk cl -- cl is already a value so no need to thunk it.
+
+        -- Push catch-all frame on the match stack if there is a catch-all (and we're not taking it
+        -- right now).
+        catchallStack = case fcatchAllBranch bs of
+          Nothing -> stack
+          Just cc -> CatchAll cc catchallSpine >: stack
+
+        -- The matchX functions below all take an extra argument which is what to do if there is no
+        -- appropriate branch in the case tree. ifJust is maybe with a different argument order
+        -- letting you chain a bunch if maybe matches in if-then-elseif fashion.
+        (m `ifJust` f) z = maybe z f m
+
+        -- Matching constructor: Switch to the Match state, inserting the constructor arguments in
+        -- the spine between spine0 and spine1.
+        matchCon c ci ar = lookupCon (conName c) bs `ifJust` \ cc ->
+          runAM (Match f cc (spine0 <> spine <> spine1) catchallStack ctrl)
+
+        -- Catch-all: Don't add a CatchAll to the match stack since this _is_ the catch-all.
+        matchCatchall = fcatchAllBranch bs `ifJust` \ cc ->
+          runAM (Match f cc catchallSpine stack ctrl)
+
+        -- Matching literal: Switch to the Match state. There are no arguments to add to the spine.
+        matchLit l = Map.lookup l (flitBranches bs) `ifJust` \ cc ->
+          runAM (Match f cc (spine0 <> spine1) catchallStack ctrl)
+
+        -- Matching a 'suc' constructor: Insert the argument in the spine.
+        matchSuc = fsucBranch bs `ifJust` \ cc ->
+            runAM (Match f cc (spine0 <> spine <> spine1) catchallStack ctrl)
+
+        -- Matching a non-zero natural number literal: Subtract one from the literal and
+        -- insert it in the spine for the Match state.
+        matchLitSuc n = fsucBranch bs `ifJust` \ cc ->
+            runAM (Match f cc (spine0 <> [Apply $ defaultArg arg] <> spine1) catchallStack ctrl)
+          where n'  = n - 1
+                arg = pureThunk $ trueValue (Lit $ LitNat noRange n') emptyEnv []
+
+        -- Matching a literal 0. Simply calls matchCon with the zero constructor.
+        matchLitZero = matchCon (fromMaybe __IMPOSSIBLE__ zero) ConOSystem 0
+                            -- If we have a nat literal we have builtin zero.
+
+    -- Case: Match state. Here we look at the case tree and take the appropriate action:
+    --   - FFail: stuck
+    --   - FDone: evaluate body
+    --   - FEta: eta expand argument
+    --   - FCase on projection: pick corresponding branch and keep matching
+    --   - FCase on argument: push CaseK frame on control stack and evaluate argument
+    runAM' (Match f cc spine stack ctrl) = {-# SCC "runAM.Match" #-}
+      case cc of
+        -- Absurd match. You can get here for open terms.
+        FFail -> stuckMatch (NotBlocked AbsurdMatch ()) stack ctrl
+
+        -- Matching complete. Compute the environment for the body and switch to the Eval state.
+        FDone xs body -> do
+            -- Don't ask me why, but not being strict in the spine causes a memory leak.
+            let (zs, env, !spine') = buildEnv xs spine
+            runAM (Eval (Closure Unevaled (lams zs body) env spine') ctrl)
+
+        -- A record pattern match. This does not block evaluation (since that would violate eta
+        -- equality), so in this case we replace the argument with its projections in the spine and
+        -- keep matching.
+        FEta n fs cc ca ->
+          case splitAt n spine of                           -- Question: add lambda here? doesn't
+            (_, [])                    -> done Underapplied -- matter for equality, but might for
+            (spine0, Apply e : spine1) -> do                -- rewriting or 'with'.
+              -- Replace e by its projections in the spine. And don't forget a
+              -- CatchAll frame if there's a catch-all.
+              let projClosure f = Closure Unevaled (Var 0 []) (extendEnv (unArg e) emptyEnv) [Proj ProjSystem f]
+              projs <- mapM (createThunk . projClosure) fs
+              let spine' = spine0 <> map (Apply . defaultArg) projs <> spine1
+                  stack' = caseMaybe ca stack $ \ cc -> CatchAll cc spine >: stack
+              runAM (Match f cc spine' stack' ctrl)
+            _ -> __IMPOSSIBLE__
+
+        -- Split on nth elimination in the spine. Can be either a regular split or a copattern
+        -- split.
+        FCase n bs ->
+          case splitAt n spine of
+            -- If the nth elimination is not given, we're stuck.
+            (_, []) -> done Underapplied
+            -- Apply elim: push the current match on the control stack and evaluate the argument
+            (spine0, Apply e : spine1) ->
+              evalPointerAM (unArg e) [] $ CaseK f (argInfo e) bs spine0 spine1 stack : ctrl
+            -- Projection elim: in this case we must be in a copattern split and find the projection
+            -- in the case tree and keep going. If it's not there it might be because it's not the
+            -- original projection (issue #2265). If so look up the original projection instead.
+            -- That _really_ should be there since copattern splits cannot be partial. Except of
+            -- course, the user might still have written a partial function so we should check
+            -- partialDefs before throwing an impossible (#3012).
+            (spine0, Proj o p : spine1) ->
+              case lookupCon p bs <|> ((`lookupCon` bs) =<< op) of
+                Nothing
+                  | elem f partialDefs -> stuckMatch (NotBlocked MissingClauses ()) stack ctrl
+                  | otherwise          -> __IMPOSSIBLE__
+                Just cc -> runAM (Match f cc (spine0 <> spine1) stack ctrl)
+              where CFun{ cfunProjection = op } = cdefDef (constInfo p)
+      where done why = stuckMatch (NotBlocked why ()) stack ctrl
+
+    -- 'evalPointerAM p spine ctrl'. Evaluate the closure pointed to by 'p' applied to 'spine' with
+    -- the control stack 'ctrl'. If 'p' points to an unevaluated thunk, a 'BlackHole' is written to
+    -- the pointer and an 'UpdateThunk' frame is pushed to the control stack. In this case the
+    -- application to the spine has to be deferred until after the update through an 'ApplyK' frame.
+    evalPointerAM :: Pointer s -> Spine s -> ControlStack s -> ST s (Blocked Term)
+    evalPointerAM (Pure cl)   spine ctrl = runAM (Eval (clApply cl spine) ctrl)
+    evalPointerAM (Pointer p) spine ctrl = readPointer p >>= \ case
+      BlackHole -> __IMPOSSIBLE__
+      Thunk cl@(Closure Unevaled _ _ _) | callByNeed -> do
+        blackHole p
+        runAM (Eval cl $ updateThunkCtrl p $ [ApplyK spine | not (null spine)] ++ ctrl)
+      Thunk cl -> runAM (Eval (clApply cl spine) ctrl)
+
+    -- Normalise the spine and apply the closure to the result. The closure must be a value closure.
+    normaliseArgsAM :: Closure s -> Spine s -> ControlStack s -> ST s (Blocked Term)
+    normaliseArgsAM cl []    ctrl = runAM (Eval cl ctrl)  -- nothing to do
+    normaliseArgsAM cl spine ctrl =
+      case firstHole spine of -- v Only projections, nothing to do. Note clApply_ and not clApply (or we'd loop)
+        Nothing       -> runAM (Eval (clApply_ cl spine) ctrl)
+        Just (p, cxt) -> evalPointerAM p [] (NormaliseK : ArgK cl cxt : ctrl)
+
+    -- Fall back to slow reduction. This happens if we encounter a definition that's not supported
+    -- by the machine (like a primitive function that does not work on literals), or a term that is
+    -- not supported (Level, Sort, and DontCare at the moment). In this case we decode the current
+    -- focus to a 'Term', call slow reduction and pack up the result in a value closure. If the top
+    -- of the control stack is a 'NormaliseK' and the focus is a value closure (i.e. already in
+    -- weak-head normal form) we call 'slowNormaliseArgs' and pop the 'NormaliseK' frame. Otherwise
+    -- we use 'slowReduceTerm' to compute a weak-head normal form.
+    fallbackAM :: AM s -> ST s (Blocked Term)
+    fallbackAM (Eval c ctrl) = do
+        v <- decodeClosure_ c
+        runAM (mkValue $ runReduce $ slow v)
+      where mkValue b = evalValue (() <$ b) (ignoreBlocking b) emptyEnv [] ctrl'
+            (slow, ctrl') = case ctrl of
+              NormaliseK : ctrl'
+                | Value{} <- isValue c -> (notBlocked <.> slowNormaliseArgs, ctrl')
+              _                        -> (slowReduceTerm, ctrl)
+    fallbackAM _ = __IMPOSSIBLE__
+
+    -- If rewriting is enabled, try to apply rewrite rules to the current focus before considering
+    -- it a value. The current state must be 'Eval' and the focus a value closure. Take care to only
+    -- test the 'hasRewriting' flag once.
+    rewriteAM :: AM s -> ST s (Blocked Term)
+    rewriteAM = if hasRewriting then rewriteAM' else runAM
+
+    -- Applying rewrite rules to the current focus. This needs to decode the current focus, call
+    -- rewriting and pack the result back up in a closure. In case some rewrite rules actually fired
+    -- the next state is an unevaluated closure, otherwise it's a value closure.
+    rewriteAM' :: AM s -> ST s (Blocked Term)
+    rewriteAM' s@(Eval (Closure (Value blk) t env spine) ctrl)
+      | null rewr = runAM s
+      | otherwise = traceDoc (text "R" <+> pretty s) $ do
+        v0 <- decodeClosure_ (Closure Unevaled t env [])
+        es <- decodeSpine spine
+        case runReduce (rewrite blk v0 rewr es) of
+          NoReduction b    -> runAM (evalValue (() <$ b) (ignoreBlocking b) emptyEnv [] ctrl)
+          YesReduction _ v -> runAM (evalClosure v emptyEnv [] ctrl)
+      where rewr = case t of
+                     Def f []   -> rewriteRules f
+                     Con c _ [] -> rewriteRules (conName c)
+                     _          -> __IMPOSSIBLE__
+    rewriteAM' _ =
+      __IMPOSSIBLE__
+
+    -- Add a NatSucK frame to the control stack. Pack consecutive suc's into a single frame.
+    sucCtrl :: ControlStack s -> ControlStack s
+    sucCtrl (NatSucK !n : ctrl) = NatSucK (n + 1) : ctrl
+    sucCtrl               ctrl  = NatSucK 1 : ctrl
+
+    -- Add a UpdateThunk frame to the control stack. Pack consecutive updates into a single frame.
+    updateThunkCtrl :: STPointer s -> ControlStack s -> ControlStack s
+    updateThunkCtrl p (UpdateThunk ps : ctrl) = UpdateThunk (p : ps) : ctrl
+    updateThunkCtrl p                   ctrl  = UpdateThunk [p] : ctrl
+
+    -- Only unfold delayed (corecursive) definitions if the result is being cased on.
+    unfoldDelayed :: ControlStack s -> Bool
+    unfoldDelayed []                     = False
+    unfoldDelayed (CaseK{}       : _)    = True
+    unfoldDelayed (PrimOpK{}     : _)    = False
+    unfoldDelayed (NatSucK{}     : _)    = False
+    unfoldDelayed (NormaliseK{}  : _)    = False
+    unfoldDelayed (ArgK{}        : _)    = False
+    unfoldDelayed (UpdateThunk{} : ctrl) = unfoldDelayed ctrl
+    unfoldDelayed (ApplyK{}      : ctrl) = unfoldDelayed ctrl
+    unfoldDelayed (ForceK{}      : ctrl) = unfoldDelayed ctrl
+    unfoldDelayed (TrustMeK{}    : ctrl) = unfoldDelayed ctrl
+
+    -- When matching is stuck we return the closure from the 'MatchStack' with the appropriate
+    -- 'IsValue' set.
+    stuckMatch :: Blocked_ -> MatchStack s -> ControlStack s -> ST s (Blocked Term)
+    stuckMatch blk (_ :> cl) ctrl = rewriteAM (Eval (mkValue blk cl) ctrl)
+
+    -- On a mismatch we find the the next 'CatchAll' on the control stack and
+    -- continue matching from there. If there isn't one we get an incomplete
+    -- matching error (or get stuck if the function is marked partial).
+    failedMatch :: QName -> MatchStack s -> ControlStack s -> ST s (Blocked Term)
+    failedMatch f (CatchAll cc spine : stack :> cl) ctrl = runAM (Match f cc spine (stack :> cl) ctrl)
+    failedMatch f ([] :> cl) ctrl
+      | elem f partialDefs = rewriteAM (Eval (mkValue (NotBlocked MissingClauses ()) cl) ctrl)
+      | otherwise          = runReduce $
+          traceSLn "impossible" 10 ("Incomplete pattern matching when applying " ++ show f)
+                   __IMPOSSIBLE__
+
+    -- Some helper functions to build machine states and closures.
+    evalClosure t env spine = Eval (Closure Unevaled t env spine)
+    evalValue b t env spine = Eval (Closure (Value b) t env spine)
+    evalTrueValue           = evalValue $ notBlocked ()
+    trueValue t env spine   = Closure (Value $ notBlocked ()) t env spine
+    mkValue b               = setIsValue (Value b)
+
+    -- Building lambdas
+    lams :: [Arg String] -> Term -> Term
+    lams xs t = foldr lam t xs
+
+    lam :: Arg String -> Term -> Term
+    lam x t = Lam (argInfo x) (Abs (unArg x) t)
+
+-- Pretty printing --------------------------------------------------------
+
+instance Pretty a => Pretty (FastCase a) where
+  prettyPrec p (FBranches _cop cs suc ls m) =
+    mparens (p > 0) $ vcat (prettyMap cs ++ prettyMap ls ++ prSuc suc ++ prC m)
+    where
+      prC Nothing = []
+      prC (Just x) = [text "_ ->" <?> pretty x]
+
+      prSuc Nothing  = []
+      prSuc (Just x) = [text "suc ->" <?> pretty x]
+
+instance Pretty NameId where
+  pretty = text . show
+
+instance Pretty FastCompiledClauses where
+  pretty (FDone xs t) = (text "done" <+> prettyList xs) <?> prettyPrec 10 t
+  pretty FFail        = text "fail"
+  pretty (FEta n _ cc ca) =
+    text ("eta " ++ show n ++ " of") <?>
+      vcat ([ text "{} ->" <?> pretty cc ] ++
+            [ text "_ ->" <?> pretty cc | Just cc <- [ca] ])
+  pretty (FCase n bs) | fprojPatterns bs =
+    sep [ text $ "project " ++ show n
+        , nest 2 $ pretty bs
+        ]
+  pretty (FCase n bs) =
+    text ("case " ++ show n ++ " of") <?> pretty bs
+
+instance Pretty a => Pretty (Thunk a) where
+  prettyPrec _ BlackHole  = text "<BLACKHOLE>"
+  prettyPrec p (Thunk cl) = prettyPrec p cl
+
+instance Pretty (Pointer s) where
+  prettyPrec p = prettyPrec p . unsafeDerefPointer
+
+instance Pretty (Closure s) where
+  prettyPrec _ (Closure Value{} (Lit (LitString _ unused)) _ _)
+    | unused == unusedPointerString = text "_"
+  prettyPrec p (Closure isV t env spine) =
+    mparens (p > 9) $ fsep [ text tag
+                           , nest 2 $ prettyPrec 10 t
+                           , nest 2 $ prettyList $ zipWith envEntry [0..] (envToList env)
+                           , nest 2 $ prettyList spine ]
+      where envEntry i c = text ("@" ++ show i ++ " =") <+> pretty c
+            tag = case isV of Value{} -> "V"; Unevaled -> "E"
+
+instance Pretty (AM s) where
+  prettyPrec p (Eval cl ctrl)  = prettyPrec p cl <?> prettyList ctrl
+  prettyPrec p (Match f cc sp stack ctrl) =
+    mparens (p > 9) $ sep [ text "M" <+> pretty f
+                          , nest 2 $ prettyList sp
+                          , nest 2 $ prettyPrec 10 cc
+                          , nest 2 $ pretty stack
+                          , nest 2 $ prettyList ctrl ]
+
+instance Pretty (CatchAllFrame s) where
+  pretty CatchAll{} = text "CatchAll"
+
+instance Pretty (MatchStack s) where
+  pretty ([] :> _) = empty
+  pretty (ca :> _) = prettyList ca
+
+instance Pretty (ControlFrame s) where
+  prettyPrec p (CaseK f _ _ _ _ mc)     = mparens (p > 9) $ (text "CaseK" <+> pretty (qnameName f)) <?> pretty mc
+  prettyPrec p (ForceK _ spine0 spine1) = mparens (p > 9) $ text "ForceK" <?> prettyList (spine0 <> spine1)
+  prettyPrec p (TrustMeK _ sp0 sp1 sp2) = mparens (p > 9) $ sep [ text "TrustMeK"
+                                                                , nest 2 $ prettyList sp0
+                                                                , nest 2 $ prettyList sp1
+                                                                , nest 2 $ prettyList sp2 ]
+  prettyPrec _ (NatSucK n)              = text ("+" ++ show n)
+  prettyPrec p (PrimOpK f _ vs cls _)   = mparens (p > 9) $ sep [ text "PrimOpK" <+> pretty f
+                                                                , nest 2 $ prettyList vs
+                                                                , nest 2 $ prettyList cls ]
+  prettyPrec p (UpdateThunk ps)         = mparens (p > 9) $ text "UpdateThunk" <+> text (show (length ps))
+  prettyPrec p (ApplyK spine)           = mparens (p > 9) $ text "ApplyK" <?> prettyList spine
+  prettyPrec p NormaliseK               = text "NormaliseK"
+  prettyPrec p (ArgK cl _)              = mparens (p > 9) $ sep [ text "ArgK" <+> prettyPrec 10 cl ]
+
diff --git a/src/full/Agda/TypeChecking/Reduce/Fast.hs-boot b/src/full/Agda/TypeChecking/Reduce/Fast.hs-boot
--- a/src/full/Agda/TypeChecking/Reduce/Fast.hs-boot
+++ b/src/full/Agda/TypeChecking/Reduce/Fast.hs-boot
@@ -4,5 +4,6 @@
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad.Base
 
-fastReduce :: Bool -> Term -> ReduceM (Blocked Term)
+fastReduce    :: Term -> ReduceM (Blocked Term)
+fastNormalise :: Term -> ReduceM Term
 
diff --git a/src/full/Agda/TypeChecking/Reduce/Monad.hs b/src/full/Agda/TypeChecking/Reduce/Monad.hs
--- a/src/full/Agda/TypeChecking/Reduce/Monad.hs
+++ b/src/full/Agda/TypeChecking/Reduce/Monad.hs
@@ -29,7 +29,7 @@
 import Agda.Syntax.Position
 import Agda.Syntax.Internal
 import Agda.TypeChecking.Monad hiding
-  ( enterClosure, underAbstraction_, underAbstraction, addCtx, mkContextEntry,
+  ( enterClosure, underAbstraction_, underAbstraction, addCtx,
     isInstantiatedMeta, verboseS, typeOfConst, lookupMeta )
 import Agda.TypeChecking.Monad.Builtin hiding ( constructorForm )
 import Agda.TypeChecking.Substitute
@@ -74,12 +74,12 @@
   return $ fromMaybe v $ constructorForm' mz ms v
 
 enterClosure :: Closure a -> (a -> ReduceM b) -> ReduceM b
-enterClosure (Closure sig env scope pars x) f = localR (mapRedEnvSt inEnv inState) (f x)
+enterClosure (Closure sig env scope cps x) f = localR (mapRedEnvSt inEnv inState) (f x)
   where
     inEnv   e = env { envAllowDestructiveUpdate = envAllowDestructiveUpdate e }
     inState s =
       -- TODO: use the signature here? would that fix parts of issue 118?
-      set stScope scope $ set stModuleParameters pars s
+      set stScope scope $ set stModuleCheckpoints cps s
 
 withFreshR :: HasFresh i => (i -> ReduceM a) -> ReduceM a
 withFreshR f = do
@@ -93,18 +93,13 @@
 withFreshName_ :: ArgName -> (Name -> ReduceM a) -> ReduceM a
 withFreshName_ = withFreshName noRange
 
-mkContextEntry :: Dom (Name, Type) -> (ContextEntry -> ReduceM a) -> ReduceM a
-mkContextEntry x k = withFreshR $ \i -> k (Ctx i x)
-
 addCtx :: Name -> Dom Type -> ReduceM a -> ReduceM a
 addCtx x a ret = do
-  ctx <- asks $ map (nameConcrete . fst . unDom . ctxEntry) . envContext
-  let x' = head $ filter (notTaken ctx) $ iterate nextName x
-  mkContextEntry ((x',) <$> a) $ \ce ->
-    local (\e -> e { envContext = ce : envContext e }) ret
+  ctx <- asks $ map (fst . unDom) . envContext
+  let x' = unshadowedName ctx x
+      ce = (x',) <$> a
+  local (\e -> e { envContext = ce : envContext e }) ret
       -- let-bindings keep track of own their context
-  where
-    notTaken xs x = isNoName x || nameConcrete x `notElem` xs
 
 underAbstraction :: Subst t a => Dom Type -> Abs a -> (a -> ReduceM b) -> ReduceM b
 underAbstraction _ (NoAbs _ v) f = f v
diff --git a/src/full/Agda/TypeChecking/Rewriting.hs b/src/full/Agda/TypeChecking/Rewriting.hs
--- a/src/full/Agda/TypeChecking/Rewriting.hs
+++ b/src/full/Agda/TypeChecking/Rewriting.hs
@@ -77,6 +77,7 @@
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Rewriting.NonLinMatch
 import qualified Agda.TypeChecking.Reduce.Monad as Red
+import Agda.TypeChecking.Warnings
 
 import Agda.Utils.Functor
 import qualified Agda.Utils.HashMap as HMap
@@ -112,13 +113,12 @@
     (failure $ text "because it should accept at least two arguments") $
     \ (RelView tel delta a b core) -> do
     unless (visible a && visible b) $ failure $ text "because its two final arguments are not both visible."
-    case ignoreSharing (unEl core) of
+    case unEl core of
       Sort{}   -> return ()
       Con{}    -> __IMPOSSIBLE__
       Level{}  -> __IMPOSSIBLE__
       Lam{}    -> __IMPOSSIBLE__
       Pi{}     -> __IMPOSSIBLE__
-      Shared{} -> __IMPOSSIBLE__
       _ -> failure $ text "because its type does not end in a sort, but in "
              <+> do inTopContext $ addContext tel $ prettyTCM core
 
@@ -190,7 +190,7 @@
         [ prettyTCM q , text " is not a legal rewrite rule" ]
 
   -- Check that type of q targets rel.
-  case ignoreSharing $ unEl core of
+  case unEl core of
     Def rel' es@(_:_:_) | rel == rel' -> do
       -- Because of the type of rel (Γ → sort), all es are applications.
       let vs = map unArg $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es
@@ -214,13 +214,15 @@
       lhs <- modifyAllowedReductions (const [InlineReductions]) $ normalise lhs
 
       -- Find head symbol f of the lhs and its arguments.
-      (f , hd , es) <- case ignoreSharing lhs of
+      (f , hd , es) <- case lhs of
         Def f es -> return (f , Def f , es)
         Con c ci vs -> do
-          let hd = Con c ci . fromMaybe __IMPOSSIBLE__ . allApplyElims
-          return (conName c , hd  , map Apply vs)
+          let hd = Con c ci
+          return (conName c , hd  , vs)
         _        -> failureNotDefOrCon
 
+      ifNotAlreadyAdded f $ do
+
       rew <- addContext gamma1 $ do
         -- Normalize lhs args: we do not want to match redexes.
         es <- etaContract =<< normalise es
@@ -271,22 +273,18 @@
       unless (v == v') $ do
         reportSDoc "rewriting" 20 $ text "v  = " <+> text (show v)
         reportSDoc "rewriting" 20 $ text "v' = " <+> text (show v')
-        -- Andreas, 2016-06-01, issue 1997
-        -- A reason for a reduction of the lhs could be that
-        -- the rewrite rule has already been added.
-        -- In this case, we want a nicer error message.
-        checkNotAlreadyAdded f
         typeError . GenericDocError =<< fsep
           [ prettyTCM q <+> text " is not a legal rewrite rule, since the left-hand side "
           , prettyTCM v <+> text " reduces to " <+> prettyTCM v' ]
 
-    checkNotAlreadyAdded :: QName -> TCM ()
-    checkNotAlreadyAdded f = do
+    ifNotAlreadyAdded :: QName -> TCM () -> TCM ()
+    ifNotAlreadyAdded f cont = do
       rews <- getRewriteRulesFor f
       -- check if q is already an added rewrite rule
-      when (any ((q ==) . rewName) rews) $
-        typeError . GenericDocError =<< do
+      if any ((q ==) . rewName) rews then
+        genericWarning =<< do
           text "Rewrite rule " <+> prettyTCM q <+> text " has already been added"
+      else cont
 
     usedArgs :: [Pos.Occurrence] -> IntSet
     usedArgs occs = IntSet.fromList $ map snd $ usedIxs
@@ -303,11 +301,6 @@
   let matchables = getMatchables rews
   reportSDoc "rewriting" 30 $ text "matchable symbols: " <+> prettyTCM matchables
   modifySignature $ addRewriteRulesFor f rews matchables
-  --rules <- getRewriteRulesFor f
-  --reportSDoc "rewriting" 20 $ vcat
-  --  [ text "rewrite rules for " <+> prettyTCM f <+> text ":"
-  --  , vcat (map prettyTCM rules)
-  --  ]
 
 -- | @rewriteWith t f es rew@
 --   tries to rewrite @f es : t@ with @rew@, returning the reduct if successful.
@@ -331,32 +324,6 @@
         , text " to " <+> prettyTCM v'
         ]) $ do
       return $ Right v'
-
-    {- OLD CODE:
-    -- Freeze all metas, remember which one where not frozen before.
-    -- This ensures that we do not instantiate metas while matching
-    -- on the rewrite lhs.
-    ms <- freezeMetas
-    res <- tryConversion' $ do
-
-      -- Create new metas for the lhs variables of the rewriting rule.
-      xs <- newTelMeta gamma
-      let sigma        = parallelS $ map unArg xs
-          (lhs', rhs', b') = applySubst sigma (lhs, rhs, b)
-      -- Unify type and term with type and lhs of rewrite rule.
-      whenJust mt $ \ t -> leqType t b'
-      local (\ e -> e {envCompareBlocked = True}) $ equalTerm b' lhs' v
-      -- Check that all variables have been solved for.
-      unlessM (isInstantiatedMeta xs) $ do
-        reportSDoc "rewriting" 20 $ text "lhs variables solved with: " <+> do
-          sep $ map prettyTCM xs
-        -- The following error is caught immediately by tryConversion.
-        typeError $ GenericError $ "free variables not bound by left hand side"
-      return rhs'
-
-    -- Thaw metas that were frozen by a call to this function.
-    unfreezeMetas' (`elem` ms)
-    return res-}
 
 -- | @rewrite b v rules es@ tries to rewrite @v@ applied to @es@ with the
 --   rewrite rules @rules@. @b@ is the default blocking tag.
diff --git a/src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs b/src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs
--- a/src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs
+++ b/src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs
@@ -30,10 +30,6 @@
 import Debug.Trace
 import System.IO.Unsafe
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Foldable ( foldMap )
-#endif
-
 import Data.Maybe
 import Data.Traversable (Traversable,traverse)
 import Data.IntMap (IntMap)
@@ -111,7 +107,9 @@
       Prop     -> done
       Inf      -> done
       SizeUniv -> done
-      DLub _ _ -> done
+      PiSort _ _ -> done
+      UnivSort _ -> done
+      MetaS{}  -> __IMPOSSIBLE__
 
 instance PatternFrom Term NLPat where
   patternFrom r k v = do
@@ -120,7 +118,7 @@
                  return PWild
                else
                  return $ PTerm v
-    case ignoreSharing v of
+    case v of
       Var i es
        | i < k     -> PBoundVar i <$> patternFrom r k es
        | otherwise -> do
@@ -128,7 +126,7 @@
          -- in order to build a Miller pattern
          let mbvs = mfilter fastDistinct $ forM es $ \e -> do
                       e <- isApplyElim e
-                      case ignoreSharing $ unArg e of
+                      case unArg e of
                         Var j [] | j < k -> Just $ e $> j
                         _                -> Nothing
          case mbvs of
@@ -143,8 +141,8 @@
       Lit{}    -> done
       Def f es | isIrrelevant r -> done
       Def f es -> do
-        Def lsuc [] <- ignoreSharing <$> primLevelSuc
-        Def lmax [] <- ignoreSharing <$> primLevelMax
+        Def lsuc [] <- primLevelSuc
+        Def lmax [] <- primLevelMax
         case es of
           [x]     | f == lsuc -> done
           [x , y] | f == lmax -> done
@@ -152,17 +150,16 @@
       Con c ci vs | isIrrelevant r -> do
         mr <- isRecordConstructor (conName c)
         case mr of
-          Just (_, def) | recEtaEquality def ->
-            PDef (conName c) <$> patternFrom r k (Apply <$> vs)
+          Just (_, def) | YesEta <- recEtaEquality def ->
+            PDef (conName c) <$> patternFrom r k vs
           _ -> done
-      Con c ci vs -> PDef (conName c) <$> patternFrom r k (Apply <$> vs)
+      Con c ci vs -> PDef (conName c) <$> patternFrom r k vs
       Pi a b | isIrrelevant r -> done
       Pi a b   -> PPi <$> patternFrom r k a <*> patternFrom r k b
       Sort s   -> done
       Level l  -> __IMPOSSIBLE__
       DontCare{} -> return PWild
       MetaV{}    -> __IMPOSSIBLE__
-      Shared{}   -> __IMPOSSIBLE__
 
 instance (PatternFrom a b) => PatternFrom (Abs a) (Abs b) where
   patternFrom r k (Abs name x)   = Abs name   <$> patternFrom r (k+1) x
@@ -323,18 +320,18 @@
           Right (Just v) -> tellSub r (i-n) $ teleLam tel $ renameP __IMPOSSIBLE__ perm v
       PDef f ps -> do
         v <- liftRed $ constructorForm =<< unLevel v
-        case ignoreSharing v of
+        case v of
           Def f' es
             | f == f'   -> match r gamma k ps es
           Con c _ vs
-            | f == conName c -> match r gamma k ps (Apply <$> vs)
+            | f == conName c -> match r gamma k ps vs
             | otherwise -> do -- @c@ may be a record constructor
                 mr <- liftRed $ isRecordConstructor (conName c)
                 case mr of
-                  Just (_, def) | recEtaEquality def -> do
+                  Just (_, def) | YesEta <- recEtaEquality def -> do
                     let fs = recFields def
                         qs = map (fmap $ \f -> PDef f (ps ++ [Proj ProjSystem f])) fs
-                    match r gamma k qs vs
+                    match r gamma k (map Apply qs) vs
                   _ -> no (text "")
           Lam i u -> do
             let pbody = PDef f (raise 1 ps ++ [Apply $ Arg i $ PTerm (var 0)])
@@ -345,7 +342,7 @@
           v' -> do -- @f@ may be a record constructor as well
             mr <- liftRed $ isRecordConstructor f
             case mr of
-              Just (_, def) | recEtaEquality def -> do
+              Just (_, def) | YesEta <- recEtaEquality def -> do
                 let fs  = recFields def
                     ws  = map (fmap $ \f -> v `applyE` [Proj ProjSystem f]) fs
                     qs = fromMaybe __IMPOSSIBLE__ $ allApplyElims ps
@@ -354,19 +351,19 @@
       PLam i p' -> do
         let body = Abs (absName p') $ raise 1 v `apply` [Arg i (var 0)]
         match r gamma k p' body
-      PPi pa pb  -> case ignoreSharing v of
+      PPi pa pb  -> case v of
         Pi a b -> match r gamma k pa a >> match r gamma k pb b
         MetaV m es -> matchingBlocked $ Blocked m ()
         _ -> no (text "")
-      PBoundVar i ps -> case ignoreSharing v of
+      PBoundVar i ps -> case v of
         Var i' es | i == i' -> match r gamma k ps es
         Con c _ vs -> do -- @c@ may be a record constructor
           mr <- liftRed $ isRecordConstructor (conName c)
           case mr of
-            Just (_, def) | recEtaEquality def -> do
+            Just (_, def) | YesEta <- recEtaEquality def -> do
               let fs = recFields def
                   qs = map (fmap $ \f -> PBoundVar i (ps ++ [Proj ProjSystem f])) fs
-              match r gamma k qs vs
+              match r gamma k (map Apply qs) vs
             _ -> no (text "")
         Lam info u -> do
           let pbody = PBoundVar i (raise 1 ps ++ [Apply $ Arg info $ PTerm (var 0)])
diff --git a/src/full/Agda/TypeChecking/Rules/Application.hs b/src/full/Agda/TypeChecking/Rules/Application.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Rules/Application.hs
@@ -0,0 +1,1009 @@
+{-# LANGUAGE CPP                      #-}
+{-# LANGUAGE NondecreasingIndentation #-}
+
+module Agda.TypeChecking.Rules.Application
+  ( checkArguments
+  , checkArguments_
+  , checkApplication
+  , inferApplication
+  ) where
+
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
+
+import Control.Arrow (first, second)
+import Control.Monad.Trans
+import Control.Monad.Trans.Maybe
+import Control.Monad.Reader
+
+import Data.Maybe
+import qualified Data.List as List
+import Data.Either (partitionEithers)
+import Data.Traversable (sequenceA)
+import Data.Void
+import qualified Data.IntSet as IntSet
+
+import Agda.Interaction.Highlighting.Generate (storeDisambiguatedName)
+
+import qualified Agda.Syntax.Abstract as A
+import Agda.Syntax.Abstract.Views as A
+import qualified Agda.Syntax.Info as A
+import Agda.Syntax.Concrete.Pretty () -- only Pretty instances
+import Agda.Syntax.Common
+import Agda.Syntax.Fixity
+import Agda.Syntax.Internal as I
+import Agda.Syntax.Position
+
+import Agda.TypeChecking.Conversion
+import Agda.TypeChecking.Constraints
+import Agda.TypeChecking.Datatypes
+import Agda.TypeChecking.Free
+import Agda.TypeChecking.Implicit
+import Agda.TypeChecking.Injectivity
+import Agda.TypeChecking.Irrelevance
+import Agda.TypeChecking.Level
+import Agda.TypeChecking.MetaVars
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Primitive
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Records
+import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Rules.Def
+import Agda.TypeChecking.Rules.Term
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Telescope
+
+import Agda.Utils.Either
+import Agda.Utils.Except
+import Agda.Utils.Functor
+import Agda.Utils.List
+import Agda.Utils.Maybe
+import Agda.Utils.Null
+import Agda.Utils.NonemptyList
+import Agda.Utils.Pretty ( prettyShow )
+import Agda.Utils.Size
+import Agda.Utils.Tuple
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
+-----------------------------------------------------------------------------
+-- * Applications
+-----------------------------------------------------------------------------
+
+-- | @checkApplication hd args e t@ checks an application.
+--   Precondition: @Application hs args = appView e@
+--
+--   @checkApplication@ disambiguates constructors
+--   (and continues to 'checkConstructorApplication')
+--   and resolves pattern synonyms.
+checkApplication :: A.Expr -> A.Args -> A.Expr -> Type -> TCM Term
+checkApplication hd args e t = do
+  reportSDoc "tc.check.app" 20 $ vcat
+    [ text "checkApplication"
+    , nest 2 $ text "hd   = " <+> prettyA hd
+    , nest 2 $ text "args = " <+> sep (map prettyA args)
+    , nest 2 $ text "e    = " <+> prettyA e
+    , nest 2 $ text "t    = " <+> prettyTCM t
+    ]
+  reportSDoc "tc.check.app" 70 $ vcat
+    [ text "checkApplication (raw)"
+    , nest 2 $ text $ "hd   = " ++ show hd
+    , nest 2 $ text $ "args = " ++ show (deepUnscope args)
+    , nest 2 $ text $ "e    = " ++ show (deepUnscope e)
+    , nest 2 $ text $ "t    = " ++ show t
+    ]
+  case unScope hd of
+    -- Subcase: unambiguous projection
+    A.Proj _ p | Just _ <- getUnambiguous p -> checkHeadApplication e t hd args
+
+    -- Subcase: ambiguous projection
+    A.Proj o p -> checkProjApp e o (unAmbQ p) args t
+
+    -- Subcase: unambiguous constructor
+    A.Con ambC | Just c <- getUnambiguous ambC -> do
+      -- augment c with record fields, but do not revert to original name
+      con <- fromRightM (sigError __IMPOSSIBLE_VERBOSE__ (typeError $ AbstractConstructorNotInScope c)) $
+        getOrigConHead c
+      checkConstructorApplication e t con args
+
+    -- Subcase: ambiguous constructor
+    A.Con (AmbQ cs0) -> disambiguateConstructor cs0 t >>= \ case
+      Left unblock -> postponeTypeCheckingProblem (CheckExpr e t) unblock
+      Right c      -> checkConstructorApplication e t c args
+
+    -- Subcase: pattern synonym
+    A.PatternSyn n -> do
+      (ns, p) <- lookupPatternSyn n
+      p <- return $ setRange (getRange n) $ killRange $ vacuous p   -- Pattern' Void -> Pattern' Expr
+      -- Expand the pattern synonym by substituting for
+      -- the arguments we have got and lambda-lifting
+      -- over the ones we haven't.
+      let meta r = A.Underscore $ A.emptyMetaInfo{ A.metaRange = r }   -- TODO: name suggestion
+      case A.insertImplicitPatSynArgs meta (getRange n) ns args of
+        Nothing      -> typeError $ BadArgumentsToPatternSynonym n
+        Just (s, ns) -> do
+          let p' = A.patternToExpr p
+              e' = A.lambdaLiftExpr (map unArg ns) (A.substExpr s p')
+          checkExpr e' t
+
+    -- Subcase: macro
+    A.Macro x -> do
+      -- First go: no parameters
+      TelV tel _ <- telView =<< normalise . defType =<< instantiateDef =<< getConstInfo x
+
+      tTerm <- primAgdaTerm
+      tName <- primQName
+
+      let argTel   = init $ telToList tel -- last argument is the hole term
+
+          -- inspect macro type to figure out if arguments need to be wrapped in quote/quoteTerm
+          mkArg :: Type -> NamedArg A.Expr -> NamedArg A.Expr
+          mkArg t a | unEl t == tTerm =
+            (fmap . fmap)
+              (A.App (A.defaultAppInfo (getRange a)) (A.QuoteTerm A.exprNoRange) . defaultNamedArg) a
+          mkArg t a | unEl t == tName =
+            (fmap . fmap)
+              (A.App (A.defaultAppInfo (getRange a)) (A.Quote A.exprNoRange) . defaultNamedArg) a
+          mkArg t a | otherwise = a
+
+          makeArgs :: [Dom (String, Type)] -> [NamedArg A.Expr] -> ([NamedArg A.Expr], [NamedArg A.Expr])
+          makeArgs [] args = ([], args)
+          makeArgs _  []   = ([], [])
+          makeArgs tel@(d : _) (arg : args) =
+            case insertImplicit arg (map (fmap fst . argFromDom) tel) of
+              ImpInsert is   -> makeArgs (drop (length is) tel) (arg : args)
+              BadImplicits   -> (arg : args, [])  -- fail later in checkHeadApplication
+              NoSuchName{}   -> (arg : args, [])  -- ditto
+              NoInsertNeeded -> first (mkArg (snd $ unDom d) arg :) $ makeArgs (tail tel) args
+
+          (macroArgs, otherArgs) = makeArgs argTel args
+          unq = A.App (A.defaultAppInfo $ fuseRange x args) (A.Unquote A.exprNoRange) . defaultNamedArg
+
+          desugared = A.app (unq $ unAppView $ Application (A.Def x) $ macroArgs) otherArgs
+
+      checkExpr desugared t
+
+    -- Subcase: unquote
+    A.Unquote _
+      | [arg] <- args -> do
+          (_, hole) <- newValueMeta RunMetaOccursCheck t
+          unquoteM (namedArg arg) hole t $ return hole
+      | arg : args <- args -> do
+          -- Example: unquote v a b : A
+          --  Create meta H : (x : X) (y : Y x) → Z x y for the hole
+          --  Check a : X, b : Y a
+          --  Unify Z a b == A
+          --  Run the tactic on H
+          tel    <- metaTel args                    -- (x : X) (y : Y x)
+          target <- addContext tel newTypeMeta_      -- Z x y
+          let holeType = telePi_ tel target         -- (x : X) (y : Y x) → Z x y
+          (Just vs, EmptyTel) <- mapFst allApplyElims <$> checkArguments_ ExpandLast (getRange args) args tel
+                                                    -- a b : (x : X) (y : Y x)
+          let rho = reverse (map unArg vs) ++# IdS  -- [x := a, y := b]
+          equalType (applySubst rho target) t       -- Z a b == A
+          (_, hole) <- newValueMeta RunMetaOccursCheck holeType
+          unquoteM (namedArg arg) hole holeType $ return $ apply hole vs
+      where
+        metaTel :: [Arg a] -> TCM Telescope
+        metaTel []           = pure EmptyTel
+        metaTel (arg : args) = do
+          a <- newTypeMeta_
+          let dom = a <$ domFromArg arg
+          ExtendTel dom . Abs "x" <$> addContext ("x", dom) (metaTel args)
+
+    -- Subcase: defined symbol or variable.
+    _ -> do
+      v <- checkHeadApplication e t hd args
+      reportSDoc "tc.term.app" 30 $ vcat
+        [ text "checkApplication: checkHeadApplication returned"
+        , nest 2 $ text "v = " <+> prettyTCM v
+        ]
+      return v
+
+-- | Precondition: @Application hd args = appView e@.
+inferApplication :: ExpandHidden -> A.Expr -> A.Args -> A.Expr -> TCM (Term, Type)
+inferApplication exh hd args e | not (defOrVar hd) = do
+  t <- workOnTypes $ newTypeMeta_
+  v <- checkExpr e t
+  return (v, t)
+inferApplication exh hd args e =
+  case unScope hd of
+    A.Proj o p | isAmbiguous p -> inferProjApp e o (unAmbQ p) args
+    _ -> do
+      (f, t0) <- inferHead hd
+      let r = getRange hd
+      res <- runExceptT $ checkArgumentsE exh (getRange hd) args t0 Nothing
+      case res of
+        Right (vs, t1, _) -> (,t1) <$> unfoldInlined (f vs)
+        Left problem -> do
+          t <- workOnTypes $ newTypeMeta_
+          v <- postponeArgs problem exh r args t $ \ vs _ _ -> unfoldInlined (f vs)
+          return (v, t)
+
+-----------------------------------------------------------------------------
+-- * Heads
+-----------------------------------------------------------------------------
+
+inferHeadDef :: ProjOrigin -> QName -> TCM (Elims -> Term, Type)
+inferHeadDef o x = do
+  proj <- isProjection x
+  let app =
+        case proj of
+          Nothing -> \ args -> Def x $ map Apply args
+          Just p  -> \ args -> projDropParsApply p o args
+  mapFst applyE <$> inferDef app x
+
+-- | Infer the type of a head thing (variable, function symbol, or constructor).
+--   We return a function that applies the head to arguments.
+--   This is because in case of a constructor we want to drop the parameters.
+inferHead :: A.Expr -> TCM (Elims -> Term, Type)
+inferHead e = do
+  case e of
+    A.Var x -> do -- traceCall (InferVar x) $ do
+      (u, a) <- getVarInfo x
+      reportSDoc "tc.term.var" 20 $ hsep
+        [ text "variable" , prettyTCM x
+        , text "(" , text (show u) , text ")"
+        , text "has type:" , prettyTCM a
+        ]
+      when (unusableRelevance $ getRelevance a) $
+        typeError $ VariableIsIrrelevant x
+      return (applyE u, unDom a)
+
+    A.Def x -> inferHeadDef ProjPrefix x
+
+    A.Proj o ambP | Just d <- getUnambiguous ambP -> inferHeadDef o d
+    A.Proj{} -> __IMPOSSIBLE__ -- inferHead will only be called on unambiguous projections
+
+    A.Con ambC | Just c <- getUnambiguous ambC -> do
+
+      -- Constructors are polymorphic internally.
+      -- So, when building the constructor term
+      -- we should throw away arguments corresponding to parameters.
+
+      -- First, inferDef will try to apply the constructor
+      -- to the free parameters of the current context. We ignore that.
+      con <- fromRightM (sigError __IMPOSSIBLE_VERBOSE__ (typeError $ AbstractConstructorNotInScope c)) $
+        getOrigConHead c
+      (u, a) <- inferDef (\ _ -> Con con ConOCon []) c
+
+      -- Next get the number of parameters in the current context.
+      Constructor{conPars = n} <- theDef <$> (instantiateDef =<< getConstInfo c)
+
+      reportSLn "tc.term.con" 7 $ unwords [prettyShow c, "has", show n, "parameters."]
+
+      -- So when applying the constructor throw away the parameters.
+      return (applyE u . drop n, a)
+    A.Con{} -> __IMPOSSIBLE__  -- inferHead will only be called on unambiguous constructors
+    A.QuestionMark i ii -> inferMeta (newQuestionMark ii) i
+    A.Underscore i   -> inferMeta (newValueMeta RunMetaOccursCheck) i
+    e -> do
+      (term, t) <- inferExpr e
+      return (applyE term, t)
+
+inferDef :: (Args -> Term) -> QName -> TCM (Term, Type)
+inferDef mkTerm x =
+  traceCall (InferDef x) $ do
+    -- getConstInfo retrieves the *absolute* (closed) type of x
+    -- instantiateDef relativizes it to the current context
+    d  <- instantiateDef =<< getConstInfo x
+    -- irrelevant defs are only allowed in irrelevant position
+    checkRelevance x (defRelevance d)
+    -- since x is considered living in the top-level, we have to
+    -- apply it to the current context
+    vs <- freeVarsToApply x
+    let t = defType d
+        v = mkTerm vs -- applies x to vs, dropping parameters
+    debug vs t v
+    return (v, t)
+  where
+    debug vs t v = do
+      reportSDoc "tc.term.def" 60 $
+        text "freeVarsToApply to def " <+> hsep (map (text . show) vs)
+      reportSDoc "tc.term.def" 10 $ vcat
+        [ text "inferred def " <+> prettyTCM x <+> hsep (map prettyTCM vs)
+        , nest 2 $ text ":" <+> prettyTCM t
+        , nest 2 $ text "-->" <+> prettyTCM v ]
+
+-- | The second argument is the relevance of the first.
+checkRelevance :: QName -> Relevance -> TCM ()
+checkRelevance _ Relevant = return () -- relevance functions can be used in any context.
+checkRelevance x drel = do
+  rel <- asks envRelevance
+  reportSDoc "tc.irr" 50 $ vcat
+    [ text "declaration relevance =" <+> text (show drel)
+    , text "context     relevance =" <+> text (show rel)
+    ]
+  unless (drel `moreRelevant` rel) $ typeError $ DefinitionIsIrrelevant x
+
+-- | @checkHeadApplication e t hd args@ checks that @e@ has type @t@,
+-- assuming that @e@ has the form @hd args@. The corresponding
+-- type-checked term is returned.
+--
+-- If the head term @hd@ is a coinductive constructor, then a
+-- top-level definition @fresh tel = hd args@ (where the clause is
+-- delayed) is added, where @tel@ corresponds to the current
+-- telescope. The returned term is @fresh tel@.
+--
+-- Precondition: The head @hd@ has to be unambiguous, and there should
+-- not be any need to insert hidden lambdas.
+checkHeadApplication :: A.Expr -> Type -> A.Expr -> [NamedArg A.Expr] -> TCM Term
+checkHeadApplication e t hd args = do
+  sharp <- fmap nameOfSharp <$> coinductionKit
+  case hd of
+    -- Type checking #. The # that the user can write will be a Def, but the
+    -- sharp we generate in the body of the wrapper is a Con.
+    A.Def c | Just c == sharp -> checkSharpApplication e t c args
+    _ -> defaultResult
+  where
+  defaultResult = defaultResult' Nothing
+  defaultResult' mk = do
+    (f, t0) <- inferHead hd
+    expandLast <- asks envExpandLast
+    checkArguments expandLast (getRange hd) args t0 t $ \ vs t1 checkedTarget -> do
+      let check = do
+           k <- mk
+           as <- allApplyElims vs
+           pure $ k as t1
+      v <- unfoldInlined (f vs)
+      maybe id (\ ck m -> blockTerm t $ ck >> m) check $ coerce' checkedTarget v t1 t
+
+-----------------------------------------------------------------------------
+-- * Spines
+-----------------------------------------------------------------------------
+
+traceCallE :: Call -> ExceptT e TCM r -> ExceptT e TCM r
+traceCallE call m = do
+  z <- lift $ traceCall call $ runExceptT m
+  case z of
+    Right e  -> return e
+    Left err -> throwError err
+
+-- | If we've already checked the target type we don't have to call coerce.
+coerce' :: CheckedTarget -> Term -> Type -> Type -> TCM Term
+coerce' NotCheckedTarget           v inferred expected = coerce v inferred expected
+coerce' (CheckedTarget Nothing)    v _        _        = return v
+coerce' (CheckedTarget (Just pid)) v _        expected = blockTermOnProblem expected v pid
+
+-- | Check a list of arguments: @checkArgs args t0 t1@ checks that
+--   @t0 = Delta -> t0'@ and @args : Delta@. Inserts hidden arguments to
+--   make this happen.  Returns the evaluated arguments @vs@, the remaining
+--   type @t0'@ (which should be a subtype of @t1@) and any constraints @cs@
+--   that have to be solved for everything to be well-formed.
+
+checkArgumentsE :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Maybe Type ->
+                   ExceptT (Elims, [NamedArg A.Expr], Type) TCM (Elims, Type, CheckedTarget)
+checkArgumentsE = checkArgumentsE' NotCheckedTarget
+
+checkArgumentsE' :: CheckedTarget -> ExpandHidden -> Range -> [NamedArg A.Expr] -> Type ->
+                    Maybe Type -> ExceptT (Elims, [NamedArg A.Expr], Type) TCM (Elims, Type, CheckedTarget)
+-- Case: no arguments, do not insert trailing hidden arguments: We are done.
+checkArgumentsE' chk DontExpandLast _ [] t0 _ = return ([], t0, chk)
+
+-- Case: no arguments, but need to insert trailing hiddens.
+checkArgumentsE' chk ExpandLast r [] t0 mt1 =
+    traceCallE (CheckArguments r [] t0 mt1) $ lift $ do
+      mt1' <- traverse (unEl <.> reduce) mt1
+      (us, t) <- implicitArgs (-1) (expand mt1') t0
+      return (map Apply us, t, chk)
+    where
+      expand (Just (Pi dom _)) Hidden     = not (hidden dom)
+      expand _                 Hidden     = True
+      expand (Just (Pi dom _)) Instance{} = not (isInstance dom)
+      expand _                 Instance{} = True
+      expand _                 NotHidden  = False
+
+-- Case: argument given.
+checkArgumentsE' chk exh r args0@(arg@(Arg info e) : args) t0 mt1 =
+    traceCallE (CheckArguments r args0 t0 mt1) $ do
+      lift $ reportSDoc "tc.term.args" 30 $ sep
+        [ text "checkArgumentsE"
+--        , text "  args0 =" <+> prettyA args0
+        , nest 2 $ vcat
+          [ text "e     =" <+> prettyA e
+          , text "t0    =" <+> prettyTCM t0
+          , text "t1    =" <+> maybe (text "Nothing") prettyTCM mt1
+          ]
+        ]
+      -- First, insert implicit arguments, depending on current argument @arg@.
+      let hx = getHiding info  -- hiding of current argument
+          mx = fmap rangedThing $ nameOf e -- name of current argument
+          -- do not insert visible arguments
+          expand NotHidden y = False
+          -- insert a hidden argument if arg is not hidden or has different name
+          -- insert an instance argument if arg is not instance  or has different name
+          expand hy        y = not (sameHiding hy hx) || maybe False (y /=) mx
+      (nargs, t) <- lift $ implicitNamedArgs (-1) expand t0
+      -- Separate names from args.
+      let (mxs, us) = unzip $ map (\ (Arg ai (Named mx u)) -> (mx, Apply $ Arg ai u)) nargs
+          xs        = catMaybes mxs
+
+      -- We need a function type here, but we don't know which kind
+      -- (implicit/explicit). But it might be possible to use injectivity to
+      -- force a pi.
+      t <- lift $ forcePiUsingInjectivity t
+
+      -- We are done inserting implicit args.  Now, try to check @arg@.
+      ifBlockedType t (\ m t -> throwError (us, args0, t)) $ \ _ t0' -> do
+
+        -- What can go wrong?
+
+        -- 1. We ran out of function types.
+        let shouldBePi
+              -- a) It is an explicit argument, but we ran out of function types.
+              | visible info = lift $ typeError $ ShouldBePi t0'
+              -- b) It is an implicit argument, and we did not insert any implicits.
+              --    Thus, the type was not a function type to start with.
+              | null xs        = lift $ typeError $ ShouldBePi t0'
+              -- c) We did insert implicits, but we ran out of implicit function types.
+              --    Then, we should inform the user that we did not find his one.
+              | otherwise      = lift $ typeError $ WrongNamedArgument arg
+
+        -- 2. We have a function type left, but it is the wrong one.
+        --    Our argument must be implicit, case a) is impossible.
+        --    (Otherwise we would have ran out of function types instead.)
+        let wrongPi
+              -- b) We have not inserted any implicits.
+              | null xs   = lift $ typeError $ WrongHidingInApplication t0'
+              -- c) We inserted implicits, but did not find his one.
+              | otherwise = lift $ typeError $ WrongNamedArgument arg
+
+        -- Check the target type if we can get away with it.
+        chk' <- lift $
+          case (chk, mt1) of
+            (NotCheckedTarget, Just t1) | all visible args0 -> do
+              let n = length args0
+              TelV tel tgt <- telViewUpTo n t0'
+              let dep = any (< n) $ IntSet.toList $ freeVars tgt
+                  vis = all visible (telToList tel)
+                  isRigid (El _ (Pi dom _)) = return $ visible dom
+                  isRigid (El _ (Def d _))  = theDef <$> getConstInfo d >>= return . \ case
+                    Axiom{}                   -> True
+                    AbstractDefn{}            -> True
+                    Function{funClauses = cs} -> null cs
+                    Datatype{}                -> True
+                    Record{}                  -> True
+                    Constructor{}             -> __IMPOSSIBLE__
+                    Primitive{}               -> False
+                  isRigid _           = return False
+              rigid <- isRigid tgt
+              if | dep       -> return chk    -- must be non-dependent
+                 | not rigid -> return chk    -- with a rigid target
+                 | not vis   -> return chk    -- and only visible arguments
+                 | otherwise -> do
+                  let tgt1 = applySubst (strengthenS __IMPOSSIBLE__ $ size tel) tgt
+                  reportSDoc "tc.term.args.target" 30 $ vcat
+                    [ text "Checking target types first"
+                    , nest 2 $ text "inferred =" <+> prettyTCM tgt1
+                    , nest 2 $ text "expected =" <+> prettyTCM t1 ]
+                  traceCall (CheckTargetType (fuseRange r args0) tgt1 t1) $
+                    CheckedTarget <$> ifNoConstraints_ (leqType tgt1 t1)
+                                        (return Nothing) (return . Just)
+
+            _ -> return chk
+
+        -- t0' <- lift $ forcePi (getHiding info) (maybe "_" rangedThing $ nameOf e) t0'
+        case unEl t0' of
+          Pi (Dom{domInfo = info', unDom = a}) b
+            | sameHiding info info'
+              && (visible info || maybe True ((absName b ==) . rangedThing) (nameOf e)) -> do
+                u <- lift $ applyRelevanceToContext (getRelevance info') $ do
+                 -- Andreas, 2014-05-30 experiment to check non-dependent arguments
+                 -- after the spine has been processed.  Allows to propagate type info
+                 -- from ascribed type into extended-lambdas.  Would solve issue 1159.
+                 -- However, leaves unsolved type checking problems in the test suite.
+                 -- I do not know what I am doing wrong here.
+                 -- Could be extreme order-sensitivity or my abuse of the postponing
+                 -- mechanism.
+                 -- Andreas, 2016-02-02: Ulf says unless there is actually some meta
+                 -- blocking a postponed type checking problem, we might never retry,
+                 -- since the trigger for retrying constraints is solving a meta.
+                 -- Thus, the following naive use violates some invariant.
+                 -- if not $ isBinderUsed b
+                 -- then postponeTypeCheckingProblem (CheckExpr (namedThing e) a) (return True) else
+                  let e' = e { nameOf = maybe (Just $ unranged $ absName b) Just (nameOf e) }
+                  checkNamedArg (Arg info' e') a
+                -- save relevance info' from domain in argument
+                addCheckedArgs us (Apply $ Arg info' u) $
+                  checkArgumentsE' chk' exh (fuseRange r e) args (absApp b u) mt1
+            | otherwise -> do
+                reportSDoc "error" 10 $ nest 2 $ vcat
+                  [ text $ "info      = " ++ show info
+                  , text $ "info'     = " ++ show info'
+                  , text $ "absName b = " ++ absName b
+                  , text $ "nameOf e  = " ++ show (nameOf e)
+                  ]
+                wrongPi
+          _ -> shouldBePi
+  where
+    addCheckedArgs us u rec = do
+        (vs, t, chk) <- rec
+        return (us ++ u : vs, t, chk)
+      `catchError` \ (vs, es, t) ->
+          throwError (us ++ u : vs, es, t)
+
+-- | Check that a list of arguments fits a telescope.
+--   Inserts hidden arguments as necessary.
+--   Returns the type-checked arguments and the remaining telescope.
+checkArguments_
+  :: ExpandHidden         -- ^ Eagerly insert trailing hidden arguments?
+  -> Range                -- ^ Range of application.
+  -> [NamedArg A.Expr]    -- ^ Arguments to check.
+  -> Telescope            -- ^ Telescope to check arguments against.
+  -> TCM (Elims, Telescope)
+     -- ^ Checked arguments and remaining telescope if successful.
+checkArguments_ exh r args tel = do
+    z <- runExceptT $
+      checkArgumentsE exh r args (telePi tel typeDontCare) Nothing
+    case z of
+      Right (args, t, _) -> do
+        let TelV tel' _ = telView' t
+        return (args, tel')
+      Left _ -> __IMPOSSIBLE__  -- type cannot be blocked as it is generated by telePi
+
+-- | @checkArguments exph r args t0 t k@ tries @checkArgumentsE exph args t0 t@.
+-- If it succeeds, it continues @k@ with the returned results.  If it fails,
+-- it registers a postponed typechecking problem and returns the resulting new
+-- meta variable.
+--
+-- Checks @e := ((_ : t0) args) : t@.
+checkArguments ::
+  ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->
+  (Elims -> Type -> CheckedTarget -> TCM Term) -> TCM Term
+checkArguments exph r args t0 t k = do
+  z <- runExceptT $ checkArgumentsE exph r args t0 (Just t)
+  case z of
+    Right (vs, t1, pid) -> k vs t1 pid
+      -- vs = evaluated args
+      -- t1 = remaining type (needs to be subtype of t)
+    Left problem -> postponeArgs problem exph r args t k
+      -- if unsuccessful, postpone checking until t0 unblocks
+
+postponeArgs :: (Elims, [NamedArg A.Expr], Type) -> ExpandHidden -> Range -> [NamedArg A.Expr] -> Type ->
+                (Elims -> Type -> CheckedTarget -> TCM Term) -> TCM Term
+postponeArgs (us, es, t0) exph r args t k = do
+  reportSDoc "tc.term.expr.args" 80 $
+    sep [ text "postponed checking arguments"
+        , nest 4 $ prettyList (map (prettyA . namedThing . unArg) args)
+        , nest 2 $ text "against"
+        , nest 4 $ prettyTCM t0 ] $$
+    sep [ text "progress:"
+        , nest 2 $ text "checked" <+> prettyList (map prettyTCM us)
+        , nest 2 $ text "remaining" <+> sep [ prettyList (map (prettyA . namedThing . unArg) es)
+                                            , nest 2 $ text ":" <+> prettyTCM t0 ] ]
+  postponeTypeCheckingProblem_ (CheckArgs exph r es t0 t $ \ vs t pid -> k (us ++ vs) t pid)
+
+-----------------------------------------------------------------------------
+-- * Constructors
+-----------------------------------------------------------------------------
+
+-- | 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 -> ConHead -> [NamedArg A.Expr] -> TCM Term
+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 paramsGiven = checkForParams args
+  if paramsGiven then fallback else do
+    reportSDoc "tc.term.con" 50 $ text "checkConstructorApplication: no parameters explicitly supplied, continuing..."
+    cdef  <- getConInfo c
+    let Constructor{conData = d, conPars = npars} = theDef cdef
+    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 (t0, unEl t) of -- Only fully applied constructors get special treatment
+      (Def d0 _, Def d' es) -> do
+        let ~(Just vs) = allApplyElims es
+        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'
+         caseMaybe (sequenceA $ List2 (Just npars, npars')) fallback $ \ (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')  -- preprocessor does not like ', so put on next line
+             __IMPOSSIBLE__
+           let ps    = take n $ drop (n' - n) vs
+               ctype = defType cdef
+           reportSDoc "tc.term.con" 20 $ vcat
+             [ text "special checking of constructor application of" <+> prettyTCM c
+             , nest 2 $ vcat [ text "ps     =" <+> prettyTCM ps
+                             , text "ctype  =" <+> prettyTCM ctype ] ]
+           let ctype' = ctype `piApply` ps
+           reportSDoc "tc.term.con" 20 $ nest 2 $ text "ctype' =" <+> prettyTCM ctype'
+           -- get the parameter names
+           let TelV ptel _ = telView'UpTo n ctype
+           let pnames = map (fmap fst) $ telToList ptel
+           -- drop the parameter arguments
+               args' = dropArgs pnames args
+           -- check the non-parameter arguments
+           expandLast <- asks envExpandLast
+           checkArguments expandLast (getRange c) args' ctype' t $ \ es t' targetCheck -> do
+             let us = fromMaybe __IMPOSSIBLE__ (allApplyElims es)
+             reportSDoc "tc.term.con" 20 $ nest 2 $ vcat
+               [ text "us     =" <+> prettyTCM us
+               , text "t'     =" <+> prettyTCM t' ]
+             coerce' targetCheck (Con c ConOCon (map Apply 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 (unambiguous $ conName c)) args
+
+    -- 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.
+    --
+    -- Andreas, 2012-04-18: if all inital args are underscores, ignore them
+    checkForParams args =
+      let (hargs, rest) = span (not . visible) args
+          notUnderscore A.Underscore{} = False
+          notUnderscore _              = True
+      in  any notUnderscore $ map (unScope . namedArg) hargs
+
+    -- Drop the constructor arguments that correspond to parameters.
+    dropArgs [] args                = args
+    dropArgs ps []                  = args
+    dropArgs ps args@(arg : args')
+      | Just p   <- name,
+        Just ps' <- namedPar p ps   = dropArgs ps' args'
+      | Nothing  <- name,
+        Just ps' <- unnamedPar h ps = dropArgs ps' args'
+      | otherwise                   = args
+      where
+        name = fmap rangedThing . nameOf $ unArg arg
+        h    = getHiding arg
+
+        namedPar   x = dropPar ((x ==) . unDom)
+        unnamedPar h = dropPar (sameHiding h)
+
+        dropPar this (p : ps) | this p    = Just ps
+                              | otherwise = dropPar this ps
+        dropPar _ [] = Nothing
+
+-- | Returns an unblocking action in case of failure.
+disambiguateConstructor :: NonemptyList QName -> Type -> TCM (Either (TCM Bool) ConHead)
+disambiguateConstructor cs0 t = do
+  reportSLn "tc.check.term" 40 $ "Ambiguous constructor: " ++ prettyShow cs0
+
+  -- Get the datatypes of the various constructors
+  let getData Constructor{conData = d} = d
+      getData _                        = __IMPOSSIBLE__
+  reportSLn "tc.check.term" 40 $ "  ranges before: " ++ show (getRange cs0)
+  -- We use the reduced constructor when disambiguating, but
+  -- the original constructor for type checking. This is important
+  -- since they may have different types (different parameters).
+  -- See issue 279.
+  -- Andreas, 2017-08-13, issue #2686: ignore abstract constructors
+  (cs, cons)  <- unzip . snd . partitionEithers <$> do
+     forM (toList cs0) $ \ c -> mapRight (c,) <$> getConForm c
+  reportSLn "tc.check.term" 40 $ "  reduced: " ++ prettyShow cons
+  case cons of
+    []    -> typeError $ AbstractConstructorNotInScope $ headNe cs0
+    [con] -> do
+      let c = setConName (fromMaybe __IMPOSSIBLE__ $ headMaybe cs) con
+      reportSLn "tc.check.term" 40 $ "  only one non-abstract constructor: " ++ prettyShow c
+      storeDisambiguatedName $ conName c
+      return (Right c)
+    _   -> do
+      dcs <- zipWithM (\ c con -> (, setConName c con) . getData . theDef <$> getConInfo con) cs cons
+      -- Type error
+      let badCon t = typeError $ flip DoesNotConstructAnElementOf t $
+            fromMaybe __IMPOSSIBLE__ $ headMaybe cs
+      -- Lets look at the target type at this point
+      let getCon :: TCM (Maybe ConHead)
+          getCon = do
+            TelV tel t1 <- telView t
+            addContext tel $ do
+             reportSDoc "tc.check.term.con" 40 $ nest 2 $
+               text "target type: " <+> prettyTCM t1
+             ifBlockedType t1 (\ m t -> return Nothing) $ \ _ t' ->
+               caseMaybeM (isDataOrRecord $ unEl t') (badCon t') $ \ d ->
+                 case [ c | (d', c) <- dcs, d == d' ] of
+                   [c] -> do
+                     reportSLn "tc.check.term" 40 $ "  decided on: " ++ prettyShow c
+                     storeDisambiguatedName $ conName c
+                     return $ Just c
+                   []  -> badCon $ t' $> Def d []
+                   cs  -> typeError $ CantResolveOverloadedConstructorsTargetingSameDatatype d $ map conName cs
+      getCon >>= \ case
+        Nothing -> return $ Left $ isJust <$> getCon
+        Just c  -> return $ Right c
+
+---------------------------------------------------------------------------
+-- * Projections
+---------------------------------------------------------------------------
+
+-- | Inferring the type of an overloaded projection application.
+--   See 'inferOrCheckProjApp'.
+
+inferProjApp :: A.Expr -> ProjOrigin -> NonemptyList QName -> A.Args -> TCM (Term, Type)
+inferProjApp e o ds args0 = do
+  (v, t, _) <- inferOrCheckProjApp e o ds args0 Nothing
+  return (v, t)
+
+-- | Checking the type of an overloaded projection application.
+--   See 'inferOrCheckProjApp'.
+
+checkProjApp  :: A.Expr -> ProjOrigin -> NonemptyList QName -> A.Args -> Type -> TCM Term
+checkProjApp e o ds args0 t = do
+  (v, ti, targetCheck) <- inferOrCheckProjApp e o ds args0 (Just t)
+  coerce' targetCheck v ti t
+
+-- | Inferring or Checking an overloaded projection application.
+--
+--   The overloaded projection is disambiguated by inferring the type of its
+--   principal argument, which is the first visible argument.
+
+inferOrCheckProjApp
+  :: A.Expr
+     -- ^ The whole expression which constitutes the application.
+  -> ProjOrigin
+     -- ^ The origin of the projection involved in this projection application.
+  -> NonemptyList QName
+     -- ^ The projection name (potentially ambiguous).
+  -> A.Args
+     -- ^ The arguments to the projection.
+  -> Maybe Type
+     -- ^ The expected type of the expression (if 'Nothing', infer it).
+  -> TCM (Term, Type, CheckedTarget)
+     -- ^ The type-checked expression and its type (if successful).
+inferOrCheckProjApp e o ds args mt = do
+  reportSDoc "tc.proj.amb" 20 $ vcat
+    [ text "checking ambiguous projection"
+    , text $ "  ds   = " ++ prettyShow ds
+    , text   "  args = " <+> sep (map prettyTCM args)
+    , text   "  t    = " <+> caseMaybe mt (text "Nothing") prettyTCM
+    ]
+
+  let refuse :: String -> TCM a
+      refuse reason = typeError $ GenericError $
+        "Cannot resolve overloaded projection "
+        ++ prettyShow (A.nameConcrete $ A.qnameName $ headNe ds)
+        ++ " because " ++ reason
+      refuseNotApplied = refuse "it is not applied to a visible argument"
+      refuseNoMatching = refuse "no matching candidate found"
+      refuseNotRecordType = refuse "principal argument is not of record type"
+
+      -- Postpone the whole type checking problem
+      -- if type of principal argument (or the type where we get it from)
+      -- is blocked by meta m.
+      postpone m = do
+        tc <- caseMaybe mt newTypeMeta_ return
+        v <- postponeTypeCheckingProblem (CheckExpr e tc) $ isInstantiatedMeta m
+        return (v, tc, NotCheckedTarget)
+
+  -- The following cases need to be considered:
+  -- 1. No arguments to the projection.
+  -- 2. Arguments (parameters), but not the principal argument.
+  -- 3. Argument(s) including the principal argument.
+
+  -- For now, we only allow ambiguous projections if the first visible
+  -- argument is the record value.
+
+  case filter (visible . snd) $ zip [0..] args of
+
+    -- Case: we have no visible argument to the projection.
+    -- In inference mode, we really need the visible argument, postponing does not help
+    [] -> caseMaybe mt refuseNotApplied $ \ t -> do
+      -- If we have the type, we can try to get the type of the principal argument.
+      -- It is the first visible argument.
+      TelV _ptel core <- telViewUpTo' (-1) (not . visible) t
+      ifBlockedType core (\ m _ -> postpone m) $ {-else-} \ _ core -> do
+      ifNotPiType core (\ _ -> refuseNotApplied) $ {-else-} \ dom _b -> do
+      ifBlockedType (unDom dom) (\ m _ -> postpone m) $ {-else-} \ _ ta -> do
+      caseMaybeM (isRecordType ta) refuseNotRecordType $ \ (_q, _pars, defn) -> do
+      case defn of
+        Record { recFields = fs } -> do
+          case catMaybes $ for fs $ \ (Arg _ f) -> List.find (f ==) (toList ds) of
+            [] -> refuseNoMatching
+            [d] -> do
+              storeDisambiguatedName d
+              -- checkHeadApplication will check the target type
+              (, t, CheckedTarget Nothing) <$>
+                checkHeadApplication e t (A.Proj o $ unambiguous d) args
+            _ -> __IMPOSSIBLE__
+        _ -> __IMPOSSIBLE__
+
+    -- Case: we have a visible argument
+    ((k, arg) : _) -> do
+      (v0, ta) <- inferExpr $ namedArg arg
+      reportSDoc "tc.proj.amb" 25 $ vcat
+        [ text "  principal arg " <+> prettyTCM arg
+        , text "  has type "      <+> prettyTCM ta
+        ]
+      -- ta should be a record type (after introducing the hidden args in v0)
+      (vargs, ta) <- implicitArgs (-1) (not . visible) ta
+      let v = v0 `apply` vargs
+      ifBlockedType ta (\ m _ -> postpone m) {-else-} $ \ _ ta -> do
+      caseMaybeM (isRecordType ta) refuseNotRecordType $ \ (q, _pars0, _) -> do
+
+          -- try to project it with all of the possible projections
+          let try d = do
+                reportSDoc "tc.proj.amb" 30 $ vcat
+                  [ text $ "trying projection " ++ prettyShow d
+                  , text "  td  = " <+> caseMaybeM (getDefType d ta) (text "Nothing") prettyTCM
+                  ]
+
+                -- get the original projection name
+                isP <- isProjection d
+                reportSDoc "tc.proj.amb" 40 $ vcat $
+                  [ text $ "  isProjection = " ++ caseMaybe isP "no" (const "yes")
+                  ] ++ caseMaybe isP [] (\ Projection{ projProper = proper, projOrig = orig } ->
+                  [ text $ "  proper       = " ++ show proper
+                  , text $ "  orig         = " ++ prettyShow orig
+                  ])
+
+                -- Andreas, 2017-01-21, issue #2422
+                -- The scope checker considers inherited projections (from nested records)
+                -- as projections and allows overloading.  However, since they are defined
+                -- as *composition* of projections, the type checker does *not* recognize them,
+                -- and @isP@ will be @Nothing@.
+                -- However, we can ignore this, as we only need the @orig@inal projection name
+                -- for removing false ambiguity.  Thus, we skip these checks:
+
+                -- Projection{ projProper = proper, projOrig = orig } <- MaybeT $ return isP
+                -- guard $ isJust proper
+                let orig = caseMaybe isP d projOrig
+
+                -- try to eliminate
+                (dom, u, tb) <- MaybeT (projectTyped v ta o d `catchError` \ _ -> return Nothing)
+                reportSDoc "tc.proj.amb" 30 $ vcat
+                  [ text "  dom = " <+> prettyTCM dom
+                  , text "  u   = " <+> prettyTCM u
+                  , text "  tb  = " <+> prettyTCM tb
+                  ]
+                (q', pars, _) <- MaybeT $ isRecordType $ unDom dom
+                reportSDoc "tc.proj.amb" 30 $ vcat
+                  [ text "  q   = " <+> prettyTCM q
+                  , text "  q'  = " <+> prettyTCM q'
+                  ]
+                guard (q == q')
+                -- Get the type of the projection and check
+                -- that the first visible argument is the record value.
+                tfull <- lift $ defType <$> getConstInfo d
+                TelV tel _ <- lift $ telViewUpTo' (-1) (not . visible) tfull
+                reportSDoc "tc.proj.amb" 30 $ vcat
+                  [ text $ "  size tel  = " ++ show (size tel)
+                  , text $ "  size pars = " ++ show (size pars)
+                  ]
+                -- See issue 1960 for when the following assertion fails for
+                -- the correct disambiguation.
+                -- guard (size tel == size pars)
+                return (orig, (d, (pars, (dom, u, tb))))
+
+          cands <- groupOn fst . catMaybes <$> mapM (runMaybeT . try) (toList ds)
+          case cands of
+            [] -> refuseNoMatching
+            [[]] -> refuseNoMatching
+            (_:_:_) -> refuse $ "several matching candidates found: "
+                 ++ prettyShow (map (fst . snd) $ concat cands)
+            -- case: just one matching projection d
+            -- the term u = d v
+            -- the type tb is the type of this application
+            [ (_orig, (d, (pars, (_dom,u,tb)))) : _ ] -> do
+              storeDisambiguatedName d
+
+              -- Check parameters
+              tfull <- typeOfConst d
+              (_,_) <- checkKnownArguments (take k args) pars tfull
+
+              -- Check remaining arguments
+              let r     = getRange e
+                  args' = drop (k + 1) args
+              z <- runExceptT $ checkArgumentsE ExpandLast r args' tb mt
+              case z of
+                Right (us, trest, targetCheck) -> return (u `applyE` us, trest, targetCheck)
+                Left problem -> do
+                  -- In the inference case:
+                  -- To create a postponed type checking problem,
+                  -- we do not use typeDontCare, but create a meta.
+                  tc <- caseMaybe mt newTypeMeta_ return
+                  v  <- postponeArgs problem ExpandLast r args' tc $ \ us trest targetCheck ->
+                          coerce' targetCheck (u `applyE` us) trest tc
+
+                  return (v, tc, NotCheckedTarget)
+
+-----------------------------------------------------------------------------
+-- * Coinduction
+-----------------------------------------------------------------------------
+
+checkSharpApplication :: A.Expr -> Type -> QName -> [NamedArg A.Expr] -> TCM Term
+checkSharpApplication e t c args = do
+  arg <- case args of
+           [a] | visible a -> return $ namedArg a
+           _ -> typeError $ GenericError $ prettyShow c ++ " must be applied to exactly one argument."
+
+  -- The name of the fresh function.
+  i <- fresh :: TCM Int
+  let name = filter (/= '_') (prettyShow $ A.nameConcrete $ A.qnameName c) ++ "-" ++ show i
+
+  kit <- coinductionKit'
+  let flat = nameOfFlat kit
+      inf  = nameOfInf  kit
+
+  -- Add the type signature of the fresh function to the
+  -- signature.
+  -- To make sure we can type check the generated function we have to make
+  -- sure that its type is \inf. The reason for this is that we don't yet
+  -- postpone checking of patterns when we don't know their types (Issue480).
+  forcedType <- do
+    lvl <- levelType
+    (_, l) <- newValueMeta RunMetaOccursCheck lvl
+    lv  <- levelView l
+    (_, a) <- newValueMeta RunMetaOccursCheck (sort $ Type lv)
+    return $ El (Type lv) $ Def inf [Apply $ setHiding Hidden $ defaultArg l, Apply $ defaultArg a]
+
+  wrapper <- inFreshModuleIfFreeParams $ do
+    c' <- setRange (getRange c) <$>
+            liftM2 qualify (killRange <$> currentModule)
+                           (freshName_ name)
+
+    -- Define and type check the fresh function.
+    rel <- asks envRelevance
+    abs <- aModeToDef <$> asks envAbstractMode
+    let info   = A.mkDefInfo (A.nameConcrete $ A.qnameName c') noFixity'
+                             PublicAccess abs noRange
+        core   = A.LHSProj { A.lhsDestructor = unambiguous flat
+                           , A.lhsFocus      = defaultNamedArg $ A.LHSHead c' []
+                           , A.lhsPats       = [] }
+        clause = A.Clause (A.LHS empty core) []
+                          (A.RHS arg Nothing)
+                          A.noWhereDecls False
+
+    i <- currentOrFreshMutualBlock
+
+    -- If we are in irrelevant position, add definition irrelevantly.
+    -- TODO: is this sufficient?
+    addConstant c' =<< do
+      let ai = setRelevance rel defaultArgInfo
+      useTerPragma $
+        (defaultDefn ai c' forcedType emptyFunction)
+        { defMutual = i }
+
+    checkFunDef NotDelayed info c' [clause]
+
+    reportSDoc "tc.term.expr.coind" 15 $ do
+      def <- theDef <$> getConstInfo c'
+      vcat $
+        [ text "The coinductive wrapper"
+        , nest 2 $ prettyTCM rel <> prettyTCM c' <+> text ":"
+        , nest 4 $ prettyTCM t
+        , nest 2 $ prettyA clause
+        , text "The definition is" <+> text (show $ funDelayed def) <>
+          text "."
+        ]
+    return c'
+
+  -- The application of the fresh function to the relevant
+  -- arguments.
+  e' <- Def wrapper . map Apply <$> getContextArgs
+
+  reportSDoc "tc.term.expr.coind" 15 $ vcat $
+      [ text "The coinductive constructor application"
+      , nest 2 $ prettyTCM e
+      , text "was translated into the application"
+      , nest 2 $ prettyTCM e'
+      ]
+
+  blockTerm t $ e' <$ workOnTypes (leqType forcedType t)
+
diff --git a/src/full/Agda/TypeChecking/Rules/Application.hs-boot b/src/full/Agda/TypeChecking/Rules/Application.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Rules/Application.hs-boot
@@ -0,0 +1,19 @@
+
+module Agda.TypeChecking.Rules.Application where
+
+import Agda.Syntax.Common (NamedArg)
+import qualified Agda.Syntax.Abstract as A
+import Agda.Syntax.Internal
+import Agda.Syntax.Position
+import Agda.TypeChecking.Monad.Base
+
+checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->
+                  (Elims -> Type -> CheckedTarget -> TCM Term) -> TCM Term
+
+checkArguments_ :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Telescope ->
+                   TCM (Elims, Telescope)
+
+checkApplication :: A.Expr -> A.Args -> A.Expr -> Type -> TCM Term
+
+inferApplication :: ExpandHidden -> A.Expr -> A.Args -> A.Expr -> TCM (Term, Type)
+
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
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE NondecreasingIndentation #-}
 
 module Agda.TypeChecking.Rules.Builtin
   ( bindBuiltin
@@ -12,13 +13,15 @@
 import Control.Monad
 import Control.Monad.Reader (ask)
 import Control.Monad.State (get)
-import Data.List (find)
+import Data.List (find, sortBy)
+import Data.Function (on)
 
 import qualified Agda.Syntax.Abstract as A
 import qualified Agda.Syntax.Abstract.Views as A
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.Syntax.Position
+import Agda.Syntax.Scope.Base
 
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
@@ -41,9 +44,11 @@
 import {-# SOURCE #-} Agda.TypeChecking.Rewriting
 
 import Agda.Utils.Except ( MonadError(catchError) )
+import Agda.Utils.Functor
 import Agda.Utils.List
 import Agda.Utils.Maybe
 import Agda.Utils.Monad
+import Agda.Utils.NonemptyList
 import Agda.Utils.Null
 import Agda.Utils.Size
 
@@ -57,6 +62,9 @@
 builtinPostulate :: TCM Type -> BuiltinDescriptor
 builtinPostulate = BuiltinPostulate Relevant
 
+findBuiltinInfo :: String -> Maybe BuiltinInfo
+findBuiltinInfo b = find ((b ==) . builtinName) coreBuiltins
+
 coreBuiltins :: [BuiltinInfo]
 coreBuiltins =
   [ (builtinList               |-> BuiltinData (tset --> tset) [builtinNil, builtinCons])
@@ -66,7 +74,7 @@
   , (builtinBool               |-> BuiltinData tset [builtinTrue, builtinFalse])
   , (builtinNat                |-> BuiltinData tset [builtinZero, builtinSuc])
   , (builtinUnit               |-> BuiltinData tset [builtinUnitUnit])  -- actually record, but they are treated the same
-  , (builtinAgdaLiteral        |-> BuiltinData tset [builtinAgdaLitNat, builtinAgdaLitFloat,
+  , (builtinAgdaLiteral        |-> BuiltinData tset [builtinAgdaLitNat, builtinAgdaLitWord64, builtinAgdaLitFloat,
                                                      builtinAgdaLitChar, builtinAgdaLitString,
                                                      builtinAgdaLitQName, builtinAgdaLitMeta])
   , (builtinAgdaPattern        |-> BuiltinData tset [builtinAgdaPatVar, builtinAgdaPatCon, builtinAgdaPatDot,
@@ -78,6 +86,7 @@
   , (builtinAgdaPatProj        |-> BuiltinDataCons (tqname --> tpat))
   , (builtinAgdaPatAbsurd      |-> BuiltinDataCons tpat)
   , (builtinLevel              |-> builtinPostulate tset)
+  , (builtinWord64             |-> builtinPostulate tset)
   , (builtinInteger            |-> BuiltinData tset [builtinIntegerPos, builtinIntegerNegSuc])
   , (builtinIntegerPos         |-> BuiltinDataCons (tnat --> tinteger))
   , (builtinIntegerNegSuc      |-> BuiltinDataCons (tnat --> tinteger))
@@ -148,6 +157,7 @@
   , (builtinAgdaTermMeta         |-> BuiltinDataCons (tmeta --> targs --> tterm))
   , (builtinAgdaTermUnsupported|-> BuiltinDataCons tterm)
   , (builtinAgdaLitNat    |-> BuiltinDataCons (tnat --> tliteral))
+  , (builtinAgdaLitWord64 |-> BuiltinDataCons (tword64 --> tliteral))
   , (builtinAgdaLitFloat  |-> BuiltinDataCons (tfloat --> tliteral))
   , (builtinAgdaLitChar   |-> BuiltinDataCons (tchar --> tliteral))
   , (builtinAgdaLitString |-> BuiltinDataCons (tstring --> tliteral))
@@ -213,6 +223,7 @@
   , builtinAgdaTCMInContext     |-> builtinPostulate (hPi "a" tlevel $ hPi "A" (tsetL 0) $ tlist (targ ttype) --> tTCM 1 (varM 0) --> tTCM 1 (varM 0))
   , builtinAgdaTCMFreshName     |-> builtinPostulate (tstring --> tTCM_ primQName)
   , builtinAgdaTCMDeclareDef    |-> builtinPostulate (targ tqname --> ttype --> tTCM_ primUnit)
+  , builtinAgdaTCMDeclarePostulate    |-> builtinPostulate (targ tqname --> ttype --> tTCM_ primUnit)
   , builtinAgdaTCMDefineFun     |-> builtinPostulate (tqname --> tlist tclause --> tTCM_ primUnit)
   , builtinAgdaTCMGetType            |-> builtinPostulate (tqname --> tTCM_ primAgdaTerm)
   , builtinAgdaTCMGetDefinition      |-> builtinPostulate (tqname --> tTCM_ primAgdaDefinition)
@@ -253,6 +264,7 @@
         terrorpart = el primAgdaErrorPart
         tnat       = el primNat
         tint       = el primInteger
+        tword64    = el primWord64
         tunit      = el primUnit
         tinteger   = el primInteger
         tfloat     = el primFloat
@@ -399,7 +411,7 @@
 inductiveCheck :: String -> Int -> Term -> TCM (QName, Definition)
 inductiveCheck b n t = do
   t <- etaContract =<< normalise t
-  case ignoreSharing t of
+  case t of
     Def q _ -> do
       def <- getConstInfo q
       let yes = return (q, def)
@@ -423,14 +435,14 @@
         , "constructors"
         ]
 
--- | @bindPostulatedName builtin e m@ checks that @e@ is a postulated
--- name @q@, and binds the builtin @builtin@ to the term @m q def@,
+-- | @bindPostulatedName builtin q m@ checks that @q@ is a postulated
+-- name, and binds the builtin @builtin@ to the term @m q def@,
 -- where @def@ is the current 'Definition' of @q@.
 
 bindPostulatedName ::
-  String -> A.Expr -> (QName -> Definition -> TCM Term) -> TCM ()
-bindPostulatedName builtin e m = do
-  q   <- getName e
+  String -> ResolvedName -> (QName -> Definition -> TCM Term) -> TCM ()
+bindPostulatedName builtin x m = do
+  q   <- getName x
   def <- getConstInfo q
   case theDef def of
     Axiom {} -> bindBuiltinName builtin =<< m q def
@@ -439,18 +451,9 @@
   err = typeError $ GenericError $
           "The argument to BUILTIN " ++ builtin ++
           " must be a postulated name"
-
-  getName (A.Def q)          = return q
-  getName (A.ScopedExpr _ e) = getName e
-  getName _                  = err
-
--- REPLACED by TC.Functions.getDef
--- getDef :: Term -> TCM QName
--- getDef t = do
---   t <- etaContract =<< normalise t
---   case ignoreSharing t of
---     Def d _ -> return d
---     _ -> __IMPOSSIBLE__
+  getName = \case
+    DefinedName _ d -> return $ anameName d
+    _ -> err
 
 addHaskellPragma :: QName -> String -> TCM ()
 addHaskellPragma = addPragma ghcBackendName
@@ -464,29 +467,47 @@
 bindBuiltinBool :: Term -> TCM ()
 bindBuiltinBool = bindAndSetHaskellCode builtinBool "= type Bool"
 
+-- | Check that we're not trying to bind true and false to the same
+-- constructor.
+checkBuiltinBool :: TCM ()
+checkBuiltinBool = do
+  true  <- getBuiltin' builtinTrue
+  false <- getBuiltin' builtinFalse
+  when (true == false) $
+    genericError "Cannot bind TRUE and FALSE to the same constructor"
+
 bindBuiltinInt :: Term -> TCM ()
 bindBuiltinInt = bindAndSetHaskellCode builtinInteger "= type Integer"
 
 bindBuiltinNat :: Term -> TCM ()
 bindBuiltinNat t = do
-  nat <- fromMaybe __IMPOSSIBLE__ <$> getDef t
-  def <- theDef <$> getConstInfo nat
-  case def of
-    Datatype { dataCons = [c1, c2] } -> do
-      bindBuiltinName builtinNat t
-      let getArity c = arity <$> (normalise . defType =<< getConstInfo c)
-      [a1, a2] <- mapM getArity [c1, c2]
-      let (zero, suc) | a2 > a1   = (c1, c2)
-                      | otherwise = (c2, c1)
-          tnat = el primNat
-          rerange = setRange (getRange nat)
-      addHaskellPragma nat "= type Integer"
-      bindBuiltinInfo (BuiltinInfo builtinZero $ BuiltinDataCons tnat)
-                      (A.Con $ AmbQ [rerange zero])
-      bindBuiltinInfo (BuiltinInfo builtinSuc  $ BuiltinDataCons (tnat --> tnat))
-                      (A.Con $ AmbQ [rerange suc])
-    _ -> __IMPOSSIBLE__
+  bindBuiltinData builtinNat t
+  name <- fromMaybe __IMPOSSIBLE__ <$> getDef t
+  addHaskellPragma name "= type Integer"
 
+-- | Only use for datatypes with distinct arities of constructors.
+--   Binds the constructors together with the datatype.
+bindBuiltinData :: String -> Term -> TCM ()
+bindBuiltinData s t = do
+  bindBuiltinName s t
+  name <- fromMaybe __IMPOSSIBLE__ <$> getDef t
+  Datatype{ dataCons = cs } <- theDef <$> getConstInfo name
+  let getArity c = do
+        Constructor{ conArity = a } <- theDef <$> getConstInfo c
+        return a
+      getBuiltinArity (BuiltinDataCons t) = arity <$> t
+      getBuiltinArity _ = __IMPOSSIBLE__
+      sortByM f xs = map fst . sortBy (compare `on` snd) . zip xs <$> mapM f xs
+  -- Order constructurs by arity
+  cs <- sortByM getArity cs
+  -- Do the same for the builtins
+  let bcis = fromMaybe __IMPOSSIBLE__ $ do
+        BuiltinData _ bcs <- builtinDesc <$> findBuiltinInfo s
+        mapM findBuiltinInfo bcs
+  bcis <- sortByM (getBuiltinArity . builtinDesc) bcis
+  unless (length cs == length bcis) __IMPOSSIBLE__  -- we already checked this
+  zipWithM_ (\ c bci -> bindBuiltinInfo bci (A.Con $ unambiguous $ setRange (getRange name) c)) cs bcis
+
 bindBuiltinUnit :: Term -> TCM ()
 bindBuiltinUnit t = do
   unit <- fromMaybe __IMPOSSIBLE__ <$> getDef t
@@ -498,12 +519,9 @@
     _ -> genericError "Builtin UNIT must be a singleton record type"
 
 -- | Bind BUILTIN EQUALITY and BUILTIN REFL.
-bindBuiltinEquality :: A.Expr -> TCM ()
-bindBuiltinEquality (A.ScopedExpr scope e) = do
-  setScope scope
-  bindBuiltinEquality e
-bindBuiltinEquality e = do
-  (v, _t) <- inferExpr e
+bindBuiltinEquality :: ResolvedName -> TCM ()
+bindBuiltinEquality x = do
+  (v, _t) <- inferExpr (A.nameExpr x)
 
   -- Equality needs to be a data type with 1 constructor
   (eq, def) <- inductiveCheck builtinEquality 1 v
@@ -540,7 +558,7 @@
       unless (all ((Just 0 ==) . deBruijnView) ts) wrongRefl
 
       -- Check the target
-      case ignoreSharing $ unEl conCore of
+      case unEl conCore of
         Def _ es -> do
           let vs = map unArg $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es
           (a,b) <- reduce $ fromMaybe __IMPOSSIBLE__ $ last2 vs
@@ -553,7 +571,6 @@
   wrongRefl = genericError "Wrong type of constructor of BUILTIN EQUALITY"
 
 bindBuiltinInfo :: BuiltinInfo -> A.Expr -> TCM ()
-bindBuiltinInfo i (A.ScopedExpr scope e) = setScope scope >> bindBuiltinInfo i e
 bindBuiltinInfo (BuiltinInfo s d) e = do
     case d of
       BuiltinData t cs -> do
@@ -565,13 +582,13 @@
            | s == builtinNat      -> bindBuiltinNat      v
            | s == builtinInteger  -> bindBuiltinInt      v
            | s == builtinUnit     -> bindBuiltinUnit     v
+           | s == builtinList     -> bindBuiltinData s   v
            | otherwise            -> bindBuiltinName s   v
 
       BuiltinDataCons t -> do
 
         let name (Lam h b)  = name (absBody b)
             name (Con c ci _) = Con c ci []
-            name (Shared p) = name $ ignoreSharing (derefPtr p)
             name _          = __IMPOSSIBLE__
 
         v0 <- checkExpr e =<< t
@@ -582,8 +599,11 @@
 
         let v@(Con h _ []) = name v0
             c = conName h
+
         bindBuiltinName s v
 
+        when (s `elem` [builtinFalse, builtinTrue]) checkBuiltinBool
+
       BuiltinPrim pfname axioms -> do
         case e of
           A.Def qx -> do
@@ -597,8 +617,13 @@
             let cls = defClauses info
                 a   = defAbstract info
                 mcc = defCompiled info
+                inv = defInverse info
             bindPrimitive pfname $ pf { primFunName = qx }
-            addConstant qx $ info { theDef = Primitive a pfname cls mcc }
+            addConstant qx $ info { theDef = Primitive { primAbstr    = a
+                                                       , primName     = pfname
+                                                       , primClauses  = cls
+                                                       , primInv      = inv
+                                                       , primCompiled = mcc } }
 
             -- needed? yes, for checking equations for mul
             bindBuiltinName s v
@@ -619,6 +644,7 @@
                 when (s == builtinChar)   $ addHaskellPragma q "= type Char"
                 when (s == builtinString) $ addHaskellPragma q "= type Data.Text.Text"
                 when (s == builtinFloat)  $ addHaskellPragma q "= type Double"
+                when (s == builtinWord64) $ addHaskellPragma q "= type MAlonzo.RTE.Word64"
                 bindBuiltinName s v
               _        -> err
           _ -> err
@@ -631,36 +657,57 @@
         bindBuiltinName s v
 
 -- | Bind a builtin thing to an expression.
-bindBuiltin :: String -> A.Expr -> TCM ()
-bindBuiltin b e = do
-  unlessM ((0 ==) <$> getContextSize) $ typeError $ BuiltinInParameterisedModule b
+bindBuiltin :: String -> ResolvedName -> TCM ()
+bindBuiltin b x = do
+  unlessM ((0 ==) <$> getContextSize) $ do
+    -- Andreas, 2017-11-01, issue #2824
+    -- Only raise an error if the name for the builtin is defined in a parametrized module.
+    let failure = typeError $ BuiltinInParameterisedModule b
+    -- Get the non-empty list of AbstractName for x
+    xs <- case x of
+      VarName{}            -> failure
+      DefinedName _ x      -> return $ x :! []
+      FieldName xs         -> return xs
+      ConstructorName xs   -> return xs
+      PatternSynResName xs -> failure
+      UnknownName          -> failure
+    -- For ambiguous names, we check all of their definitions:
+    unlessM (allM xs $ ((0 ==) . size) <.> lookupSection . qnameModule . anameName) $
+      failure
+  -- Since the name was define in a parameter-free context, we can switch to the empty context.
+  -- (And we should!)
+  inTopContext $ do
   if | b == builtinRefl  -> warning $ OldBuiltin b builtinEquality
-     | b == builtinZero  -> nowNat b
-     | b == builtinSuc   -> nowNat b
-     | b == builtinInf   -> bindBuiltinInf e
-     | b == builtinSharp -> bindBuiltinSharp e
-     | b == builtinFlat  -> bindBuiltinFlat e
-     | b == builtinEquality -> bindBuiltinEquality e
-     | Just i <- find ((b ==) . builtinName) coreBuiltins -> bindBuiltinInfo i e
+     | b == builtinZero  -> now builtinNat b
+     | b == builtinSuc   -> now builtinNat b
+     | b == builtinNil   -> now builtinList b
+     | b == builtinCons  -> now builtinList b
+     | b == builtinInf   -> bindBuiltinInf x
+     | b == builtinSharp -> bindBuiltinSharp x
+     | b == builtinFlat  -> bindBuiltinFlat x
+     | b == builtinEquality -> bindBuiltinEquality x
+     | Just i <- findBuiltinInfo b -> bindBuiltinInfo i (A.nameExpr x)
      | otherwise -> typeError $ NoSuchBuiltinName b
   where
-    nowNat b = warning $ OldBuiltin b builtinNat
+    now new b = warning $ OldBuiltin b new
 
 isUntypedBuiltin :: String -> Bool
 isUntypedBuiltin b = elem b [builtinFromNat, builtinFromNeg, builtinFromString]
 
-bindUntypedBuiltin :: String -> A.Expr -> TCM ()
-bindUntypedBuiltin b e =
-  case A.unScope e of
-    A.Def q  -> bindBuiltinName b (Def q [])
-    A.Proj _ (AmbQ [q]) -> bindBuiltinName b (Def q [])
-    e        -> genericError $ "The argument to BUILTIN " ++ b ++ " must be a defined unambiguous name"
+bindUntypedBuiltin :: String -> ResolvedName -> TCM ()
+bindUntypedBuiltin b = \case
+  DefinedName _ x -> bindBuiltinName b (Def (anameName x) [])
+  FieldName (x :! []) -> bindBuiltinName b (Def (anameName x) [])
+  _ -> genericError $ "The argument to BUILTIN " ++ b ++ " must be a defined unambiguous name"
 
 -- | Bind a builtin thing to a new name.
+--
+-- Since their type is closed, it does not matter whether we are in a
+-- parameterized module when we declare them.
+-- We simply ignore the parameters.
 bindBuiltinNoDef :: String -> A.QName -> TCM ()
-bindBuiltinNoDef b q = do
-  unlessM ((0 ==) <$> getContextSize) $ typeError $ BuiltinInParameterisedModule b
-  case lookup b $ map (\ (BuiltinInfo b i) -> (b, i)) coreBuiltins of
+bindBuiltinNoDef b q = inTopContext $ do
+  case builtinDesc <$> findBuiltinInfo b of
     Just (BuiltinPostulate rel mt) -> do
       t <- mt
       addConstant q $ defaultDefn (setRelevance rel defaultArgInfo) q t def
@@ -672,6 +719,7 @@
         def | b == builtinSizeUniv = emptyFunction
                 { funClauses = [ (empty :: Clause) { clauseBody = Just $ Sort sSizeUniv } ]
                 , funCompiled = Just (CC.Done [] $ Sort sSizeUniv)
+                , funMutual    = Just []
                 , funTerminates = Just True
                 }
             | otherwise = Axiom
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
@@ -6,8 +6,6 @@
 
 module Agda.TypeChecking.Rules.Builtin.Coinduction where
 
-import Control.Applicative
-
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 
@@ -15,6 +13,7 @@
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.Syntax.Position
+import Agda.Syntax.Scope.Base
 
 import Agda.TypeChecking.CompiledClause
 import Agda.TypeChecking.Level
@@ -55,8 +54,8 @@
 -- | Binds the INFINITY builtin, but does not change the type's
 -- definition.
 
-bindBuiltinInf :: A.Expr -> TCM ()
-bindBuiltinInf e = bindPostulatedName builtinInf e $ \inf _ ->
+bindBuiltinInf :: ResolvedName -> TCM ()
+bindBuiltinInf x = bindPostulatedName builtinInf x $ \inf _ ->
   instantiateFull =<< checkExpr (A.Def inf) =<< typeOfInf
 
 -- | Binds the SHARP builtin, and changes the definitions of INFINITY
@@ -67,13 +66,13 @@
 -- codata ∞ {a} (A : Set a) : Set a where
 --   ♯_ : (x : A) → ∞ A
 
-bindBuiltinSharp :: A.Expr -> TCM ()
-bindBuiltinSharp e =
-  bindPostulatedName builtinSharp e $ \sharp sharpDefn -> do
+bindBuiltinSharp :: ResolvedName -> TCM ()
+bindBuiltinSharp x =
+  bindPostulatedName builtinSharp x $ \sharp sharpDefn -> do
     sharpType <- typeOfSharp
     TelV fieldTel _ <- telView sharpType
     sharpE    <- instantiateFull =<< checkExpr (A.Def sharp) sharpType
-    Def inf _ <- ignoreSharing <$> primInf
+    Def inf _ <- primInf
     infDefn   <- getConstInfo inf
     addConstant (defName infDefn) $
       infDefn { defPolarity       = [] -- not monotone
@@ -86,7 +85,7 @@
                   , recNamedCon       = True
                   , recFields         = []  -- flat is added later
                   , recTel            = fieldTel
-                  , recEtaEquality'   = Inferred False
+                  , recEtaEquality'   = Inferred NoEta
                   , recMutual         = Just []
                   , recAbstr          = ConcreteDef
                   }
@@ -99,6 +98,7 @@
                     , conData   = defName infDefn
                     , conAbstr  = ConcreteDef
                     , conInd    = CoInductive
+                    , conForced = []
                     , conErased = []
                     }
                 }
@@ -111,13 +111,13 @@
 --   ♭ : ∀ {a} {A : Set a} → ∞ A → A
 --   ♭ (♯ x) = x
 
-bindBuiltinFlat :: A.Expr -> TCM ()
-bindBuiltinFlat e =
-  bindPostulatedName builtinFlat e $ \ flat flatDefn -> do
+bindBuiltinFlat :: ResolvedName -> TCM ()
+bindBuiltinFlat x =
+  bindPostulatedName builtinFlat x $ \ flat flatDefn -> do
     flatE       <- instantiateFull =<< checkExpr (A.Def flat) =<< typeOfFlat
-    Def sharp _ <- ignoreSharing <$> primSharp
+    Def sharp _ <- primSharp
     kit         <- requireLevels
-    Def inf _   <- ignoreSharing <$> primInf
+    Def inf _   <- primInf
     let sharpCon = ConHead sharp CoInductive [flat]
         level    = El (mkType 0) $ Def (typeName kit) []
         tel     :: Telescope
@@ -126,7 +126,8 @@
                    ExtendTel (domN $ El (varSort 1) $ var 0) $ Abs "x" $
                    EmptyTel
         infA     = El (varSort 2) $ Def inf [ Apply $ defaultArg $ var 1 ]
-        cpi      = ConPatternInfo Nothing $ Just $ defaultArg infA
+        cpi      = noConPatternInfo { conPType = Just $ defaultArg infA
+                                    , conPLazy = True }
     let clause   = Clause
           { clauseLHSRange  = noRange
           , clauseFullRange = noRange
@@ -138,11 +139,7 @@
           , clauseCatchall  = False
           , clauseUnreachable = Just False
           }
-        cc = Case (defaultArg 0) $ Branches False
-                               (Map.singleton sharp
-                                 $ WithArity 1 $ Done [defaultArg "x"] $ var 0)
-                               Map.empty
-                               Nothing
+        cc = Case (defaultArg 0) $ conCase sharp $ WithArity 1 $ Done [defaultArg "x"] $ var 0
         projection = Projection
           { projProper   = Just inf
           , projOrig     = flat
@@ -157,8 +154,9 @@
                    { funClauses      = [clause]
                    , funCompiled     = Just $ cc
                    , funProjection   = Just projection
+                   , funMutual       = Just []
                    , funTerminates   = Just True
-                   , funCopatternLHS = isCopatternLHS [clause]
+                   , funCopatternLHS = hasProjectionPatterns cc
                    }
                 }
 
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
@@ -1,17 +1,9 @@
 module Agda.TypeChecking.Rules.Builtin.Coinduction where
 
-import Agda.Syntax.Abstract
+import Agda.Syntax.Scope.Base
 import Agda.TypeChecking.Monad
 
-bindBuiltinInf   :: Expr -> TCM ()
-bindBuiltinSharp :: Expr -> TCM ()
-bindBuiltinFlat  :: Expr -> TCM ()
-
-{- MOVED to TypeChecking.Monad.Builtin
-data CoinductionKit
-nameOfInf   :: CoinductionKit -> QName
-nameOfSharp :: CoinductionKit -> QName
-nameOfFlat  :: CoinductionKit -> QName
+bindBuiltinInf   :: ResolvedName -> TCM ()
+bindBuiltinSharp :: ResolvedName -> TCM ()
+bindBuiltinFlat  :: ResolvedName -> TCM ()
 
-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
@@ -3,12 +3,10 @@
 
 module Agda.TypeChecking.Rules.Data where
 
-import Control.Applicative
 import Control.Monad
 
 import Data.List (genericTake)
 import Data.Maybe (fromMaybe)
-import qualified Data.Set as Set
 
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Abstract.Views (deepUnscope)
@@ -18,7 +16,7 @@
 import qualified Agda.Syntax.Info as Info
 
 import Agda.TypeChecking.Monad
-import Agda.TypeChecking.Monad.Builtin (primLevel)
+import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Conversion
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.MetaVars
@@ -35,12 +33,7 @@
 
 import Agda.Utils.Except
 import Agda.Utils.List
-import Agda.Utils.Monad
-import Agda.Utils.Permutation
-import qualified Agda.Utils.Pretty as P
 import Agda.Utils.Size
-import Agda.Utils.Tuple
-import qualified Agda.Utils.VarSet as VarSet
 
 #include "undefined.h"
 import Agda.Utils.Impossible
@@ -89,7 +82,9 @@
               -- However, it might give the dreaded "Cannot instantiate meta..."
               -- error which we replace by a more understandable error
               -- in case of a suspected dependency.
-              s <- newSortMetaBelowInf
+              -- Jesper, 2017-09-14: since Set i depends non-strictly on i,
+              -- we need to create the new meta in a nonstrict context.
+              s <- applyRelevanceToContext NonStrict newSortMetaBelowInf
               catchError_ (addContext ixTel $ equalType s0 $ raise nofIxs $ sort s) $ \ err ->
                   if any (`freeIn` s0) [0..nofIxs - 1] then typeError . GenericDocError =<<
                      fsep [ text "The sort of" <+> prettyTCM name
@@ -99,9 +94,6 @@
                   else throwError err
               return s
 
-            -- the small parameters are taken into consideration for --without-K
-            smallPars <- smallParams tel s
-
             reportSDoc "tc.data.sort" 20 $ vcat
               [ text "checking datatype" <+> prettyTCM name
               , nest 2 $ vcat
@@ -110,7 +102,6 @@
                 , text "sort:   " <+> prettyTCM s
                 , text "indices:" <+> text (show nofIxs)
                 , text "params:"  <+> text (show $ deepUnscope ps)
-                , text "small params:" <+> text (show smallPars)
                 ]
               ]
             let npars = size tel
@@ -118,8 +109,6 @@
             -- Change the datatype from an axiom to a datatype with no constructors.
             let dataDef = Datatype
                   { dataPars       = npars
-                  , dataSmallPars  = Perm npars smallPars
-                  , dataNonLinPars = Drop 0 $ Perm npars []
                   , dataIxs        = nofIxs
                   , dataInduction  = Inductive
                   , dataClause     = Nothing
@@ -135,19 +124,10 @@
                 -- polarity and argOcc.s determined by the positivity checker
 
             -- Check the types of the constructors
-            -- collect the non-linear parameters of each constructor
-            nonLins <- mapM (checkConstructor name tel' nofIxs s) cs
-            -- compute the ascending list of non-linear parameters of the data type
-            let nonLinPars0 = Set.toAscList $ Set.unions $ map Set.fromList nonLins
-                -- The constructors are analyzed in the absolute context,
-                -- but the data definition happens in the relative module context,
-                -- so we apply to the free module variables.
-                -- Unfortunately, we lose precision here, since 'abstract', which
-                -- is then performed by addConstant, cannot restore the linearity info.
-                nonLinPars  = Drop freeVars $ Perm (npars + freeVars) nonLinPars0
+            mapM_ (checkConstructor name tel' nofIxs s) cs
 
             -- Return the data definition
-            return dataDef{ dataNonLinPars = nonLinPars }
+            return dataDef
 
         let s      = dataSort dataDef
             cons   = map A.axiomName cs  -- get constructor names
@@ -170,33 +150,15 @@
 -- | Ensure that the type is a sort.
 --   If it is not directly a sort, compare it to a 'newSortMetaBelowInf'.
 forceSort :: Type -> TCM Sort
-forceSort t = case ignoreSharing $ unEl t of
+forceSort t = case unEl t of
   Sort s -> return s
   _      -> do
-    s <- newSortMetaBelowInf
+    -- Universes depend non-strictly on their argument
+    s <- applyRelevanceToContext NonStrict newSortMetaBelowInf
     equalType t (sort s)
     return s
 
 
--- | A parameter is small if its sort fits into the data sort.
---   @smallParams@ overapproximates the small parameters (in doubt: small).
-smallParams :: Telescope -> Sort -> TCM [Int]
-smallParams tel s = do
-  -- get the types of the parameters
-  let as = map (snd . unDom) $ telToList tel
-  -- get the big parameters
-  concat <$> do
-    forM (zip [0..] as) $ \ (i, a) -> do
-      -- A type is small if it is not Level or its sort is <= the data sort.
-      -- In doubt (unsolvable constraints), a type is small.
-      -- So, only if we have a solid error, the type is big.
-      localTCState $ do
-        ([] <$ do equalTerm topSort (unEl a) =<< primLevel)  -- NB: if primLevel fails, the next alternative is picked
-        <|> ([i] <$ (getSort a `leqSort` s))
-        <|> return []
-  where
-    (<|>) m1 m2 = m1 `catchError_` (const m2)
-
 -- | Type check a constructor declaration. Checks that the constructor targets
 --   the datatype and that it fits inside the declared sort.
 --   Returns the non-linear parameters.
@@ -206,7 +168,7 @@
   -> Nat           -- ^ Number of indices of the data type.
   -> Sort          -- ^ Sort of the data type.
   -> A.Constructor -- ^ Constructor declaration (type signature).
-  -> TCM [Int]     -- ^ Non-linear parameters.
+  -> TCM ()
 checkConstructor d tel nofIxs s (A.ScopedDecl scope [con]) = do
   setScope scope
   checkConstructor d tel nofIxs s con
@@ -224,32 +186,32 @@
           Irrelevant -> typeError $ GenericError $ "Irrelevant constructors are not supported"
           _ -> __IMPOSSIBLE__
         -- check that the type of the constructor is well-formed
-        t <- isType_ e
+        t <- workOnTypes $ isType_ e
         -- check that the type of the constructor ends in the data type
         n <- getContextSize
         debugEndsIn t d n
-        nonLinPars <- constructs n t d
-        debugNonLinPars nonLinPars
-        -- check which constructor arguments are determined by the type ('forcing')
-        t' <- addForcingAnnotations t
+        constructs n t d
+        -- compute which constructor arguments are forced
+        forcedArgs <- computeForcingAnnotations t
         -- check that the sort (universe level) of the constructor type
         -- is contained in the sort of the data type
         -- (to avoid impredicative existential types)
         debugFitsIn s
-        arity <- t' `fitsIn` s
-        debugAdd c t'
+        arity <- fitsIn forcedArgs t s
+        debugAdd c t
 
         -- add parameters to constructor type and put into signature
         let con = ConHead c Inductive [] -- data constructors have no projectable fields and are always inductive
         escapeContext (size tel) $
           addConstant c $
-            defaultDefn defaultArgInfo c (telePi tel t') $ Constructor
+            defaultDefn defaultArgInfo c (telePi tel t) $ Constructor
               { conPars   = size tel
               , conArity  = arity
               , conSrcCon = con
               , conData   = d
               , conAbstr  = Info.defAbstract i
               , conInd    = Inductive
+              , conForced = forcedArgs
               , conErased = []  -- computed during compilation to treeless
               }
 
@@ -257,7 +219,6 @@
         when (Info.defInstance i == InstanceDef) $ do
           addNamedInstance c d
 
-        return nonLinPars
   where
     debugEnter c e =
       reportSDoc "tc.data.con" 5 $ vcat
@@ -271,9 +232,6 @@
               ]
         , nest 2 $ text "nofPars =" <+> text (show n)
         ]
-    debugNonLinPars ks =
-      reportSDoc "tc.data.con" 15 $
-        text "these constructor parameters are non-linear:" <+> text (show ks)
     debugFitsIn s =
       reportSDoc "tc.data.con" 15 $ sep
         [ text "checking that the type fits in"
@@ -322,7 +280,7 @@
   __IMPOSSIBLE__
 
 bindParameters' ts0 ps0@(A.DomainFree info x : ps) t ret = do
-  case ignoreSharing $ unEl t of
+  case unEl t of
     -- Andreas, 2011-04-07 ignore relevance information in binding?!
     Pi arg@(Dom info' a) b -> do
       if | info == info'                  -> do
@@ -331,7 +289,7 @@
             ts <- caseList ts0 (return []) $ \ t0 ts -> do
               equalType t0 a
               return ts
-            continue ts ps x
+            continue ts ps $ A.unBind x
 
          | visible info, notVisible info' ->
             continue ts0 ps0 =<< freshName_ (absName b)
@@ -340,7 +298,7 @@
              -- Andreas, 2016-12-30 Concrete.Definition excludes this case
       where
       continue ts ps x = do
-        addContext' (x, arg) $
+        addContext (x, arg) $
           bindParameters' (raise 1 ts) ps (absBody b) $ \ tel s ->
             ret (ExtendTel arg $ Abs (nameToArgName x) tel) s
     _ -> __IMPOSSIBLE__
@@ -351,8 +309,8 @@
 --
 --   As a side effect, return the arity of the constructor.
 
-fitsIn :: Type -> Sort -> TCM Int
-fitsIn t s = do
+fitsIn :: [IsForced] -> Type -> Sort -> TCM Int
+fitsIn forceds t s = do
   reportSDoc "tc.data.fits" 10 $
     sep [ text "does" <+> prettyTCM t
         , text "of sort" <+> prettyTCM (getSort t)
@@ -363,19 +321,16 @@
   -- s' <- instantiateFull (getSort t)
   -- noConstraints $ s' `leqSort` s
   t <- reduce t
-  case ignoreSharing $ unEl t of
+  case unEl t of
     Pi dom b -> do
       withoutK <- optWithoutK <$> pragmaOptions
-      -- Forced constructor arguments are ignored in size-checking.
-      when (withoutK || notForced (getRelevance dom)) $ do
+      let (forced,forceds') = nextIsForced forceds
+      unless (isForced forced && not withoutK) $ do
         sa <- reduce $ getSort dom
         unless (sa == SizeUniv) $ sa `leqSort` s
       addContext (absName b, dom) $ do
-        succ <$> fitsIn (absBody b) (raise 1 s)
+        succ <$> fitsIn forceds' (absBody b) (raise 1 s)
     _ -> return 0 -- getSort t `leqSort` s  -- Andreas, 2013-04-13 not necessary since constructor type ends in data type
-  where
-    notForced Forced{} = False
-    notForced _        = True
 
 -- | Return the parameters that share variables with the indices
 -- nonLinearParameters :: Int -> Type -> TCM [Int]
@@ -384,18 +339,14 @@
 -- | Check that a type constructs something of the given datatype. The first
 --   argument is the number of parameters to the datatype.
 --
---   As a side effect, return the parameters that occur free in indices.
---   E.g. in @data Eq (A : Set)(a : A) : A -> Set where refl : Eq A a a@
---   this would include parameter @a@, but not @A@.
---
---   TODO: what if there's a meta here?
-constructs :: Int -> Type -> QName -> TCM [Int]
+constructs :: Int -> Type -> QName -> TCM ()
 constructs nofPars t q = constrT 0 t
     where
-        constrT :: Nat -> Type -> TCM [Int]
+        -- The number n counts the proper (non-parameter) constructor arguments.
+        constrT :: Nat -> Type -> TCM ()
         constrT n t = do
             t <- reduce t
-            case ignoreSharing $ unEl t of
+            case unEl t of
                 Pi _ (NoAbs _ b)  -> constrT n b
                 Pi a b            -> underAbstraction a b $ constrT (n + 1)
                   -- OR: addCxtString (absName b) a $ constrT (n + 1) (absBody b)
@@ -404,18 +355,21 @@
                   (pars, ixs) <- normalise $ splitAt nofPars vs
                   -- check that the constructor parameters are the data parameters
                   checkParams n pars
-                  -- compute the non-linear parameters
-                  m <- getContextSize  -- Note: n /= m if NoAbs encountered
-                  let nl = nonLinearParams m pars ixs
-                  -- assert that these are correct indices into the parameter vector
-                  when (any (< 0) nl) __IMPOSSIBLE__
-                  when (any (>= nofPars) nl) __IMPOSSIBLE__
-                  return nl
                 MetaV{} -> do
                   def <- getConstInfo q
-                  xs <- newArgsMeta $ defType def
-                  let t' = El (dataSort $ theDef def) $ Def q $ map Apply xs
-                  equalType t t'
+                  -- Analyse the type of q (name of the data type)
+                  let td = defType def
+                  TelV tel core <- telView td
+                  -- Construct the parameter arguments
+                  -- The parameters are @n + nofPars - 1 .. n@
+                  let us = zipWith (\ arg x -> var x <$ arg ) (telToArgs tel) $
+                             take nofPars $ downFrom (nofPars + n)
+                  -- The indices are fresh metas
+                  xs <- newArgsMeta =<< piApplyM td us
+                  let t' = El (dataSort $ theDef def) $ Def q $ map Apply $ us ++ xs
+                  -- Andreas, 2017-11-07, issue #2840
+                  -- We should not postpone here, otherwise we might upset the positivity checker.
+                  noConstraints $ equalType t t'
                   constrT n t'
                 _ -> typeError $ ShouldEndInApplicationOfTheDatatype t
 
@@ -431,18 +385,6 @@
                     t <- typeOfBV i
                     equalTerm t (unArg arg) (var i)
 
-        -- return the parameters (numbered 0,1,...,size pars-1 from left to right)
-        -- that occur relevantly in the indices
-        nonLinearParams n pars ixs =
-          -- compute the free de Bruijn indices in the data indices
-          -- ALT: Ignore all sorts?
-          let fv = allRelevantVarsIgnoring IgnoreInAnnotations ixs
-          -- keep relevant ones, convert to de Bruijn levels
-          -- note: xs is descending list
-              xs = map ((n-1) -) $ VarSet.toList fv
-          -- keep those that correspond to parameters
-          -- in ascending list
-          in  reverse $ filter (< size pars) xs
 
 {- UNUSED, Andreas 2012-09-13
 -- | Force a type to be a specific datatype.
@@ -450,7 +392,7 @@
 forceData d (El s0 t) = liftTCM $ do
     t' <- reduce t
     d  <- canonicalName d
-    case ignoreSharing t' of
+    case t' of
         Def d' _
             | d == d'   -> return $ El s0 t'
             | otherwise -> fail $ "wrong datatype " ++ show d ++ " != " ++ show d'
@@ -468,7 +410,7 @@
 isCoinductive :: Type -> TCM (Maybe Bool)
 isCoinductive t = do
   El s t <- reduce t
-  case ignoreSharing t of
+  case t of
     Def q _ -> do
       def <- getConstInfo q
       case theDef def of
@@ -489,5 +431,4 @@
     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
@@ -3,7 +3,11 @@
 
 module Agda.TypeChecking.Rules.Decl where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
 import Control.Monad
 import Control.Monad.Reader
@@ -60,6 +64,7 @@
 import Agda.TypeChecking.Unquote
 import Agda.TypeChecking.Warnings
 
+import Agda.TypeChecking.Rules.Application
 import Agda.TypeChecking.Rules.Term
 import Agda.TypeChecking.Rules.Data    ( checkDataDef )
 import Agda.TypeChecking.Rules.Record  ( checkRecDef )
@@ -297,7 +302,7 @@
   -- and the set of function definitions in the mutual block
   classify q = inConcreteOrAbstractMode q $ \ def -> do
     case theDef def of
-      Record{ recEtaEquality' = Inferred True } -> return $ Just $ Left q
+      Record{ recEtaEquality' = Inferred YesEta } -> return $ Just $ Left q
       Function
         { funProjection = Nothing
             -- Andreas, 2017-08-10, issue #2664:
@@ -390,15 +395,10 @@
       -- all that remains is the module declaration.
     A.RecSig{}               -> highlight d
     A.RecDef i x ind eta c ps tel cs ->
-      highlight (A.RecDef i x ind eta c [] dummy (fields cs))
-      -- The telescope and all record module declarations except
-      -- for the fields have already been highlighted.
+      highlight (A.RecDef i x ind eta c [] dummy cs)
+      -- The telescope has 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 []                         = []
-      -- Andreas, 2016-01-22, issue 1791
+      -- Andreas, 2016-01-22, issue 1790
       -- The expression denoting the record constructor type
       -- is replace by a dummy expression in order to /not/
       -- generate highlighting from it.
@@ -602,7 +602,11 @@
     bindPrimitive s pf
     addConstant x $
       defaultDefn defaultArgInfo x t $
-        Primitive (Info.defAbstract i) s [] Nothing
+        Primitive { primAbstr    = Info.defAbstract i
+                  , primName     = s
+                  , primClauses  = []
+                  , primInv      = NotInjective
+                  , primCompiled = Nothing }
 
 assertCurrentModule :: QName -> String -> TCM ()
 assertCurrentModule x err =
@@ -683,11 +687,12 @@
             Function{} -> markStatic x
             _          -> typeError $ GenericError "STATIC directive only works on functions"
         A.InjectivePragma x -> markInjective x
-        A.InlinePragma x -> do
+        A.InlinePragma b x -> do
           def <- getConstInfo x
           case theDef def of
-            Function{} -> markInline x
-            _          -> typeError $ GenericError "INLINE directive only works on functions"
+            Function{} -> markInline b x
+            _          -> typeError $ GenericError $ sINLINE ++ " directive only works on functions"
+              where sINLINE = if b then "INLINE" else "NOINLINE"
         A.OptionsPragma{} -> typeError $ GenericError $ "OPTIONS pragma only allowed at beginning of file, before top module declaration"
         A.DisplayPragma f ps e -> checkDisplayPragma f ps e
         A.EtaPragma r -> do
@@ -696,11 +701,11 @@
           caseMaybeM (isRecord r) noRecord $ \case
             Record{ recInduction = ind, recEtaEquality' = eta } -> do
               unless (ind == Just CoInductive) $ noRecord
-              when (eta == Specified False) $ typeError $ GenericError $
-                "ETA pragram conflicts with no-eta-equality declaration"
+              when (eta == Specified NoEta) $ typeError $ GenericError $
+                "ETA pragma conflicts with no-eta-equality declaration"
             _ -> __IMPOSSIBLE__
           modifySignature $ updateDefinition r $ updateTheDef $ \case
-            def@Record{} -> def { recEtaEquality' = Specified True }
+            def@Record{} -> def { recEtaEquality' = Specified YesEta }
             _ -> __IMPOSSIBLE__
 
 -- | Type check a bunch of mutual inductive recursive definitions.
@@ -847,7 +852,8 @@
       ]
     -- Now, type check arguments.
     ts <- (noConstraints $ checkArguments_ DontExpandLast (getRange i) args tel') >>= \case
-      (ts, etaTel') | (size etaTel == size etaTel') -> return ts
+      (ts', etaTel') | (size etaTel == size etaTel')
+                     , Just ts <- allApplyElims ts' -> return ts
       _ -> __IMPOSSIBLE__
     -- Perform the application of the module parameters.
     let aTel = tel' `apply` ts
@@ -868,7 +874,7 @@
     args <- instantiateFull $ vs ++ ts
     let n = size aTel
     etaArgs <- inTopContext $ addContext aTel getContextArgs
-    addContext' (KeepNames aTel) $
+    addContext (KeepNames aTel) $
       applySection m1 (ptel `abstract` aTel) m2 (raise n args ++ etaArgs) copyInfo
 
 checkSectionApplication' i m1 (A.RecordModuleIFS x) copyInfo = do
@@ -911,8 +917,8 @@
   when (tel == EmptyTel) $
     typeError $ GenericError $ prettyShow (qnameToConcrete name) ++ " is not a parameterised section"
 
-  addContext' telInst $ do
-    vs <- moduleParamsToApply $ qnameModule name
+  addContext telInst $ do
+    vs <- moduleParamsToApply x
     reportSDoc "tc.mod.apply" 20 $ vcat
       [ nest 2 $ text "vs      =" <+> sep (map prettyTCM vs)
       , nest 2 $ text "args    =" <+> sep (map (parens . prettyTCM) args)
diff --git a/src/full/Agda/TypeChecking/Rules/Decl.hs-boot b/src/full/Agda/TypeChecking/Rules/Decl.hs-boot
--- a/src/full/Agda/TypeChecking/Rules/Decl.hs-boot
+++ b/src/full/Agda/TypeChecking/Rules/Decl.hs-boot
@@ -1,9 +1,9 @@
 
 module Agda.TypeChecking.Rules.Decl where
 
-import Agda.Syntax.Info        (ModuleInfo)
-import Agda.Syntax.Abstract    (QName, Declaration, ModuleName, ModuleApplication, ScopeCopyInfo)
-import Agda.TypeChecking.Monad (TCM)
+import Agda.Syntax.Info (ModuleInfo)
+import Agda.Syntax.Abstract
+import Agda.TypeChecking.Monad.Base (TCM)
 
 checkDecls :: [Declaration] -> TCM ()
 checkDecl  :: Declaration -> TCM ()
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
@@ -3,22 +3,27 @@
 
 module Agda.TypeChecking.Rules.Def where
 
-import Prelude hiding (mapM)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), mapM, null )
+#else
+import Prelude hiding ( mapM, null )
+#endif
+
 import Control.Arrow ((***))
-import Control.Applicative
 import Control.Monad.State hiding (forM, mapM)
 import Control.Monad.Reader hiding (forM, mapM)
 
 import Data.Function
 import Data.Maybe
-import Data.Traversable
+import Data.Traversable (Traversable, traverse, forM, mapM)
+import qualified Data.Map as Map
 import qualified Data.Set as Set
 
 import Agda.Syntax.Common
 import qualified Agda.Syntax.Concrete as C
 import Agda.Syntax.Concrete (exprFieldA)
 import Agda.Syntax.Position
-import Agda.Syntax.Abstract.Pattern ( containsAbsurdPattern )
+import Agda.Syntax.Abstract.Pattern as A
 import qualified Agda.Syntax.Abstract as A
 import qualified Agda.Syntax.Abstract.Views as A
 import Agda.Syntax.Internal as I
@@ -34,6 +39,7 @@
 
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Conversion
+import Agda.TypeChecking.Inlining
 import Agda.TypeChecking.MetaVars
 import Agda.TypeChecking.Reduce
 import Agda.TypeChecking.Patterns.Abstract (expandPatternSynonyms)
@@ -47,11 +53,11 @@
 import Agda.TypeChecking.Irrelevance
 import Agda.TypeChecking.SizedTypes.Solve
 import Agda.TypeChecking.RecordPatterns
-import Agda.TypeChecking.CompiledClause (CompiledClauses'(..))
+import Agda.TypeChecking.CompiledClause (CompiledClauses'(..), hasProjectionPatterns)
 import Agda.TypeChecking.CompiledClause.Compile
 import Agda.TypeChecking.Primitive hiding (Nat)
 
-import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, inferExprForWith, checkDontExpandLast, checkTelescope )
+import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, inferExprForWith, checkDontExpandLast, checkTelescope, catchIlltypedPatternBlockedOnMeta )
 import Agda.TypeChecking.Rules.LHS                 ( checkLeftHandSide, LHSResult(..), bindAsPatterns )
 import Agda.TypeChecking.Rules.LHS.Problem         ( AsBinding(..) )
 import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl ( checkDecls )
@@ -61,6 +67,7 @@
 import Agda.Utils.Lens
 import Agda.Utils.Maybe ( whenNothing )
 import Agda.Utils.Monad
+import Agda.Utils.Null
 import Agda.Utils.Permutation
 import Agda.Utils.Pretty ( prettyShow )
 import qualified Agda.Utils.Pretty as P
@@ -80,7 +87,7 @@
         info  <- flip setRelevance defaultArgInfo <$> relOfConst name
         case isAlias cs t of
           Just (e, mc, x) ->
-            traceCall (CheckFunDef (getRange i) (qnameName name) cs) $ do
+            traceCall (CheckFunDefCall (getRange i) (qnameName name) cs) $ do
               -- Andreas, 2012-11-22: if the alias is in an abstract block
               -- it has been frozen.  We unfreeze it to enable type inference.
               -- See issue 729.
@@ -91,6 +98,10 @@
         -- If it's a macro check that it ends in Term → TC ⊤
         ismacro <- isMacro . theDef <$> getConstInfo name
         when (ismacro || Info.defMacro i == MacroDef) $ checkMacroType t
+    `catchIlltypedPatternBlockedOnMeta` \ (err, x) -> do
+        reportSDoc "tc.def" 20 $ vcat $
+          [ text "checking function definition got stuck on meta: " <+> text (show x) ]
+        addConstraint $ CheckFunDef delayed i name cs
 
 checkMacroType :: Type -> TCM ()
 checkMacroType t = do
@@ -111,12 +122,12 @@
           -- 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, mc) | Just x <- isMeta (ignoreSharing $ unEl t) -> Just (e, mc, x)
+          Just (e, mc) | Just x <- isMeta (unEl t) -> Just (e, mc, x)
           _ -> Nothing
   where
     isMeta (MetaV x _) = Just x
     isMeta _           = Nothing
-    trivialClause [A.Clause (A.LHS i (A.LHSHead f []) []) _ _ (A.RHS e mc) [] _] = Just (e, mc)
+    trivialClause [A.Clause (A.LHS i (A.LHSHead f [])) _ (A.RHS e mc) (A.WhereDecls _ []) _] = Just (e, mc)
     trivialClause _ = Nothing
 
 -- | Check a trivial definition of the form @f = e@
@@ -129,7 +140,7 @@
 
 {-
   -- Infer the type of the rhs
-  (v, t) <- applyRelevanceToContext (argInfoRelevance ai) $
+  (v, t) <- applyRelevanceToContext (getRelevance ai) $
                                     inferOrCheck e (Just t')
   -- v <- coerce v t t'
 -}
@@ -207,7 +218,7 @@
              -> TCM ()
 checkFunDefS t ai delayed extlam with i name withSub cs = do
 
-    traceCall (CheckFunDef (getRange i) (qnameName name) cs) $ do   -- TODO!! (qnameName)
+    traceCall (CheckFunDefCall (getRange i) (qnameName name) cs) $ do   -- TODO!! (qnameName)
         reportSDoc "tc.def.fun" 10 $
           sep [ text "checking body of" <+> prettyTCM name
               , nest 2 $ text ":" <+> prettyTCM t
@@ -233,7 +244,7 @@
         cs <- traceCall NoHighlighting $ do -- To avoid flicker.
           forM (zip cs [0..]) $ \ (c, clauseNo) -> do
             atClause name clauseNo (A.clauseRHS c) $ do
-              c <- applyRelevanceToContext (argInfoRelevance ai) $ do
+              c <- applyRelevanceToContext (getRelevance ai) $ do
                 checkClause t withSub c
               -- Andreas, 2013-11-23 do not solve size constraints here yet
               -- in case we are checking the body of an extended lambda.
@@ -292,9 +303,13 @@
         cc <- Bench.billTo [Bench.Coverage] $
           inTopContext $ compileClauses (Just (name, fullType)) cs
 
+        -- Clause compilation runs the coverage checker, which might add
+        -- some extra clauses.
+        cs <- defClauses <$> getConstInfo name
+
         reportSDoc "tc.cc" 60 $ inTopContext $ do
           sep [ text "compiled clauses of" <+> prettyTCM name
-              , nest 2 $ text (show cc)
+              , nest 2 $ pretty cc
               ]
 
         -- The macro tag might be on the type signature
@@ -304,7 +319,7 @@
         inTopContext $ addConstant name =<< do
           -- If there was a pragma for this definition, we can set the
           -- funTerminates field directly.
-          useTerPragma $ defaultDefn ai name fullType $
+          defn <- autoInline $
              set funMacro (ismacro || Info.defMacro i == MacroDef) $
              emptyFunction
              { funClauses        = cs
@@ -314,8 +329,9 @@
              , funAbstr          = Info.defAbstract i
              , funExtLam         = extlam
              , funWith           = with
-             , funCopatternLHS   = isCopatternLHS cs
+             , funCopatternLHS   = hasProjectionPatterns cc
              }
+          useTerPragma $ defaultDefn ai name fullType defn
 
         reportSDoc "tc.def.fun" 10 $ do
           sep [ text "added " <+> prettyTCM name <+> text ":"
@@ -339,14 +355,24 @@
 useTerPragma def = return def
 
 
--- | Insert some patterns in the in with-clauses LHS of the given RHS
+-- | Insert some with-patterns into the with-clauses LHS of the given RHS.
+-- (Used for @rewrite@.)
 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 lhscore ps) dots sdots rhs ds catchall)
-              = A.Clause (A.LHS i lhscore (pats ++ ps)) dots sdots (insertPatterns pats rhs) ds catchall
-insertPatterns pats (A.RewriteRHS qes rhs wh) = A.RewriteRHS qes (insertPatterns pats rhs) wh
-insertPatterns pats rhs = rhs
+insertPatterns pats = \case
+  A.WithRHS aux es cs -> A.WithRHS aux es $ for cs $
+    \ (A.Clause (A.LHS info core)                              spats rhs                       ds catchall) ->
+       A.Clause (A.LHS info (insertPatternsLHSCore pats core)) spats (insertPatterns pats rhs) ds catchall
+  A.RewriteRHS qes spats rhs wh -> A.RewriteRHS qes spats (insertPatterns pats rhs) wh
+  rhs@A.AbsurdRHS -> rhs
+  rhs@A.RHS{}     -> rhs
 
+-- | Insert with-patterns before the trailing with patterns.
+-- If there are none, append the with-patterns.
+insertPatternsLHSCore :: [A.Pattern] -> A.LHSCore -> A.LHSCore
+insertPatternsLHSCore pats = \case
+  A.LHSWith core wps [] -> A.LHSWith core (pats ++ wps) []
+  core                  -> A.LHSWith core pats []
+
 -- | Parameters for creating a @with@-function.
 data WithFunctionProblem
   = NoWithFunction
@@ -376,18 +402,16 @@
   -> A.SpineClause -- ^ Clause.
   -> TCM Clause    -- ^ Type-checked clause.
 
-checkClause t withSub c@(A.Clause (A.SpineLHS i x aps withPats) namedDots strippedDots rhs0 wh catchall) = do
+checkClause t withSub c@(A.Clause (A.SpineLHS i x aps) strippedPats rhs0 wh catchall) = do
     reportSDoc "tc.lhs.top" 30 $ text "Checking clause" $$ prettyA c
-    unless (null withPats) $
-      typeError $ UnexpectedWithPatterns withPats
+    unlessNull (trailingWithPatterns aps) $ \ withPats -> do
+      typeError $ UnexpectedWithPatterns $ map namedArg withPats
     traceCall (CheckClause t c) $ do
       aps <- expandPatternSynonyms aps
       cxtNames <- reverse . map (fst . unDom) <$> getContext
-      when (not $ null namedDots) $ reportSDoc "tc.lhs.top" 50 $
-        text "namedDots:" <+> vcat [ prettyTCM x <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a | A.NamedDot x v a <- namedDots ]
-      -- Not really an as-pattern, but this does the right thing.
-      bindAsPatterns [ AsB x v a | A.NamedDot x v a <- namedDots ] $
-        checkLeftHandSide (CheckPatternShadowing c) (Just x) aps t withSub strippedDots $ \ lhsResult@(LHSResult npars delta ps trhs patSubst asb) -> do
+      when (not $ null strippedPats) $ reportSDoc "tc.lhs.top" 50 $
+        text "strippedPats:" <+> vcat [ prettyA p <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a | A.ProblemEq p v a <- strippedPats ]
+      checkLeftHandSide (CheckPatternShadowing c) (Just x) aps t withSub strippedPats $ \ lhsResult@(LHSResult npars delta ps absurdPat trhs patSubst asb) -> do
         -- Note that we might now be in irrelevant context,
         -- in case checkLeftHandSide walked over an irrelevant projection pattern.
 
@@ -410,10 +434,11 @@
             updateRHS rhs@A.RHS{}               = rhs
             updateRHS rhs@A.AbsurdRHS{}         = rhs
             updateRHS (A.WithRHS q es cs)       = A.WithRHS q es (map updateClause cs)
-            updateRHS (A.RewriteRHS qes rhs wh) = A.RewriteRHS qes (updateRHS rhs) wh
+            updateRHS (A.RewriteRHS qes spats rhs wh) =
+              A.RewriteRHS qes (applySubst patSubst spats) (updateRHS rhs) wh
 
-            updateClause (A.Clause f dots sdots rhs wh ca) =
-              A.Clause f (applySubst patSubst dots) (applySubst patSubst sdots) (updateRHS rhs) wh ca
+            updateClause (A.Clause f spats rhs wh ca) =
+              A.Clause f (applySubst patSubst spats) (updateRHS rhs) wh ca
 
         (body, with) <- bindAsPatterns asb $ checkWhere wh $ checkRHS i x aps t' lhsResult rhs
 
@@ -471,9 +496,8 @@
   -> A.RHS                   -- ^ Rhs to check.
   -> TCM (Maybe Term, WithFunctionProblem)
                                               -- Note: the as-bindings are already bound (in checkClause)
-checkRHS i x aps t lhsResult@(LHSResult _ delta ps trhs _ _asb) rhs0 = handleRHS rhs0
+checkRHS i x aps t lhsResult@(LHSResult _ delta ps absurdPat trhs _ _asb) rhs0 = handleRHS rhs0
   where
-  absurdPat = containsAbsurdPattern aps
   handleRHS rhs =
     case rhs of
 
@@ -492,8 +516,8 @@
       -- Andreas, 2014-01-17, Issue 1402:
       -- If the rewrites are discarded since lhs=rhs, then
       -- we can actually have where clauses.
-      A.RewriteRHS [] rhs wh -> checkWhere wh $ handleRHS rhs
-      A.RewriteRHS ((qname,eq):qes) rhs wh -> do
+      A.RewriteRHS [] strippedPats rhs wh -> checkWhere wh $ handleRHS rhs
+      A.RewriteRHS ((qname,eq):qes) strippedPats rhs wh -> do
 
         -- Action for skipping this rewrite.
         -- We do not want to create unsolved metas in case of
@@ -510,7 +534,7 @@
              -- 3. and a large overall number of ?s.
              let sameIP = (==) `on` (^.stInteractionPoints)
              when (sameIP st st') $ put st
-             handleRHS $ A.RewriteRHS qes rhs wh
+             handleRHS $ A.RewriteRHS qes strippedPats rhs wh
 
         -- Get value and type of rewrite-expression.
 
@@ -535,7 +559,7 @@
 
         -- Get the name of builtin REFL.
 
-        Con reflCon _ [] <- ignoreSharing <$> primRefl
+        Con reflCon _ [] <- primRefl
         reflInfo <- fmap (setOrigin Inserted) <$> getReflArgInfo reflCon
 
         -- Andreas, 2017-01-11:
@@ -547,7 +571,7 @@
         -- -- rewriting with @refl@ is attempted.
         -- let isReflProof = do
         --      v <- reduce proof
-        --      case ignoreSharing v of
+        --      case v of
         --        Con c _ [] | c == reflCon -> return True
         --        _ -> return False
         -- ifM isReflProof recurse $ {- else -} do
@@ -555,7 +579,7 @@
         -- Process 'rewrite' clause like a suitable 'with' clause.
 
         -- The REFL constructor might have an argument
-        let reflPat  = A.ConP (ConPatInfo ConOCon patNoRange) (AmbQ [conName reflCon]) $
+        let reflPat  = A.ConP (ConPatInfo ConOCon patNoRange False) (unambiguous $ conName reflCon) $
               maybeToList $ fmap (\ ai -> Arg ai $ unnamed $ A.WildP patNoRange) reflInfo
 
         -- Andreas, 2015-12-25  Issue #1740:
@@ -572,12 +596,16 @@
         let rhs'     = insertPatterns pats rhs
             (rhs'', outerWhere) -- the where clauses should go on the inner-most with
               | null qes  = (rhs', wh)
-              | otherwise = (A.RewriteRHS qes rhs' wh, [])
+              | otherwise = (A.RewriteRHS qes strippedPats rhs' wh, A.noWhereDecls)
             -- Andreas, 2014-03-05 kill range of copied patterns
             -- since they really do not have a source location.
-            cs       = [A.Clause (A.LHS i (A.LHSHead x (killRange aps)) pats) [] [] rhs'' outerWhere False]
-
-        checkWithRHS x qname t lhsResult [withExpr] [withType] cs
+            cl = A.Clause (A.LHS i $ insertPatternsLHSCore pats $ A.LHSHead x $ killRange aps)
+                   strippedPats rhs'' outerWhere False
+        reportSDoc "tc.rewrite" 60 $ vcat
+          [ text "rewrite"
+          , text "  rhs' = " <> (text . show) rhs'
+          ]
+        checkWithRHS x qname t lhsResult [withExpr] [withType] [cl]
 
       -- Case: @with@
       A.WithRHS aux es cs -> do
@@ -613,7 +641,7 @@
   -> [A.Clause]              -- ^ With-clauses to check.
   -> TCM (Maybe Term, WithFunctionProblem)
                                 -- Note: as-bindings already bound (in checkClause)
-checkWithRHS x aux t (LHSResult npars delta ps trhs _ _asb) vs0 as cs = Bench.billTo [Bench.Typing, Bench.With] $ do
+checkWithRHS x aux t (LHSResult npars delta ps _absurdPat trhs _ _asb) vs0 as cs = Bench.billTo [Bench.Typing, Bench.With] $ do
         let withArgs = withArguments vs0 as
             perm = fromMaybe __IMPOSSIBLE__ $ dbPatPerm ps
         (vs, as)  <- normalise (vs0, as)
@@ -725,18 +753,16 @@
   -- Check generated type directly in internal syntax.
   setCurrentRange cs
     (traceCall NoHighlighting $   -- To avoid flicker.
-      checkType withFunType)
+     checkType withFunType)
     `catchError` \err -> case err of
       TypeError s e -> do
         put s
         wt <- reify withFunType
-        enterClosure e $ do
-          traceCall (CheckWithFunctionType wt) . typeError
+        enterClosure e $ traceCall (CheckWithFunctionType wt) . typeError
       err           -> throwError err
 
   -- With display forms are closed
-
-  df <- makeGlobal =<< withDisplayForm f aux delta1 delta2 n qs perm' perm
+  df <- safeInTopContext $ makeOpen =<< withDisplayForm f aux delta1 delta2 n qs perm' perm
 
   reportSLn "tc.with.top" 20 "created with display form"
 
@@ -775,10 +801,12 @@
 
 -- | Type check a where clause.
 checkWhere
-  :: [A.Declaration] -- ^ Where-declarations to check.
-  -> TCM a           -- ^ Continuation.
+  :: A.WhereDeclarations -- ^ Where-declarations to check.
+  -> TCM a               -- ^ Continuation.
   -> TCM a
-checkWhere ds ret = loop ds
+checkWhere wh@(A.WhereDecls whmod ds) ret = do
+  ensureNoNamedWhereInRefinedContext whmod
+  loop ds
   where
     loop ds = case ds of
       [] -> ret
@@ -788,6 +816,32 @@
             checkDecls ds
             ret
       _ -> __IMPOSSIBLE__
+
+    -- #2897: We can't handle named where-modules in refined contexts.
+    ensureNoNamedWhereInRefinedContext Nothing = return ()
+    ensureNoNamedWhereInRefinedContext (Just m) = traceCall (CheckNamedWhere m) $ do
+      args <- map unArg <$> (moduleParamsToApply =<< currentModule)
+      unless (isWeakening args) $ -- weakened contexts are fine
+        genericDocError =<< do
+          names <- map (argNameToString . fst . unDom) . telToList <$>
+                    (lookupSection =<< currentModule)
+          let pr x v = text (x ++ " =") <+> prettyTCM v
+          vcat
+            [ fsep (pwords $ "Named where-modules are not allowed when module parameters have been refined by pattern matching. " ++
+                             "See https://github.com/agda/agda/issues/2897.")
+            , text $ "In this case the module parameter" ++
+                     (if length args > 0 then "s have" else " has") ++
+                     " been refined to"
+            , nest 2 $ vcat (zipWith pr names args) ]
+      where
+        isWeakening [] = True
+        isWeakening (Var i [] : args) = isWk (i - 1) args
+          where
+            isWk i []                = True
+            isWk i (Var j [] : args) = i == j && isWk (i - 1) args
+            isWk _ _ = False
+        isWeakening _ = False
+
 
 -- | Enter a new section during type-checking.
 
diff --git a/src/full/Agda/TypeChecking/Rules/Display.hs b/src/full/Agda/TypeChecking/Rules/Display.hs
--- a/src/full/Agda/TypeChecking/Rules/Display.hs
+++ b/src/full/Agda/TypeChecking/Rules/Display.hs
@@ -1,7 +1,6 @@
 
 module Agda.TypeChecking.Rules.Display (checkDisplayPragma) where
 
-import Control.Applicative
 import Data.Maybe
 import qualified Data.List as List
 
@@ -15,14 +14,17 @@
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Pretty
 
+import Agda.Utils.NonemptyList
+
 checkDisplayPragma :: QName -> [NamedArg A.Pattern] -> A.Expr -> TCM ()
-checkDisplayPragma f ps e = inTopContext $ do
-  pappToTerm f id ps $ \n args -> do
-    let lhs = map I.Apply args
-    v <- exprToTerm e
-    let df = Display n lhs (DTerm v)
-    reportSLn "tc.display.pragma" 20 $ "Adding display form for " ++ show f ++ "\n  " ++ show df
-    escapeContext n $ addDisplayForm f df
+checkDisplayPragma f ps e = do
+  df <- inTopContext $ do
+          pappToTerm f id ps $ \n args -> do
+            let lhs = map I.Apply args
+            v <- exprToTerm e
+            return $ Display n lhs (DTerm v)
+  reportSLn "tc.display.pragma" 20 $ "Adding display form for " ++ show f ++ "\n  " ++ show df
+  addDisplayForm f df
 
 -- Compute a left-hand side for a display form. Inserts implicits, but no type
 -- checking so does the wrong thing if implicitness is computed. Binds variables.
@@ -65,18 +67,26 @@
 patternToTerm :: A.Pattern -> (Nat -> Term -> TCM a) -> TCM a
 patternToTerm p ret =
   case p of
-    A.VarP x               -> bindVar x $ ret 1 (Var 0 [])
-    A.ConP _ (AmbQ [c]) ps -> pappToTerm c (Con (ConHead c Inductive []) ConOCon) ps ret
-    A.ConP _ (AmbQ cs) _   -> genericError $ "Ambiguous constructor: " ++ List.intercalate ", " (map show cs)
-    A.ProjP _ _ (AmbQ [d]) -> ret 0 (Def d [])
-    A.ProjP _ _ (AmbQ ds)    -> genericError $ "Ambiguous projection: " ++ List.intercalate ", " (map show ds)
-    A.DefP _ (AmbQ [f]) ps -> pappToTerm f (Def f . map Apply) ps ret
-    A.DefP _ (AmbQ ds) _   -> genericError $ "Ambiguous DefP: " ++ List.intercalate ", " (map show ds)
-    A.LitP l               -> ret 0 (Lit l)
-    A.WildP _              -> bindWild $ ret 1 (Var 0 [])
-    _ -> do
+    A.VarP (A.BindName x)           -> bindVar x $ ret 1 (Var 0 [])
+    A.ConP _ cs ps
+      | Just c <- getUnambiguous cs -> pappToTerm c (Con (ConHead c Inductive []) ConOCon . map Apply) ps ret
+      | otherwise                   -> ambigErr "constructor" cs
+    A.ProjP _ _ ds
+      | Just d <- getUnambiguous ds -> ret 0 (Def d [])
+      | otherwise                   -> ambigErr "projection" ds
+    A.DefP _ fs ps
+      | Just f <- getUnambiguous fs -> pappToTerm f (Def f . map Apply) ps ret
+      | otherwise                   -> ambigErr "DefP" fs
+    A.LitP l                        -> ret 0 (Lit l)
+    A.WildP _                       -> bindWild $ ret 1 (Var 0 [])
+    _                               -> do
       doc <- prettyA p
       typeError $ GenericError $ "Pattern not allowed in DISPLAY pragma:\n" ++ show doc
+  where
+    ambigErr thing (AmbQ xs) =
+      genericDocError =<< do
+        text ("Ambiguous " ++ thing ++ ":") <?>
+          fsep (punctuate comma (map pshow $ toList xs))
 
 bindWild :: TCM a -> TCM a
 bindWild ret = do
@@ -91,12 +101,12 @@
   case unScope e of
     A.Var x  -> fst <$> getVarInfo x
     A.Def f  -> pure $ Def f []
-    A.Con (AmbQ (c:_)) -> pure $ Con (ConHead c Inductive []) ConOCon [] -- Don't care too much about ambiguity here
-    A.Lit l -> pure $ Lit l
+    A.Con c  -> pure $ Con (ConHead (headAmbQ c) Inductive []) ConOCon [] -- Don't care too much about ambiguity here
+    A.Lit l  -> pure $ Lit l
     A.App _ e arg  -> apply <$> exprToTerm e <*> ((:[]) . inheritHiding arg <$> exprToTerm (namedArg arg))
 
-    A.Proj _ (AmbQ (f:_)) -> pure $ Def f []   -- only for printing so we don't have to worry too much here
-    A.PatternSyn f -> pure $ Def f []
+    A.Proj _ f -> pure $ Def (headAmbQ f) []   -- only for printing so we don't have to worry too much here
+    A.PatternSyn f -> pure $ Def (headAmbQ f) []
     A.Macro f      -> pure $ Def f []
 
     A.WithApp{}      -> notAllowed "with application"
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
@@ -1,1085 +1,1523 @@
 {-# LANGUAGE CPP                  #-}
-
-module Agda.TypeChecking.Rules.LHS where
-
-import Prelude hiding (mapM, sequence)
-
-import Data.Maybe
-
-import Control.Applicative
-import Control.Arrow (first, second, (***))
-import Control.Monad hiding (mapM, forM, sequence)
-import Control.Monad.State hiding (mapM, forM, sequence)
-import Control.Monad.Reader hiding (mapM, forM, sequence)
-import Control.Monad.Trans.Maybe
-
-import Data.Function (on)
-import Data.IntMap (IntMap)
-import qualified Data.IntMap as IntMap
-import Data.List (delete, sortBy, stripPrefix)
-import Data.Monoid
-import Data.Traversable
-import Data.Map (Map)
-import qualified Data.Map as Map
-
-import Agda.Interaction.Options
-import Agda.Interaction.Options.Lenses
-
-import Agda.Syntax.Internal as I
-import Agda.Syntax.Internal.Pattern
-import Agda.Syntax.Abstract (IsProjP(..))
-import qualified Agda.Syntax.Abstract as A
-import Agda.Syntax.Abstract.Views (asView, deepUnscope)
-import Agda.Syntax.Common as Common
-import Agda.Syntax.Info as A
-import Agda.Syntax.Position
-import Agda.Syntax.Scope.Base (ScopeInfo, emptyScopeInfo)
-
-
-import Agda.TypeChecking.Monad
-
-import qualified Agda.TypeChecking.Monad.Benchmark as Bench
-import Agda.TypeChecking.Conversion
-import Agda.TypeChecking.Constraints
-import Agda.TypeChecking.Datatypes
-import Agda.TypeChecking.Irrelevance
-import {-# SOURCE #-} Agda.TypeChecking.Empty
-import Agda.TypeChecking.Patterns.Abstract
-import Agda.TypeChecking.Pretty
-import Agda.TypeChecking.Records
-import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Rewriting
-import Agda.TypeChecking.Substitute
-import Agda.TypeChecking.Telescope
-
-import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr)
-import Agda.TypeChecking.Rules.LHS.AsPatterns
-import Agda.TypeChecking.Rules.LHS.Problem hiding (Substitution)
-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.Utils.Except (MonadError(..))
-import Agda.Utils.Functor
-import Agda.Utils.List
-import Agda.Utils.ListT
-import Agda.Utils.Maybe
-import Agda.Utils.Monad
-import Agda.Utils.Permutation
-import Agda.Utils.Pretty (prettyShow)
-import Agda.Utils.Size
-
-#include "undefined.h"
-import Agda.Utils.Impossible
-
--- | Compute the set of flexible patterns in a list of patterns. The result is
---   the deBruijn indices of the flexible patterns.
-flexiblePatterns :: [NamedArg A.Pattern] -> TCM FlexibleVars
-flexiblePatterns nps = do
-  forMaybeM (zip (downFrom $ length nps) nps) $ \ (i, Arg ai p) -> do
-    runMaybeT $ (\ f -> FlexibleVar (getHiding ai) (getOrigin ai) f (Just i) i) <$> maybeFlexiblePattern p
-
--- | A pattern is flexible if it is dotted or implicit, or a record pattern
---   with only flexible subpatterns.
-class IsFlexiblePattern a where
-  maybeFlexiblePattern :: a -> MaybeT TCM FlexibleVarKind
-
-  isFlexiblePattern :: a -> TCM Bool
-  isFlexiblePattern p =
-    maybe False notOtherFlex <$> runMaybeT (maybeFlexiblePattern p)
-    where
-    notOtherFlex = \case
-      RecordFlex fls -> all notOtherFlex fls
-      ImplicitFlex   -> True
-      DotFlex        -> True
-      OtherFlex      -> False
-
-instance IsFlexiblePattern A.Pattern where
-  maybeFlexiblePattern p = do
-    reportSDoc "tc.lhs.flex" 30 $ text "maybeFlexiblePattern" <+> prettyA p
-    reportSDoc "tc.lhs.flex" 60 $ text "maybeFlexiblePattern (raw) " <+> (text . show . deepUnscope) p
-    case p of
-      A.DotP{}  -> return DotFlex
-      A.VarP{}  -> return ImplicitFlex
-      A.WildP{} -> return ImplicitFlex
-      A.AsP _ _ p -> maybeFlexiblePattern p
-      A.ConP _ (A.AmbQ [c]) qs
-        -> ifM (isNothing <$> isRecordConstructor c) (return OtherFlex) {-else-}
-             (maybeFlexiblePattern qs)
-      A.LitP{}  -> return OtherFlex
-      _ -> mzero
-
-instance IsFlexiblePattern (I.Pattern' a) where
-  maybeFlexiblePattern p =
-    case p of
-      I.DotP{}  -> return DotFlex
-      I.ConP _ i ps
-        | Just ConOSystem <- conPRecord i -> return ImplicitFlex  -- expanded from ImplicitP
-        | Just _            <- conPRecord i -> maybeFlexiblePattern ps
-        | otherwise -> mzero
-      I.VarP{}  -> mzero
-      I.AbsurdP{} -> mzero
-      I.LitP{}  -> mzero
-      I.ProjP{} -> mzero
-
--- | Lists of flexible patterns are 'RecordFlex'.
-instance IsFlexiblePattern a => IsFlexiblePattern [a] where
-  maybeFlexiblePattern ps = RecordFlex <$> mapM maybeFlexiblePattern ps
-
-instance IsFlexiblePattern a => IsFlexiblePattern (Arg a) where
-  maybeFlexiblePattern = maybeFlexiblePattern . unArg
-
-instance IsFlexiblePattern a => IsFlexiblePattern (Common.Named name a) where
-  maybeFlexiblePattern = maybeFlexiblePattern . namedThing
-
--- | Update the in patterns according to the given substitution, collecting
---   new dot pattern instantiations in the process.
-updateInPatterns
- :: [Dom Type]              -- ^ the types of the old pattern variables,
-                              --   relative to the new telescope
- -> [NamedArg A.Pattern]    -- ^ old in patterns
- -> [Arg DeBruijnPattern] -- ^ patterns to be substituted, living in the
-                              --   new telescope
- -> TCM ([NamedArg A.Pattern]   -- new in patterns
-        ,[DotPatternInst])        -- new dot pattern instantiations
-updateInPatterns as ps qs = do
-  reportSDoc "tc.lhs.top" 20 $ text "updateInPatterns" <+> nest 2 (vcat
-    [ text "as      =" <+> prettyList (map prettyTCM as)
-    , text "ps      =" <+> prettyList (map prettyA ps)
-    , text "qs      =" <+> prettyList (map pretty qs)
-    ])
-  first (map snd . IntMap.toDescList) <$> updates as ps qs
-  where
-    updates :: [Dom Type] -> [NamedArg A.Pattern] -> [Arg DeBruijnPattern]
-           -> TCM (IntMap (NamedArg A.Pattern), [DotPatternInst])
-    updates as ps qs = mconcat <$> sequence (zipWith3 update as ps qs)
-
-    update :: Dom Type -> NamedArg A.Pattern -> Arg DeBruijnPattern
-           -> TCM (IntMap (NamedArg A.Pattern), [DotPatternInst])
-    update a p q = case unArg q of
-      -- Case: the unifier did not instantiate the variable
-      VarP x     -> return (IntMap.singleton (dbPatVarIndex x) p, [])
-      -- Case: the unifier did instantiate the variable
-      DotP u     -> case snd $ asView $ namedThing (unArg p) of
-        A.DotP _ _ e -> return (IntMap.empty, [DPI Nothing  (Just e) u a])
-        A.WildP _  -> return (IntMap.empty, [DPI Nothing  Nothing  u a])
-        A.VarP x   -> return (IntMap.empty, [DPI (Just x) Nothing  u a])
-        p@(A.ConP _ (A.AmbQ [c]) qs) -> ifM (isNothing <$> isRecordConstructor c)
-          (return (IntMap.empty, [DPI Nothing (Just $ A.patternToExpr p) u a]))
-          (do
-            Def r es  <- ignoreSharing <$> reduce (unEl $ unDom a)
-            let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
-            (ftel, us) <- etaExpandRecord r vs u
-
-            qs <- insertImplicitPatterns ExpandLast qs ftel
-            reportSDoc "tc.lhs.imp" 20 $
-              text "insertImplicitPatternsT returned" <+> fsep (map prettyA qs)
-
-            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 (mapRelevance (composeRelevance (getRelevance a))) bs0
-            updates bs qs (map (DotP . unArg) us `withArgsFrom` teleArgNames ftel))
-        p@A.ConP{} -> return (IntMap.empty, [DPI Nothing (Just $ A.patternToExpr p) u a])
-        p@A.LitP{} -> return (IntMap.empty, [DPI Nothing (Just $ A.patternToExpr p) u a])
-        A.AsP         _ _ _ -> __IMPOSSIBLE__
-        A.RecP        _ _   -> __IMPOSSIBLE__
-        A.ProjP       _ _ _ -> __IMPOSSIBLE__
-        A.DefP        _ _ _ -> __IMPOSSIBLE__
-        A.AbsurdP     _     -> __IMPOSSIBLE__
-        A.PatternSynP _ _ _ -> __IMPOSSIBLE__
-      -- Case: the unifier eta-expanded the variable
-      ConP _c _cpi qs -> do
-        Def r es <- ignoreSharing <$> reduce (unEl $ unDom a)
-        def      <- theDef <$> getConstInfo r
-        let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
-            fs  = killRange $ recFields def
-            tel = recTel def `apply` pars
-            as  = applyPatSubst (parallelS $ map (namedThing . unArg) qs) $ flattenTel tel
-            -- If the user wrote a dot pattern or variable but the unifier
-            -- eta-expanded it, add the corresponding instantiation.
-            dpi :: [DotPatternInst]
-            dpi = mkDPI $ patternToTerm $ unArg q
-              where
-                mkDPI v = case namedThing $ unArg p of
-                  A.DotP _ _ e -> [DPI Nothing (Just e) v a]
-                  A.VarP x     -> [DPI (Just x) Nothing v a]
-                  _            -> []
-        second (dpi++) <$>
-          updates as (projectInPat p fs) (map (fmap namedThing) qs)
-      AbsurdP{}  -> __IMPOSSIBLE__
-      LitP _     -> __IMPOSSIBLE__
-      ProjP{}    -> __IMPOSSIBLE__
-
-    projectInPat :: NamedArg A.Pattern -> [Arg QName] -> [NamedArg A.Pattern]
-    projectInPat p fs = case namedThing (unArg p) of
-      A.VarP x            -> map (makeWildField (PatRange $ getRange x)) fs
-      A.ConP _ _ nps      -> nps
-      A.WildP pi          -> map (makeWildField pi) fs
-      A.DotP pi o e       -> map (makeDotField pi o) fs
-      A.ProjP _ _ _       -> __IMPOSSIBLE__
-      A.DefP _ _ _        -> __IMPOSSIBLE__
-      A.AsP _ _ _         -> __IMPOSSIBLE__
-      A.AbsurdP _         -> __IMPOSSIBLE__
-      A.LitP _            -> __IMPOSSIBLE__
-      A.PatternSynP _ _ _ -> __IMPOSSIBLE__
-      A.RecP _ _          -> __IMPOSSIBLE__
-      where
-        makeWildField pi (Arg fi f) = Arg fi $ unnamed $ A.WildP pi
-        makeDotField pi o (Arg fi f) = Arg fi $ unnamed $
-          A.DotP pi o $ A.Underscore underscoreInfo
-          where
-            underscoreInfo = A.MetaInfo
-              { A.metaRange          = getRange pi
-              , A.metaScope          = emptyScopeInfo
-              , A.metaNumber         = Nothing
-              , A.metaNameSuggestion = prettyShow $ qnameName f
-              }
-
-
--- | Check if a problem is solved.
---   That is, if the patterns are all variables,
---   and there is no 'problemRest'.
-isSolvedProblem :: Problem -> Bool
-isSolvedProblem problem = null (restPats $ problemRest problem) &&
-  problemAllVariables problem
-
--- | Check if a problem consists only of variable patterns.
---   (Includes the 'problemRest').
-problemAllVariables :: Problem -> Bool
-problemAllVariables problem =
-    all (isSolved . snd . asView . namedArg) $
-      restPats (problemRest problem) ++ problemInPat problem
-  where
-    -- need further splitting:
-    isSolved A.ConP{}        = False
-    isSolved A.LitP{}        = False
-    isSolved A.ProjP{}       = False
-    isSolved A.RecP{}        = False  -- record pattern
-    isSolved A.AbsurdP{}     = False
-    -- solved:
-    isSolved A.VarP{}        = True
-    isSolved A.WildP{}       = True
-    isSolved A.DotP{}        = True
-    -- impossible:
-    isSolved A.DefP{}        = __IMPOSSIBLE__
-    isSolved A.AsP{}         = __IMPOSSIBLE__  -- removed by asView
-    isSolved A.PatternSynP{} = __IMPOSSIBLE__  -- expanded before
-
--- | For each user-defined pattern variable in the 'Problem', check
--- that the corresponding data type (if any) does not contain a
--- constructor of the same name (which is not in scope); this
--- \"shadowing\" could indicate an error, and is not allowed.
---
--- Precondition: The problem has to be solved.
-
-noShadowingOfConstructors
-  :: 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 . unDom) $ telToList $ problemTel problem
-    zipWithM_ noShadowing pat tel -- TODO: does not work for flexible arity and projection patterns
-    return ()
-  where
-  noShadowing (A.WildP     {}) t = return ()
-  noShadowing (A.AbsurdP   {}) t = return ()
-  noShadowing (A.ConP      {}) t = return ()  -- only happens for eta expanded record patterns
-  noShadowing (A.RecP      {}) t = return ()  -- record pattern
-  noShadowing (A.ProjP     {}) t = return ()  -- projection pattern
-  noShadowing (A.DefP      {}) t = __IMPOSSIBLE__
-  noShadowing (A.DotP      {}) t = return ()
-  noShadowing (A.AsP       {}) t = __IMPOSSIBLE__ -- removed by asView
-  noShadowing (A.LitP      {}) t = __IMPOSSIBLE__
-  noShadowing (A.PatternSynP {}) t = __IMPOSSIBLE__
-  noShadowing (A.VarP x)       t = do
-    reportSDoc "tc.lhs.shadow" 30 $ vcat
-      [ text $ "checking whether pattern variable " ++ prettyShow x ++ " shadows a constructor"
-      , nest 2 $ text "type of variable =" <+> prettyTCM t
-      ]
-    reportSDoc "tc.lhs.shadow" 70 $ nest 2 $ text "t =" <+> pretty t
-    t <- reduce t
-    case t of
-      Def t _ -> do
-        d <- theDef <$> getConstInfo t
-        case d of
-          Datatype { dataCons = cs } -> do
-            case filter ((A.nameConcrete x ==) . A.nameConcrete . A.qnameName) cs of
-              []      -> return ()
-              (c : _) -> setCurrentRange x $
-                typeError $ PatternShadowsConstructor x c
-          AbstractDefn{} -> return ()
-            -- Abstract constructors cannot be brought into scope,
-            -- even by a bigger import list.
-            -- Thus, they cannot be confused with variables.
-            -- Alternatively, we could do getConstInfo in ignoreAbstractMode,
-            -- then Agda would complain if a variable shadowed an abstract constructor.
-          Axiom       {} -> return ()
-          Function    {} -> return ()
-          Record      {} -> return ()
-          Constructor {} -> __IMPOSSIBLE__
-          -- TODO: in the future some stuck primitives might allow constructors
-          Primitive   {} -> return ()
-      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
-      -- the completed module is type checked, so it is safe to skip
-      -- the test here. However, users may be annoyed if they get an
-      -- error in code which has already passed the type checker.
-      Lam   {} -> __IMPOSSIBLE__
-      Lit   {} -> __IMPOSSIBLE__
-      Level {} -> __IMPOSSIBLE__
-      Con   {} -> __IMPOSSIBLE__
-      DontCare{} -> __IMPOSSIBLE__
-
--- | Check that a dot pattern matches it's instantiation.
-checkDotPattern :: DotPatternInst -> TCM ()
-checkDotPattern (DPI _ (Just e) v (Dom info a)) =
-  traceCall (CheckDotPattern e v) $ do
-  reportSDoc "tc.lhs.dot" 15 $
-    sep [ text "checking dot pattern"
-        , nest 2 $ prettyA e
-        , nest 2 $ text "=" <+> prettyTCM v
-        , nest 2 $ text ":" <+> prettyTCM a
-        ]
-  applyRelevanceToContext (argInfoRelevance info) $ do
-    u <- checkExpr e a
-    reportSDoc "tc.lhs.dot" 50 $
-      sep [ text "equalTerm"
-          , nest 2 $ pretty a
-          , nest 2 $ pretty u
-          , nest 2 $ pretty v
-          ]
-    -- Should be ok to do noConstraints here
-    noConstraints $ equalTerm a u v
-checkDotPattern (DPI _ Nothing _ _) = return ()
-
--- | Temporary data structure for 'checkLeftoverPatterns'
-type Projectn  = (ProjOrigin, QName)
-type Projectns = [Projectn]
-
--- | Checks whether the dot patterns left over after splitting can be covered
---   by shuffling around the dots from implicit positions. Returns the updated
---   user patterns (without dot patterns).
-checkLeftoverDotPatterns
-  :: [NamedArg A.Pattern] -- ^ Leftover patterns after splitting is completed
-  -> [Int]                -- ^ De Bruijn indices of leftover variable patterns
-                          --   computed by splitting
-  -> [Dom Type]           -- ^ Types of leftover patterns
-  -> [DotPatternInst]     -- ^ Instantiations computed by unifier
-  -> TCM ()
-checkLeftoverDotPatterns ps vs as dpi = do
-  reportSDoc "tc.lhs.dot" 15 $ text "checking leftover dot patterns..."
-  idv <- sortBy (compare `on` length . snd) . concat <$>
-           traverse gatherImplicitDotVars dpi
-  reportSDoc "tc.lhs.dot" 30 $ nest 2 $
-    text "implicit dotted variables:" <+>
-    prettyList (map (\(i,fs) -> prettyTCM $ Var i (map (uncurry Proj) fs)) idv)
-  checkUserDots ps vs as idv
-  reportSDoc "tc.lhs.dot" 15 $ text "all leftover dot patterns ok!"
-
-  where
-    checkUserDots :: [NamedArg A.Pattern] -> [Int] -> [Dom Type]
-                  -> [(Int,Projectns)]
-                  -> TCM ()
-    checkUserDots []     []     []     idv = return ()
-    checkUserDots []     (_:_)  _      idv = __IMPOSSIBLE__
-    checkUserDots []     _      (_:_)  idv = __IMPOSSIBLE__
-    checkUserDots (_:_)  []     _      idv = __IMPOSSIBLE__
-    checkUserDots (_:_)  _      []     idv = __IMPOSSIBLE__
-    checkUserDots (p:ps) (v:vs) (a:as) idv = do
-      idv' <- checkUserDot p v a idv
-      checkUserDots ps vs as idv'
-
-    checkUserDot :: NamedArg A.Pattern -> Int -> Dom Type
-                 -> [(Int,Projectns)]
-                 -> TCM [(Int,Projectns)]
-    checkUserDot p v a idv = case namedArg p of
-      A.DotP i o e | o == Inserted -> return idv
-      -- Jesper, 2016-12-08 (Issue 1605): if the origin is Inserted, this
-      -- means the dot pattern was created by expanding '...', so we don't
-      -- have to complain here.
-      A.DotP i o e -> do
-        reportSDoc "tc.lhs.dot" 30 $ nest 2 $
-          text "checking user dot pattern: " <+> prettyA e
-        caseMaybeM (undotImplicitVar (v,[],unDom a) idv)
-          (traceCall (CheckPattern (namedArg p) EmptyTel (unDom a)) $
-             typeError $ UninstantiatedDotPattern e)
-          (\idv' -> do
-            u <- checkExpr e (unDom a)
-            reportSDoc "tc.lhs.dot" 30 $ nest 2 $
-              text "checked expression: " <+> prettyTCM u
-            noConstraints $ equalTerm (unDom a) u (var v)
-            return idv')
-      A.VarP _     -> return idv
-      A.WildP _    -> return idv
-      A.AbsurdP _  -> return idv
-      -- Andreas, 2017-01-18, issue #2413, AsP is not __IMPOSSIBLE__
-      A.AsP _ _ p0 -> checkUserDot (setNamedArg p p0) v a idv
-      A.ConP _ _ _ -> __IMPOSSIBLE__
-      A.LitP _     -> __IMPOSSIBLE__
-      A.ProjP _ _ _-> __IMPOSSIBLE__
-      A.DefP _ _ _ -> __IMPOSSIBLE__
-      A.RecP _ _   -> __IMPOSSIBLE__
-      A.PatternSynP _ _ _ -> __IMPOSSIBLE__
-
-    gatherImplicitDotVars :: DotPatternInst -> TCM [(Int,Projectns)]
-    gatherImplicitDotVars (DPI _ (Just _) _ _) = return [] -- Not implicit
-    gatherImplicitDotVars (DPI _ Nothing u _)  = gatherVars u
-      where
-        gatherVars :: Term -> TCM [(Int,Projectns)]
-        gatherVars u = case ignoreSharing u of
-          Var i es -> return $ (i,) <$> maybeToList (allProjElims es)
-          Con c _ us -> ifM (isEtaCon $ conName c)
-                      {-then-} (concat <$> traverse (gatherVars . unArg) us)
-                      {-else-} (return [])
-          _        -> return []
-
-    lookupImplicitDotVar :: (Int,Projectns) -> [(Int,Projectns)] -> Maybe Projectns
-    lookupImplicitDotVar (i,fs) [] = Nothing
-    lookupImplicitDotVar (i,fs) ((j,gs):js)
-     -- Andreas, 2016-09-20, issue #2196
-     -- We need to ignore the ProjOrigin!
-     | i == j , Just hs <- stripPrefixBy ((==) `on` snd) fs gs = Just hs
-     | otherwise = lookupImplicitDotVar (i,fs) js
-
-    undotImplicitVar :: (Int,Projectns,Type) -> [(Int,Projectns)]
-                     -> TCM (Maybe [(Int,Projectns)])
-    undotImplicitVar (i,fs,a) idv = do
-     reportSDoc "tc.lhs.dot" 40 $ vcat
-       [ text "undotImplicitVar"
-       , nest 2 $ vcat
-         [ text "i  =" <+> pshow i
-         , text "fs =" <+> sep (map (prettyTCM . snd) fs)
-         , text "a  =" <+> prettyTCM a
-         , text "raw=" <+> pretty a
-         , text "idv=" <+> pshow idv
-         ]
-       ]
-     case lookupImplicitDotVar (i,fs) idv of
-      Nothing -> return Nothing
-      Just [] -> return $ Just $ delete (i,fs) idv
-      Just rs -> caseMaybeM (isEtaRecordType a) (return Nothing) $ \(d,pars) -> do
-        gs <- recFields . theDef <$> getConstInfo d
-        let u = Var i (map (uncurry Proj) fs)
-        is <- forM gs $ \(Arg _ g) -> do
-                (_,_,b) <- fromMaybe __IMPOSSIBLE__ <$> projectTyped u a ProjSystem g
-                return (i,fs++[(ProjSystem,g)],b)
-        undotImplicitVars is idv
-
-    undotImplicitVars :: [(Int,Projectns,Type)] -> [(Int,Projectns)]
-                      -> TCM (Maybe [(Int,Projectns)])
-    undotImplicitVars []     idv = return $ Just idv
-    undotImplicitVars (i:is) idv =
-      caseMaybeM (undotImplicitVar i idv)
-        (return Nothing)
-        (\idv' -> undotImplicitVars is idv')
-
-
--- | Bind the variables in a left hand side and check that 'Hiding' of
---   the patterns matches the hiding info in the type.
---
---   Precondition: the patterns should
---   all be 'A.VarP', 'A.WildP', or 'A.AbsurdP' 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 []        tel@ExtendTel{}  _   = do
-  reportSDoc "impossible" 10 $
-    text "bindLHSVars: no patterns left, but tel =" <+> prettyTCM tel
-  __IMPOSSIBLE__
-bindLHSVars (_ : _)   EmptyTel         _   = __IMPOSSIBLE__
-bindLHSVars []        EmptyTel         ret = ret
-bindLHSVars (p : ps) tel0@(ExtendTel a tel) ret = do
-  -- see test/Fail/WronHidingInLHS:
-  unless (sameHiding p a) $ typeError WrongHidingInLHS
-
-  case namedArg p of
-    A.VarP x      -> addContext (x, a) $ bindLHSVars ps (absBody tel) ret
-    A.WildP _     -> bindDummy (absName tel)
-                 -- @bindDummy underscore@ does not fix issue 819, but
-                 -- introduces unwanted underscores in error messages
-                 -- (Andreas, 2015-05-28)
-    A.DotP _ _ _  -> bindDummy (absName tel)
-    A.AbsurdP pi  -> __IMPOSSIBLE__
-    -- Andreas, 2017-01-18, issue #2413
-    -- A.AsP is not __IMPOSSIBLE__
-    A.AsP _ _ p0    -> bindLHSVars (setNamedArg p p0 : ps) tel0 ret
-    A.ConP{}        -> __IMPOSSIBLE__
-    A.RecP{}        -> __IMPOSSIBLE__
-    A.ProjP{}       -> __IMPOSSIBLE__
-    A.DefP{}        -> __IMPOSSIBLE__
-    A.LitP{}        -> __IMPOSSIBLE__
-    A.PatternSynP{} -> __IMPOSSIBLE__
-    where
-      bindDummy s = do
-        x <- if isUnderscore s then freshNoName_ else unshadowName =<< freshName_ ("." ++ argNameToString s)
-        addContext (x, a) $ bindLHSVars ps (absBody tel) ret
-
--- | Bind as patterns
-bindAsPatterns :: [AsBinding] -> TCM a -> TCM a
-bindAsPatterns []                ret = ret
-bindAsPatterns (AsB x v a : asb) ret = do
-  reportSDoc "tc.lhs.as" 10 $ text "as pattern" <+> prettyTCM x <+>
-    sep [ text ":" <+> prettyTCM a
-        , text "=" <+> prettyTCM v
-        ]
-  addLetBinding defaultArgInfo x v a $ bindAsPatterns asb ret
-
--- | Result of checking the LHS of a clause.
-data LHSResult = LHSResult
-  { lhsParameters   :: Nat
-    -- ^ The number of original module parameters. These are present in the
-    -- the patterns.
-  , lhsVarTele      :: Telescope
-    -- ^ Δ : The types of the pattern variables, in internal dependency order.
-    -- Corresponds to 'clauseTel'.
-  , lhsPatterns     :: [NamedArg DeBruijnPattern]
-    -- ^ The patterns in internal syntax.
-  , lhsBodyType     :: Arg Type
-    -- ^ The type of the body. Is @bσ@ if @Γ@ is defined.
-    -- 'Irrelevant' to indicate the rhs must be checked in irrelevant mode.
-  , lhsPatSubst     :: Substitution
-    -- ^ Substitution version of @lhsPatterns@, only up to the first projection
-    -- pattern. @Δ |- lhsPatSubst : Γ@. Where @Γ@ is the argument telescope of
-    -- the function. This is used to update inherited dot patterns in
-    -- with-function clauses.
-  , lhsAsBindings   :: [AsBinding]
-    -- ^ As-bindings from the left-hand side. Return instead of bound since we
-    -- want them in where's and right-hand sides, but not in with-clauses
-    -- (Issue 2303).
-  }
-
-instance InstantiateFull LHSResult where
-  instantiateFull' (LHSResult n tel ps t sub as) = LHSResult n
-    <$> instantiateFull' tel
-    <*> instantiateFull' ps
-    <*> instantiateFull' t
-    <*> instantiateFull' sub
-    <*> instantiateFull' as
-
--- | Check a LHS. Main function.
---
---   @checkLeftHandSide a ps a ret@ checks that user patterns @ps@ eliminate
---   the type @a@ of the defined function, and calls continuation @ret@
---   if successful.
-
-checkLeftHandSide
-  :: Call
-     -- ^ Trace, e.g. @CheckPatternShadowing clause@
-  -> Maybe QName
-     -- ^ The name of the definition we are checking.
-  -> [NamedArg A.Pattern]
-     -- ^ The patterns.
-  -> Type
-     -- ^ The expected type @a = Γ → b@.
-  -> Maybe Substitution
-     -- ^ Module parameter substitution from with-abstraction.
-  -> [A.StrippedDotPattern]
-     -- ^ Dot patterns that have been stripped away by with-desugaring.
-  -> (LHSResult -> TCM a)
-     -- ^ Continuation.
-  -> TCM a
-checkLeftHandSide c f ps a withSub' strippedDots = Bench.billToCPS [Bench.Typing, Bench.CheckLHS] $ \ ret -> do
-
-  -- To allow module parameters to be refined by matching, we're adding the
-  -- context arguments as wildcard patterns and extending the type with the
-  -- context telescope.
-  cxt <- reverse <$> getContext
-  let tel = telFromList' prettyShow cxt
-      cps = [ unnamed . A.VarP . fst <$> setOrigin Inserted (argFromDom d)
-            | d <- cxt ]
-  problem0 <- problemFromPats (cps ++ ps) (telePi tel a)
-  -- Andreas, 2013-03-15 deactivating the following test allows
-  -- flexible arity
-  -- unless (noProblemRest problem) $ typeError $ TooManyArgumentsInLHS a
-
-  -- We need to grab all let-bindings here (while we still have the old
-  -- context). They will be rebound below once we have the new context set up.
-  -- Subtle: if we're checking a with the context will be empty so we can't use
-  -- 'getOpen'. On the other hand, if we're checking a with the let bindings
-  -- lives in the right context already so we can use 'openThing'.
-  let openLet | isNothing withSub' = getOpen
-              | otherwise          = return . openThing
-  oldLets <- asks $ Map.toList . envLetBindings
-  reportSDoc "tc.lhs.top" 70 $ vcat
-    [ text "context =" <+> inTopContext (prettyTCM tel)
-    , text "cIds    =" <+> (text . show =<< getContextId)
-    , text "oldLets =" <+> text (show oldLets) ]
-  oldLets <- sequence [ (x,) <$> openLet b | (x, b) <- oldLets ]
-
-  -- doing the splits:
-  inTopContext $ do
-    LHSState problem@(Problem pxs qs delta rest) dpi sbe
-      <- checkLHS f $ LHSState problem0 [] []
-
-    unless (null $ restPats rest) $ typeError $ TooManyArgumentsInLHS a
-
-    addContext delta $ do
-      noShadowingOfConstructors c problem
-      noPatternMatchingOnCodata qs
-
-    -- f is Nothing when checking let pattern-bindings. In that case there can
-    -- be no copatterns, so we don't need to worry about self.
-    let self = Def (fromMaybe __IMPOSSIBLE__ f) []
-    asb <- addContext delta $ recoverAsPatterns delta (telePi tel a) self (cps ++ ps) qs
-
-    reportSDoc "tc.lhs.top" 10 $
-      vcat [ text "checked lhs:"
-           , nest 2 $ vcat
-             [ text "pxs   = " <+> fsep (map prettyA pxs)
-             , text "delta = " <+> prettyTCM delta
-             , text "dpi   = " <+> addContext delta (brackets $ fsep $ punctuate comma $ map prettyTCM dpi)
-             , text "asb   = " <+> addContext delta (brackets $ fsep $ punctuate comma $ map prettyTCM asb)
-             , text "qs    = " <+> prettyList (map pretty qs)
-             ]
-           ]
-
-    let b' = restType rest
-    bindLHSVars (filter (isNothing . isProjP) pxs) delta $ do
-      let -- Find the variable patterns that have been refined
-          refinedParams = [ AsB x v (unDom a) | DPI (Just x) _ v a <- dpi ]
-          asb'          = refinedParams ++ asb
-
-      reportSDoc "tc.lhs.top" 10 $ text "asb' = " <+> (brackets $ fsep $ punctuate comma $ map prettyTCM asb')
-
-      reportSDoc "tc.lhs.top" 10 $ text "bound pattern variables"
-      reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "context = " <+> (pretty =<< getContextTelescope)
-      reportSDoc "tc.lhs.top" 10 $ nest 2 $ text "type  = " <+> prettyTCM b'
-      reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "type  = " <+> pretty b'
-
-      let notProj ProjP{} = False
-          notProj _       = True
-                      -- Note: This works because we can't change the number of
-                      --       arguments in the lhs of a with-function relative to
-                      --       the parent function.
-          numPats   = length $ takeWhile (notProj . namedArg) qs
-          -- In the case of a non-with function the pattern substitution
-          -- should be weakened by the number of non-parameter patterns to
-          -- get the paramSub.
-          withSub = fromMaybe (wkS (numPats - length cxt) idS) withSub'
-          -- At this point we need to update the module parameters for all
-          -- parent modules.
-          patSub   = (map (patternToTerm . namedArg) $ reverse $ take numPats qs) ++# (EmptyS __IMPOSSIBLE__)
-          paramSub = composeS patSub withSub
-          lhsResult = LHSResult (length cxt) delta qs b' patSub asb'
-      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "patSub   = " <+> pretty patSub
-      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "withSub  = " <+> pretty withSub
-      reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "paramSub = " <+> pretty paramSub
-
-      let newLets = [ AsB x (applySubst paramSub v) (applySubst paramSub $ unDom a) | (x, (v, a)) <- oldLets ]
-      reportSDoc "tc.lhs.top" 50 $ text "old let-bindings:" <+> text (show oldLets)
-      reportSDoc "tc.lhs.top" 50 $ text "new let-bindings:" <+> (brackets $ fsep $ punctuate comma $ map prettyTCM newLets)
-
-      bindAsPatterns newLets $
-        applyRelevanceToContext (getRelevance b') $ updateModuleParameters paramSub $ do
-        bindAsPatterns asb' $ do
-
-          -- Check dot patterns
-          mapM_ checkDotPattern dpi
-          mapM_ (uncurry isEmptyType) sbe
-          checkLeftoverDotPatterns pxs (downFrom $ size delta) (flattenTel delta) dpi
-
-          -- Type check dot patterns that have been thrown away by
-          -- with-desugaring.
-          mapM_ checkStrippedDotPattern $ applySubst paramSub strippedDots
-
-
-        -- Issue2303: don't bind asb' for the continuation (return in lhsResult instead)
-        ret lhsResult
-
--- | The loop (tail-recursive): split at a variable in the problem until problem is solved
-checkLHS
-  :: Maybe QName       -- ^ The name of the definition we are checking.
-  -> LHSState          -- ^ The current state.
-  -> TCM LHSState      -- ^ The final state after all splitting is completed
-checkLHS f st@(LHSState problem dpi sbe) = do
-
-  problem <- insertImplicitProblem problem
-  -- Note: inserting implicits no longer preserve solvedness,
-  -- since we might insert eta expanded record patterns.
-  if isSolvedProblem problem then return $ st { lhsProblem = problem } else do
-
-    unlessM (optPatternMatching <$> gets getPragmaOptions) $
-      unless (problemAllVariables problem) $
-        typeError $ GenericError $ "Pattern matching is disabled"
-
-    foldListT trySplit nothingToSplit $ splitProblem f problem
-  where
-    nothingToSplit :: TCM LHSState
-    nothingToSplit = do
-      reportSLn "tc.lhs.split" 50 $ "checkLHS: nothing to split in problem " ++ show problem
-      nothingToSplitError problem
-
-    -- Split problem rest (projection pattern, does not fail as there is no call to unifier)
-    trySplit :: SplitProblem -> TCM LHSState -> TCM LHSState
-    trySplit (SplitRest projPat o projType) _ = do
-
-      -- Compute the new problem
-      let Problem ps1 ip delta (ProblemRest (p:ps2) b) = problem
-          -- ps'      = ps1 ++ [p]
-          ps'      = ps1 -- drop the projection pattern (already splitted)
-          rest     = ProblemRest ps2 (projPat $> projType)
-          ip'      = ip ++ [fmap (Named Nothing . ProjP o) projPat]
-          problem' = Problem ps' ip' delta rest
-      -- Jump the trampolin
-      st' <- updateProblemRest (LHSState problem' dpi sbe)
-      -- If the field is irrelevant, we need to continue in irr. cxt.
-      -- (see Issue 939).
-      applyRelevanceToContext (getRelevance projPat) $ do
-        checkLHS f st'
-
-    -- Split on literal pattern (does not fail as there is no call to unifier)
-
-    trySplit (Split p0 (Arg _ (LitFocus lit ip a)) p1) _ = do
-
-      -- substitute the literal in p1 and dpi
-      let delta1 = problemTel p0
-          delta2 = absApp (fmap problemTel p1) (Lit lit)
-          rho    = singletonS (size delta2) (LitP lit)
-          -- Andreas, 2015-06-13 Literals are closed, so need to raise them!
-          -- rho    = liftS (size delta2) $ singletonS 0 (Lit lit)
-          -- rho    = [ var i | i <- [0..size delta2 - 1] ]
-          --       ++ [ raise (size delta2) $ Lit lit ]
-          --       ++ [ var i | i <- [size delta2 ..] ]
-          dpi'     = applyPatSubst rho dpi
-          sbe'     = map (second $ applyPatSubst rho) sbe
-          ip'      = applySubst rho ip
-          rest'    = applyPatSubst rho (problemRest problem)
-
-      -- Compute the new problem
-      let ps'      = problemInPat p0 ++ problemInPat (absBody p1)
-          delta'   = abstract delta1 delta2
-          problem' = Problem ps' ip' delta' rest'
-      st' <- updateProblemRest (LHSState problem' dpi' sbe')
-      checkLHS f st'
-
-    -- Split on absurd pattern (adding type to list of types that should be empty)
-    trySplit (Split p0 (Arg info (AbsurdFocus pi i a)) p1) _ = do
-      let tel = problemTel problem
-      reportSDoc "tc.lhs.split.absurd" 10 $ sep
-        [ text "splitting on absurd pattern"
-        , nest 2 $ text "tel  =" <+> prettyTCM tel
-        , nest 2 $ text "var  =" <+> addContext tel (prettyTCM $ var i)
-        , nest 2 $ text "type =" <+> addContext tel (prettyTCM a)
-        ]
-      let rho = liftS i $ consS (AbsurdP $ VarP $ DBPatVar "()" 0) $ raiseS 1
-      checkLHS f $ st
-            { lhsProblem = problem
-              { problemInPat  = (problemInPat p0) ++
-                                [Arg info $ unnamed $ A.WildP pi] ++
-                                problemInPat (absBody p1)
-              , problemOutPat = applySubst rho $ problemOutPat problem
-              }
-            , lhsShouldBeEmptyTypes = (getRange pi , a) : lhsShouldBeEmptyTypes st
-            }
-
-    -- Split on constructor pattern (unifier might fail)
-    trySplit (Split p0 (Arg info
-               (Focus { focusCon      = c
-                      , focusPatOrigin= porigin
-                      , focusConArgs  = qs
-                      , focusRange    = r
-                      , focusOutPat   = ip
-                      , focusDatatype = d
-                      , focusParams   = vs
-                      , focusIndices  = ws
-                      , focusType     = a
-                      }
-               )) p1) tryNextSplit = do
-      traceCall (CheckPattern (A.ConP (ConPatInfo porigin $ PatRange r) (A.AmbQ [c]) qs)
-                                       (problemTel p0)
-                                       (El Prop $ Def d $ map Apply $ vs ++ ws)) $ do
-
-        let delta1 = problemTel p0
-            delta2 = problemTel $ absBody p1
-        let typeOfSplitVar = Arg info a
-
-        reportSDoc "tc.lhs.split" 10 $ sep
-          [ text "checking lhs"
-          , nest 2 $ text "tel =" <+> prettyTCM (problemTel problem)
-          , nest 2 $ text "rel =" <+> (text $ show $ argInfoRelevance info)
-          ]
-
-        reportSDoc "tc.lhs.split" 15 $ sep
-          [ text "split problem"
-          , nest 2 $ vcat
-            [ text "delta1 = " <+> prettyTCM delta1
-            , text "typeOfSplitVar =" <+> addContext delta1 (prettyTCM typeOfSplitVar)
-            , text "focusOutPat =" <+> pretty ip
-            , text "delta2 = " <+> addContext delta1 (addContext ("x",domFromArg typeOfSplitVar) (prettyTCM delta2))
-            ]
-          ]
-
-        c <- either
-               (sigError __IMPOSSIBLE_VERBOSE__ (typeError $ AbstractConstructorNotInScope c))
-               (return . (`withRangeOf` c))
-               =<< getConForm c
-        ca <- defType <$> getConInfo c
-
-        reportSDoc "tc.lhs.split" 20 $ nest 2 $ vcat
-          [ text "ca =" <+> prettyTCM ca
-          , text "vs =" <+> prettyList (map prettyTCM vs)
-          ]
-
-        -- Lookup the type of the constructor at the given parameters
-        let a = ca `piApply` vs
-
-        -- It will end in an application of the datatype
-        (gamma', ca, d', us) <- do
-          TelV gamma' ca@(El _ def) <- telView a
-          let Def d' es = ignoreSharing def
-              Just us   = allApplyElims es
-          return (gamma', ca, d', us)
-
-        -- This should be the same datatype as we split on
-        unless (d == d') $ typeError $ ShouldBeApplicationOf ca d'
-
-        reportSDoc "tc.lhs.top" 20 $ addContext delta1 $ nest 2 $ vcat
-          [ text "gamma' =" <+> prettyTCM gamma'
-          ]
-
-        -- Andreas 2010-09-07  propagate relevance info to new vars
-        let updRel = composeRelevance (getRelevance info)
-        gamma' <- return $ mapRelevance updRel <$> gamma'
-
-        -- Insert implicit patterns
-        qs' <- insertImplicitPatterns ExpandLast qs gamma'
-        reportSDoc "tc.lhs.imp" 20 $
-          text "insertImplicitPatternsT returned" <+> fsep (map prettyA qs')
-
-        unless ((size qs' :: Int) == size gamma') $
-          typeError $ WrongNumberOfConstructorArguments (conName c) (size gamma') (size qs')
-
-        let gamma = useNamesFromPattern qs' gamma'
-
-        -- Get the type of the datatype.
-        da <- (`piApply` vs) . defType <$> getConstInfo d
-        reportSDoc "tc.lhs.split" 30 $ text "  da = " <+> prettyTCM da
-
-        -- Compute the flexible variables
-        flex <- flexiblePatterns (problemInPat p0 ++ qs')
-        reportSDoc "tc.lhs.split" 30 $ text "computed flexible variables"
-
-        -- Compute the constructor indices by dropping the parameters
-        let us' = drop (size vs) us
-
-        -- Raise given indices over constructor telescope
-        let ws' = raise (size gamma) ws
-
-        reportSDoc "tc.lhs.top" 15 $ addContext delta1 $
-          sep [ text "preparing to unify"
-              , nest 2 $ vcat
-                [ text "c      =" <+> prettyTCM c <+> text ":" <+> prettyTCM a
-                , text "d      =" <+> prettyTCM (Def d (map Apply $ vs++ws)) <+> text ":" <+> prettyTCM da
-                , text "gamma  =" <+> prettyTCM gamma
-                , text "gamma' =" <+> prettyTCM gamma'
-                , text "vs     =" <+> brackets (fsep $ punctuate comma $ map prettyTCM vs)
-                , text "us'    =" <+> addContext gamma (brackets (fsep $ punctuate comma $ map prettyTCM us'))
-                , text "ws     =" <+> brackets (fsep $ punctuate comma $ map prettyTCM ws)
-                ]
-              ]
-
-        -- Unify constructor target and given type (in Δ₁Γ)
-        -- Given: Δ₁ ⊢ D vs : Φ → Setᵢ
-        --        Δ₁ ⊢ c    : Γ → D vs' us'
-        --        Δ₁ ⊢ ws   : Φ
-        --        Δ₁Γ ⊢ ws' : Φ
-        -- (where vs' = raise Γ vs and ws' = raise Γ ws)
-        -- unification of us' and ws' in context Δ₁Γ gives us a telescope Δ₁'
-        -- and a substitution ρ₀ such that
-        --        Δ₁' ⊢ ρ₀ : Δ₁Γ
-        --        Δ₁' ⊢ (us')ρ₀ ≡ (ws')ρ₀ : Φρ₀
-        -- We can split ρ₀ into two parts ρ₁ and ρ₂, giving
-        --        Δ₁' ⊢ ρ₁ : Δ₁
-        --        Δ₁' ⊢ ρ₂ : Γρ₁
-        -- Application of the constructor c gives
-        --        Δ₁' ⊢ c ρ₂ : (D vs' us')(ρ₁;ρ₂)
-        -- We have
-        --        us'(ρ₁;ρ₂)
-        --         ≡ us'ρ₀      (since ρ₀=ρ₁;ρ₂)
-        --         ≡ ws'ρ₀      (by unification)
-        --         ≡ ws ρ₁      (since ws doesn't actually depend on Γ)
-        -- so     Δ₁' ⊢ c ρ₂ : D (vs)ρ₁ (ws)ρ₁
-        -- Putting this together with ρ₁ gives ρ₃ = ρ₁;c ρ₂
-        --        Δ₁' ⊢ ρ₁;c ρ₂ : Δ₁(x : D vs ws)
-        -- and lifting over Δ₂ gives the final substitution ρ = ρ₃;Δ₂
-        -- from Δ' = Δ₁';Δ₂ρ₃
-        --        Δ' ⊢ ρ : Δ₁(x : D vs ws)Δ₂
-
-        res <- unifyIndices
-                 (delta1 `abstract` gamma)
-                 flex
-                 (raise (size gamma) da)
-                 us'
-                 ws'
-        case res of
-
-         -- Mismatch.  Report and abort.
-         NoUnify neg -> typeError $ ImpossibleConstructor (conName c) neg
-
-         -- Unclear situation.  Try next split.
-         -- If no split works, give error from first split.
-         -- This is conservative, but might not be the best behavior.
-         -- It might be better to collect all the errors and print all of them.
-         DontKnow errs -> tryNextSplit
-           `catchError` \ _ -> typeError $ SplitError $
-             UnificationStuck (conName c) (delta1 `abstract` gamma) us' ws' errs
-
-         -- Success.
-         Unifies (delta1',rho0,es) -> do
-
-          reportSDoc "tc.lhs.top" 15 $ text "unification successful"
-          reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat
-            [ text "delta1' =" <+> prettyTCM delta1'
-            , text "rho0    =" <+> addContext delta1' (prettyTCM rho0)
-            , text "es      =" <+> addContext delta1' (prettyTCM $ (fmap . fmap . fmap) patternToTerm es)
-            ]
-
-          -- Andreas 2014-11-25  clear 'Forced' and 'Unused'
-          -- Andreas 2015-01-19  ... only after unification
-          delta1' <- return $ mapRelevance ignoreForced <$> delta1'
-
-          -- compute in patterns for delta1'
-          let newPats  = applySubst rho0 $ teleArgs $ delta1 `abstract` gamma
-              -- oldTypes are the types of the old pattern variables, but relative
-              -- to the *new* telescope delta1'. These are needed to compute the
-              -- correct types of new dot pattern instantiations.
-              oldTypes = applyPatSubst rho0 $ flattenTel $ delta1 `abstract` gamma
-          (p0',newDpi) <- addContext delta1' $ updateInPatterns
-                            oldTypes
-                            (problemInPat p0 ++ qs')
-                            newPats
-
-          reportSDoc "tc.lhs.top" 20 $ addContext delta1' $ nest 2 $ vcat
-            [ text "p0'     =" <+> text (show $ deepUnscope p0')
-            , text "newDpi  =" <+> brackets (fsep $ punctuate comma $ map prettyTCM newDpi)
-            ]
-
-          -- split substitution into part for Δ₁ and part for Γ
-          let (rho1,rho2) = splitS (size gamma) rho0
-
-          reportSDoc "tc.lhs.top" 20 $ addContext delta1' $ nest 2 $ vcat
-            [ text "rho1    =" <+> prettyTCM rho1
-            , text "rho2    =" <+> prettyTCM rho2
-            ]
-
-          -- Andreas, 2010-09-09, save the type.
-          -- It is relative to Δ₁, but it should be relative to Δ₁'
-          let storedPatternType = applyPatSubst rho1 typeOfSplitVar
-          -- Also remember if we are a record pattern and from an implicit pattern.
-          isRec <- isRecord d
-          let cpi = ConPatternInfo (isRec $> porigin) (Just storedPatternType)
-
-          -- compute final context and permutation
-          let crho2   = ConP c cpi $ applySubst rho2 $
-                          teleNamedArgs gamma `useOriginFrom` qs'
-              rho3    = consS crho2 rho1
-              delta2' = applyPatSubst rho3 delta2
-              delta'  = delta1' `abstract` delta2'
-              rho     = liftS (size delta2) rho3
-
-          reportSDoc "tc.lhs.top" 20 $ addContext delta1' $ nest 2 $ vcat
-            [ text "crho2   =" <+> prettyTCM crho2
-            , text "rho3    =" <+> prettyTCM rho3
-            , text "delta2' =" <+> prettyTCM delta2'
-            ]
-
-          reportSDoc "tc.lhs.top" 70 $ addContext delta1' $ nest 2 $ vcat
-            [ text "crho2   =" <+> pretty crho2
-            , text "rho3    =" <+> pretty rho3
-            , text "delta2' =" <+> pretty delta2'
-            ]
-
-          reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat
-            [ text "delta'  =" <+> prettyTCM delta'
-            , text "rho     =" <+> addContext delta' (prettyTCM rho)
-            ]
-
-          -- compute new in patterns
-          let ps'  = p0' ++ problemInPat (absBody p1)
-
-          reportSDoc "tc.lhs.top" 15 $ addContext delta' $
-            nest 2 $ vcat
-              [ text "ps'    =" <+> brackets (fsep $ punctuate comma $ map prettyA ps')
-              ]
-
-          -- The final dpis are the new ones plus the old ones substituted by ρ
-          let dpi' = applyPatSubst rho dpi ++ raise (size delta2') newDpi
-              sbe' = map (second $ applyPatSubst rho) sbe
-
-          reportSDoc "tc.lhs.top" 15 $ addContext delta' $
-            nest 2 $ vcat
-              [ text "dpi'    =" <+> brackets (fsep $ punctuate comma $ map prettyTCM dpi')
-              , text "sbe'    =" <+> brackets (fsep $ punctuate comma $ map prettyTCM sbe')
-              ]
-
-          -- Apply the substitution
-          let ip'      = applySubst rho ip
-              rest'    = applyPatSubst rho (problemRest problem)
-
-          reportSDoc "tc.lhs.top" 15 $ addContext delta' $
-            nest 2 $ vcat
-              [ text "ip' =" <+> pretty ip ]
-
-          -- Construct the new problem
-          let problem' = Problem ps' ip' delta' rest'
-
-          -- if rest type reduces,
-          -- extend the split problem by previously not considered patterns
-          st'@(LHSState problem'@(Problem ps' ip' delta' rest') dpi' sbe')
-            <- updateProblemRest $ LHSState problem' dpi' sbe'
-
-          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'     =" <+> pretty ip'
-              ]
-            ]
-          checkLHS f st'
-
-
--- | Ensures that we are not performing pattern matching on codata.
-
-noPatternMatchingOnCodata :: [NamedArg DeBruijnPattern] -> TCM ()
-noPatternMatchingOnCodata = mapM_ (check . namedArg)
-  where
-  check (VarP {})   = return ()
-  check (DotP {})   = return ()
-  check (AbsurdP{}) = return ()
-  check (ProjP{})   = return ()
-  check (LitP {})   = return ()  -- Literals are assumed not to be coinductive.
-  check (ConP con _ ps) = do
-    TelV _ t <- telView' . defType <$> do getConstInfo $ conName con
-    c <- isCoinductive t
-    case c of
-      Nothing    -> __IMPOSSIBLE__
-      Just False -> mapM_ (check . namedArg) ps
-      Just True  -> typeError $
-        GenericError "Pattern matching on coinductive types is not allowed"
-
--- | Type check dot pattern stripped from a with function.
-checkStrippedDotPattern :: A.StrippedDotPattern -> TCM ()
-checkStrippedDotPattern (A.StrippedDot e v a) = do
-  reportSDoc "tc.with.dot" 30 $ vcat
-    [ text "Checking stripped dot pattern"
-    , nest 2 $ vcat [ text "e =" <+> prettyTCM e
-                    , text "v =" <+> prettyTCM v
-                    , text "a =" <+> prettyTCM a
-                    , text "Γ =" <+> (inTopContext . prettyTCM =<< getContextTelescope) ] ]
-  u <- checkExpr e a
-  equalTerm a u v
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE NondecreasingIndentation #-}
+
+module Agda.TypeChecking.Rules.LHS
+  ( checkLeftHandSide
+  , LHSResult(..)
+  , bindAsPatterns
+  , IsFlexiblePattern(..)
+  , checkSortOfSplitVar
+  ) where
+
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), mapM, null, sequence )
+#else
+import Prelude hiding ( mapM, null, sequence )
+#endif
+
+import Data.Maybe
+
+import Control.Arrow (left)
+import Control.Monad
+import Control.Monad.Reader
+import Control.Monad.State
+import Control.Monad.Writer hiding ((<>))
+import Control.Monad.Trans.Maybe
+
+import Data.Either (partitionEithers)
+import Data.IntMap (IntMap)
+import qualified Data.IntMap as IntMap
+import qualified Data.List as List
+import Data.Monoid ( Monoid, mempty, mappend )
+import Data.Semigroup ( Semigroup )
+import qualified Data.Semigroup as Semigroup
+import qualified Data.Map as Map
+
+import Agda.Interaction.Highlighting.Generate (storeDisambiguatedName)
+import Agda.Interaction.Options
+import Agda.Interaction.Options.Lenses
+
+import Agda.Syntax.Internal as I
+import Agda.Syntax.Internal.Pattern
+import Agda.Syntax.Abstract (IsProjP(..))
+import qualified Agda.Syntax.Abstract as A
+import Agda.Syntax.Abstract.Views (asView, deepUnscope)
+import Agda.Syntax.Common as Common
+import Agda.Syntax.Info as A
+import Agda.Syntax.Literal
+import Agda.Syntax.Position
+
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin (litType, constructorForm)
+
+import qualified Agda.TypeChecking.Monad.Benchmark as Bench
+import Agda.TypeChecking.Conversion
+import Agda.TypeChecking.Constraints
+import Agda.TypeChecking.CheckInternal (checkInternal)
+import Agda.TypeChecking.Datatypes hiding (isDataOrRecordType)
+import Agda.TypeChecking.Errors (dropTopLevelModule)
+import Agda.TypeChecking.Irrelevance
+import {-# SOURCE #-} Agda.TypeChecking.Empty
+import Agda.TypeChecking.Forcing
+import Agda.TypeChecking.Patterns.Abstract
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Records hiding (getRecordConstructor)
+import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Telescope
+
+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.Implicit
+import Agda.TypeChecking.Rules.Data
+
+import Agda.Utils.Except (MonadError(..), ExceptT, runExceptT)
+import Agda.Utils.Function
+import Agda.Utils.Functor
+import Agda.Utils.Lens
+import Agda.Utils.List
+import Agda.Utils.Maybe
+import Agda.Utils.Monad
+import Agda.Utils.NonemptyList
+import Agda.Utils.Null
+import Agda.Utils.Pretty (prettyShow)
+import Agda.Utils.Singleton
+import Agda.Utils.Size
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
+-- | Compute the set of flexible patterns in a list of patterns. The result is
+--   the deBruijn indices of the flexible patterns.
+flexiblePatterns :: [NamedArg A.Pattern] -> TCM FlexibleVars
+flexiblePatterns nps = do
+  forMaybeM (zip (downFrom $ length nps) nps) $ \ (i, Arg ai p) -> do
+    runMaybeT $ (\ f -> FlexibleVar (getHiding ai) (getOrigin ai) f (Just i) i) <$> maybeFlexiblePattern p
+
+-- | A pattern is flexible if it is dotted or implicit, or a record pattern
+--   with only flexible subpatterns.
+class IsFlexiblePattern a where
+  maybeFlexiblePattern :: a -> MaybeT TCM FlexibleVarKind
+
+  isFlexiblePattern :: a -> TCM Bool
+  isFlexiblePattern p =
+    maybe False notOtherFlex <$> runMaybeT (maybeFlexiblePattern p)
+    where
+    notOtherFlex = \case
+      RecordFlex fls -> all notOtherFlex fls
+      ImplicitFlex   -> True
+      DotFlex        -> True
+      OtherFlex      -> False
+
+instance IsFlexiblePattern A.Pattern where
+  maybeFlexiblePattern p = do
+    reportSDoc "tc.lhs.flex" 30 $ text "maybeFlexiblePattern" <+> prettyA p
+    reportSDoc "tc.lhs.flex" 60 $ text "maybeFlexiblePattern (raw) " <+> (text . show . deepUnscope) p
+    case p of
+      A.DotP{}  -> return DotFlex
+      A.VarP{}  -> return ImplicitFlex
+      A.WildP{} -> return ImplicitFlex
+      A.AsP _ _ p -> maybeFlexiblePattern p
+      A.ConP _ cs qs | Just c <- getUnambiguous cs ->
+        ifM (isNothing <$> isRecordConstructor c) (return OtherFlex) {-else-}
+            (maybeFlexiblePattern qs)
+      A.LitP{}  -> return OtherFlex
+      _ -> mzero
+
+instance IsFlexiblePattern (I.Pattern' a) where
+  maybeFlexiblePattern p =
+    case p of
+      I.DotP{}  -> return DotFlex
+      I.ConP _ i ps
+        | Just PatOSystem <- conPRecord i -> return ImplicitFlex  -- expanded from ImplicitP
+        | Just _          <- conPRecord i -> maybeFlexiblePattern ps
+        | otherwise -> mzero
+      I.VarP{}  -> mzero
+      I.LitP{}  -> mzero
+      I.ProjP{} -> mzero
+
+-- | Lists of flexible patterns are 'RecordFlex'.
+instance IsFlexiblePattern a => IsFlexiblePattern [a] where
+  maybeFlexiblePattern ps = RecordFlex <$> mapM maybeFlexiblePattern ps
+
+instance IsFlexiblePattern a => IsFlexiblePattern (Arg a) where
+  maybeFlexiblePattern = maybeFlexiblePattern . unArg
+
+instance IsFlexiblePattern a => IsFlexiblePattern (Common.Named name a) where
+  maybeFlexiblePattern = maybeFlexiblePattern . namedThing
+
+-- | Update the user patterns in the given problem, simplifying equations
+--   between constructors where possible.
+updateProblemEqs
+ :: [ProblemEq] -> TCM [ProblemEq]
+updateProblemEqs eqs = do
+  reportSDoc "tc.lhs.top" 20 $ vcat
+    [ text "updateProblem: equations to update"
+    , nest 2 (vcat $ map prettyTCM eqs)
+    ]
+
+  eqs' <- updates eqs
+
+  reportSDoc "tc.lhs.top" 20 $ vcat
+    [ text "updateProblem: new equations"
+    , nest 2 (vcat $ map prettyTCM eqs')
+    ]
+
+  return eqs'
+
+  where
+
+    updates :: [ProblemEq] -> TCM [ProblemEq]
+    updates = concat <.> traverse update
+
+    update :: ProblemEq -> TCM [ProblemEq]
+    update eq@(ProblemEq A.WildP{} _ _) = return []
+    update eq@(ProblemEq p v a) = reduce v >>= constructorForm >>= \case
+      Con c ci es -> do
+        let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
+        -- we should only simplify equations between fully applied constructors
+        contype <- getFullyAppliedConType c =<< reduce (unDom a)
+        caseMaybe contype (return [eq]) $ \((d,_,pars),b) -> do
+        TelV ctel _ <- telView b
+        let bs = instTel ctel (map unArg vs)
+
+        p <- expandLitPattern p
+        case p of
+          A.AsP info x p' ->
+            (ProblemEq (A.VarP x) v a :) <$> update (ProblemEq p' v a)
+          A.ConP cpi ambC ps -> do
+            (c',_) <- disambiguateConstructor ambC d pars
+
+            -- Issue #3014: If the constructor is forced but the user wrote a
+            -- different constructor,that's an error. We simply keep the
+            -- problem equation, this will result in a proper error message later.
+            if conName c /= conName c' then return [eq] else do
+
+            -- Insert implicit patterns
+            ps <- insertImplicitPatterns ExpandLast ps ctel
+            reportSDoc "tc.lhs.imp" 20 $
+              text "insertImplicitPatternsT returned" <+> fsep (map prettyA ps)
+
+            -- Check argument count and hiding (not just count: #3074)
+            let checkArgs [] [] = return ()
+                checkArgs (p : ps) (v : vs)
+                  | getHiding p == getHiding v = checkArgs ps vs
+                  | otherwise                  = setCurrentRange p $ genericDocError =<< do
+                      fsep $ pwords ("Expected an " ++ which (getHiding v) ++ " argument " ++
+                                     "instead of "  ++ which (getHiding p) ++ " argument") ++
+                             [ prettyA p ]
+                  where which NotHidden  = "explicit"
+                        which Hidden     = "implicit"
+                        which Instance{} = "instance"
+                checkArgs [] vs = genericDocError =<< do
+                    fsep $ pwords "Too few arguments to constructor" ++ [prettyTCM c <> text ","] ++
+                           pwords ("expected " ++ show n ++ " more explicit "  ++ arguments)
+                  where n = length (filter visible vs)
+                        arguments | n == 1    = "argument"
+                                  | otherwise = "arguments"
+                checkArgs (p : _) [] = setCurrentRange p $ genericDocError =<< do
+                  fsep $ pwords "Too many arguments to constructor" ++ [prettyTCM c]
+            checkArgs ps vs
+
+            updates $ zipWith3 ProblemEq (map namedArg ps) (map unArg vs) bs
+
+          A.RecP pi fs -> do
+            axs <- recordFieldNames . theDef <$> getConstInfo d
+            -- In fs omitted explicit fields are replaced by underscores,
+            -- and the fields are put in the correct order.
+            ps <- insertMissingFields d (const $ A.WildP patNoRange) fs axs
+
+            -- We also need to insert missing implicit or instance fields.
+            ps <- insertImplicitPatterns ExpandLast ps ctel
+
+            let eqs = zipWith3 ProblemEq (map namedArg ps) (map unArg vs) bs
+            updates eqs
+
+          _ -> return [eq]
+
+      Lit l | A.LitP l' <- p , l == l' -> return []
+
+      _ -> return [eq]
+
+    instTel :: Telescope -> [Term] -> [Dom Type]
+    instTel EmptyTel _                   = []
+    instTel (ExtendTel arg tel) (u : us) = arg : instTel (absApp tel u) us
+    instTel ExtendTel{} []               = __IMPOSSIBLE__
+
+
+-- | Check if a problem is solved.
+--   That is, if the patterns are all variables,
+--   and there is no 'problemRest'.
+isSolvedProblem :: Problem a -> Bool
+isSolvedProblem problem = null (problem ^. problemRestPats) &&
+  problemAllVariables problem
+
+-- | Check if a problem consists only of variable patterns.
+--   (Includes the 'problemRest').
+problemAllVariables :: Problem a -> Bool
+problemAllVariables problem =
+    all (isSolved . snd . asView) $
+      map namedArg (problem ^. problemRestPats) ++ problemInPats problem
+  where
+    -- need further splitting:
+    isSolved A.ConP{}        = False
+    isSolved A.LitP{}        = False
+    isSolved A.RecP{}        = False  -- record pattern
+    -- solved:
+    isSolved A.VarP{}        = True
+    isSolved A.WildP{}       = True
+    isSolved A.DotP{}        = True
+    isSolved A.AbsurdP{}     = True
+    -- impossible:
+    isSolved A.ProjP{}       = __IMPOSSIBLE__
+    isSolved A.DefP{}        = __IMPOSSIBLE__
+    isSolved A.AsP{}         = __IMPOSSIBLE__  -- removed by asView
+    isSolved A.PatternSynP{} = __IMPOSSIBLE__  -- expanded before
+    isSolved A.WithP{}       = __IMPOSSIBLE__
+
+-- | For each user-defined pattern variable in the 'Problem', check
+-- that the corresponding data type (if any) does not contain a
+-- constructor of the same name (which is not in scope); this
+-- \"shadowing\" could indicate an error, and is not allowed.
+--
+-- Precondition: The problem has to be solved.
+
+noShadowingOfConstructors
+  :: Call -- ^ Trace, e.g., @CheckPatternShadowing clause@
+  -> [ProblemEq] -> TCM ()
+noShadowingOfConstructors mkCall eqs =
+  traceCall mkCall $ mapM_ noShadowing eqs
+  where
+  noShadowing (ProblemEq p _ (Dom info (El _ a))) = case snd $ asView p of
+   A.WildP       {} -> return ()
+   A.AbsurdP     {} -> return ()
+   A.DotP        {} -> return ()
+   A.ConP        {} -> __IMPOSSIBLE__
+   A.RecP        {} -> __IMPOSSIBLE__
+   A.ProjP       {} -> __IMPOSSIBLE__
+   A.DefP        {} -> __IMPOSSIBLE__
+   A.AsP         {} -> __IMPOSSIBLE__ -- removed by asView
+   A.LitP        {} -> __IMPOSSIBLE__
+   A.PatternSynP {} -> __IMPOSSIBLE__
+   A.WithP       {} -> __IMPOSSIBLE__
+   -- Andreas, 2017-12-01, issue #2859.
+   -- Due to parameter refinement, there can be (invisible) variable patterns from module
+   -- parameters that shadow constructors.
+   -- Thus, only complain about user written variable that shadow constructors.
+   A.VarP (A.BindName x) -> when (getOrigin info == UserWritten) $ do
+    reportSDoc "tc.lhs.shadow" 30 $ vcat
+      [ text $ "checking whether pattern variable " ++ prettyShow x ++ " shadows a constructor"
+      , nest 2 $ text "type of variable =" <+> prettyTCM a
+      , nest 2 $ text "position of variable =" <+> (text . show) (getRange x)
+      ]
+    reportSDoc "tc.lhs.shadow" 70 $ nest 2 $ text "a =" <+> pretty a
+    a <- reduce a
+    case a of
+      Def t _ -> do
+        d <- theDef <$> getConstInfo t
+        case d of
+          Datatype { dataCons = cs } -> do
+            case filter ((A.nameConcrete x ==) . A.nameConcrete . A.qnameName) cs of
+              []      -> return ()
+              (c : _) -> setCurrentRange x $
+                typeError $ PatternShadowsConstructor x c
+          AbstractDefn{} -> return ()
+            -- Abstract constructors cannot be brought into scope,
+            -- even by a bigger import list.
+            -- Thus, they cannot be confused with variables.
+            -- Alternatively, we could do getConstInfo in ignoreAbstractMode,
+            -- then Agda would complain if a variable shadowed an abstract constructor.
+          Axiom       {} -> return ()
+          Function    {} -> return ()
+          Record      {} -> return ()
+          Constructor {} -> __IMPOSSIBLE__
+          -- TODO: in the future some stuck primitives might allow constructors
+          Primitive   {} -> return ()
+      Var   {} -> return ()
+      Pi    {} -> return ()
+      Sort  {} -> return ()
+      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
+      -- the completed module is type checked, so it is safe to skip
+      -- the test here. However, users may be annoyed if they get an
+      -- error in code which has already passed the type checker.
+      Lam   {} -> __IMPOSSIBLE__
+      Lit   {} -> __IMPOSSIBLE__
+      Level {} -> __IMPOSSIBLE__
+      Con   {} -> __IMPOSSIBLE__
+      DontCare{} -> __IMPOSSIBLE__
+
+-- | Check that a dot pattern matches it's instantiation.
+checkDotPattern :: DotPattern -> TCM ()
+checkDotPattern (Dot e v (Dom info a)) =
+  traceCall (CheckDotPattern e v) $ do
+  reportSDoc "tc.lhs.dot" 15 $
+    sep [ text "checking dot pattern"
+        , nest 2 $ prettyA e
+        , nest 2 $ text "=" <+> prettyTCM v
+        , nest 2 $ text ":" <+> prettyTCM a
+        ]
+  applyRelevanceToContext (getRelevance info) $ do
+    u <- checkExpr e a
+    reportSDoc "tc.lhs.dot" 50 $
+      sep [ text "equalTerm"
+          , nest 2 $ pretty a
+          , nest 2 $ pretty u
+          , nest 2 $ pretty v
+          ]
+    -- Should be ok to do noConstraints here
+    noConstraints $ equalTerm a u v
+
+checkAbsurdPattern :: AbsurdPattern -> TCM ()
+checkAbsurdPattern (Absurd r a) = isEmptyType r a
+
+data LeftoverPatterns = LeftoverPatterns
+  { patternVariables :: IntMap [A.Name]
+  , asPatterns       :: [AsBinding]
+  , dotPatterns      :: [DotPattern]
+  , absurdPatterns   :: [AbsurdPattern]
+  }
+
+instance Semigroup LeftoverPatterns where
+  x <> y = LeftoverPatterns
+    { patternVariables = IntMap.unionWith (++) (patternVariables x) (patternVariables y)
+    , asPatterns       = asPatterns x ++ asPatterns y
+    , dotPatterns      = dotPatterns x ++ dotPatterns y
+    , absurdPatterns   = absurdPatterns x ++ absurdPatterns y
+    }
+
+instance Monoid LeftoverPatterns where
+  mempty  = LeftoverPatterns empty [] [] []
+  mappend = (Semigroup.<>)
+
+-- | Classify remaining patterns after splitting is complete into pattern
+--   variables, as patterns, dot patterns, and absurd patterns.
+--   Precondition: there are no more constructor patterns.
+getLeftoverPatterns :: [ProblemEq] -> TCM LeftoverPatterns
+getLeftoverPatterns eqs = do
+  reportSDoc "tc.lhs.top" 30 $ text "classifying leftover patterns"
+  mconcat <$> mapM getLeftoverPattern eqs
+  where
+    patternVariable x i  = LeftoverPatterns (singleton (i,[x])) [] [] []
+    asPattern x v a      = LeftoverPatterns empty [AsB x v (unDom a)] [] []
+    dotPattern e v a     = LeftoverPatterns empty [] [Dot e v a] []
+    absurdPattern info a = LeftoverPatterns empty [] [] [Absurd info a]
+
+    getLeftoverPattern :: ProblemEq -> TCM LeftoverPatterns
+    getLeftoverPattern (ProblemEq p v a) = case p of
+      (A.VarP (A.BindName x)) -> isEtaVar v (unDom a) >>= \case
+        Just i  -> return $ patternVariable x i
+        Nothing -> return $ asPattern x v a
+      (A.WildP _)       -> return mempty
+      (A.AsP info (A.BindName x) p) -> (asPattern x v a `mappend`) <$> do
+        getLeftoverPattern $ ProblemEq p v a
+      (A.DotP info e)   -> return $ dotPattern e v a
+      (A.AbsurdP info)  -> return $ absurdPattern (getRange info) (unDom a)
+
+      A.ConP{}        -> __IMPOSSIBLE__
+      A.ProjP{}       -> __IMPOSSIBLE__
+      A.DefP{}        -> __IMPOSSIBLE__
+      A.LitP{}        -> __IMPOSSIBLE__
+      A.PatternSynP{} -> __IMPOSSIBLE__
+      A.RecP{}        -> __IMPOSSIBLE__
+      A.WithP{}       -> __IMPOSSIBLE__
+
+-- | Build a renaming for the internal patterns using variable names from
+--   the user patterns. If there are multiple user names for the same internal
+--   variable, the unused ones are returned as as-bindings.
+getUserVariableNames :: Telescope -> IntMap [A.Name]
+                     -> ([Maybe A.Name], [AsBinding])
+getUserVariableNames tel names = runWriter $
+  zipWithM makeVar (flattenTel tel) (downFrom $ size tel)
+
+  where
+    makeVar :: Dom Type -> Int -> Writer [AsBinding] (Maybe A.Name)
+    makeVar a i | Just (x:xs) <- IntMap.lookup i names = do
+      tell $ map (\y -> AsB y (var i) (unDom a)) xs
+      return $ Just x
+    makeVar a i = return Nothing
+
+-- | After splitting is complete, we transfer the origins
+--   We also transfer the locations of absurd patterns, since these haven't
+--   been introduced yet in the internal pattern.
+transferOrigins :: [NamedArg A.Pattern]
+                -> [NamedArg DeBruijnPattern]
+                -> TCM [NamedArg DeBruijnPattern]
+transferOrigins ps qs = do
+  reportSDoc "tc.lhs.origin" 40 $ vcat
+    [ text "transferOrigins"
+    , nest 2 $ vcat
+      [ text "ps  =   " <+> prettyA ps
+      , text "qs  =   " <+> pretty qs
+      ]
+    ]
+  transfers ps qs
+
+  where
+    transfers :: [NamedArg A.Pattern]
+              -> [NamedArg DeBruijnPattern]
+              -> TCM [NamedArg DeBruijnPattern]
+    transfers [] qs
+      | all notVisible qs = return $ map (setOrigin Inserted) qs
+      | otherwise         = __IMPOSSIBLE__
+    transfers (p : ps) [] = __IMPOSSIBLE__
+    transfers (p : ps) (q : qs)
+      | matchingArgs p q = do
+          q' <- setOrigin (getOrigin p) <$>
+                  (traverse $ traverse $ transfer $ namedArg p) q
+          (q' :) <$> transfers ps qs
+      | otherwise = (setOrigin Inserted q :) <$> transfers (p : ps) qs
+
+    transfer :: A.Pattern -> DeBruijnPattern -> TCM DeBruijnPattern
+    transfer p q = case (snd (asView p) , q) of
+
+      (A.ConP pi _ ps , ConP c (ConPatternInfo mo mb l) qs) -> do
+        let cpi = ConPatternInfo (mo $> PatOCon) mb l
+        ConP c cpi <$> transfers ps qs
+
+      (A.RecP pi fs , ConP c (ConPatternInfo mo mb l) qs) -> do
+        let Def d _  = unEl $ unArg $ fromMaybe __IMPOSSIBLE__ mb
+            axs = map (nameConcrete . qnameName) (conFields c) `withArgsFrom` qs
+            cpi = ConPatternInfo (mo $> PatORec) mb l
+        ps <- insertMissingFields d (const $ A.WildP patNoRange) fs axs
+        ConP c cpi <$> transfers ps qs
+
+      (p , ConP c (ConPatternInfo mo mb l) qs) -> do
+        let cpi = ConPatternInfo (mo $> patOrigin p) mb l
+        return $ ConP c cpi qs
+
+      (p , VarP _ x) -> return $ VarP (patOrigin p) x
+
+      (p , DotP _ u) -> return $ DotP (patOrigin p) u
+
+      _ -> return q
+
+    patOrigin :: A.Pattern -> PatOrigin
+    patOrigin (A.VarP (A.BindName x)) = PatOVar x
+    patOrigin A.DotP{}        = PatODot
+    patOrigin A.ConP{}        = PatOCon
+    patOrigin A.RecP{}        = PatORec
+    patOrigin A.WildP{}       = PatOWild
+    patOrigin A.AbsurdP{}     = PatOAbsurd
+    patOrigin A.LitP{}        = PatOLit
+    patOrigin A.AsP{}         = __IMPOSSIBLE__
+    patOrigin A.ProjP{}       = __IMPOSSIBLE__
+    patOrigin A.DefP{}        = __IMPOSSIBLE__
+    patOrigin A.PatternSynP{} = __IMPOSSIBLE__
+    patOrigin A.WithP{}       = __IMPOSSIBLE__
+
+    matchingArgs :: NamedArg A.Pattern -> NamedArg DeBruijnPattern -> Bool
+    matchingArgs p q
+      -- The arguments match if
+      -- 1. they are both projections,
+      | isJust (A.maybePostfixProjP p) = isJust (isProjP q)
+      -- 2. or they are both visible,
+      | visible p && visible q = True
+      -- 3. or they have the same hiding and the argument is not named,
+      | sameHiding p q && isNothing (nameOf (unArg p)) = True
+      -- 4. or they have the same hiding and the same name.
+      | sameHiding p q && nameOf (unArg p) == nameOf (unArg q) = True
+      -- Otherwise this argument was inserted by the typechecker.
+      | otherwise = False
+
+
+-- | If a user-written variable occurs more than once, it should be bound
+--   to the same internal variable (or term) in all positions.
+--   Returns the list of patterns with the duplicate user patterns removed.
+checkPatternLinearity :: [ProblemEq] -> TCM [ProblemEq]
+checkPatternLinearity eqs = do
+  reportSDoc "tc.lhs.top" 30 $ text "Checking linearity of pattern variables"
+  check Map.empty eqs
+  where
+    check _ [] = return []
+    check vars (eq@(ProblemEq p u a) : eqs) = case p of
+      A.VarP x | Just v <- Map.lookup x vars -> do
+        noConstraints $ equalTerm (unDom a) u v
+        check vars eqs
+      A.VarP x | otherwise -> (eq:) <$> do
+        check (Map.insert x u vars) eqs
+      A.AsP _ x p ->
+        check vars $ [ProblemEq (A.VarP x) u a, ProblemEq p u a] ++ eqs
+      A.WildP{}       -> continue
+      A.DotP{}        -> continue
+      A.AbsurdP{}     -> continue
+      A.ConP{}        -> __IMPOSSIBLE__
+      A.ProjP{}       -> __IMPOSSIBLE__
+      A.DefP{}        -> __IMPOSSIBLE__
+      A.LitP{}        -> __IMPOSSIBLE__
+      A.PatternSynP{} -> __IMPOSSIBLE__
+      A.RecP{}        -> __IMPOSSIBLE__
+      A.WithP{}       -> __IMPOSSIBLE__
+
+      where continue = (eq:) <$> check vars eqs
+
+-- | Construct the context for a left hand side, making up hidden (dotted) names
+--   for unnamed variables.
+computeLHSContext :: [Maybe A.Name] -> Telescope -> TCM Context
+computeLHSContext = go [] []
+  where
+    go cxt _ []        tel@ExtendTel{} = do
+      reportSDoc "impossible" 10 $
+        text "computeLHSContext: no patterns left, but tel =" <+> prettyTCM tel
+      __IMPOSSIBLE__
+    go cxt _ (_ : _)   EmptyTel = __IMPOSSIBLE__
+    go cxt _ []        EmptyTel = return cxt
+    go cxt taken (x : xs) tel0@(ExtendTel a tel) = do
+        name <- maybe (dummyName taken $ absName tel) return x
+        let e = (name,) <$> a
+        go (e : cxt) (name : taken) xs (absBody tel)
+
+    dummyName taken s =
+      if isUnderscore s then freshNoName_
+      else unshadowedName taken <$> freshName_ ("." ++ argNameToString s)
+
+-- | Bind as patterns
+bindAsPatterns :: [AsBinding] -> TCM a -> TCM a
+bindAsPatterns []                ret = ret
+bindAsPatterns (AsB x v a : asb) ret = do
+  reportSDoc "tc.lhs.as" 10 $ text "as pattern" <+> prettyTCM x <+>
+    sep [ text ":" <+> prettyTCM a
+        , text "=" <+> prettyTCM v
+        ]
+  addLetBinding defaultArgInfo x v a $ bindAsPatterns asb ret
+
+-- | Since with-abstraction can change the type of a variable, we have to
+--   recheck the stripped with patterns when checking a with function.
+recheckStrippedWithPattern :: ProblemEq -> TCM ()
+recheckStrippedWithPattern (ProblemEq p v a) = checkInternal v (unDom a)
+  `catchError` \_ -> typeError . GenericDocError =<< vcat
+    [ text "Ill-typed pattern after with abstraction: " <+> prettyA p
+    , text "(perhaps you can replace it by `_`?)"
+    ]
+
+-- | Result of checking the LHS of a clause.
+data LHSResult = LHSResult
+  { lhsParameters   :: Nat
+    -- ^ The number of original module parameters. These are present in the
+    -- the patterns.
+  , lhsVarTele      :: Telescope
+    -- ^ Δ : The types of the pattern variables, in internal dependency order.
+    -- Corresponds to 'clauseTel'.
+  , lhsPatterns     :: [NamedArg DeBruijnPattern]
+    -- ^ The patterns in internal syntax.
+  , lhsHasAbsurd    :: Bool
+    -- ^ Whether the LHS has at least one absurd pattern.
+  , lhsBodyType     :: Arg Type
+    -- ^ The type of the body. Is @bσ@ if @Γ@ is defined.
+    -- 'Irrelevant' to indicate the rhs must be checked in irrelevant mode.
+  , lhsPatSubst     :: Substitution
+    -- ^ Substitution version of @lhsPatterns@, only up to the first projection
+    -- pattern. @Δ |- lhsPatSubst : Γ@. Where @Γ@ is the argument telescope of
+    -- the function. This is used to update inherited dot patterns in
+    -- with-function clauses.
+  , lhsAsBindings   :: [AsBinding]
+    -- ^ As-bindings from the left-hand side. Return instead of bound since we
+    -- want them in where's and right-hand sides, but not in with-clauses
+    -- (Issue 2303).
+  }
+
+instance InstantiateFull LHSResult where
+  instantiateFull' (LHSResult n tel ps abs t sub as) = LHSResult n
+    <$> instantiateFull' tel
+    <*> instantiateFull' ps
+    <*> instantiateFull' abs
+    <*> instantiateFull' t
+    <*> instantiateFull' sub
+    <*> instantiateFull' as
+
+-- | Check a LHS. Main function.
+--
+--   @checkLeftHandSide a ps a ret@ checks that user patterns @ps@ eliminate
+--   the type @a@ of the defined function, and calls continuation @ret@
+--   if successful.
+
+checkLeftHandSide :: forall a.
+     Call
+     -- ^ Trace, e.g. @CheckPatternShadowing clause@
+  -> Maybe QName
+     -- ^ The name of the definition we are checking.
+  -> [NamedArg A.Pattern]
+     -- ^ The patterns.
+  -> Type
+     -- ^ The expected type @a = Γ → b@.
+  -> Maybe Substitution
+     -- ^ Module parameter substitution from with-abstraction.
+  -> [ProblemEq]
+     -- ^ Patterns that have been stripped away by with-desugaring.
+     -- ^ These should not contain any proper matches.
+  -> (LHSResult -> TCM a)
+     -- ^ Continuation.
+  -> TCM a
+checkLeftHandSide c f ps a withSub' strippedPats = Bench.billToCPS [Bench.Typing, Bench.CheckLHS] $ \ ret -> do
+
+  -- To allow module parameters to be refined by matching, we're adding the
+  -- context arguments as wildcard patterns and extending the type with the
+  -- context telescope.
+  cxt <- map (setOrigin Inserted) . reverse <$> getContext
+  let tel = telFromList' prettyShow cxt
+      cps = [ unnamed . A.VarP . A.BindName . fst <$> argFromDom d
+            | d <- cxt ]
+      eqs0 = zipWith3 ProblemEq (map namedArg cps) (map var $ downFrom $ size tel) (flattenTel tel)
+
+  let finalChecks :: LHSState a -> TCM a
+      finalChecks (LHSState delta qs0 (Problem eqs rps _) b) = do
+
+        unless (null rps) __IMPOSSIBLE__
+
+        -- Update modalities of delta to match the modalities of the variables
+        -- after the forcing translation. We can't perform the forcing translation
+        -- yet, since that would mess with with-clause stripping.
+        delta <- forceTranslateTelescope delta qs0
+
+        addContext delta $ do
+          noShadowingOfConstructors c eqs
+          noPatternMatchingOnCodata qs0
+
+        -- Compute substitution from the out patterns @qs0@
+        let notProj ProjP{} = False
+            notProj _       = True
+            numPats  = length $ takeWhile (notProj . namedArg) qs0
+
+            -- We have two slightly different cases here: normal function and
+            -- with-function. In both cases the goal is to build a substitution
+            -- from the context Γ of the previous checkpoint to the current lhs
+            -- context Δ:
+            --
+            --    Δ ⊢ paramSub : Γ
+            --
+            --  * Normal function, f
+            --
+            --    Γ = cxt = module parameter telescope of f
+            --    Ψ = non-parameter arguments of f (we have f : Γ Ψ → A)
+            --    Δ   ⊢ patSub  : Γ Ψ
+            --    Γ Ψ ⊢ weakSub : Γ
+            --    paramSub = patSub ∘ weakSub
+            --
+            --  * With-function
+            --
+            --    Γ = lhs context of the parent clause (cxt = [])
+            --    Ψ = argument telescope of with-function
+            --    Θ = inserted implicit patterns not in Ψ (#2827)
+            --        (this happens if the goal computes to an implicit
+            --         function type after some matching in the with-clause)
+            --
+            --    Ψ   ⊢ withSub : Γ
+            --    Δ   ⊢ patSub  : Ψ Θ
+            --    Ψ Θ ⊢ weakSub : Ψ
+            --    paramSub = patSub ∘ weakSub ∘ withSub
+            --
+            --    To compute Θ we can look at the arity of the with-function
+            --    and compare it to numPats. This works since the with-function
+            --    type is fully reduced.
+
+            weakSub :: Substitution
+            weakSub | isJust withSub' = wkS (max 0 $ numPats - arity a) idS -- if numPats < arity, Θ is empty
+                    | otherwise       = wkS (numPats - length cxt) idS
+            withSub  = fromMaybe idS withSub'
+            patSub   = (map (patternToTerm . namedArg) $ reverse $ take numPats qs0) ++# (EmptyS __IMPOSSIBLE__)
+            paramSub = patSub `composeS` weakSub `composeS` withSub
+
+        eqs <- addContext delta $ checkPatternLinearity eqs
+
+        LeftoverPatterns patVars asb0 dots absurds
+          <- addContext delta $ getLeftoverPatterns eqs
+
+        -- Get the user-written names for the pattern variables
+        let (vars, asb1) = getUserVariableNames delta patVars
+            asb          = asb0 ++ asb1
+
+        -- Rename internal patterns with these names
+        let makeVar     = maybe deBruijnVar $ debruijnNamedVar . nameToArgName
+            ren         = parallelS $ zipWith makeVar (reverse vars) [0..]
+
+        qs <- transferOrigins (cps ++ ps) $ applySubst ren qs0
+
+        let hasAbsurd = not . null $ absurds
+
+        let lhsResult = LHSResult (length cxt) delta qs hasAbsurd b patSub asb
+
+        -- Debug output
+        reportSDoc "tc.lhs.top" 10 $
+          vcat [ text "checked lhs:"
+               , nest 2 $ vcat
+                 [ text "delta   = " <+> prettyTCM delta
+                 , text "dots    = " <+> addContext delta (brackets $ fsep $ punctuate comma $ map prettyTCM dots)
+                 , text "asb     = " <+> addContext delta (brackets $ fsep $ punctuate comma $ map prettyTCM asb)
+                 , text "absurds = " <+> addContext delta (brackets $ fsep $ punctuate comma $ map prettyTCM absurds)
+                 , text "qs      = " <+> addContext delta (prettyList $ map pretty qs)
+                 ]
+               ]
+        reportSDoc "tc.lhs.top" 30 $
+          nest 2 $ vcat
+                 [ text "vars   = " <+> text (show vars)
+                 ]
+        reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "withSub  = " <+> pretty withSub
+        reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "weakSub  = " <+> pretty weakSub
+        reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "patSub   = " <+> pretty patSub
+        reportSDoc "tc.lhs.top" 20 $ nest 2 $ text "paramSub = " <+> pretty paramSub
+
+        newCxt <- computeLHSContext vars delta
+
+        updateContext paramSub (const newCxt)
+          $ applyRelevanceToContext (getRelevance b) $ do
+
+          reportSDoc "tc.lhs.top" 10 $ text "bound pattern variables"
+          reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "context = " <+> (pretty =<< getContextTelescope)
+          reportSDoc "tc.lhs.top" 10 $ nest 2 $ text "type  = " <+> prettyTCM b
+          reportSDoc "tc.lhs.top" 60 $ nest 2 $ text "type  = " <+> pretty b
+
+          bindAsPatterns asb $ do
+
+            -- Check dot patterns
+            mapM_ checkDotPattern dots
+            mapM_ checkAbsurdPattern absurds
+
+          -- Issue2303: don't bind asb' for the continuation (return in lhsResult instead)
+          ret lhsResult
+
+  st0 <- initLHSState tel eqs0 ps a finalChecks
+
+  -- after we have introduced variables, we can add the patterns stripped by
+  -- with-desugaring to the state.
+  let withSub = fromMaybe __IMPOSSIBLE__ withSub'
+  withEqs <- updateProblemEqs $ applySubst withSub strippedPats
+  -- Jesper, 2017-05-13: re-check the stripped patterns here!
+  inTopContext $ addContext (st0 ^. lhsTel) $
+    forM_ withEqs recheckStrippedWithPattern
+
+  let st = over (lhsProblem . problemEqs) (++ withEqs) st0
+
+  -- doing the splits:
+  (result, block) <- inTopContext $ runWriterT $ checkLHS f st
+  return result
+
+-- | Determine in which order the splits should be tried by
+--   reordering/inserting/dropping the problem equations.
+splitStrategy :: [ProblemEq] -> [ProblemEq]
+splitStrategy = filter shouldSplit
+  where
+    shouldSplit :: ProblemEq -> Bool
+    shouldSplit (ProblemEq p v a) = case snd $ asView p of
+      A.LitP{}    -> True
+      A.RecP{}    -> True
+      A.ConP{}    -> True
+
+      A.VarP{}    -> False
+      A.WildP{}   -> False
+      A.DotP{}    -> False
+      A.AbsurdP{} -> False
+
+      A.ProjP{}       -> __IMPOSSIBLE__
+      A.DefP{}        -> __IMPOSSIBLE__
+      A.AsP{}         -> __IMPOSSIBLE__
+      A.PatternSynP{} -> __IMPOSSIBLE__
+      A.WithP{}       -> __IMPOSSIBLE__
+
+
+-- | The loop (tail-recursive): split at a variable in the problem until problem is solved
+checkLHS
+  :: forall tcm a. (MonadTCM tcm, MonadWriter Blocked_ tcm, HasConstInfo tcm, MonadError TCErr tcm, MonadDebug tcm)
+  => Maybe QName      -- ^ The name of the definition we are checking.
+  -> LHSState a       -- ^ The current state.
+  -> tcm a
+checkLHS mf st@(LHSState tel ip problem target) = do
+  if isSolvedProblem problem then
+    liftTCM $ (problem ^. problemCont) st
+  else do
+    unlessM (optPatternMatching <$> gets getPragmaOptions) $
+      unless (problemAllVariables problem) $
+        typeError $ GenericError $ "Pattern matching is disabled"
+
+    let splitsToTry = splitStrategy $ problem ^. problemEqs
+
+    foldr trySplit trySplitRest splitsToTry >>= \case
+      Right st' -> do
+        -- If the new target type is irrelevant, we need to continue in irr. cxt.
+        -- (see Issue 939).
+        let rel = getRelevance $ st' ^. lhsTarget
+        applyRelevanceToContext rel $ checkLHS mf st'
+
+      -- If no split works, give error from first split.
+      -- This is conservative, but might not be the best behavior.
+      -- It might be better to print all the errors instead.
+      Left (err:_) -> throwError err
+      Left []      -> __IMPOSSIBLE__
+
+  where
+
+    trySplit :: ProblemEq
+             -> tcm (Either [TCErr] (LHSState a))
+             -> tcm (Either [TCErr] (LHSState a))
+    trySplit eq tryNextSplit = runExceptT (splitArg eq) >>= \case
+      Right st' -> return $ Right st'
+      Left err  -> left (err:) <$> tryNextSplit
+
+    -- If there are any remaining user patterns, try to split on them
+    trySplitRest :: tcm (Either [TCErr] (LHSState a))
+    trySplitRest = case problem ^. problemRestPats of
+      []    -> return $ Left []
+      (p:_) -> left singleton <$> runExceptT (splitRest p)
+
+    splitArg :: ProblemEq -> ExceptT TCErr tcm (LHSState a)
+    -- Split on constructor/literal pattern
+    splitArg (ProblemEq p v (Dom _ a)) = traceCall (CheckPattern p tel a) $ do
+
+      reportSDoc "tc.lhs.split" 30 $ sep
+        [ text "split looking at pattern"
+        , nest 2 $ text "p =" <+> prettyA p
+        ]
+
+      -- in order to split, v must be a variable.
+      i <- liftTCM $ addContext tel $ ifJustM (isEtaVar v a) return $
+             softTypeError $ SplitOnNonVariable v a
+
+      let pos = size tel - (i+1)
+          (delta1, tel'@(ExtendTel dom adelta2)) = splitTelescopeAt pos tel
+
+      p <- liftTCM $ expandLitPattern p
+      case snd $ asView p of
+        (A.LitP l)        -> splitLit delta1 dom adelta2 l
+        p@A.RecP{}        -> splitCon delta1 dom adelta2 p Nothing
+        p@(A.ConP _ c ps) -> splitCon delta1 dom adelta2 p $ Just c
+
+        A.VarP{}        -> __IMPOSSIBLE__
+        A.WildP{}       -> __IMPOSSIBLE__
+        A.DotP{}        -> __IMPOSSIBLE__
+        A.AbsurdP{}     -> __IMPOSSIBLE__
+        A.ProjP{}       -> __IMPOSSIBLE__
+        A.DefP{}        -> __IMPOSSIBLE__
+        A.AsP{}         -> __IMPOSSIBLE__
+        A.PatternSynP{} -> __IMPOSSIBLE__
+        A.WithP{}       -> __IMPOSSIBLE__
+
+
+    splitRest :: NamedArg A.Pattern -> ExceptT TCErr tcm (LHSState a)
+    splitRest p = setCurrentRange p $ do
+      reportSDoc "tc.lhs.split" 20 $ sep
+        [ text "splitting problem rest"
+        , nest 2 $ text "projection pattern =" <+> prettyA p
+        , nest 2 $ text "eliminates type    =" <+> prettyTCM target
+        ]
+      reportSDoc "tc.lhs.split" 80 $ sep
+        [ nest 2 $ text $ "projection pattern (raw) = " ++ show p
+        ]
+
+      -- @p@ should be a projection pattern projection from @target@
+      (orig, ambProjName) <- ifJust (A.maybePostfixProjP p) return $
+        addContext tel $ softTypeError $ CannotEliminateWithPattern p (unArg target)
+
+      (projName, projType) <- suspendErrors $
+        addContext tel $ disambiguateProjection (getHiding p) ambProjName target
+
+      -- Compute the new rest type by applying the projection type to 'self'.
+      -- Note: we cannot be in a let binding.
+      f <- ifJust mf return $ hardTypeError $
+             GenericError "Cannot use copatterns in a let binding"
+      let self = Def f $ patternsToElims ip
+      target' <- traverse (`piApply1` self) projType
+
+      -- Compute the new state
+      let projP    = target' $> Named Nothing (ProjP orig projName)
+          ip'      = ip ++ [projP]
+          -- drop the projection pattern (already splitted)
+          problem' = over problemRestPats tail problem
+      liftTCM $ updateProblemRest (LHSState tel ip' problem' target')
+
+
+    splitLit :: Telescope     -- ^ The types of arguments before the one we split on
+             -> Dom Type      -- ^ The type of the literal we split on
+             -> Abs Telescope -- ^ The types of arguments after the one we split on
+             -> Literal       -- ^ The literal written by the user
+             -> ExceptT TCErr tcm (LHSState a)
+    splitLit delta1 dom@(Dom info a) adelta2 lit = do
+      let delta2 = absApp adelta2 (Lit lit)
+          delta' = abstract delta1 delta2
+          rho    = singletonS (size delta2) (LitP lit)
+          -- Andreas, 2015-06-13 Literals are closed, so no need to raise them!
+          -- rho    = liftS (size delta2) $ singletonS 0 (Lit lit)
+          -- rho    = [ var i | i <- [0..size delta2 - 1] ]
+          --       ++ [ raise (size delta2) $ Lit lit ]
+          --       ++ [ var i | i <- [size delta2 ..] ]
+          eqs'     = applyPatSubst rho $ problem ^. problemEqs
+          ip'      = applySubst rho ip
+          target'  = applyPatSubst rho target
+
+      -- Andreas, 2010-09-07 cannot split on irrelevant args
+      when (unusableRelevance $ getRelevance info) $
+        addContext delta1 $ hardTypeError $ SplitOnIrrelevant dom
+
+      -- check that a is indeed the type of lit (otherwise fail softly)
+      -- if not, fail softly since it could be instantiated by a later split.
+      suspendErrors $ equalType a =<< litType lit
+
+      -- Compute the new state
+      eqs' <- liftTCM $ addContext delta' $ updateProblemEqs eqs'
+      let problem' = set problemEqs eqs' problem
+      liftTCM $ updateProblemRest (LHSState delta' ip' problem' target')
+
+
+    splitCon :: Telescope     -- ^ The types of arguments before the one we split on
+             -> Dom Type      -- ^ The type of the constructor we split on
+             -> Abs Telescope -- ^ The types of arguments after the one we split on
+             -> A.Pattern     -- ^ The pattern written by the user
+             -> Maybe AmbiguousQName  -- ^ @Just c@ for a (possibly ambiguous) constructor @c@, or
+                                      --   @Nothing@ for a record pattern
+             -> ExceptT TCErr tcm (LHSState a)
+    splitCon delta1 dom@(Dom info a) adelta2 focusPat ambC = do
+      let delta2 = absBody adelta2
+
+      reportSDoc "tc.lhs.split" 10 $ vcat
+        [ text "checking lhs"
+        , nest 2 $ text "tel =" <+> prettyTCM tel
+        , nest 2 $ text "rel =" <+> (text $ show $ getRelevance info)
+        ]
+
+      reportSDoc "tc.lhs.split" 15 $ vcat
+        [ text "split problem"
+        , nest 2 $ vcat
+          [ text "delta1 = " <+> prettyTCM delta1
+          , text "a      = " <+> addContext delta1 (prettyTCM a)
+          , text "delta2 = " <+> addContext delta1 (addContext ("x", dom) (prettyTCM delta2))
+          ]
+        ]
+
+      -- We should be at a data/record type
+      (d, pars, ixs) <- addContext delta1 $ isDataOrRecordType dom
+
+      checkSortOfSplitVar a
+
+      -- The constructor should construct an element of this datatype
+      (c, b) <- liftTCM $ addContext delta1 $ case ambC of
+        Just ambC -> disambiguateConstructor ambC d pars
+        Nothing   -> getRecordConstructor d pars a
+
+      -- Don't split on lazy constructor
+      case focusPat of
+        A.ConP cpi _ _ | patLazy cpi -> softTypeError $
+          ForcedConstructorNotInstantiated focusPat
+        _ -> return ()
+
+      -- The type of the constructor will end in an application of the datatype
+      TelV gamma (El _ ctarget) <- liftTCM $ telView b
+      let Def d' es' = ctarget
+          cixs = drop (size pars) $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es'
+
+      unless (d == d') {-'-} __IMPOSSIBLE__
+
+      -- Get names for the constructor arguments from the user patterns
+      gamma <- liftTCM $ case focusPat of
+        A.ConP _ _ ps -> do
+          ps <- insertImplicitPatterns ExpandLast ps gamma
+          return $ useNamesFromPattern ps gamma
+        A.RecP _ fs -> do
+          axs <- recordFieldNames . theDef <$> getConstInfo d
+          ps <- insertMissingFields d (const $ A.WildP patNoRange) fs axs
+          ps <- insertImplicitPatterns ExpandLast ps gamma
+          return $ useNamesFromPattern ps gamma
+        _ -> __IMPOSSIBLE__
+
+      -- Andreas 2010-09-07  propagate relevance info to new vars
+      let updRel = composeRelevance (getRelevance info)
+      gamma <- return $ mapRelevance updRel <$> gamma
+
+      -- Get the type of the datatype.
+      da <- (`piApply` pars) . defType <$> getConstInfo d
+      reportSDoc "tc.lhs.split" 30 $ text "  da = " <+> prettyTCM da
+
+      reportSDoc "tc.lhs.top" 15 $ addContext delta1 $
+        sep [ text "preparing to unify"
+            , nest 2 $ vcat
+              [ text "c      =" <+> prettyTCM c <+> text ":" <+> prettyTCM b
+              , text "d      =" <+> prettyTCM (Def d (map Apply pars)) <+> text ":" <+> prettyTCM da
+              , text "gamma  =" <+> prettyTCM gamma
+              , text "pars   =" <+> brackets (fsep $ punctuate comma $ map prettyTCM pars)
+              , text "ixs    =" <+> brackets (fsep $ punctuate comma $ map prettyTCM ixs)
+              , text "cixs   =" <+> addContext gamma (brackets (fsep $ punctuate comma $ map prettyTCM cixs))
+              ]
+            ]
+
+      let delta1Gamma = delta1 `abstract` gamma
+          da'  = raise (size gamma) da
+          ixs' = raise (size gamma) ixs
+
+      -- All variables are flexible.
+      let flex = allFlexVars $ delta1Gamma
+
+      -- Unify constructor target and given type (in Δ₁Γ)
+      -- Given: Δ₁  ⊢ D pars : Φ → Setᵢ
+      --        Δ₁  ⊢ c      : Γ → D pars cixs
+      --        Δ₁  ⊢ ixs    : Φ
+      --        Δ₁Γ ⊢ cixs   : Φ
+      -- unification of ixs and cixs in context Δ₁Γ gives us a telescope Δ₁'
+      -- and a substitution ρ₀ such that
+      --        Δ₁' ⊢ ρ₀ : Δ₁Γ
+      --        Δ₁' ⊢ (ixs)ρ₀ ≡ (cixs)ρ₀ : Φρ₀
+      -- We can split ρ₀ into two parts ρ₁ and ρ₂, giving
+      --        Δ₁' ⊢ ρ₁ : Δ₁
+      --        Δ₁' ⊢ ρ₂ : Γρ₁
+      -- Application of the constructor c gives
+      --        Δ₁' ⊢ c ρ₂ : (D pars cixs)(ρ₁;ρ₂)
+      -- We have
+      --        cixs(ρ₁;ρ₂)
+      --         ≡ cixs(ρ₀)   (since ρ₀=ρ₁;ρ₂)
+      --         ≡ ixs(ρ₀)    (by unification)
+      --         ≡ ixs(ρ₁)    (since ixs doesn't actually depend on Γ)
+      -- so     Δ₁' ⊢ c ρ₂ : (D pars ixs)ρ₁
+      -- Putting this together with ρ₁ gives ρ₃ = ρ₁;c ρ₂
+      --        Δ₁' ⊢ ρ₁;c ρ₂ : Δ₁(x : D vs ws)
+      -- and lifting over Δ₂ gives the final substitution ρ = ρ₃;Δ₂
+      -- from Δ' = Δ₁';Δ₂ρ₃
+      --        Δ' ⊢ ρ : Δ₁(x : D vs ws)Δ₂
+
+      liftTCM (unifyIndices delta1Gamma flex da' cixs ixs') >>= \case
+
+        -- Mismatch.  Report and abort.
+        NoUnify neg -> hardTypeError $ ImpossibleConstructor (conName c) neg
+
+        -- Unclear situation.  Try next split.
+        DontKnow errs -> softTypeError $ SplitError $
+          UnificationStuck (conName c) (delta1 `abstract` gamma) cixs ixs' errs
+
+        -- Success.
+        Unifies (delta1',rho0,es) -> do
+
+          reportSDoc "tc.lhs.top" 15 $ text "unification successful"
+          reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat
+            [ text "delta1' =" <+> prettyTCM delta1'
+            , text "rho0    =" <+> addContext delta1' (prettyTCM rho0)
+            , text "es      =" <+> addContext delta1' (prettyTCM $ (fmap . fmap . fmap) patternToTerm es)
+            ]
+
+          -- split substitution into part for Δ₁ and part for Γ
+          let (rho1,rho2) = splitS (size gamma) rho0
+
+          reportSDoc "tc.lhs.top" 20 $ addContext delta1' $ nest 2 $ vcat
+            [ text "rho1    =" <+> prettyTCM rho1
+            , text "rho2    =" <+> prettyTCM rho2
+            ]
+
+          -- Andreas, 2010-09-09, save the type.
+          -- It is relative to Δ₁, but it should be relative to Δ₁'
+          let a' = applyPatSubst rho1 a
+          -- Also remember if we are a record pattern.
+          isRec <- isRecord d
+          let cpi = ConPatternInfo { conPRecord = isRec $> PatOCon
+                                   , conPType   = Just $ Arg info a'
+                                   , conPLazy   = False }
+
+          -- compute final context and substitution
+          let crho2   = ConP c cpi $ applySubst rho2 $ teleNamedArgs gamma
+              rho3    = consS crho2 rho1
+              delta2' = applyPatSubst rho3 delta2
+              delta'  = delta1' `abstract` delta2'
+              rho     = liftS (size delta2) rho3
+
+          reportSDoc "tc.lhs.top" 20 $ addContext delta1' $ nest 2 $ vcat
+            [ text "crho2   =" <+> prettyTCM crho2
+            , text "rho3    =" <+> prettyTCM rho3
+            , text "delta2' =" <+> prettyTCM delta2'
+            ]
+          reportSDoc "tc.lhs.top" 70 $ addContext delta1' $ nest 2 $ vcat
+            [ text "crho2   =" <+> pretty crho2
+            , text "rho3    =" <+> pretty rho3
+            , text "delta2' =" <+> pretty delta2'
+            ]
+
+          reportSDoc "tc.lhs.top" 15 $ nest 2 $ vcat
+            [ text "delta'  =" <+> prettyTCM delta'
+            , text "rho     =" <+> addContext delta' (prettyTCM rho)
+            ]
+
+          -- Compute the new out patterns and target type.
+          let ip'      = applySubst rho ip
+              target'  = applyPatSubst rho target
+
+          -- Update the problem equations
+          let eqs' = applyPatSubst rho $ problem ^. problemEqs
+          eqs' <- liftTCM $ addContext delta' $ updateProblemEqs eqs'
+
+          let problem' = set problemEqs eqs' problem
+
+          -- if rest type reduces,
+          -- extend the split problem by previously not considered patterns
+          st' <- liftTCM $ updateProblemRest $ LHSState delta' ip' problem' target'
+
+          reportSDoc "tc.lhs.top" 12 $ sep
+            [ text "new problem from rest"
+            , nest 2 $ vcat
+              [ text "delta'  =" <+> prettyTCM (st' ^. lhsTel)
+              , text "eqs'    =" <+> addContext (st' ^. lhsTel) (prettyTCM $ st' ^. lhsProblem ^. problemEqs)
+              , text "ip'     =" <+> addContext (st' ^. lhsTel) (pretty $ st' ^. lhsOutPat)
+              ]
+            ]
+          return st'
+
+
+
+
+-- | Ensures that we are not performing pattern matching on codata.
+
+noPatternMatchingOnCodata :: [NamedArg DeBruijnPattern] -> TCM ()
+noPatternMatchingOnCodata = mapM_ (check . namedArg)
+  where
+  check (VarP {})   = return ()
+  check (DotP {})   = return ()
+  check (ProjP{})   = return ()
+  check (LitP {})   = return ()  -- Literals are assumed not to be coinductive.
+  check (ConP con _ ps) = do
+    reportSDoc "tc.lhs.top" 40 $
+      text "checking whether" <+> prettyTCM con <+> text "is a coinductive constructor"
+    TelV _ t <- telView' . defType <$> do getConstInfo $ conName con
+    c <- isCoinductive t
+    case c of
+      Nothing    -> __IMPOSSIBLE__
+      Just False -> mapM_ (check . namedArg) ps
+      Just True  -> typeError $
+        GenericError "Pattern matching on coinductive types is not allowed"
+
+-- | When working with a monad @m@ implementing @MonadTCM@ and @MonadError TCErr@,
+--   @suspendErrors f@ performs the TCM action @f@ but catches any errors and throws
+--   them in the monad @m@ instead.
+suspendErrors :: (MonadTCM m, MonadError TCErr m) => TCM a -> m a
+suspendErrors f = do
+  ok <- liftTCM $ (Right <$> f) `catchError` (return . Left)
+  either throwError return ok
+
+-- | A more direct implementation of the specification
+--   @softTypeError err == suspendErrors (typeError err)@
+softTypeError :: (MonadTCM m, MonadError TCErr m) => TypeError -> m a
+softTypeError err = throwError =<< typeError_ err
+
+-- | A convenient alias for @liftTCM . typeError@. Throws the error directly
+--   in the TCM even if there is a surrounding monad also implementing
+--   @MonadError TCErr@.
+hardTypeError :: (MonadTCM m) => TypeError -> m a
+hardTypeError = liftTCM . typeError
+
+-- | Check if the type is a data or record type and return its name,
+--   definition, parameters, and indices. Fails softly if the type could become
+--   a data/record type by instantiating a variable/metavariable, or fail hard
+--   otherwise.
+isDataOrRecordType :: (MonadTCM m, MonadDebug m)
+                   => Dom Type -> ExceptT TCErr m (QName, Args, Args)
+isDataOrRecordType dom@(Dom info a) = liftTCM (reduceB a) >>= \case
+  NotBlocked ReallyNotBlocked a -> case unEl a of
+
+    -- Subcase: split type is a Def.
+    Def d es -> (liftTCM $ theDef <$> getConstInfo d) >>= \case
+
+      Datatype{dataPars = np} -> do
+        -- We cannot split on (shape-)irrelevant non-records.
+        -- Andreas, 2011-10-04 unless allowed by option
+        reportSLn "tc.lhs.split" 30 $ "split ConP: relevance is " ++ show (getRelevance info)
+        when (unusableRelevance $ getRelevance info) $
+          unlessM (liftTCM $ optExperimentalIrrelevance <$> pragmaOptions) $
+            hardTypeError $ SplitOnIrrelevant dom
+
+        let (pars, ixs) = splitAt np $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es
+        return (d, pars, ixs)
+
+      Record{} -> do
+        let pars = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
+        return (d, pars, [])
+
+      -- Issue #2253: the data type could be abstract.
+      AbstractDefn{} -> hardTypeError . GenericDocError =<< do
+        liftTCM $ text "Cannot split on abstract data type" <+> prettyTCM d
+
+      -- the type could be an axiom
+      Axiom{} -> hardTypeError =<< notData
+
+      -- Issue #2997: the type could be a Def that does not reduce for some reason
+      -- (abstract, failed termination checking, NON_TERMINATING, ...)
+      Function{}    -> hardTypeError =<< notData
+
+      Constructor{} -> __IMPOSSIBLE__
+      Primitive{}   -> __IMPOSSIBLE__
+
+    -- variable or metavariable: fail softly
+    Var{}      -> softTypeError =<< notData
+    MetaV{}    -> softTypeError =<< notData
+
+    -- pi or sort: fail hard
+    Pi{}       -> hardTypeError =<< notData
+    Sort{}     -> hardTypeError =<< notData
+
+    Lam{}      -> __IMPOSSIBLE__
+    Lit{}      -> __IMPOSSIBLE__
+    Con{}      -> __IMPOSSIBLE__
+    Level{}    -> __IMPOSSIBLE__
+    DontCare{} -> __IMPOSSIBLE__
+
+  -- Type is blocked on a meta or something else: fail softly
+  _ -> softTypeError =<< notData
+
+  where notData = liftTCM $ SplitError . NotADatatype <$> buildClosure a
+
+
+-- | Get the constructor of the given record type together with its type.
+--   Throws an error if the type is not a record type.
+getRecordConstructor
+  :: QName  -- ^ Name @d@ of the record type
+  -> Args   -- ^ Parameters @pars@ of the record type
+  -> Type   -- ^ The record type @Def d pars@ (for error reporting)
+  -> TCM (ConHead, Type)
+getRecordConstructor d pars a = do
+  con <- (theDef <$> getConstInfo d) >>= \case
+    Record{recConHead = con} -> return $ killRange con
+    _ -> typeError $ ShouldBeRecordType a
+  b <- (`piApply` pars) . defType <$> getConstInfo (conName con)
+  return (con, b)
+
+
+-- | Disambiguate a projection based on the record type it is supposed to be
+--   projecting from. Returns the unambiguous projection name and its type.
+--   Throws an error if the type is not a record type.
+disambiguateProjection
+  :: Hiding         -- ^ Hiding info of the projection's principal argument.
+  -> AmbiguousQName -- ^ Name of the projection to be disambiguated.
+  -> Arg Type       -- ^ Record type we are projecting from.
+  -> TCM (QName, Arg Type)
+disambiguateProjection h ambD@(AmbQ ds) b = do
+  -- If the target is not a record type, that's an error.
+  -- It could be a meta, but since we cannot postpone lhs checking, we crash here.
+  caseMaybeM (liftTCM $ isRecordType $ unArg b) notRecord $ \(r, vs, def) -> case def of
+    Record{ recFields = fs } -> do
+      reportSDoc "tc.lhs.split" 20 $ sep
+        [ text $ "we are of record type r  = " ++ prettyShow r
+        , text   "applied to parameters vs = " <+> prettyTCM vs
+        , text $ "and have fields       fs = " ++ prettyShow fs
+        ]
+      -- Try the projection candidates.
+      -- Note that tryProj wraps TCM in an ExceptT, collecting errors
+      -- instead of throwing them to the user immediately.
+      -- First, we try to find a disambiguation that doesn't produce
+      -- any new constraints.
+      disambiguations <- mapM (runExceptT . tryProj False fs r vs) ds
+      case partitionEithers $ toList disambiguations of
+        (_ , (d,a):_) -> do
+          -- From here, we have the correctly disambiguated projection.
+          -- For highlighting, we remember which name we disambiguated to.
+          -- This is safe here (fingers crossed) as we won't decide on a
+          -- different projection even if we backtrack and come here again.
+          liftTCM $ storeDisambiguatedName d
+          return (d,a)
+        (_ , []     ) -> do
+          -- If this fails, we try again with constraints, but we require
+          -- the solution to be unique.
+          disambiguations <- mapM (runExceptT . tryProj True fs r vs) ds
+          case partitionEithers $ toList disambiguations of
+            ([]   , []      ) -> __IMPOSSIBLE__
+            (err:_, []      ) -> throwError err
+            (errs , [(d,a)]) -> do
+              liftTCM $ storeDisambiguatedName d
+              return (d,a)
+            (errs , disambs@((d,a):_)) -> typeError . GenericDocError =<< vcat
+              [ text "Ambiguous projection " <> prettyTCM (qnameName d) <> text "."
+              , text "It could refer to any of"
+              , nest 2 $ vcat $ map showDisamb disambs
+              ]
+    _ -> __IMPOSSIBLE__
+
+  where
+    showDisamb (d,_) =
+      let r = head $ filter (noRange /=) $ map nameBindingSite $ reverse $ mnameToList $ qnameModule d
+      in  (pretty =<< dropTopLevelModule d) <+> text "(introduced at " <> prettyTCM r <> text ")"
+
+    notRecord = wrongProj $ headNe ds
+
+    wrongProj :: (MonadTCM m, MonadError TCErr m) => QName -> m a
+    wrongProj d = softTypeError =<< do
+      liftTCM $ GenericDocError <$> sep
+        [ text "Cannot eliminate type "
+        , prettyTCM (unArg b)
+        , text " with projection "
+        , if isAmbiguous ambD then
+            text . prettyShow =<< dropTopLevelModule d
+          else
+            prettyTCM d
+        ]
+
+    wrongHiding :: (MonadTCM m, MonadError TCErr m) => QName -> m a
+    wrongHiding d = softTypeError =<< do
+      liftTCM $ GenericDocError <$> sep
+        [ text "Wrong hiding used for projection " , prettyTCM d ]
+
+    tryProj
+      :: Bool                 -- ^ Are we allowed to create new constraints?
+      -> [Arg QName]          -- ^ Fields of record type under consideration.
+      -> QName                -- ^ Name of record type we are eliminating.
+      -> Args                 -- ^ Parameters of record type we are eliminating.
+      -> QName                -- ^ Candidate projection.
+      -> ExceptT TCErr TCM (QName, Arg Type)
+    tryProj constraintsOk fs r vs d0 = isProjection d0 >>= \case
+      -- Not a projection
+      Nothing -> wrongProj d0
+      Just proj -> do
+        let d = projOrig proj
+
+        -- Andreas, 2015-05-06 issue 1413 projProper=Nothing is not impossible
+        qr <- maybe (wrongProj d) return $ projProper proj
+
+        -- If projIndex==0, then the projection is already applied
+        -- to the record value (like in @open R r@), and then it
+        -- is no longer a projection but a record field.
+        when (null $ projLams proj) $ wrongProj d
+        reportSLn "tc.lhs.split" 90 "we are a projection pattern"
+        -- If the target is not a record type, that's an error.
+        -- It could be a meta, but since we cannot postpone lhs checking, we crash here.
+        reportSDoc "tc.lhs.split" 20 $ sep
+          [ text $ "proj                  d0 = " ++ prettyShow d0
+          , text $ "original proj         d  = " ++ prettyShow d
+          ]
+        -- Get the field decoration.
+        -- If the projection pattern name @d@ is not a field name,
+        -- we have to try the next projection name.
+        -- If this was not an ambiguous projection, that's an error.
+        argd <- maybe (wrongProj d) return $ List.find ((d ==) . unArg) fs
+
+        let ai = setRelevance (getRelevance argd) $ projArgInfo proj
+
+        -- Andreas, 2016-12-31, issue #2374:
+        -- We can also disambiguate by hiding info.
+        unless (sameHiding h ai) $ wrongHiding d
+
+        -- Andreas, 2016-12-31, issue #1976: Check parameters.
+        suspendErrors $ applyUnless constraintsOk noConstraints $
+          checkParameters qr r vs
+
+        -- Get the type of projection d applied to "self"
+        dType <- liftTCM $ defType <$> getConstInfo d  -- full type!
+        reportSDoc "tc.lhs.split" 20 $ sep
+          [ text "we are being projected by dType = " <+> prettyTCM dType
+          ]
+        projType <- liftTCM $ dType `piApplyM` vs
+        return (d0 , Arg ai projType)
+
+-- | Disambiguate a constructor based on the data type it is supposed to be
+--   constructing. Returns the unambiguous constructor name and its type.
+--   Precondition: type should be a data/record type.
+disambiguateConstructor
+  :: AmbiguousQName    -- ^ The name of the constructor to be disambiguated.
+  -> QName             -- ^ Name of the datatype.
+  -> Args              -- ^ Parameters of the datatype
+  -> TCM (ConHead, Type)
+disambiguateConstructor ambC@(AmbQ cs) d pars = do
+  d <- canonicalName d
+  cons <- theDef <$> getConstInfo d >>= \case
+    def@Datatype{} -> return $ dataCons def
+    def@Record{}   -> return $ [conName $ recConHead def]
+    _              -> __IMPOSSIBLE__
+
+  disambiguations <- mapM (runExceptT . tryCon False cons d pars) cs -- TODO: be more lazy
+  case partitionEithers $ toList disambiguations of
+    (_ , (c0,c,a):_) -> do
+      -- If constructor pattern was ambiguous,
+      -- remember our choice for highlighting info.
+      when (isAmbiguous ambC) $ liftTCM $ storeDisambiguatedName c0
+      return (c,a)
+    (_ , []     ) -> do
+      disambiguations <- mapM (runExceptT . tryCon True cons d pars) cs
+      case partitionEithers $ toList disambiguations of
+        ([]   , []        ) -> __IMPOSSIBLE__
+        (err:_, []        ) -> throwError err
+        (errs , [(c0,c,a)]) -> do
+          when (isAmbiguous ambC) $ liftTCM $ storeDisambiguatedName c0
+          return (c,a)
+
+        (errs , disambs@((c0,c,a):_)) -> typeError . GenericDocError =<< vcat
+          [ text "Ambiguous constructor " <> prettyTCM (qnameName $ conName c) <> text "."
+          , text "It could refer to any of"
+          , nest 2 $ vcat $ map showDisamb disambs
+          ]
+
+  where
+    showDisamb (c0,_,_) =
+      let r = head $ filter (noRange /=) $ map nameBindingSite $ reverse $ mnameToList $ qnameModule c0
+      in  (pretty =<< dropTopLevelModule c0) <+> text "(introduced at " <> prettyTCM r <> text ")"
+
+    abstractConstructor c = softTypeError $
+      AbstractConstructorNotInScope c
+
+    wrongDatatype c d = softTypeError $
+      ConstructorPatternInWrongDatatype c d
+
+    tryCon
+      :: Bool        -- ^ Are we allowed to create new constraints?
+      -> [QName]     -- ^ Constructors of data type under consideration.
+      -> QName       -- ^ Name of data/record type we are eliminating.
+      -> Args        -- ^ Parameters of data/record type we are eliminating.
+      -> QName       -- ^ Candidate constructor.
+      -> ExceptT TCErr TCM (QName, ConHead, Type)
+    tryCon constraintsOk cons d pars c = getConstInfo' c >>= \case
+      Left (SigUnknown err) -> __IMPOSSIBLE__
+      Left SigAbstract -> abstractConstructor c
+      Right def -> do
+        let con = conSrcCon $ theDef def
+        unless (conName con `elem` cons) $ wrongDatatype c d
+
+        -- Andreas, 2013-03-22 fixing issue 279
+        -- To resolve ambiguous constructors, Agda always looks up
+        -- their original definition and reconstructs the parameters
+        -- from the type @Def d vs@ we check against.
+        -- However, the constructor could come from a module instantiation
+        -- with some of the parameters already fixed.
+        -- Agda did not make sure the two parameter lists coincide,
+        -- so we add a check here.
+        -- I guess this issue could be solved more systematically,
+        -- but the extra check here is non-invasive to the existing code.
+        -- Andreas, 2016-12-31 fixing issue #1975
+        -- Do this also for constructors which were originally ambiguous.
+        suspendErrors $ applyUnless constraintsOk noConstraints $
+          checkConstructorParameters c d pars
+
+        -- Get the type from the original constructor
+        cType <- (`piApply` pars) . defType <$> getConInfo con
+
+        return (c, con, cType)
+
+
+
+
+-- | @checkConstructorParameters c d pars@ checks that the data/record type
+--   behind @c@ is has initial parameters (coming e.g. from a module instantiation)
+--   that coincide with an prefix of @pars@.
+checkConstructorParameters :: MonadTCM tcm => QName -> QName -> Args -> tcm ()
+checkConstructorParameters c d pars = do
+  dc <- liftTCM $ getConstructorData c
+  checkParameters dc d pars
+
+-- | Check that given parameters match the parameters of the inferred
+--   constructor/projection.
+checkParameters
+  :: MonadTCM tcm
+  => QName  -- ^ The record/data type name of the chosen constructor/projection.
+  -> QName  -- ^ The record/data type name as supplied by the type signature.
+  -> Args   -- ^ The parameters.
+  -> tcm ()
+checkParameters dc d pars = liftTCM $ do
+  a  <- reduce (Def dc [])
+  case a of
+    Def d0 es -> do -- compare parameters
+      let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
+      reportSDoc "tc.lhs.split" 40 $
+        vcat [ nest 2 $ text "d                   =" <+> (text . prettyShow) d
+             , nest 2 $ text "d0 (should be == d) =" <+> (text . prettyShow) d0
+             , nest 2 $ text "dc                  =" <+> (text . prettyShow) dc
+             , nest 2 $ text "vs                  =" <+> prettyTCM vs
+             ]
+      -- when (d0 /= d) __IMPOSSIBLE__ -- d could have extra qualification
+      t <- typeOfConst d
+      compareArgs [] [] t (Def d []) vs (take (length vs) pars)
+    _ -> __IMPOSSIBLE__
+
+checkSortOfSplitVar :: (MonadTCM tcm, MonadError TCErr tcm, LensSort a) => a -> tcm ()
+checkSortOfSplitVar a = liftTCM (reduce $ getSort a) >>= \case
+  Type{} -> return ()
+  _      -> softTypeError =<< do
+    liftTCM $ GenericDocError <$> sep
+      [ text "Cannot split on datatype in sort" , prettyTCM (getSort a) ]
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/AsPatterns.hs b/src/full/Agda/TypeChecking/Rules/LHS/AsPatterns.hs
deleted file mode 100644
--- a/src/full/Agda/TypeChecking/Rules/LHS/AsPatterns.hs
+++ /dev/null
@@ -1,90 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module Agda.TypeChecking.Rules.LHS.AsPatterns
-  ( recoverAsPatterns ) where
-
-import Control.Applicative
-import Control.Monad.Writer hiding ((<>))
-import qualified Data.Foldable as Fold
-
-import Agda.Syntax.Common
-import Agda.Syntax.Concrete ()
-import Agda.Syntax.Internal
-import Agda.Syntax.Internal.Pattern
-import Agda.Syntax.Abstract.Pattern ( containsAsPattern )
-import qualified Agda.Syntax.Abstract as A
-
-import Agda.TypeChecking.Monad
-import Agda.TypeChecking.Telescope
-import Agda.TypeChecking.Rules.LHS.Problem
-import Agda.TypeChecking.Rules.LHS.Implicit
-import Agda.TypeChecking.Datatypes
-import Agda.TypeChecking.Records
-import Agda.TypeChecking.Substitute
-import Agda.TypeChecking.Pretty
-import Agda.TypeChecking.Reduce
-
-import Agda.Utils.Functor
-import Agda.Utils.Maybe
-import Agda.Utils.Size
-import Agda.Utils.Impossible
-#include "undefined.h"
-
-recoverAsPatterns :: Telescope -> Type -> Term -> [NamedArg A.Pattern] -> [NamedArg DeBruijnPattern] -> TCM [AsBinding]
-recoverAsPatterns delta a self ps qs = do
-  let es = patternsToElims qs
-  as <- typeElims (raise (size delta) a) self es
-  ps <- insertImplicitPatternsT DontExpandLast ps a
-  reportSDoc "tc.lhs.as" 30 $ vcat
-    [ text "recovering as patterns"
-    , nest 2 $ vcat [ text "es =" <+> prettyList (map prettyTCM es)
-                    , text "as =" <+> prettyList (map prettyTCM as)
-                    , text "ps =" <+> prettyList (map prettyA ps) ]
-    ]
-  execWriterT $ asPatterns as ps es
-
-asPatterns :: [ElimType] -> [NamedArg A.Pattern] -> [Elim] -> WriterT [AsBinding] TCM ()
-asPatterns _ [] _ = return ()
-asPatterns (ProjT _ a : as) (p : ps) (Proj{} : vs) = do
-  unless (isJust $ A.maybePostfixProjP p) __IMPOSSIBLE__  -- sanity check
-  ps <- lift $ insertImplicitPatternsT DontExpandLast ps a
-  asPatterns as ps vs
-asPatterns (ArgT dom : as) (p : ps) (Apply v : vs)
-  | not $ containsAsPattern p = asPatterns as ps vs
-  | otherwise = do
-    let a = unDom dom
-    case namedArg p of
-      A.AsP _ x p' -> do
-        tell [AsB x (unArg v) a]
-        asPatterns (ArgT dom : as) (fmap (p' <$) p : ps) (Apply v : vs)
-      A.ConP _ _ ps' -> do
-        (_, _, tel, as', args) <- lift $ conPattern a (unArg v)
-        ps' <- lift $ insertImplicitPatterns ExpandLast ps' tel
-        asPatterns (map ArgT as' ++ as) (ps' ++ ps) (map Apply args ++ vs)
-      A.RecP i fps -> do
-        (r, c, _, as', args) <- lift $ conPattern a (unArg v)
-        let fs  = zipWith (<$) (map (nameConcrete . qnameName) $ conFields c) args
-        ps' <- lift $ insertMissingFields r (const $ A.WildP i) fps fs
-        asPatterns (map ArgT as' ++ as) (ps' ++ ps) (map Apply args ++ vs)
-      A.DefP{} -> __IMPOSSIBLE__ -- ?
-      _ -> __IMPOSSIBLE__
-asPatterns _ _ _ = __IMPOSSIBLE__
-
--- | Given a fully applied constructor term and its type,
---   deconstruct it and return, amongst others, the types of its arguments.
-conPattern
-  :: Type  -- ^ Type need not be reduced.
-  -> Term  -- ^ Fully applied constructor.
-  -> TCM (QName, ConHead, Telescope, [Dom Type], Args)
-       -- ^ Data/record type name,
-       --   constructor name,
-       --   argument telescope,
-       --   types of arguments.
-       --   arguments.
-conPattern a (Con c ci args) = do
-  -- @getFullyAppliedConType@ works since @c@ is fully applied.
-  ((d, _, _), ca) <- fromMaybe __IMPOSSIBLE__ <.> getFullyAppliedConType c =<< reduce a
-  TelV tel _ <- telView ca
-  let as = fromMaybe __IMPOSSIBLE__ $ typeArgsWithTel tel $ map unArg args
-  return (d, c, tel, as, args)
-conPattern _ _ = __IMPOSSIBLE__
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
@@ -33,53 +33,6 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
--- | Insert implicit patterns in a problem.
-insertImplicitProblem :: Problem -> TCM Problem
-insertImplicitProblem (Problem ps qs tel pr) = do
-  reportSDoc "tc.lhs.imp" 15 $
-    sep [ text "insertImplicits"
-        , nest 2 $ text "ps  = " <+> do brackets $ fsep $ punctuate comma $ map prettyA ps
-        , nest 2 $ text "tel = " <+> prettyTCM tel
-        ]
-  ps' <- insertImplicitPatterns ExpandLast ps tel
-  reportSDoc "tc.lhs.imp" 15 $
-    sep [ text "insertImplicits finished"
-        , nest 2 $ text "ps'  = " <+> do brackets $ fsep $ punctuate comma $ map prettyA ps'
-        ]
-  return $ Problem ps' qs tel pr
-
--- | Eta-expand implicit pattern if of record type.
-expandImplicitPattern :: Type -> NamedArg A.Pattern -> TCM (NamedArg A.Pattern)
-expandImplicitPattern a p = maybe (return p) return =<< expandImplicitPattern' a p
-
--- | Try to eta-expand implicit pattern.
---   Returns 'Nothing' unless dealing with a record type that has eta-expansion
---   and a constructor @c@.  In this case, it returns 'Just' @c _ _ ... _@
---   (record constructor applied to as many implicit patterns as there are fields).
-expandImplicitPattern' :: Type -> NamedArg A.Pattern -> TCM (Maybe (NamedArg A.Pattern))
-expandImplicitPattern' a p
-  | A.WildP{} <- namedArg p, not (isInstance p) = 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
-     caseMaybeM (isEtaRecordType =<< reduce a) (return Nothing) $ \ (d, _) -> do
-       -- Andreas, 2012-06-10: only expand guarded records,
-       -- otherwise we might run into an infinite loop
-       def <- getRecordDef d
-       -- Andreas, 2015-07-20 Since we have record patterns now, we can expand
-       -- even records that do not have a constructor.
-       -- -- Andreas, 2013-03-21: only expand records that have a constructor:
-       -- if not (recNamedCon def) then return Nothing else do
-       do
-         -- generate one implicit pattern for each field
-         let qs = for (recFields def) $ \ f -> implicitP $ argInfo f
-         -- generate the pattern (c _ _ ... _)
-         let q  = A.ConP (ConPatInfo ConOSystem patNoRange) (A.AmbQ [recCon def]) qs
-         -- equip it with the name/arginfo of the original implicit pattern
-             p' = updateNamedArg (const q) p   -- WAS: ((q <$) <$> p)  -- Andreas, 2013-03-21 forbiddingly cryptic
-         return $ Just p'
-  | otherwise = return Nothing
-
 implicitP :: ArgInfo -> NamedArg A.Pattern
 implicitP info = Arg (setOrigin Inserted info) $ unnamed $ A.WildP $ PatRange $ noRange
 
@@ -115,24 +68,24 @@
 insertImplicitPatternsT exh            ps a = do
   TelV tel b <- telViewUpTo' (-1) (not . visible) a
   reportSDoc "tc.lhs.imp" 20 $
-    sep [ text "insertImplicitPatternsT"
-        , nest 2 $ text "ps  = " <+> do
-            brackets $ fsep $ punctuate comma $ map prettyA ps
-        , nest 2 $ text "tel = " <+> prettyTCM tel
-        , nest 2 $ text "b   = " <+> addContext tel (prettyTCM b)
-        ]
+    vcat [ text "insertImplicitPatternsT"
+         , nest 2 $ text "ps  = " <+> do
+             brackets $ fsep $ punctuate comma $ map prettyA ps
+         , nest 2 $ text "tel = " <+> prettyTCM tel
+         , nest 2 $ text "b   = " <+> addContext tel (prettyTCM b)
+         ]
   case ps of
     [] -> insImp dummy tel
     p : ps -> do
       -- Andreas, 2015-05-11.
       -- If p is a projection pattern, make it visible for the purpose of
       -- calling insImp / insertImplicit, to get correct behavior.
-      let p' = applyWhen (isJust $ isProjP p) (setHiding NotHidden) p
+      let p' = applyWhen (isJust $ A.maybePostfixProjP p) (setHiding NotHidden) p
       hs <- insImp p' tel
       case hs of
         [] -> do
           a <- reduce a
-          case ignoreSharing $ unEl a of
+          case unEl a of
             Pi arg b -> do
               (p :) <$> insertImplicitPatternsT exh ps (absBody b)
             _ -> return (p : ps)
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs b/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs
deleted file mode 100644
--- a/src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs
+++ /dev/null
@@ -1,187 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module Agda.TypeChecking.Rules.LHS.Instantiate where
-
-import Agda.Syntax.Common
-import Agda.Syntax.Internal as I hiding (Substitution)
-import qualified Agda.Syntax.Abstract as A
-import Agda.Syntax.Abstract.Views ( asView )
-
-import Agda.TypeChecking.Monad
-import Agda.TypeChecking.Substitute hiding (Substitution)
-import qualified Agda.TypeChecking.Substitute as S (Substitution)
-import Agda.TypeChecking.Pretty
-import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Telescope
-
-import Agda.TypeChecking.Rules.LHS.Problem
-
-import Agda.Utils.List
-import Agda.Utils.Permutation
-import Agda.Utils.Size
-
-#include "undefined.h"
-import Agda.Utils.Impossible
-
--- | Instantiate a telescope with a substitution. Might reorder the telescope.
---   @instantiateTel (Γ : Tel)(σ : Γ --> Γ) = Γσ~@
---   Monadic only for debugging purposes.
-instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, S.Substitution, [Dom Type])
-instantiateTel s tel = liftTCM $ do
-
-  reportSDoc "tc.lhs.inst" 10 $ vcat
-    [ text "instantiateTel "
-    , nest 2 $ text "s    =" <+> do
-        addContext tel $ fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) s
-    , nest 2 $ text "tel  =" <+> prettyTCM tel
---    , nest 2 $ text "tel  =" <+> text (show tel)
-    ]
-
-{-
-  -- Andreas, 2013-10-27
-  -- Why is normalization necessary?  Issue 234 seems to need it.
-  -- But it is better done right before where it is needed (see below).
-
-  tel <- normalise tel
-
-  reportSDoc "tc.lhs.inst" 15 $ vcat
-    [ nest 2 $ text "tel (normalized)=" <+> prettyTCM tel
-    ]
--}
-
-  -- Shrinking permutation (removing Justs) (and its complement, and reverse)
-  let n   = size s
-      {- OLD CODE, leave as documentation
-      ps  = Perm n [ i | (i, Nothing) <- zip [0..] $ reverse s ]
-      psR = reverseP ps
-      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
-    , nest 2 $ text $ "psR  = " ++ show psR
-    , nest 2 $ text $ "psC  = " ++ show psC
-    ]
-
-  -- s' : Substitution Γσ
-  let s' =  {-'-} renameP __IMPOSSIBLE__ psR s
-
-  reportSDoc "tc.lhs.inst" 15 $ nest 2 $
-    text "s'   =" <+> fsep (punctuate comma $ map (maybe (text "_") prettyTCM) s')
-
-  -- 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
-
-  reportSDoc "tc.lhs.inst" 15 $ nest 2 $ vcat
-    [ text "tel1 =" <+> brackets (fsep $ punctuate comma $ map prettyTCM tel1)
---    , text "tel1 =" <+> text (show tel1)
-    ]
-
-  -- tel2 : [Type Γσ]Γ
-  let tel2 = applySubst rho tel1
-
-  reportSDoc "tc.lhs.inst" 15 $ nest 2 $
-    text "tel2 =" <+> brackets (fsep $ punctuate comma $ map prettyTCM tel2)
-
-  -- tel3 : [Type Γσ]Γσ
-  --
-  -- Andreas, 2013-10-27
-  -- @reorderTel@ below uses free variable analysis, so @tel3@ should be
-  -- fully instantiated and normalized. (See issue 234.)
-  -- Ulf, 2014-02-05: Only normalise if reordering fails!
-  tel3 <- instantiateFull $ permute ps tel2
-  let names3 = permute ps names1
-
-  reportSDoc "tc.lhs.inst" 15 $ nest 2 $
-    text "tel3 =" <+> brackets (fsep $ punctuate comma $ map prettyTCM tel3)
-
-  -- Raise error if telescope cannot be ordered.
-  let failToReorder = inTopContext $ addContext names3 $ do
-        err <- sep [ text "Recursive telescope in left hand side:"
-                   , fsep [ parens (text (argNameToString x) <+> text ":" <+> prettyTCM t)
-                          | (x, t) <- zip names3 tel3 ]
-                   ]
-        typeError $ GenericError $ show err
-      tryNormalisedReorder = do
-        tel3 <- normalise tel3
-        reportSDoc "tc.lhs.inst" 30 $ text "failed to reorder unnormalised, trying again with" $$
-          nest 2 (text "norm =" <+> brackets (fsep $ punctuate comma $ map prettyTCM tel3))
-        p <- maybe failToReorder return . reorderTel =<< normalise tel3
-        return (p, tel3)
-
-  -- p : Permutation (Γσ -> Γσ ~)
-  (p, tel3) <- maybe tryNormalisedReorder (\p -> return (p, tel3)) $ reorderTel tel3
-
-  reportSLn "tc.lhs.inst" 10 $ "  p   = " ++ show p
-
-  -- rho' : [Term Γσ~]Γσ
-  let rho' = {-'-} renaming __IMPOSSIBLE__ (reverseP p)
-
-  -- tel4 : [Type Γσ~]Γσ~
-  let tel4   = applySubst rho' (permute p tel3)
-      names4 = permute p names3
-
-  reportSDoc "tc.lhs.inst" 15 $ nest 2 $
-    text "tel4 =" <+> brackets (fsep $ punctuate comma $ map prettyTCM tel4)
-
-  -- tel5 = Γσ~
-  let tel5 = unflattenTel names4 tel4
-
-  reportSDoc "tc.lhs.inst" 15 $ nest 2 $
-    text "tel5 =" <+> prettyTCM tel5
-
-  -- remember the types of the instantiations
-  -- itypes : [Type Γσ~]Γ*
-  let itypes = applySubst rho' $ permute psC tel2
-
-  return (tel5, composeP p ps, applySubst rho' rho, itypes)
-  where
-
-    -- Turn a Substitution ([Maybe Term]) into a substitution (S.Substitution)
-    mkSubst :: [Maybe Term] -> S.Substitution
-    mkSubst s = rho 0 s'
-      where s'  = s
-            rho i (Nothing : s) = consS (var i) $ rho (i + 1) s
-            rho i (Just u  : s) = consS u $ rho i s
-            rho i []            = raiseS i
-
--- | Produce a nice error message when splitting failed
-nothingToSplitError :: Problem -> TCM a
-nothingToSplitError (Problem ps _ tel pr) = splitError ps tel
-  where
-    splitError []       EmptyTel    = do
-      if null $ restPats pr then __IMPOSSIBLE__ else do
-        typeError $ GenericError $ "Arguments left we cannot split on. TODO: better error message"
-    splitError (_:_)    EmptyTel    = __IMPOSSIBLE__
-    splitError []       ExtendTel{} = __IMPOSSIBLE__
-    splitError (p : ps) (ExtendTel a tel)
-      | isBad p   = traceCall (CheckPattern (strip p) EmptyTel (unDom a)) $
-                      typeError $ IlltypedPattern (strip p) (unDom a)
-      | otherwise = underAbstraction a tel $ \tel -> splitError ps tel
-      where
-        strip = snd . asView . namedArg
-        isBad p = case strip p of
-          A.DotP{} -> True
-          A.ConP{} -> True
-          A.LitP{} -> True
-          A.RecP{} -> True
-          A.VarP{}    -> False
-          A.WildP{}   -> False
-          A.AbsurdP{} -> False
-          A.ProjP{}        -> __IMPOSSIBLE__  -- Projection pattern gives CannotEliminateWithPattern
-          A.DefP{}        -> __IMPOSSIBLE__
-          A.AsP{}         -> __IMPOSSIBLE__
-          A.PatternSynP{} -> __IMPOSSIBLE__
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,13 +1,21 @@
 -- {-# LANGUAGE CPP #-}
 
-module Agda.TypeChecking.Rules.LHS.Problem where
+module Agda.TypeChecking.Rules.LHS.Problem
+       ( FlexibleVars , FlexibleVarKind(..) , FlexibleVar(..) , allFlexVars
+       , FlexChoice(..) , ChooseFlex(..)
+       , ProblemEq(..) , Problem(..) , problemEqs
+       , problemRestPats, problemCont, problemInPats
+       , AsBinding(..) , DotPattern(..) , AbsurdPattern(..)
+       , LHSState(..) , lhsTel , lhsOutPat , lhsProblem , lhsTarget
+       ) where
 
 import Prelude hiding (null)
 
 import Control.Applicative hiding (empty)
 import Data.Foldable ( Foldable )
 import Data.Maybe ( fromMaybe )
-import Data.Semigroup (Semigroup, Monoid, (<>), mempty, mappend, mconcat)
+import Data.Monoid ( Monoid, mempty, mappend, mconcat )
+import Data.Semigroup ( Semigroup, (<>) )
 import Data.Traversable
 
 import Agda.Syntax.Common
@@ -16,20 +24,22 @@
 import Agda.Syntax.Position
 import Agda.Syntax.Internal
 import Agda.Syntax.Internal.Pattern
+import Agda.Syntax.Abstract (ProblemEq(..))
 import qualified Agda.Syntax.Abstract as A
 
+import Agda.TypeChecking.Monad (TCM)
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Reduce
 import qualified Agda.TypeChecking.Pretty as P
 import Agda.TypeChecking.Pretty hiding ((<>))
 
+import Agda.Utils.Lens
 import Agda.Utils.List
 import Agda.Utils.Null
 import Agda.Utils.Permutation
 import Agda.Utils.Size
 import qualified Agda.Utils.Pretty as PP
 
-type Substitution   = [Maybe Term]
 type FlexibleVars   = [FlexibleVar Nat]
 
 -- | When we encounter a flexible variable in the unifier, where did it come from?
@@ -150,150 +160,94 @@
         firstChoice (ChooseEither : xs) = firstChoice xs
         firstChoice (x            : _ ) = x
 
-
--- | 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]  -- ^ User patterns.
-  , problemOutPat :: p                       -- ^ Patterns after splitting.
-  , problemTel    :: Telescope               -- ^ Type of in patterns.
-  , problemRest   :: ProblemRest             -- ^ Patterns that cannot be typed yet.
-  }
-  deriving Show
-
--- | The de Bruijn indices in the pattern refer to positions
---   in the list of abstract patterns in the problem, counted
---   from the back.
-type Problem     = Problem' [NamedArg DeBruijnPattern]
-type ProblemPart = Problem' ()
-
--- | 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]
+-- | The user patterns we still have to split on.
+data Problem a = Problem
+  { _problemEqs      :: [ProblemEq]
+    -- ^ User patterns.
+  , _problemRestPats :: [NamedArg A.Pattern]
     -- ^ List of user patterns which could not yet be typed.
-  , restType :: Arg Type
-    -- ^ Type eliminated by 'restPats'.
-    --   Can be 'Irrelevant' to indicate that we came by
-    --   an irrelevant projection and, hence, the rhs must
-    --   be type-checked in irrelevant mode.
+    --   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
+    --   @
+    --      problemEqs      = [false = b]
+    --      problemRestPats = [zero]
+    --   @
+    --   As we instantiate @b@ to @false@, the 'targetType' reduces to
+    --   @Nat -> Nat@ and we can move pattern @zero@ over to @problemEqs@.
+  , _problemCont     :: LHSState a -> TCM a
   }
   deriving Show
 
-data Focus
-  = Focus
-    { focusCon      :: QName
-    , focusPatOrigin:: ConOrigin -- ^ Do we come from an implicit or record pattern?
-    , focusConArgs  :: [NamedArg A.Pattern]
-    , focusRange    :: Range
-    , focusOutPat   :: [NamedArg DeBruijnPattern]
-    , focusDatatype :: QName
-    , focusParams   :: [Arg Term]
-    , focusIndices  :: [Arg Term]
-    , focusType     :: Type -- ^ Type of variable we are splitting, kept for record patterns.
-    }
-  | LitFocus Literal [NamedArg DeBruijnPattern] Type
-  | AbsurdFocus
-    { absurdFocusRange :: PatInfo
-    , absurdFocusVar   :: Int
-    , absurdFocusType  :: Type
-    }
-
--- | Result of 'splitProblem':  Determines position for the next split.
-data SplitProblem
+problemEqs :: Lens' [ProblemEq] (Problem a)
+problemEqs f p = f (_problemEqs p) <&> \x -> p {_problemEqs = x}
 
-  = -- | Split on constructor pattern.
-    Split
-      { splitLPats   :: ProblemPart
-        -- ^ The typed user patterns left of the split position.
-        --   Invariant: @'problemRest' == empty@.
-      , splitFocus   :: Arg Focus
-        -- ^ How to split the variable at the split position.
-      , splitRPats   :: Abs ProblemPart
-        -- ^ The typed user patterns right of the split position.
-      }
+problemRestPats :: Lens' [NamedArg A.Pattern] (Problem a)
+problemRestPats f p = f (_problemRestPats p) <&> \x -> p {_problemRestPats = x}
 
-  | -- | Split on projection pattern.
-    SplitRest
-      { splitProjection :: Arg QName
-        -- ^ The projection could be belonging to an irrelevant record field.
-      , splitProjOrigin :: ProjOrigin
-      , splitRestType   :: Type
-      }
+problemCont :: Lens' (LHSState a -> TCM a) (Problem a)
+problemCont f p = f (_problemCont p) <&> \x -> p {_problemCont = x}
 
--- | Put a typed pattern on the very left of a @SplitProblem@.
-consSplitProblem
-  :: NamedArg A.Pattern -- ^ @p@ A pattern.
-  -> ArgName              -- ^ @x@ The name of the argument (from its type).
-  -> Dom Type           -- ^ @t@ Its type.
-  -> SplitProblem         -- ^ The split problem, containing 'splitLPats' @ps;xs:ts@.
-  -> SplitProblem         -- ^ The result, now containing 'splitLPats' @(p,ps);(x,xs):(t,ts)@.
-consSplitProblem p x dom s@SplitRest{}              = s
-consSplitProblem p x dom s@Split{ splitLPats = ps } = s{ splitLPats = consProblem' ps }
-  where
-  consProblem' (Problem ps () tel pr) =
-    Problem (p:ps) () (ExtendTel dom $ Abs x tel) pr
+problemInPats :: Problem a -> [A.Pattern]
+problemInPats = map problemInPat . (^. problemEqs)
 
--- | Instantiations of a dot pattern with a term.
---   `Maybe e` if the user wrote a dot pattern .e
---   `Nothing` if this is an instantiation of an implicit argument or a name.
-data DotPatternInst = DPI
-  { dotPatternName     :: Maybe A.Name
-  , dotPatternUserExpr :: Maybe A.Expr
-  , dotPatternInst     :: Term
-  , dotPatternType     :: Dom Type
-  }
-data AsBinding      = AsB Name Term Type
+data AsBinding = AsB Name Term Type
+data DotPattern = Dot A.Expr Term (Dom Type)
+data AbsurdPattern = Absurd Range Type
 
 -- | State worked on during the main loop of checking a lhs.
-data LHSState = LHSState
-  { lhsProblem :: Problem
-  , lhsDPI     :: [DotPatternInst]
-  , lhsShouldBeEmptyTypes :: [(Range,Type)]
+--   [Ulf Norell's PhD, page. 35]
+data LHSState a = LHSState
+  { _lhsTel     :: Telescope
+    -- ^ The types of the pattern variables.
+  , _lhsOutPat  :: [NamedArg DeBruijnPattern]
+    -- ^ Patterns after splitting.
+    --   The de Bruijn indices refer to positions in the list of abstract syntax
+    --   patterns in the problem, counted from the back (right-to-left).
+  , _lhsProblem :: Problem a
+    -- ^ User patterns of supposed type @delta@.
+  , _lhsTarget  :: Arg Type
+    -- ^ Type eliminated by 'problemRestPats' in the problem.
+    --   Can be 'Irrelevant' to indicate that we came by
+    --   an irrelevant projection and, hence, the rhs must
+    --   be type-checked in irrelevant mode.
   }
 
-instance Subst Term ProblemRest where
-  applySubst rho p = p { restType = applySubst rho $ restType p }
+lhsTel :: Lens' Telescope (LHSState a)
+lhsTel f p = f (_lhsTel p) <&> \x -> p {_lhsTel = x}
 
-instance Subst Term (Problem' p) where
-  applySubst rho p = p { problemTel  = applySubst rho $ problemTel p
-                       , problemRest = applySubst rho $ problemRest p }
+lhsOutPat :: Lens' [NamedArg DeBruijnPattern] (LHSState a)
+lhsOutPat f p = f (_lhsOutPat p) <&> \x -> p {_lhsOutPat = x}
 
-instance Subst Term DotPatternInst where
-  applySubst rho (DPI x e v a) = uncurry (DPI x e) $ applySubst rho (v,a)
+lhsProblem :: Lens' (Problem a) (LHSState a)
+lhsProblem f p = f (_lhsProblem p) <&> \x -> p {_lhsProblem = x}
 
+lhsTarget :: Lens' (Arg Type) (LHSState a)
+lhsTarget f p = f (_lhsTarget p) <&> \x -> p {_lhsTarget = x}
+
+instance Subst Term (Problem a) where
+  applySubst rho (Problem eqs rps cont) = Problem (applySubst rho eqs) rps cont
+
 instance Subst Term AsBinding where
   applySubst rho (AsB x v a) = uncurry (AsB x) $ applySubst rho (v, a)
 
-instance PrettyTCM DotPatternInst where
-  prettyTCM (DPI mx me v a) = sep
-    [ x <+> text "=" <+> text "." P.<> prettyA e
+instance Subst Term DotPattern where
+  applySubst rho (Dot e v a) = uncurry (Dot e) $ applySubst rho (v, a)
+
+instance Subst Term AbsurdPattern where
+  applySubst rho (Absurd r a) = Absurd r $ applySubst rho a
+
+instance PrettyTCM ProblemEq where
+  prettyTCM (ProblemEq p v a) = sep
+    [ prettyA p <+> text "="
     , nest 2 $ prettyTCM v <+> text ":"
     , nest 2 $ prettyTCM a
     ]
-    where x = maybe (text "_") prettyA mx
-          e = fromMaybe underscore me
 
 instance PrettyTCM AsBinding where
   prettyTCM (AsB x v a) =
@@ -301,6 +255,16 @@
         , nest 2 $ text ":" <+> prettyTCM a
         ]
 
+instance PrettyTCM DotPattern where
+  prettyTCM (Dot e v a) = sep
+    [ prettyA e <+> text "="
+    , nest 2 $ prettyTCM v <+> text ":"
+    , nest 2 $ prettyTCM a
+    ]
+
+instance PrettyTCM AbsurdPattern where
+  prettyTCM (Absurd r a) = text "() :" <+> prettyTCM a
+
 instance PP.Pretty AsBinding where
   pretty (AsB x v a) =
     PP.pretty x PP.<+> PP.text "=" PP.<+>
@@ -308,11 +272,3 @@
 
 instance InstantiateFull AsBinding where
   instantiateFull' (AsB x v a) = AsB x <$> instantiateFull' v <*> instantiateFull' a
-
-instance Null ProblemRest where
-  null  = null . restPats
-  empty = ProblemRest { restPats = [], restType = defaultArg typeDontCare }
-
-instance Null a => Null (Problem' a) where
-  null p = null (problemInPat p) && null (problemRest p)
-  empty  = Problem empty empty empty empty
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs b/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs
--- a/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs
+++ b/src/full/Agda/TypeChecking/Rules/LHS/ProblemRest.hs
@@ -3,11 +3,14 @@
 module Agda.TypeChecking.Rules.LHS.ProblemRest where
 
 import Control.Arrow (first, second)
+import Control.Monad
 
 import Data.Functor ((<$))
+import Data.Maybe
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
+import Agda.Syntax.Internal.Pattern
 import Agda.Syntax.Abstract.Pattern
 import qualified Agda.Syntax.Abstract as A
 
@@ -20,38 +23,45 @@
 import Agda.TypeChecking.Rules.LHS.Implicit
 
 import Agda.Utils.Functor (($>))
+import Agda.Utils.List
 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
+-- | Rename the variables in a telescope using the names from a given pattern.
+--
+--   If there are not at least as many patterns as entries as in the telescope,
+--   the names of the remaining entries in the telescope are unchanged.
+--   If there are too many patterns, there should be a type error later.
+--
 useNamesFromPattern :: [NamedArg A.Pattern] -> Telescope -> Telescope
-useNamesFromPattern ps = telFromList . zipWith ren (map namedArg ps ++ repeat dummy) . telToList
+useNamesFromPattern ps tel = telFromList (zipWith ren ps telList ++ telRemaining)
   where
-    dummy = A.WildP __IMPOSSIBLE__
-    ren (A.VarP x) (Dom info (_, a)) | visible info && not (isNoName x) =
-      Dom info (nameToArgName x, a)
-    -- Andreas, 2013-03-13: inserted the following line in the hope to fix issue 819
-    -- but it does not do the job, instead, it puts a lot of "_"s
-    -- instead of more sensible names into error messages.
-    -- ren A.WildP{}  (Dom info (_, a)) | visible info = Dom info ("_", a)
-    ren A.PatternSynP{} _ = __IMPOSSIBLE__  -- ensure there are no syns left
-    -- Andreas, 2016-05-10, issue 1848: if context variable has no name, call it "x"
-    ren _ (Dom info (x, a)) | visible info && isNoName x =
-      Dom info (stringToArgName "x", a)
-    ren _ a = a
+    telList = telToList tel
+    telRemaining = drop (length ps) telList -- telescope entries beyond patterns
+    ren (Arg ai (Named nm p)) dom@(Dom info (y, a)) =
+      case p of
+        -- Andreas, 2017-10-12, issue #2803, also preserve user-written hidden names.
+        -- However, not if the argument is named, because then the name in the telescope
+        -- is significant for implicit insertion.
+        A.VarP (A.BindName x) | not (isNoName x)
+                 , visible info || (getOrigin ai == UserWritten && nm == Nothing) ->
+          Dom info (nameToArgName x, a)
+        A.PatternSynP{} -> __IMPOSSIBLE__  -- ensure there are no syns left
+        -- Andreas, 2016-05-10, issue 1848: if context variable has no name, call it "x"
+        _ | visible info && isNoName y -> Dom info (stringToArgName "x", a)
+          | otherwise                  -> dom
 
 useOriginFrom :: (LensOrigin a, LensOrigin b) => [a] -> [b] -> [a]
 useOriginFrom = zipWith $ \x y -> setOrigin (getOrigin y) x
 
 -- | Are there any untyped user patterns left?
-noProblemRest :: Problem -> Bool
-noProblemRest (Problem _ _ _ (ProblemRest ps _)) = null ps
+noProblemRest :: Problem a -> Bool
+noProblemRest (Problem _ rp _) = null rp
 
--- | Construct an initial 'split' 'Problem' from user patterns.
+-- | Construct an initial 'LHSState' from user patterns.
 --   Example:
 --   @
 --
@@ -67,98 +77,69 @@
 --   The problem generated for the first clause of @sample@
 --   with patterns @just a, just b@ would be:
 --   @
---      problemInPat  = ["_", "just a"]
---      problemOutPat = ["A", "m"]
---      problemTel    = [A : Set, m : Maybe A]
---      problemRest   =
---        restPats    = ["just b"]
---        restType    = "Case m Bool (Maybe A -> Bool)"
+--      lhsTel        = [A : Set, m : Maybe A]
+--      lhsOutPat     = ["A", "m"]
+--      lhsProblem    = Problem ["_", "just a"] [] [] []
+--      lhsTarget     = "Case m Bool (Maybe A -> Bool)"
 --   @
-
-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 ps0 a = do
-  -- Andreas, 2017-01-18, issue #819: We set all A.WildP origins to Inserted
-  -- in order to guide the pattern printer to discard variable names it made up.
-  let ps = (`mapNamedArgPattern` ps0) $ \case
-        p | A.WildP{} <- namedArg p -> setOrigin Inserted p
-        p -> p
-  -- 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.
-  -- Ulf, 2016-04-25: Actually we do need to ExpandLast because where blocks
-  -- need the implicits.
-  ps <- insertImplicitPatternsT ExpandLast ps a
-  reportSDoc "tc.lhs.imp" 20 $
-    text "insertImplicitPatternsT returned" <+> fsep (map prettyA ps)
-
-  -- Redo the telView, in order to *not* normalize the clause type further than necessary.
-  -- (See issue 734.)
-  TelV tel0 b  <- telViewUpTo (length ps) a
-  let gamma     = useNamesFromPattern ps tel0
-      as        = telToList gamma
-      (ps1,ps2) = splitAt (size as) ps
-      -- now (gamma -> b) = a and |gamma| = |ps1|
-      pr        = ProblemRest ps2 $ defaultArg b
-
-      -- internal patterns start as all variables
-  let ips = teleNamedArgs gamma `useOriginFrom` ps
+initLHSState
+  :: Telescope             -- ^ The initial telescope @delta@ of parameters.
+  -> [ProblemEq]           -- ^ The problem equations inherited from the parent clause (living in @delta@).
+  -> [NamedArg A.Pattern]  -- ^ The user patterns.
+  -> Type                  -- ^ The type the user patterns eliminate (living in @delta@).
+  -> (LHSState a -> TCM a) -- ^ Continuation for when checking the patterns is complete.
+  -> TCM (LHSState a)      -- ^ The initial LHS state constructed from the user patterns.
+initLHSState delta eqs ps a ret = do
+  let problem = Problem eqs ps ret
+      qs0     = teleNamedArgs delta
 
-      -- the initial problem for starting the splitting
-      problem  = Problem ps1 ips gamma pr :: Problem
-  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 "xs    =" <+> text (show $ map (fst . unDom) as)
-           , text "ps1   =" <+> fsep (map prettyA ps1)
-        -- , text "ips   =" <+> prettyTCM ips  -- no prettyTCM instance
-           , text "gamma =" <+> prettyTCM gamma
-           , text "ps2   =" <+> fsep (map prettyA ps2)
-           , text "b     =" <+> addContext gamma (prettyTCM b)
-           ]
-         ]
-  return problem
+  updateProblemRest $ LHSState delta qs0 problem (defaultArg a)
 
 -- | 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 ps0 qs0 tel0 (ProblemRest ps a)) = do
-      ps <- insertImplicitPatternsT ExpandLast ps $ unArg a
-      reportSDoc "tc.lhs.imp" 20 $
-        text "insertImplicitPatternsT returned" <+> fsep (map prettyA ps)
-      -- (Issue 734: Do only the necessary telView to preserve clause types as much as possible.)
-      TelV tel b   <- telViewUpTo (length ps) $ unArg a
-      let gamma     = useNamesFromPattern ps tel
-          as        = telToList gamma
-          (ps1,ps2) = splitAt (size as) ps
-          tel1      = telFromList $ telToList tel0 ++ as
-          pr        = ProblemRest ps2 (a $> b)
-          qs1       = teleNamedArgs gamma `useOriginFrom` ps
-          n         = size as
-      reportSDoc "tc.lhs.problem" 10 $ addContext tel0 $ vcat
-        [ text "checking lhs -- updated split problem:"
-        , nest 2 $ vcat
-          [ text "ps    =" <+> fsep (map prettyA ps)
-          , text "a     =" <+> prettyTCM a
-          , text "xs    =" <+> text (show $ map (fst . unDom) as)
-          , text "ps1   =" <+> fsep (map prettyA ps1)
-          , text "gamma =" <+> prettyTCM gamma
-          , text "ps2   =" <+> fsep (map prettyA ps2)
-          , text "b     =" <+> addContext gamma (prettyTCM b)
-          ]
-        ]
-      return $ (n,) $ Problem (ps0 ++ ps1) (applySubst (raiseS 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'
-      , lhsDPI     = applyPatSubst tau (lhsDPI st)
-      , lhsShouldBeEmptyTypes = map (second $ applyPatSubst tau) (lhsShouldBeEmptyTypes st)
-      }
+updateProblemRest :: LHSState a -> TCM (LHSState a)
+updateProblemRest st@(LHSState tel0 qs0 p@(Problem oldEqs ps ret) a) = do
+  ps <- addContext tel0 $ insertImplicitPatternsT ExpandLast ps $ unArg a
+  reportSDoc "tc.lhs.imp" 20 $
+    text "insertImplicitPatternsT returned" <+> fsep (map prettyA ps)
+  -- (Issue 734: Do only the necessary telView to preserve clause types as much as possible.)
+  let m = length $ takeWhile (isNothing . A.maybePostfixProjP) ps
+  TelV gamma b <- telViewUpTo m $ unArg a
+  forM_ (zip ps (telToList gamma)) $ \(p, a) ->
+    unless (sameHiding p a) $ typeError WrongHidingInLHS
+  let tel1      = useNamesFromPattern ps gamma
+      n         = size tel1
+      (ps1,ps2) = splitAt n ps
+      tel       = telFromList $ telToList tel0 ++ telToList tel1
+      qs1       = teleNamedArgs tel1
+      newEqs    = zipWith3 ProblemEq
+                    (map namedArg ps1)
+                    (map (patternToTerm . namedArg) qs1)
+                    (flattenTel tel1 `useOriginFrom` ps1)
+      tau       = raiseS n
+  reportSDoc "tc.lhs.problem" 10 $ addContext tel0 $ vcat
+    [ text "checking lhs -- updated split problem:"
+    , nest 2 $ vcat
+      [ text "ps    =" <+> fsep (map prettyA ps)
+      , text "a     =" <+> prettyTCM a
+      , text "tel1  =" <+> prettyTCM tel1
+      , text "ps1   =" <+> fsep (map prettyA ps1)
+      , text "ps2   =" <+> fsep (map prettyA ps2)
+      , text "b     =" <+> addContext tel1 (prettyTCM b)
+      ]
+    ]
+  reportSDoc "tc.lhs.problem" 60 $ addContext tel0 $ vcat
+    [ nest 2 $ vcat
+      [ text "qs1    =" <+> fsep (map pretty qs1)
+      ]
+    ]
+  return $ LHSState
+    { _lhsTel     = tel
+    , _lhsOutPat  = applySubst tau qs0 ++ qs1
+    , _lhsProblem = Problem
+                   { _problemEqs      = applyPatSubst tau oldEqs ++ newEqs
+                   , _problemRestPats = ps2
+                   , _problemCont     = ret
+                   }
+    , _lhsTarget  = a $> b
+    }
diff --git a/src/full/Agda/TypeChecking/Rules/LHS/Split.hs b/src/full/Agda/TypeChecking/Rules/LHS/Split.hs
deleted file mode 100644
--- a/src/full/Agda/TypeChecking/Rules/LHS/Split.hs
+++ /dev/null
@@ -1,479 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module Agda.TypeChecking.Rules.LHS.Split
-  ( splitProblem
-  ) where
-
-import Prelude hiding (null)
-
-import Control.Applicative hiding (empty)
-import Control.Monad.Trans ( lift )
-import Control.Monad.Trans.Maybe
-
-import Data.Either
-import Data.Maybe (fromMaybe)
-import qualified Data.List as List
-import Data.Traversable hiding (mapM, sequence)
-import Data.Foldable (msum)
-
-import Agda.Interaction.Options
-import Agda.Interaction.Highlighting.Generate (storeDisambiguatedName)
-
-import Agda.Syntax.Common
-import Agda.Syntax.Concrete (FieldAssignment'(..), nameFieldA)
-import Agda.Syntax.Literal
-import Agda.Syntax.Position
-import Agda.Syntax.Internal as I
-import Agda.Syntax.Internal.Pattern
-import Agda.Syntax.Abstract (IsProjP(..), MaybePostfixProjP(..))
-import qualified Agda.Syntax.Abstract as A
-import Agda.Syntax.Abstract.Views (asView)
-import qualified Agda.Syntax.Info as A
-
-import Agda.TypeChecking.Monad
-import Agda.TypeChecking.Monad.Builtin
-
-import Agda.TypeChecking.Constraints
-import Agda.TypeChecking.Conversion
-import Agda.TypeChecking.Datatypes
-import Agda.TypeChecking.Errors (dropTopLevelModule)
-import Agda.TypeChecking.Free
-import Agda.TypeChecking.Irrelevance
-import Agda.TypeChecking.MetaVars
-import Agda.TypeChecking.Patterns.Abstract
-import Agda.TypeChecking.Pretty
-import Agda.TypeChecking.Records
-import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Substitute
-import Agda.TypeChecking.Telescope
-
-import Agda.TypeChecking.Rules.LHS.Problem
-
-import Agda.Utils.Either
-import Agda.Utils.Except (catchError)
-import Agda.Utils.Functor ((<.>))
-import Agda.Utils.Lens
-import Agda.Utils.List
-import Agda.Utils.ListT
-import Agda.Utils.Maybe
-import Agda.Utils.Monad
-import Agda.Utils.Null
-import Agda.Utils.Permutation
-import Agda.Utils.Pretty (prettyShow)
-import qualified Agda.Utils.Pretty as P
-import Agda.Utils.Size
-import Agda.Utils.Tuple
-
-#include "undefined.h"
-import Agda.Utils.Impossible
-
--- | Split a problem at the first constructor pattern which is
---   actually of datatype type.
---
---   Or, if there is no constructor pattern left and the rest type
---   is a record type and the first rest pattern is a projection
---   pattern, split the rest type.
---
---   Implicit patterns should have been inserted.
-
-splitProblem ::
-  Maybe QName -- ^ The definition we are checking at the moment.
-  -> Problem  -- ^ The current state of the lhs patterns.
-  -> ListT TCM SplitProblem
-splitProblem mf (Problem ps qs tel pr) = do
-  lift $ do
-    reportSLn "tc.lhs.split" 20 $ "initiating splitting"
-      ++ maybe "" ((" for definition " ++) . prettyShow) mf
-    reportSDoc "tc.lhs.split" 30 $ sep
-      [ nest 2 $ text "ps   =" <+> sep (map (P.parens <.> prettyA) ps)
-      , nest 2 $ text "qs   =" <+> sep (map (P.parens <.> prettyTCM . namedArg) qs)
-      , nest 2 $ text "tel  =" <+> prettyTCM tel
-      ]
-    reportSDoc "tc.lhs.split" 60 $ sep
-      [ nest 2 $ text "ps  (raw) =" <+> sep (map (P.parens <.> text . show) ps)
-      , nest 2 $ text "qs  (raw) =" <+> sep (map (P.parens <.> text . show . namedArg) qs)
-      , nest 2 $ text "tel (raw) =" <+> (text . show) tel
-      ]
-  splitP ps tel
-  where
-    -- Result splitting
-    splitRest :: ProblemRest -> ListT TCM SplitProblem
-    splitRest (ProblemRest (p : ps) b) | Just f <- mf = do
-      lift $ reportSDoc "tc.lhs.split" 20 $ sep
-        [ text "splitting problem rest"
-        , nest 2 $ text "pattern         p =" <+> prettyA p
-        , nest 2 $ text "eliminates type b =" <+> prettyTCM b
-        ]
-      lift $ reportSDoc "tc.lhs.split" 80 $ sep
-        [ nest 2 $ text $ "pattern (raw)   p = " ++ show p
-        ]
-      -- If the pattern is not a projection pattern, that's an error.
-      -- Probably then there were too many arguments.
-      caseMaybe (maybePostfixProjP p) failure $ \ (o, AmbQ ds) -> do
-        -- So it is a projection pattern (d = projection name), is it?
-        projs <- lift $ mapMaybeM (\ d -> fmap (d,) <$> isProjection d) ds
-        when (null projs) notProjP
-        -- If the target is not a record type, that's an error.
-        -- It could be a meta, but since we cannot postpone lhs checking, we crash here.
-        caseMaybeM (lift $ isRecordType $ unArg b) notRecord $ \(r, vs, def) -> case def of
-          Record{ recFields = fs } -> do
-            lift $ reportSDoc "tc.lhs.split" 20 $ sep
-              [ text $ "we are of record type r  = " ++ prettyShow r
-              , text   "applied to parameters vs = " <+> prettyTCM vs
-              , text $ "and have fields       fs = " ++ prettyShow fs
-              ]
-            -- The record "self" is the definition f applied to the patterns
-            let es = patternsToElims qs
-            -- Note: the module parameters are already part of qs
-            let self = defaultArg $ Def f [] `applyE` es
-                ai   = getArgInfo p
-            -- Try the projection candidates.
-            -- Fail hard for the last candidate.
-            msum $ mapAwareLast (tryProj o ai self fs r vs $ length ds >= 2) projs
-            -- -- This fails softly on all (if more than one) candidates.
-            -- msum $ map (tryProj o ai self fs r vs (length projs >= 2)) projs
-
-          _ -> __IMPOSSIBLE__
-      where
-      failure   = lift $ typeError $ CannotEliminateWithPattern p $ unArg b
-      notProjP  = lift $ typeError $ NotAProjectionPattern p
-      notRecord = failure -- lift $ typeError $ ShouldBeRecordType $ unArg b
-      wrongHiding :: MonadTCM tcm => QName -> tcm a
-      wrongHiding d = typeError . GenericDocError =<< do
-        liftTCM $ text "Wrong hiding used for projection " <+> prettyTCM d
-      -- Issue #2423: error which reports the disambiguation
-      wrongProj :: MonadTCM tcm => QName -> Bool -> tcm a
-      wrongProj d amb = typeError . GenericDocError =<< do
-        liftTCM $ sep
-          [ text "Cannot eliminate type "
-          , prettyTCM (unArg b)
-          , text " with projection "
-          , if amb then text . prettyShow =<< dropTopLevelModule d else prettyTCM d
-          ]
-
-      -- | Pass 'True' unless last element of the list.
-      mapAwareLast :: forall a b. (Bool -> a -> b) -> [a] -> [b]
-      mapAwareLast f []     = []
-      mapAwareLast f [a]    = [f False a]
-      mapAwareLast f (a:as) = f True a : mapAwareLast f as
-
-      tryProj
-        :: ProjOrigin           -- ^ Origin of projection pattern.
-        -> ArgInfo              -- ^ ArgInfo of projection pattern.
-        -> Arg Term             -- ^ Self: value we are eliminating.
-        -> [Arg QName]          -- ^ Fields of record type under consideration.
-        -> QName                -- ^ Name of record type we are eliminating.
-        -> Args                 -- ^ Parameters of record type we are eliminating.
-        -> Bool                 -- ^ Did we start out with an ambiguous projection in the beginning?
-        -> Bool                 -- ^ More than 1 candidates?  If yes, fail softly.
-        -> (QName, Projection)  -- ^ Current candidate.
-        -> ListT TCM SplitProblem
-      tryProj o ai self fs r vs amb soft (d0, proj) = do
-        -- Recoverable errors are those coming from the projection.
-        -- If we have several projections we fail @soft@ly and just try the next one.
-        let ambErr err = if soft then mzero else err
-            ambTry m
-             | soft = unlessM (liftTCM $ tryConversion m) mzero -- succeed without constraints
-             -- This would leave constraints:
-             -- -- | amb = whenNothingM (liftTCM $ tryMaybe $ disableDestructiveUpdate m) mzero
-             | otherwise = liftTCM $ noConstraints m
-        case proj of
-          -- Andreas, 2015-05-06 issue 1413 projProper=Nothing is not impossible
-          Projection{projProper = Nothing} -> ambErr notProjP
-          Projection{projProper = Just qr, projOrig = d, projLams = lams} -> do
-            let ai = projArgInfo proj
-            -- If projIndex==0, then the projection is already applied
-            -- to the record value (like in @open R r@), and then it
-            -- is no longer a projection but a record field.
-            when (null lams) $ ambErr notProjP
-            lift $ reportSLn "tc.lhs.split" 90 "we are a projection pattern"
-            -- If the target is not a record type, that's an error.
-            -- It could be a meta, but since we cannot postpone lhs checking, we crash here.
-            lift $ reportSDoc "tc.lhs.split" 20 $ sep
-              [ text $ "proj                  d0 = " ++ prettyShow d0
-              , text $ "original proj         d  = " ++ prettyShow d
-              ]
-            -- Get the field decoration.
-            -- If the projection pattern name @d@ is not a field name,
-            -- we have to try the next projection name.
-            -- If this was not an ambiguous projection, that's an error.
-            argd <- maybe (ambErr $ wrongProj d amb) return $ List.find ((d ==) . unArg) fs
-            let ai' = setRelevance (getRelevance argd) ai
-
-            -- Andreas, 2016-12-31, issue #2374:
-            -- We can also disambiguate by hiding info.
-            unless (sameHiding p ai) $ ambErr $ wrongHiding d
-
-            -- Andreas, 2016-12-31, issue #1976:
-            -- Check parameters.
-            ambTry $ checkParameters qr r vs
-
-            -- From here, we have the correctly disambiguated projection.
-            -- Thus, we no longer catch errors.
-
-            -- For highlighting, we remember which name we disambiguated to.
-            -- This is safe here (fingers crossed) as we won't decide on a
-            -- different projection even if we backtrack and come here again.
-            lift $ storeDisambiguatedName d0
-
-            -- Get the type of projection d applied to "self"
-            dType <- lift $ defType <$> getConstInfo d  -- full type!
-            lift $ reportSDoc "tc.lhs.split" 20 $ sep
-              [ text "we are              self = " <+> prettyTCM (unArg self)
-              , text "being projected by dType = " <+> prettyTCM dType
-              ]
-            -- This should succeed, as we have the correctly disambiguated.
-            lift $ SplitRest (Arg ai' d0) o <$> dType `piApplyM` (vs ++ [self])
-
-    -- if there are no more patterns left in the problem rest, there is nothing to split:
-    splitRest _ = mzero
-
-    -- | In @splitP aps iqs tel@,
-    --   @aps@ are the user patterns on which we are splitting (inPats),
-    --   @ips@ are the one-hole patterns of the current split state (outPats)
-    --   in one-to-one correspondence with the pattern variables
-    --   recorded in @tel@.
-    splitP :: [NamedArg A.Pattern]
-           -> Telescope
-           -> ListT TCM SplitProblem
-
-    -- no more patterns?  pull them from the rest
-    splitP []           _                      = splitRest pr
-    -- patterns but no more types? that's an error
-    splitP (_:_)        EmptyTel               = __IMPOSSIBLE__
-    -- (we can never have an ExtendTel without Abs)
-    splitP _            (ExtendTel _ NoAbs{})  = __IMPOSSIBLE__
-
-    -- pattern with type?  Let's get to work:
-    splitP ps0@(p : ps) tel0@(ExtendTel dom@(Dom ai a) xtel@(Abs x tel)) = do
-
-      liftTCM $ reportSDoc "tc.lhs.split" 30 $ sep
-        [ text "splitP looking at pattern"
-        , nest 2 $ text "p   =" <+> prettyA p
-        , nest 2 $ text "dom =" <+> prettyTCM dom
-        ]
-
-      -- Andreas, 2016-06-30, issue #2075: need test here!
-      unless (sameHiding p ai) $ typeError WrongHidingInLHS
-
-      -- Possible reinvokations:
-      let -- 1. Redo this argument (after meta instantiation).
-          tryAgain = splitP ps0 tel0
-          -- 2. Try to split on next argument.
-          keepGoing = consSplitProblem p x dom <$> do
-            underAbstraction dom xtel $ \ tel -> splitP ps tel
-
-      p <- lift $ expandLitPattern p
-      case snd $ asView $ namedArg p of
-
-        -- Case: projection pattern.  That's an error.
-        A.ProjP{} -> typeError $
-          CannotEliminateWithPattern p (telePi tel0 $ unArg $ restType pr)
-
-        -- Case: literal pattern.
-        p@(A.LitP lit)  -> do
-          -- Note that, in the presence of --without-K, this branch is
-          -- based on the assumption that the types of literals are
-          -- not indexed.
-
-          -- Andreas, 2010-09-07 cannot split on irrelevant args
-          when (unusableRelevance $ getRelevance ai) $
-            typeError $ SplitOnIrrelevant p dom
-
-          -- Succeed if the split type is (already) equal to the type of the literal.
-          ifNotM (lift $ tryConversion $ equalType a =<< litType lit)
-            {- then -} keepGoing $
-            {- else -} return Split
-              { splitLPats   = empty
-              , splitFocus   = Arg ai $ LitFocus lit qs a
-              , splitRPats   = Abs x  $ Problem ps () tel __IMPOSSIBLE__
-              }
-              `mplus` keepGoing
-
-        -- Case: record pattern
-        p@(A.RecP _patInfo fs) -> do
-          res <- lift $ tryRecordType a
-          case res of
-            -- Subcase: blocked
-            Left Nothing -> keepGoing
-
-            -- Subcase: not a record type or blocked on variable.
-            Left (Just a') -> keepGoing  -- If not record type, error will be given later.
-              -- typeError . GenericDocError =<< do
-              --   lift $ text "Record pattern at non-record type " <+> prettyTCM a'
-
-            -- Subcase: a record type (d vs)
-            Right (d, vs, def) -> do
-              let np = recPars def
-              let (pars, ixs) = splitAt np vs
-              lift $ reportSDoc "tc.lhs.split" 10 $ vcat
-                [ sep [ text "splitting on"
-                      , nest 2 $ fsep [ prettyA p, text ":", prettyTCM dom ]
-                      ]
-                , nest 2 $ text "pars =" <+> fsep (punctuate comma $ map prettyTCM pars)
-                , nest 2 $ text "ixs  =" <+> fsep (punctuate comma $ map prettyTCM ixs)
-                ]
-              let c = killRange $ conName $ recConHead def
-              let -- Field names with ArgInfo.
-                  axs = recordFieldNames def
-
-              -- In es omitted explicit fields are replaced by underscores
-              -- (from missingExplicits). Omitted implicit or instance fields
-              -- are still left out and inserted later by computeNeighborhood.
-              args <- lift $ insertMissingFields d (const $ A.WildP A.patNoRange) fs axs
-              (return Split
-                { splitLPats   = empty
-                , splitFocus   = Arg ai $ Focus c ConORec args (getRange p) qs d pars ixs a
-                , splitRPats   = Abs x  $ Problem ps () tel __IMPOSSIBLE__
-                }) `mplus` keepGoing
-
-        -- Case: absurd pattern.
-        p@(A.AbsurdP info) -> do
-          lift $ reportSDoc "tc.lhs.split.absurd" 30 $ text "split AbsurdP: type is " <+> prettyTCM a
-          let i = size tel
-          (return Split
-            { splitLPats = empty
-            , splitFocus = Arg ai $ AbsurdFocus info i $ raise (i+1) a
-            , splitRPats = Abs x  $ Problem ps () tel __IMPOSSIBLE__
-            }) `mplus` keepGoing
-
-        -- Case: constructor pattern.
-        p@(A.ConP ci (A.AmbQ cs) args) -> do
-          let tryInstantiate a'
-                | [c] <- cs = do
-                  lift $ reportSDoc "tc.lhs.split" 30 $
-                    text "split ConP: type is blocked"
-                    -- 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 (piApply dt vs)
-                    tryConversion $ equalType a' (El s $ Def d $ map Apply vs)
-                  if ok then tryAgain else keepGoing
-                | otherwise = do
-                  lift $ reportSDoc "tc.lhs.split" 30 $
-                    text "split ConP: type is blocked and constructor is ambiguous"
-                  keepGoing
-          -- ifBlockedType reduces the type
-          ifBlockedType a (const tryInstantiate) $ \ a' -> do
-            lift $ reportSDoc "tc.lhs.split" 30 $ text "split ConP: type is " <+> prettyTCM a'
-            case ignoreSharing $ unEl a' of
-
-              -- Subcase: split type is a Def.
-              Def d es    -> (liftTCM $ theDef <$> getConstInfo d) >>= \case
-
-               -- Issue #2253: the data type could be abstract.
-               AbstractDefn{} -> liftTCM $ traceCall (CheckPattern p EmptyTel a) $ do
-                 typeError . GenericDocError =<< do
-                   text "Cannot split on abstract data type" <+> prettyTCM d
-
-               def -> do
-
-                -- We cannot split on (shape-)irrelevant non-records.
-                -- Andreas, 2011-10-04 unless allowed by option
-                lift $ reportSLn "tc.lhs.split" 30 $ "split ConP: relevance is " ++ show ai
-                unless (defIsRecord def) $
-                  when (unusableRelevance $ getRelevance ai) $
-                  unlessM (liftTCM $ optExperimentalIrrelevance <$> pragmaOptions) $
-                  typeError $ SplitOnIrrelevant p dom
-
-                -- Check that we are at record or data type and return
-                -- the number of parameters.
-                let mp = case def of
-                          Datatype{dataPars = np} -> Just np
-                          Record{recPars = np}    -> Just np
-                          _                       -> Nothing
-                case mp of
-                  Nothing -> keepGoing
-                  Just np -> do
-                    let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
-                    traceCall (CheckPattern p EmptyTel a) $ do  -- TODO: wrong telescope
-                      -- Check that we construct something in the right datatype
-                      c <- lift $ do
-                          -- Andreas, 2017-08-13, issue #2686: ignore abstract constructors
-                          (cs1, cs') <- unzip . snd . partitionEithers <$> do
-                            forM cs $ \ c -> mapRight ((c,) . conName) <$> getConHead c
-                          when (null cs1) $ typeError $ AbstractConstructorNotInScope $ head cs
-                          d'  <- canonicalName d
-                          cs0 <- (theDef <$> getConstInfo d') <&> \case
-                                Datatype{dataCons = cs0} -> cs0
-                                Record{recConHead = c0}  -> [conName c0]
-                                _ -> __IMPOSSIBLE__
-                          case [ c | (c, c') <- zip cs1 cs', elem c' cs0 ] of
-                            [c]   -> do
-                              -- If constructor pattern was ambiguous,
-                              -- remember our choice for highlighting info.
-                              when (length cs >= 2) $ storeDisambiguatedName c
-                              return c
-                            []    -> typeError $ ConstructorPatternInWrongDatatype (head cs1) d
-                            cs3   -> -- if there are more than one we give up (they might have different types)
-                              typeError $ CantResolveOverloadedConstructorsTargetingSameDatatype d cs3
-
-                      let (pars, ixs) = splitAt np vs
-                      lift $ reportSDoc "tc.lhs.split" 10 $ vcat
-                        [ sep [ text "splitting on"
-                              , nest 2 $ fsep [ prettyA p, text ":", prettyTCM dom ]
-                              ]
-                        , nest 2 $ text "pars =" <+> fsep (punctuate comma $ map prettyTCM pars)
-                        , nest 2 $ text "ixs  =" <+> fsep (punctuate comma $ map prettyTCM ixs)
-                        ]
-
-                      -- Andreas, 2013-03-22 fixing issue 279
-                      -- To resolve ambiguous constructors, Agda always looks up
-                      -- their original definition and reconstructs the parameters
-                      -- from the type @Def d vs@ we check against.
-                      -- However, the constructor could come from a module instantiation
-                      -- with some of the parameters already fixed.
-                      -- Agda did not make sure the two parameter lists coincide,
-                      -- so we add a check here.
-                      -- I guess this issue could be solved more systematically,
-                      -- but the extra check here is non-invasive to the existing code.
-                      -- Andreas, 2016-12-31 fixing issue #1975
-                      -- Do this also for constructors which were originally ambiguous.
-                      checkConstructorParameters c d pars
-
-                      (return Split
-                        { splitLPats   = empty
-                        , splitFocus   = Arg ai $ Focus c (A.patOrigin ci) args (getRange p) qs d pars ixs a
-                        , splitRPats   = Abs x  $ Problem ps () tel __IMPOSSIBLE__
-                        }) `mplus` keepGoing
-              -- Subcase: split type is not a Def.
-              _   -> keepGoing
-
-        -- Case: neither literal nor constructor pattern.
-        _ -> keepGoing
-
-
--- | @checkConstructorParameters c d pars@ checks that the data/record type
---   behind @c@ is has initial parameters (coming e.g. from a module instantiation)
---   that coincide with an prefix of @pars@.
-checkConstructorParameters :: MonadTCM tcm => QName -> QName -> Args -> tcm ()
-checkConstructorParameters c d pars = do
-  dc <- liftTCM $ getConstructorData c
-  checkParameters dc d pars
-
--- | Check that given parameters match the parameters of the inferred
---   constructor/projection.
-checkParameters
-  :: MonadTCM tcm
-  => QName  -- ^ The record/data type name of the chosen constructor/projection.
-  -> QName  -- ^ The record/data type name as supplied by the type signature.
-  -> Args   -- ^ The parameters.
-  -> tcm ()
-checkParameters dc d pars = liftTCM $ do
-  a  <- reduce (Def dc [])
-  case ignoreSharing a of
-    Def d0 es -> do -- compare parameters
-      let vs = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
-      reportSDoc "tc.lhs.split" 40 $
-        vcat [ nest 2 $ text "d                   =" <+> (text . prettyShow) d
-             , nest 2 $ text "d0 (should be == d) =" <+> (text . prettyShow) d0
-             , nest 2 $ text "dc                  =" <+> (text . prettyShow) dc
-             , nest 2 $ text "vs                  =" <+> prettyTCM vs
-             ]
-      -- when (d0 /= d) __IMPOSSIBLE__ -- d could have extra qualification
-      t <- typeOfConst d
-      compareArgs [] t (Def d []) vs (take (length vs) pars)
-    _ -> __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
@@ -3,7 +3,6 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE NondecreasingIndentation   #-}
 {-# LANGUAGE UndecidableInstances       #-}
-{-# LANGUAGE ViewPatterns               #-}
 
 -- | Unification algorithm for specializing datatype indices, as described in
 --     \"Unifiers as Equivalences: Proof-Relevant Unification of Dependently
@@ -111,7 +110,6 @@
 import Control.Arrow ((***))
 import Control.Applicative hiding (empty)
 import Control.Monad
-import Control.Monad.Plus
 import Control.Monad.State
 import Control.Monad.Trans.Maybe
 import Control.Monad.Reader
@@ -122,7 +120,6 @@
 import Data.Semigroup hiding (Arg)
 import qualified Data.List as List
 
-import Data.Typeable (Typeable)
 import Data.Foldable (Foldable)
 import Data.Traversable (Traversable,traverse)
 import qualified Data.Traversable as Trav
@@ -142,6 +139,7 @@
 import Agda.TypeChecking.Constraints
 import Agda.TypeChecking.Datatypes
 import Agda.TypeChecking.DropArgs
+import Agda.TypeChecking.Irrelevance
 import Agda.TypeChecking.Level (reallyUnLevelView)
 import Agda.TypeChecking.Reduce
 import qualified Agda.TypeChecking.Patterns.Match as Match
@@ -155,7 +153,7 @@
 import Agda.TypeChecking.EtaContract
 import Agda.Interaction.Options (optInjectiveTypeConstructors, optWithoutK)
 
-import Agda.TypeChecking.Rules.LHS.Problem hiding (Substitution)
+import Agda.TypeChecking.Rules.LHS.Problem
 -- import Agda.TypeChecking.SyntacticEquality
 
 import Agda.Utils.Except ( MonadError(catchError, throwError) )
@@ -183,7 +181,7 @@
   = Unifies  a                    -- ^ Unification succeeded.
   | NoUnify  NegativeUnification  -- ^ Terms are not unifiable.
   | DontKnow [UnificationFailure] -- ^ Some other error happened, unification got stuck.
-  deriving (Typeable, Show, Functor, Foldable, Traversable)
+  deriving (Show, Functor, Foldable, Traversable)
 
 -- | Unify indices.
 --
@@ -225,7 +223,7 @@
 ----------------------------------------------------
 
 data Equality = Equal
-  { eqType  :: Type
+  { eqType  :: Dom Type
   , eqLeft  :: Term
   , eqRight :: Term
   }
@@ -317,11 +315,11 @@
 varCount = size . varTel
 
 -- | Get the type of the i'th variable in the given state
-getVarType :: Int -> UnifyState -> Type
-getVarType i s = if i < 0 then __IMPOSSIBLE__ else unDom $ (flattenTel $ varTel s) !! i
+getVarType :: Int -> UnifyState -> Dom Type
+getVarType i s = if i < 0 then __IMPOSSIBLE__ else (flattenTel $ varTel s) !! i
 
-getVarTypeUnraised :: Int -> UnifyState -> Type
-getVarTypeUnraised i s = if i < 0 then __IMPOSSIBLE__ else snd . unDom $ (telToList $ varTel s) !! i
+getVarTypeUnraised :: Int -> UnifyState -> Dom Type
+getVarTypeUnraised i s = if i < 0 then __IMPOSSIBLE__ else snd <$> (telToList $ varTel s) !! i
 
 eqCount :: UnifyState -> Int
 eqCount = size . eqTel
@@ -332,13 +330,13 @@
 getEquality :: Int -> UnifyState -> Equality
 getEquality k UState { eqTel = eqs, eqLHS = lhs, eqRHS = rhs } =
   if k < 0 then __IMPOSSIBLE__ else
-    Equal (unDom $ (flattenTel eqs) !! k) (unArg $ lhs !! k) (unArg $ rhs !! k)
+    Equal (flattenTel eqs !! k) (unArg $ lhs !! k) (unArg $ rhs !! k)
 
 -- | As getEquality, but with the unraised type
 getEqualityUnraised :: Int -> UnifyState -> Equality
 getEqualityUnraised k UState { eqTel = eqs, eqLHS = lhs, eqRHS = rhs } =
   if k < 0 then __IMPOSSIBLE__ else
-    Equal (snd . unDom $ (telToList eqs) !! k)
+    Equal (snd <$> (telToList eqs) !! k)
           (unArg $ lhs !! k)
           (unArg $ rhs !! k)
 
@@ -362,7 +360,9 @@
 
 -- | Instantiate the k'th variable with the given value.
 --   Returns Nothing if there is a cycle.
-solveVar :: Int -> Term -> UnifyState -> Maybe (UnifyState, PatternSubstitution)
+solveVar :: Int    -- ^ Index @k@
+         -> Term   -- ^ Solution @u@
+         -> UnifyState -> Maybe (UnifyState, PatternSubstitution)
 solveVar k u s = case instantiateTelescope (varTel s) k u of
   Nothing -> Nothing
   Just (tel' , sigma , rho) -> Just $ (,sigma) $ UState
@@ -405,7 +405,7 @@
   where
     u'    = raise k u
     n     = eqCount s
-    sigma = liftS (n-k-1) $ consS (DotP u') idS
+    sigma = liftS (n-k-1) $ consS (dotP u') idS
 
 -- | Simplify the k'th equation with the given value (which can depend on other
 --   equation variables). Returns Nothing if there is a cycle.
@@ -433,8 +433,8 @@
     }
   | Solution
     { solutionAt         :: Int
-    , solutionType       :: Type
-    , solutionVar        :: Int
+    , solutionType       :: Dom Type
+    , solutionVar        :: FlexibleVar Int
     , solutionTerm       :: Term
     }
   | Injectivity
@@ -531,7 +531,7 @@
       , text "record type:" <+> prettyTCM r
       , text "parameters: " <+> prettyTCM pars
       ])
-    EtaExpandEquation k r pars -> text "EtaExpandVar" $$ nest 2 (vcat $
+    EtaExpandEquation k r pars -> text "EtaExpandEquation" $$ nest 2 (vcat $
       [ text "position:   " <+> text (show k)
       , text "record type:" <+> prettyTCM r
       , text "parameters: " <+> prettyTCM pars
@@ -589,72 +589,6 @@
   guard $ getAll $ runFree (All . (>= n)) IgnoreNot x
   return $ raise (-n) x
 
--- | Checks whether the given term (of the given type) is beta-eta-equivalent
---   to a variable. Returns just the de Bruijn-index of the variable if it is,
---   or nothing otherwise.
-isEtaVar :: Term -> Type -> TCM (Maybe Int)
-isEtaVar u a = runMaybeT $ isEtaVarG u a Nothing []
-  where
-    -- Checks whether the term u (of type a) is beta-eta-equivalent to
-    -- `Var i es`, and returns i if it is. If the argument mi is `Just i'`,
-    -- then i and i' are also required to be equal (else Nothing is returned).
-    isEtaVarG :: Term -> Type -> Maybe Int -> [Elim' Int] -> MaybeT TCM Int
-    isEtaVarG u a mi es = do
-      (u, a) <- liftTCM $ reduce (u, a)
-      liftTCM $ reportSDoc "tc.lhs.unify" 80 $ text "isEtaVarG" <+> nest 2 (sep
-        [ text "u  = " <+> text (show u)
-        , text "a  = " <+> prettyTCM a
-        , text "mi = " <+> text (show mi)
-        , text "es = " <+> prettyList (map (text . show) es)
-        ])
-      case (ignoreSharing u, ignoreSharing $ unEl a) of
-        (Var i' es', _) -> do
-          guard $ mi == (i' <$ mi)
-          b <- liftTCM $ typeOfBV i'
-          areEtaVarElims (var i') b es' es
-          return i'
-        (_, Def d pars) -> do
-          guard =<< do liftTCM $ isEtaRecord d
-          fs <- liftTCM $ map unArg . recFields . theDef <$> getConstInfo d
-          is <- forM fs $ \f -> do
-            let o = ProjSystem
-            (_, _, fa) <- MaybeT $ projectTyped u a o f
-            isEtaVarG (u `applyE` [Proj o f]) fa mi (es ++ [Proj o f])
-          case (mi, is) of
-            (Just i, _)     -> return i
-            (Nothing, [])   -> mzero
-            (Nothing, i:is) -> guard (all (==i) is) >> return i
-        (_, Pi dom cod) -> addContext dom $ do
-          let u'  = raise 1 u `apply` [argFromDom dom $> var 0]
-              a'  = absBody cod
-              mi' = fmap (+1) mi
-              es' = (fmap . fmap) (+1) es ++ [Apply $ argFromDom dom $> 0]
-          (-1+) <$> isEtaVarG u' a' mi' es'
-        _ -> mzero
-
-    -- `areEtaVarElims u a es es'` checks whether the given elims es (as applied
-    -- to the term u of type a) are beta-eta-equal to either projections or
-    -- variables with de Bruijn indices given by es'.
-    areEtaVarElims :: Term -> Type -> Elims -> [Elim' Int] -> MaybeT TCM ()
-    areEtaVarElims u a []    []    = return ()
-    areEtaVarElims u a []    (_:_) = mzero
-    areEtaVarElims u a (_:_) []    = mzero
-    areEtaVarElims u a (Proj o f : es) (Proj _ f' : es') = do
-      guard $ f == f'
-      a       <- liftTCM $ reduce a
-      (_, _, fa) <- MaybeT $ projectTyped u a o f
-      areEtaVarElims (u `applyE` [Proj o f]) fa es es'
-    -- These two cases can occur only when we're looking at two different
-    -- variables (i.e. one of function type and the other of record type) so
-    -- it's definitely not the variable we're looking for (or someone is playing
-    -- Jedi mind tricks on us)
-    areEtaVarElims u a (Proj{}  : _ ) (Apply _ : _  ) = mzero
-    areEtaVarElims u a (Apply _ : _ ) (Proj{}  : _  ) = mzero
-    areEtaVarElims u a (Apply v : es) (Apply i : es') = do
-      ifNotPiType a (const mzero) $ \dom cod -> do
-      _ <- isEtaVarG (unArg v) (unDom dom) (Just $ unArg i) []
-      areEtaVarElims (u `apply` [fmap var i]) (cod `absApp` var (unArg i)) es es'
-
 findFlexible :: Int -> FlexibleVars -> Maybe (FlexibleVar Nat)
 findFlexible i flex =
   let flex'      = map flexVar flex
@@ -663,8 +597,8 @@
 
 basicUnifyStrategy :: Int -> UnifyStrategy
 basicUnifyStrategy k s = do
-  Equal a u v <- liftTCM $ eqUnLevel (getEquality k s)
-  ha <- mfromMaybe $ isHom n a
+  Equal (Dom info a) u v <- liftTCM $ eqUnLevel (getEquality k s)
+  ha <- fromMaybeMP $ isHom n a
   (mi, mj) <- liftTCM $ addContext (varTel s) $ (,) <$> isEtaVar u ha <*> isEtaVar v ha
   liftTCM $ reportSDoc "tc.lhs.unify" 30 $ text "isEtaVar results: " <+> text (show [mi,mj])
   case (mi, mj) of
@@ -674,10 +608,10 @@
      | Just fi <- findFlexible i flex
      , Just fj <- findFlexible j flex -> do
        let choice = chooseFlex fi fj
-           firstTryLeft  = msum [ return (Solution k ha i v)
-                                , return (Solution k ha j u)]
-           firstTryRight = msum [ return (Solution k ha j u)
-                                , return (Solution k ha i v)]
+           firstTryLeft  = msum [ return (Solution k (Dom info ha) fi v)
+                                , return (Solution k (Dom info ha) fj u)]
+           firstTryRight = msum [ return (Solution k (Dom info ha) fj u)
+                                , return (Solution k (Dom info ha) fi v)]
        liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "fi = " <+> text (show fi)
        liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "fj = " <+> text (show fj)
        liftTCM $ reportSDoc "tc.lhs.unify" 40 $ text "chooseFlex: " <+> text (show choice)
@@ -687,9 +621,9 @@
          ExpandBoth   -> mzero -- This should be taken care of by etaExpandEquationStrategy
          ChooseEither -> firstTryRight
     (Just i, _)
-     | Just _ <- findFlexible i flex -> return $ Solution k ha i v
+     | Just fi <- findFlexible i flex -> return $ Solution k (Dom info ha) fi v
     (_, Just j)
-     | Just _ <- findFlexible j flex -> return $ Solution k ha j u
+     | Just fj <- findFlexible j flex -> return $ Solution k (Dom info ha) fj u
     _ -> mzero
   where
     flex = flexVars s
@@ -697,16 +631,16 @@
 
 dataStrategy :: Int -> UnifyStrategy
 dataStrategy k s = do
-  Equal a u v <- liftTCM $ eqConstructorForm =<< eqUnLevel (getEqualityUnraised k s)
-  case ignoreSharing $ unEl a of
-    Def d es -> do
-      npars <- mcatMaybes $ liftTCM $ getNumberOfParameters d
+  Equal (Dom _ a) u v <- liftTCM $ eqConstructorForm =<< eqUnLevel (getEqualityUnraised k s)
+  case unEl a of
+    Def d es | Type{} <- getSort a -> do
+      npars <- catMaybesMP $ liftTCM $ getNumberOfParameters d
       let (pars,ixs) = splitAt npars $ fromMaybe __IMPOSSIBLE__ $ allApplyElims es
-      hpars <- mfromMaybe $ isHom k pars
+      hpars <- fromMaybeMP $ isHom k pars
       liftTCM $ reportSDoc "tc.lhs.unify" 40 $ addContext (varTel s) $
         text "Found equation at datatype " <+> prettyTCM d
          <+> text " with (homogeneous) parameters " <+> prettyTCM hpars
-      case (ignoreSharing u, ignoreSharing v) of
+      case (u, v) of
         (Con c _ _   , Con c' _ _  ) | c == c' -> return $ Injectivity k a d hpars ixs c
         (Con c _ _   , Con c' _ _  ) -> return $ Conflict k d hpars u v
         (Var i []  , v         ) -> ifOccursStronglyRigid i v $ return $ Cycle k d hpars i v
@@ -725,16 +659,16 @@
 
 checkEqualityStrategy :: Int -> UnifyStrategy
 checkEqualityStrategy k s = do
-  let Equal a u v = getEquality k s
+  let Equal (Dom _ a) u v = getEquality k s
       n = eqCount s
-  ha <- mfromMaybe $ isHom n a
+  ha <- fromMaybeMP $ isHom n a
   return $ Deletion k ha u v
 
 literalStrategy :: Int -> UnifyStrategy
 literalStrategy k s = do
   let n = eqCount s
-  Equal a u v <- liftTCM $ eqUnLevel $ getEquality k s
-  ha <- mfromMaybe $ isHom n a
+  Equal (Dom _ a) u v <- liftTCM $ eqUnLevel $ getEquality k s
+  ha <- fromMaybeMP $ isHom n a
   case (u , v) of
     (Lit l1 , Lit l2)
      | l1 == l2  -> return $ Deletion k ha u v
@@ -743,30 +677,39 @@
 
 etaExpandVarStrategy :: Int -> UnifyStrategy
 etaExpandVarStrategy k s = do
-  Equal a u v <- liftTCM $ eqUnLevel (getEquality k s)
-  shouldEtaExpand u a s `mplus` shouldEtaExpand v a s
+  Equal (Dom _ a) u v <- liftTCM $ eqUnLevel (getEquality k s)
+  shouldEtaExpand u v a s `mplus` shouldEtaExpand v u a s
   where
     -- TODO: use IsEtaVar to check if the term is a variable
-    shouldEtaExpand :: Term -> Type -> UnifyStrategy
-    shouldEtaExpand (Var i es) a s = do
-      fi       <- mfromMaybe $ findFlexible i (flexVars s)
+    shouldEtaExpand :: Term -> Term -> Type -> UnifyStrategy
+    shouldEtaExpand (Var i es) v a s = do
+      fi       <- fromMaybeMP $ findFlexible i (flexVars s)
       liftTCM $ reportSDoc "tc.lhs.unify" 50 $
         text "Found flexible variable " <+> text (show i)
-      ps       <- mfromMaybe $ allProjElims es
-      guard $ not $ null ps
+      -- Issue 2888: Do this if there are projections or if it's a singleton
+      -- record or if it's unified against a record constructor term. Basically
+      -- we need to avoid EtaExpandEquation if EtaExpandVar is possible, or the
+      -- forcing translation is unhappy.
+      let Dom _ b = getVarTypeUnraised (varCount s - 1 - i) s
+      (d, pars) <- catMaybesMP $ liftTCM $ isEtaRecordType b
+      ps        <- fromMaybeMP $ allProjElims es
+      sing      <- liftTCM $ (Right True ==) <$> isSingletonRecord d pars
+      con       <- liftTCM $ isRecCon v  -- is the other term a record constructor?
+      guard $ not (null ps) || sing || con
       liftTCM $ reportSDoc "tc.lhs.unify" 50 $
         text "with projections " <+> prettyTCM (map snd ps)
-      let b = getVarTypeUnraised (varCount s - 1 - i) s
-      (d, pars) <- mcatMaybes $ liftTCM $ isEtaRecordType b
       liftTCM $ reportSDoc "tc.lhs.unify" 50 $
         text "at record type " <+> prettyTCM d
       return $ EtaExpandVar fi d pars
-    shouldEtaExpand _ _ _ = mzero
+    shouldEtaExpand _ _ _ _ = mzero
 
+    isRecCon (Con c _ _) = isJust <$> isRecordConstructor (conName c)
+    isRecCon _           = return False
+
 etaExpandEquationStrategy :: Int -> UnifyStrategy
 etaExpandEquationStrategy k s = do
-  let Equal a u v = getEqualityUnraised k s
-  (d, pars) <- mcatMaybes $ liftTCM $ addContext tel $ isEtaRecordType a
+  let Equal (Dom _ a) u v = getEqualityUnraised k s
+  (d, pars) <- catMaybesMP $ liftTCM $ addContext tel $ isEtaRecordType a
   sing <- liftTCM $ (Right True ==) <$> isSingletonRecord d pars
   projLeft <- liftTCM $ shouldProject u
   projRight <- liftTCM $ shouldProject v
@@ -774,7 +717,7 @@
   return $ EtaExpandEquation k d pars
   where
     shouldProject :: Term -> TCM Bool
-    shouldProject u = case ignoreSharing u of
+    shouldProject u = case u of
       Def f es   -> usesCopatterns f
       Con c _ _  -> isJust <$> isRecordConstructor (conName c)
 
@@ -786,15 +729,14 @@
       Level _    -> __IMPOSSIBLE__
       MetaV _ _  -> return False
       DontCare _ -> return False
-      Shared _   -> __IMPOSSIBLE__
 
     tel = varTel s `abstract` telFromList (take k $ telToList $ eqTel s)
 
 simplifySizesStrategy :: Int -> UnifyStrategy
 simplifySizesStrategy k s = do
   isSizeName <- liftTCM isSizeNameTest
-  let Equal a u v = getEquality k s
-  case ignoreSharing $ unEl a of
+  let Equal (Dom _ a) u v = getEquality k s
+  case unEl a of
     Def d _ -> do
       guard $ isSizeName d
       su <- liftTCM $ sizeView u
@@ -812,7 +754,7 @@
   guard injTyCon
   eq <- liftTCM $ eqUnLevel $ getEquality k s
   case eq of
-    Equal a u@(ignoreSharing -> Def d es) v@(ignoreSharing -> Def d' es') | d == d' -> do
+    Equal a u@(Def d es) v@(Def d' es') | d == d' -> do
       -- d must be a data, record or axiom
       def <- liftTCM $ getConstInfo d
       guard $ case theDef def of
@@ -832,7 +774,7 @@
 injectivePragmaStrategy k s = do
   eq <- liftTCM $ eqUnLevel $ getEquality k s
   case eq of
-    Equal a u@(ignoreSharing -> Def d es) v@(ignoreSharing -> Def d' es') | d == d' -> do
+    Equal a u@(Def d es) v@(Def d' es') | d == d' -> do
       -- d must have an injective pragma
       def <- liftTCM $ getConstInfo d
       guard $ defInjective def
@@ -907,12 +849,15 @@
         tellUnifyProof sigma
         Unifies <$> liftTCM (reduceEqTel s')
 
-unifyStep s Solution{ solutionAt = k , solutionType = a , solutionVar = i , solutionTerm = u } = do
+unifyStep s Solution{ solutionAt   = k
+                    , solutionType = Dom info a
+                    , solutionVar  = fi@FlexibleVar{ flexVar = i }
+                    , solutionTerm = u } = do
   let m = varCount s
 
   -- Check that the type of the variable is equal to the type of the equation
   -- (not just a subtype), otherwise we cannot instantiate (see Issue 2407).
-  let a' = getVarType (m-1-i) s
+  let Dom info' a' = getVarType (m-1-i) s
   equalTypes <- liftTCM $ addContext (varTel s) $ do
     reportSDoc "tc.lhs.unify" 45 $ text "Equation type: " <+> prettyTCM a
     reportSDoc "tc.lhs.unify" 45 $ text "Variable type: " <+> prettyTCM a'
@@ -920,15 +865,30 @@
       equalType a a'
     return Nothing
     `catchError` \err -> return $ Just err
+  -- The conditions on the relevances are as follows (see #2640):
+  -- - If the type of the equation is relevant, then the solution must be
+  --   usable in a relevant position.
+  -- - If the type of the equation is (shape-)irrelevant, then the solution
+  --   must be usable in a μ-relevant position where μ is the relevance
+  --   of the variable being solved.
+  let eqrel  = getRelevance info
+      varrel = getRelevance info'
+      rel    = if NonStrict `moreRelevant` eqrel then varrel else Relevant
+  reportSDoc "tc.lhs.unify" 65 $ text $ "Equation relevance: " ++ show eqrel
+  reportSDoc "tc.lhs.unify" 65 $ text $ "Variable relevance: " ++ show varrel
+  reportSDoc "tc.lhs.unify" 65 $ text $ "Solution must be usable in a " ++ show rel ++ " position."
+  usable <- liftTCM $ addContext (varTel s) $ usableRel rel u
+  reportSDoc "tc.lhs.unify" 45 $ text "Relevance ok: " <+> prettyTCM usable
   case equalTypes of
     Just err -> return $ DontKnow []
-    Nothing  -> caseMaybeM (trySolveVar (m-1-i) u s)
+    Nothing | usable -> caseMaybeM (trySolveVar (m-1-i) u s)
       (return $ DontKnow [UnifyRecursiveEq (varTel s) a i u])
       (\(s',sub) -> do
         tellUnifySubst sub
         let (s'', sigma) = solveEq k (applyPatSubst sub u) s'
         tellUnifyProof sigma
         Unifies <$> liftTCM (reduce s''))
+    Nothing -> return $ DontKnow []
   where
     trySolveVar i u s = case solveVar i u s of
       Just x  -> return $ Just x
@@ -946,7 +906,7 @@
   addContext (varTel s) $ reportSDoc "tc.lhs.unify" 40 $
     text "Constructor type: " <+> prettyTCM ctype
   TelV ctel ctarget <- liftTCM $ telView ctype
-  let cixs = case ignoreSharing $ unEl ctarget of
+  let cixs = case unEl ctarget of
                Def d' es | d == d' ->
                  let args = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
                  in  drop (length pars) args
@@ -980,10 +940,39 @@
     -- same type for distinct constructors c1 and c2.
     NoUnify _ -> __IMPOSSIBLE__
 
-    -- TODO: we could still make progress here if not --without-K,
-    -- but I'm not sure if it's necessary.
+    -- Higher-dimensional unification has failed. If not --without-K,
+    -- we can simply ignore the higher-dimensional equations and
+    -- simplify the equation as in the non-indexed case.
+    DontKnow _ | not withoutK -> do
+      -- using the same variable names as in the case where hdu succeeds.
+      let eqTel1' = eqTel1 `abstract` raise (size eqTel1) ctel
+          rho1    = raiseS (size ctel)
+          ceq     = ConP c noConPatternInfo $ teleNamedArgs ctel
+          rho3    = consS ceq rho1
+          eqTel2' = applyPatSubst rho3 eqTel2
+          eqTel'  = eqTel1' `abstract` eqTel2'
+          rho     = liftS (size eqTel2) rho3
+
+      tellUnifyProof rho
+
+      eqTel' <- liftTCM $ reduce eqTel'
+
+      -- Compute new lhs and rhs by matching the old ones against rho
+      (lhs', rhs') <- liftTCM . reduce =<< do
+        let ps = applySubst rho $ teleNamedArgs $ eqTel s
+        (lhsMatch, _) <- liftTCM $ runReduceM $ Match.matchPatterns ps $ eqLHS s
+        (rhsMatch, _) <- liftTCM $ runReduceM $ Match.matchPatterns ps $ eqRHS s
+        case (lhsMatch, rhsMatch) of
+          (Match.Yes _ lhs', Match.Yes _ rhs') -> return
+            (reverse $ Match.matchedArgs __IMPOSSIBLE__ (size eqTel') lhs',
+             reverse $ Match.matchedArgs __IMPOSSIBLE__ (size eqTel') rhs')
+          _ -> __IMPOSSIBLE__
+
+      return $ Unifies $ s { eqTel = eqTel' , eqLHS = lhs' , eqRHS = rhs' }
+
+
     DontKnow _ -> let n           = eqCount s
-                      Equal a u v = getEquality k s
+                      Equal (Dom _ a) u v = getEquality k s
                   in return $ DontKnow [UnifyIndicesNotVars
                        (varTel s `abstract` eqTel s) a
                        (raise n u) (raise n v) (raise (n-k) ixs)]
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
@@ -26,6 +26,7 @@
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Polarity
 import Agda.TypeChecking.Irrelevance
+import Agda.TypeChecking.CompiledClause (hasProjectionPatterns)
 import Agda.TypeChecking.CompiledClause.Compile
 
 import Agda.TypeChecking.Rules.Data ( bindParameters, fitsIn, forceSort)
@@ -62,7 +63,7 @@
   :: Info.DefInfo              -- ^ Position and other info.
   -> QName                     -- ^ Record type identifier.
   -> Maybe (Ranged Induction)  -- ^ Optional: (co)inductive declaration.
-  -> Maybe Bool                -- ^ Optional: user specified eta/no-eta
+  -> Maybe HasEta              -- ^ Optional: user specified eta/no-eta
   -> Maybe QName               -- ^ Optional: constructor name.
   -> [A.LamBinding]            -- ^ Record parameters.
   -> A.Expr                    -- ^ Approximate type of constructor (@fields@ -> Set).
@@ -86,8 +87,7 @@
 
       -- Check and evaluate field types.
       reportSDoc "tc.rec" 15 $ text "checking fields"
-      -- WRONG: contype <- workOnTypes $ killRange <$> (instantiateFull =<< isType_ contel)
-      contype <- instantiateFull =<< isType_ contel
+      contype <- workOnTypes $ instantiateFull =<< isType_ contel
       reportSDoc "tc.rec" 20 $ vcat
         [ text "contype = " <+> prettyTCM contype ]
 
@@ -141,7 +141,7 @@
           -- Andreas, 2016-09-20, issue #2197.
           -- Eta is inferred by the positivity checker.
           -- We should turn it off until it is proven to be safe.
-          haveEta      = maybe (Inferred False) Specified eta
+          haveEta      = maybe (Inferred NoEta) Specified eta
           -- haveEta      = maybe (Inferred $ conInduction == Inductive && etaenabled) Specified eta
           con = ConHead conName conInduction $ map unArg fs
 
@@ -150,13 +150,13 @@
           -- See issue 392.
           -- Unless it's been declared coinductive or no-eta-equality (#2607).
           recordRelevance
-            | eta          == Just False  = Relevant
+            | eta          == Just NoEta  = Relevant
             | conInduction == CoInductive = Relevant
             | otherwise                   = minimum $ Irrelevant : (map getRelevance $ telToList ftel)
 
       -- Andreas, 2017-01-26, issue #2436
       -- Disallow coinductive records with eta-equality
-      when (conInduction == CoInductive && etaEqualityToBool haveEta == True) $ do
+      when (conInduction == CoInductive && theEtaEquality haveEta == YesEta) $ do
         typeError . GenericDocError =<< do
           sep [ text "Agda doesn't like coinductive records with eta-equality."
               , text "If you must, use pragma"
@@ -202,6 +202,7 @@
               , conData   = name
               , conAbstr  = Info.defAbstract conInfo
               , conInd    = conInduction
+              , conForced = []
               , conErased = []
               }
 
@@ -210,7 +211,7 @@
         addNamedInstance conName name
 
       -- Check that the fields fit inside the sort
-      _ <- contype `fitsIn` s
+      _ <- fitsIn [] contype s
 
       {- Andreas, 2011-04-27 WRONG because field types are checked again
          and then non-stricts should not yet be irrelevant
@@ -247,7 +248,7 @@
 -}
 
       let info = setRelevance recordRelevance defaultArgInfo
-          addRecordVar = addContext' ("", Dom info rect)
+          addRecordVar = addContext ("", Dom info rect)
           -- the record variable has the empty name by intention, see issue 208
 
       let m = qnameToMName name  -- Name of record module.
@@ -256,7 +257,7 @@
       -- section telescope changes the semantics, see e.g.
       -- test/Succeed/RecordInParModule.
       -- Ulf, 2016-03-02 but it's the right thing to do (#1759)
-      modifyContext (modifyContextEntries hideOrKeepInstance) $ addRecordVar $ do
+      modifyContext (map hideOrKeepInstance) $ addRecordVar $ do
 
         -- Add the record section.
 
@@ -275,7 +276,7 @@
       -- Andreas, 2016-02-09, Issue 1815 (see also issue 1759).
       -- For checking the record declarations, hide the record parameters
       -- and the parameters of the parent modules.
-      modifyContext (modifyContextEntries hideOrKeepInstance) $ addRecordVar $ do
+      modifyContext (map hideOrKeepInstance) $ addRecordVar $ do
 
         -- Check the types of the fields and the other record declarations.
         withCurrentModule m $ do
@@ -286,7 +287,7 @@
           -- record type.
           -- See test/Succeed/ProjectionsTakeModuleTelAsParameters.agda.
           tel' <- getContextTelescope
-          setDefaultModuleParameters m
+          setModuleCheckpoint m
           checkRecordProjections m name hasNamedCon con tel' (raise 1 ftel) fields
 
       return ()
@@ -319,6 +320,7 @@
     checkProjs ftel1 ftel2 (A.ScopedDecl scope fs' : fs) =
       setScope scope >> checkProjs ftel1 ftel2 (fs' ++ fs)
 
+    -- Case: projection.
     checkProjs ftel1 (ExtendTel (Dom ai t) ftel2) (A.Field info x _ : fs) =
       traceCall (CheckProjection (getRange info) x t) $ do
       -- Andreas, 2012-06-07:
@@ -392,15 +394,16 @@
               Relevant   -> id
               NonStrict  -> id
               Irrelevant -> DontCare
-              _          -> __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
             telList = telToList tel
             (_ptel,[rt]) = splitAt (size tel - 1) telList
-            cpo    = if hasNamedCon then ConOCon else ConORec
-            cpi    = ConPatternInfo (Just cpo) (Just $ argFromDom $ fmap snd rt)
+            cpo    = if hasNamedCon then PatOCon else PatORec
+            cpi    = ConPatternInfo { conPRecord = Just cpo
+                                    , conPType   = Just $ argFromDom $ fmap snd rt
+                                    , conPLazy   = True }
             conp   = defaultArg $ ConP con cpi $
                      [ Arg ai' $ unnamed $ varP "x" | Dom ai' _ <- telToList ftel ]
             body   = Just $ bodyMod $ var (size ftel2)
@@ -458,8 +461,9 @@
                 { funClauses        = [clause]
                 , funCompiled       = Just cc
                 , funProjection     = Just projection
+                , funMutual         = Just []  -- Projections are not mutually recursive with anything
                 , funTerminates     = Just True
-                , funCopatternLHS   = isCopatternLHS [clause]
+                , funCopatternLHS   = hasProjectionPatterns cc
                 })
               { defArgOccurrences = [StrictPos] }
           computePolarity [projname]
@@ -468,6 +472,7 @@
 
         recurse
 
+    -- Case: definition.
     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
@@ -3,2276 +3,1343 @@
 
 module Agda.TypeChecking.Rules.Term where
 
-import Prelude hiding (null)
-
-import Control.Applicative hiding (empty)
-import Control.Arrow ((&&&), (***), first, second)
-import Control.Monad.Trans
-import Control.Monad.Trans.Maybe
-import Control.Monad.State (get, put)
-import Control.Monad.Reader
-
-import Data.Maybe
-import Data.Either (partitionEithers)
-import Data.Monoid (mappend)
-import qualified Data.List as List
-import qualified Data.Map as Map
-import qualified Data.Set as Set
-import Data.Traversable (sequenceA)
-import Data.Void
-
-import Agda.Interaction.Options
-import Agda.Interaction.Highlighting.Generate (storeDisambiguatedName)
-
-import qualified Agda.Syntax.Abstract as A
-import Agda.Syntax.Abstract.Views as A
-import qualified Agda.Syntax.Info as A
-import Agda.Syntax.Concrete.Pretty () -- only Pretty instances
-import Agda.Syntax.Concrete (FieldAssignment'(..), nameFieldA, exprFieldA)
-import qualified Agda.Syntax.Concrete.Name as C
-import Agda.Syntax.Common
-import Agda.Syntax.Fixity
-import Agda.Syntax.Internal as I
-import Agda.Syntax.Position
-import Agda.Syntax.Literal
-import qualified Agda.Syntax.Reflected as R
-import Agda.Syntax.Scope.Base ( ThingsInScope, AbstractName
-                              , emptyScopeInfo
-                              , exportedNamesInScope)
-import Agda.Syntax.Scope.Monad (getNamedScope)
-import Agda.Syntax.Translation.InternalToAbstract (reify)
-import Agda.Syntax.Translation.ReflectedToAbstract (toAbstract_)
-
-import Agda.TypeChecking.Monad
-import Agda.TypeChecking.Monad.Builtin
-import Agda.TypeChecking.CompiledClause
-import Agda.TypeChecking.Constraints
-import Agda.TypeChecking.Conversion
-import Agda.TypeChecking.Datatypes
-import Agda.TypeChecking.EtaContract
-import Agda.TypeChecking.Free (isBinderUsed)
-import Agda.TypeChecking.Implicit
-import Agda.TypeChecking.InstanceArguments
-import Agda.TypeChecking.Irrelevance
-import Agda.TypeChecking.Level
-import Agda.TypeChecking.MetaVars
-import Agda.TypeChecking.Patterns.Abstract
-import Agda.TypeChecking.Positivity.Occurrence
-import Agda.TypeChecking.Pretty
-import Agda.TypeChecking.Primitive
-import Agda.TypeChecking.Quote
-import Agda.TypeChecking.Unquote
-import Agda.TypeChecking.RecordPatterns
-import Agda.TypeChecking.Records
-import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.SizedTypes
-import Agda.TypeChecking.SizedTypes.Solve
-import Agda.TypeChecking.Substitute
-import Agda.TypeChecking.Telescope
-import Agda.TypeChecking.Rules.LHS
-
-import {-# SOURCE #-} Agda.TypeChecking.Empty (isEmptyType)
-import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl (checkSectionApplication)
-import {-# SOURCE #-} Agda.TypeChecking.Rules.Def (checkFunDef, checkFunDef', useTerPragma)
-
-import Agda.Utils.Either
-import Agda.Utils.Except
-  ( ExceptT
-  , MonadError(catchError, throwError)
-  , runExceptT
-  )
-import Agda.Utils.Functor
-import Agda.Utils.Lens
-import Agda.Utils.List
-import Agda.Utils.Maybe
-import Agda.Utils.Monad
-import Agda.Utils.Null
-import Agda.Utils.Permutation
-import Agda.Utils.Pretty ( prettyShow )
-import qualified Agda.Utils.Pretty as P
-import Agda.Utils.Size
-import Agda.Utils.Tuple
-
-#include "undefined.h"
-import Agda.Utils.Impossible
-
----------------------------------------------------------------------------
--- * Types
----------------------------------------------------------------------------
-
--- | Check that an expression is a type.
-isType :: A.Expr -> Sort -> TCM Type
-isType e s =
-    traceCall (IsTypeCall e s) $ do
-    v <- checkExpr e (sort s)
-    return $ El s v
-
--- | Check that an expression is a type without knowing the sort.
-isType_ :: A.Expr -> TCM Type
-isType_ e =
-  traceCall (IsType_ e) $ sharedType =<< do
-  let fallback = isType e =<< do workOnTypes $ newSortMeta
-  case unScope e of
-    A.Fun i (Arg info t) b -> do
-      a <- Dom info <$> isType_ t
-      b <- isType_ b
-      s <- ptsRule a b
-      let t' = El s $ Pi a $ NoAbs underscore b
-      noFunctionsIntoSize b t'
-      return t'
-    A.Pi _ tel e | null tel -> isType_ e
-    A.Pi _ tel e -> do
-      (t0, t') <- checkPiTelescope tel $ \ tel -> do
-        t0  <- instantiateFull =<< isType_ e
-        tel <- instantiateFull tel
-        return (t0, telePi tel t0)
-      noFunctionsIntoSize t0 t'
-      return t'
-    A.Set _ n    -> do
-      return $ sort (mkType n)
-    A.App i s arg
-      | visible arg,
-        A.Set _ 0 <- unScope s ->
-      ifNotM hasUniversePolymorphism
-          (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")
-      $ {- else -} do
-        lvl <- levelType
-        -- allow NonStrict variables when checking level
-        --   Set : (NonStrict) Level -> Set\omega
-        n   <- levelView =<< do
-          applyRelevanceToContext NonStrict $
-            checkNamedArg arg lvl
-        return $ sort (Type n)
-
-    -- Issue #707: Check an existing interaction point
-    A.QuestionMark minfo ii -> caseMaybeM (lookupInteractionMeta ii) fallback $ \ x -> do
-      -- -- | Just x <- A.metaNumber minfo -> do
-      reportSDoc "tc.ip" 20 $ fsep
-        [ text "Rechecking meta "
-        , prettyTCM x
-        , text $ " for interaction point " ++ show ii
-        ]
-      mv <- lookupMeta x
-      let s0 = jMetaType . mvJudgement $ mv
-      -- Andreas, 2016-10-14, issue #2257
-      -- The meta was created in a context of length @n@.
-      let n  = length . envContext . clEnv . miClosRange . mvInfo $ mv
-      (vs, rest) <- splitAt n <$> getContextArgs
-      reportSDoc "tc.ip" 20 $ vcat
-        [ text "  s0   = " <+> prettyTCM s0
-        , text "  vs   = " <+> prettyTCM vs
-        , text "  rest = " <+> prettyTCM rest
-        ]
-      -- We assume the meta variable use here is in an extension of the original context.
-      -- If not we revert to the old buggy behavior of #707 (see test/Succeed/Issue2257b).
-      if (length vs /= n) then fallback else do
-      s1  <- piApplyM s0 vs
-      case ignoreSharing $ unEl s1 of
-        Sort s -> return $ El s $ MetaV x $ map Apply vs
-        _ -> __IMPOSSIBLE__
-
-    _ -> fallback
-
-ptsRule :: (LensSort a, LensSort b) => a -> b -> TCM Sort
-ptsRule a b = pts <$> reduce (getSort a) <*> reduce (getSort b)
-
--- | Ensure that a (freshly created) function type does not inhabit 'SizeUniv'.
---   Precondition:  When @noFunctionsIntoSize t tBlame@ is called,
---   we are in the context of @tBlame@ in order to print it correctly.
---   Not being in context of @t@ should not matter, as we are only
---   checking whether its sort reduces to 'SizeUniv'.
-noFunctionsIntoSize :: Type -> Type -> TCM ()
-noFunctionsIntoSize t tBlame = do
-  reportSDoc "tc.fun" 20 $ do
-    let El s (Pi dom b) = ignoreSharing <$> tBlame
-    sep [ text "created function type " <+> prettyTCM tBlame
-        , text "with pts rule" <+> prettyTCM (getSort dom, getSort b, s)
-        ]
-  s <- reduce $ getSort t
-  when (s == SizeUniv) $ do
-    -- Andreas, 2015-02-14
-    -- We have constructed a function type in SizeUniv
-    -- which is illegal to prevent issue 1428.
-    typeError $ FunctionTypeInSizeUniv $ unEl tBlame
-
--- | Check that an expression is a type which is equal to a given type.
-isTypeEqualTo :: A.Expr -> Type -> TCM Type
-isTypeEqualTo e0 t = scopedExpr e0 >>= \case
-  A.ScopedExpr{} -> __IMPOSSIBLE__
-  A.Underscore i | A.metaNumber i == Nothing -> return t
-  e -> workOnTypes $ do
-    t' <- isType e (getSort t)
-    t' <$ leqType t t'
-
-leqType_ :: Type -> Type -> TCM ()
-leqType_ t t' = workOnTypes $ leqType t t'
-
----------------------------------------------------------------------------
--- * Telescopes
----------------------------------------------------------------------------
-
--- | Type check a (module) telescope.
---   Binds the variables defined by the telescope.
-checkTelescope :: A.Telescope -> (Telescope -> TCM a) -> TCM a
-checkTelescope = checkTelescope' LamNotPi
-
--- | Type check the telescope of a dependent function type.
---   Binds the resurrected variables defined by the telescope.
---   The returned telescope is unmodified (not resurrected).
-checkPiTelescope :: A.Telescope -> (Telescope -> TCM a) -> TCM a
-checkPiTelescope = checkTelescope' PiNotLam
-
--- | Flag to control resurrection on domains.
-data LamOrPi
-  = LamNotPi -- ^ We are checking a module telescope.
-             --   We pass into the type world to check the domain type.
-             --   This resurrects the whole context.
-  | PiNotLam -- ^ We are checking a telescope in a Pi-type.
-             --   We stay in the term world, but add resurrected
-             --   domains to the context to check the remaining
-             --   domains and codomain of the Pi-type.
-  deriving (Eq, Show)
-
--- | Type check a telescope. Binds the variables defined by the telescope.
-checkTelescope' :: LamOrPi -> A.Telescope -> (Telescope -> TCM a) -> TCM a
-checkTelescope' lamOrPi []        ret = ret EmptyTel
-checkTelescope' lamOrPi (b : tel) ret =
-    checkTypedBindings lamOrPi b $ \tel1 ->
-    checkTelescope' lamOrPi tel  $ \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.
---
---   Parametrized by a flag wether we check a typed lambda or a Pi. This flag
---   is needed for irrelevance.
-checkTypedBindings :: LamOrPi -> A.TypedBindings -> (Telescope -> TCM a) -> TCM a
-checkTypedBindings lamOrPi (A.TypedBindings i (Arg info b)) ret =
-    checkTypedBinding lamOrPi info b $ \ bs ->
-    ret $ telFromList bs
-
-checkTypedBinding :: LamOrPi -> ArgInfo -> A.TypedBinding -> (ListTel -> TCM a) -> TCM a
-checkTypedBinding lamOrPi info (A.TBind i xs e) ret = do
-    -- Andreas, 2011-04-26 irrelevant function arguments may appear
-    -- non-strictly in the codomain type
-    -- 2011-10-04 if flag --experimental-irrelevance is set
-    experimental <- optExperimentalIrrelevance <$> pragmaOptions
-    t <- modEnv lamOrPi $ isType_ e
-    let info' = mapRelevance (modRel lamOrPi experimental) info
-    addContext' (xs, Dom info' t) $
-      ret $ bindsWithHidingToTel xs (Dom info t)
-    where
-        -- if we are checking a typed lambda, we resurrect before we check the
-        -- types, but do not modify the new context entries
-        -- otherwise, if we are checking a pi, we do not resurrect, but
-        -- modify the new context entries
-        modEnv LamNotPi = workOnTypes
-        modEnv _        = id
-        modRel PiNotLam xp = if xp then irrToNonStrict . nonStrictToRel else nonStrictToRel
-        modRel _        _  = id
-checkTypedBinding lamOrPi info (A.TLet _ lbs) ret = do
-    checkLetBindings lbs (ret [])
-
----------------------------------------------------------------------------
--- * Lambda abstractions
----------------------------------------------------------------------------
-
--- | Type check a lambda expression.
-checkLambda :: Arg A.TypedBinding -> A.Expr -> Type -> TCM Term
-checkLambda (Arg _ (A.TLet _ lbs)) body target =
-  checkLetBindings lbs (checkExpr body target)
-checkLambda (Arg info (A.TBind _ xs typ)) body target = do
-  reportSLn "tc.term.lambda" 60 $ "checkLambda   xs = " ++ prettyShow xs
-
-  let numbinds = length xs
-  TelV tel btyp <- telViewUpTo numbinds target
-  if size tel < numbinds || numbinds /= 1
-    then dontUseTargetType
-    else useTargetType tel btyp
-  where
-    dontUseTargetType = do
-      -- Checking λ (xs : argsT) → body : target
-      verboseS "tc.term.lambda" 5 $ tick "lambda-no-target-type"
-
-      -- First check that argsT is a valid type
-      argsT <- workOnTypes $ Dom info <$> isType_ typ
-      -- Andreas, 2015-05-28 Issue 1523
-      -- If argsT is a SizeLt, it must be non-empty to avoid non-termination.
-      -- TODO: do we need to block checkExpr?
-      checkSizeLtSat $ unEl $ unDom argsT
-
-      -- 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
-      -- is inconclusive we need to block the resulting term so we create a
-      -- fresh problem for the check.
-      let tel = telFromList $ bindsWithHidingToTel xs argsT
-      reportSLn "tc.term.lambda" 60 $ "dontUseTargetType tel = " ++ show tel
-      -- DONT USE tel for addContext, as it loses NameIds.
-      -- WRONG: t1 <- addContext tel $ workOnTypes newTypeMeta_
-      t1 <- addContext (xs, argsT) $ workOnTypes newTypeMeta_
-      -- Do not coerce hidden lambdas
-      if notVisible info || any notVisible xs then do
-        pid <- newProblem_ $ leqType (telePi tel t1) target
-        -- Now check body : ?t₁
-        -- WRONG: v <- addContext tel $ checkExpr body t1
-        v <- addContext' (xs, argsT) $ checkExpr body t1
-        -- Block on the type comparison
-        blockTermOnProblem target (teleLam tel v) pid
-       else do
-        -- Now check body : ?t₁
-        -- WRONG: v <- addContext tel $ checkExpr body t1
-        v <- addContext' (xs, argsT) $ checkExpr body t1
-        -- Block on the type comparison
-        coerce (teleLam tel v) (telePi tel t1) target
-
-    useTargetType tel@(ExtendTel dom (Abs y EmptyTel)) btyp = do
-        verboseS "tc.term.lambda" 5 $ tick "lambda-with-target-type"
-        reportSLn "tc.term.lambda" 60 $ "useTargetType y  = " ++ y
-
-        -- merge in the hiding info of the TBind
-        let [WithHiding h x] = xs
-        info <- return $ mapHiding (mappend h) info
-        unless (sameHiding dom info) $ typeError $ WrongHidingInLambda target
-        -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given
-        info <- lambdaIrrelevanceCheck info dom
-        -- Andreas, 2015-05-28 Issue 1523
-        -- Ensure we are not stepping under a possibly non-existing size.
-        -- TODO: do we need to block checkExpr?
-        let a = unDom dom
-        checkSizeLtSat $ unEl a
-        -- 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 a
-        -- Andreas, Issue 630: take name from function type if lambda name is "_"
-        v <- lambdaAddContext x y (Dom info argT) $ checkExpr body btyp
-        blockTermOnProblem target (Lam info $ Abs (nameToArgName x) v) pid
-
-    useTargetType _ _ = __IMPOSSIBLE__
-
--- | Check that irrelevance info in lambda is compatible with irrelevance
---   coming from the function type.
---   If lambda has no user-given relevance, copy that of function type.
-lambdaIrrelevanceCheck :: LensRelevance dom => ArgInfo -> dom -> TCM ArgInfo
-lambdaIrrelevanceCheck info dom
-    -- Case: no specific user annotation: use relevance of function type
-  | isRelevant info = return $ setRelevance (getRelevance dom) info
-    -- Case: explicit user annotation is taken seriously
-  | otherwise = do
-      let rPi  = getRelevance dom  -- relevance of function type
-      let rLam = getRelevance info -- relevance of lambda
-        -- Andreas, 2017-01-24, issue #2429
-        -- we should report an error if we try to check a relevant function
-        -- against an irrelevant function type (subtyping violation)
-      unless (moreRelevant rPi rLam) $ do
-        -- @rLam == Relevant@ is impossible here
-        -- @rLam == Irrelevant@ is impossible here (least relevant)
-        -- this error can only happen if @rLam == NonStrict@ and @rPi == Irrelevant@
-        unless (rLam == NonStrict) __IMPOSSIBLE__  -- separate tests for separate line nums
-        unless (rPi == Irrelevant) __IMPOSSIBLE__
-        typeError WrongIrrelevanceInLambda
-      return info
-
-lambdaAddContext :: Name -> ArgName -> Dom Type -> TCM a -> TCM a
-lambdaAddContext x y dom
-  | isNoName x = addContext' (notInScopeName y, dom)  -- Note: String instance
-  | otherwise  = addContext' (x, dom)                 -- Name instance of addContext'
-
--- | Checking a lambda whose domain type has already been checked.
-checkPostponedLambda :: Arg ([WithHiding Name], Maybe Type) -> A.Expr -> Type -> TCM Term
-checkPostponedLambda args@(Arg _    ([]    , _ )) body target = do
-  checkExpr body target
-checkPostponedLambda args@(Arg info (WithHiding h x : xs, mt)) body target = do
-  let postpone _ t = postponeTypeCheckingProblem_ $ CheckLambda args body t
-      lamHiding = mappend h $ getHiding info
-  insertHiddenLambdas lamHiding target postpone $ \ t@(El _ (Pi dom b)) -> do
-    -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given
-    info' <- setHiding lamHiding <$> lambdaIrrelevanceCheck info dom
-    -- 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.
-    mpid <- caseMaybe mt (return Nothing) $ \ ascribedType -> Just <$> do
-      newProblem_ $ leqType (unDom dom) ascribedType
-    -- We type-check the body with the ascribedType given by the user
-    -- to get better error messages.
-    -- Using the type dom from the usage context would be more precise,
-    -- though.
-    let dom' = setRelevance (getRelevance info') . setHiding lamHiding $
-          maybe dom (dom $>) mt
-    v <- lambdaAddContext x (absName b) dom'  $
-      checkPostponedLambda (Arg info (xs, mt)) body $ absBody b
-    let v' = Lam info' $ Abs (nameToArgName x) v
-    maybe (return v') (blockTermOnProblem t v') mpid
-
-
--- | Insert hidden lambda until the hiding info of the domain type
---   matches the expected hiding info.
---   Throws 'WrongHidingInLambda'
-insertHiddenLambdas
-  :: Hiding                       -- ^ Expected hiding.
-  -> Type                         -- ^ Expected to be a function type.
-  -> (MetaId -> Type -> TCM Term) -- ^ Continuation on blocked type.
-  -> (Type -> TCM Term)           -- ^ Continuation when expected hiding found.
-                                  --   The continuation may assume that the @Type@
-                                  --   is of the form @(El _ (Pi _ _))@.
-  -> TCM Term                     -- ^ Term with hidden lambda inserted.
-insertHiddenLambdas h target postpone ret = do
-  -- If the target type is blocked, we postpone,
-  -- because we do not know if a hidden lambda needs to be inserted.
-  ifBlockedType target postpone $ \ t0 -> do
-    let t = ignoreSharing <$> t0
-    case unEl t of
-
-      Pi dom b -> do
-        let h' = getHiding dom
-        -- Found expected hiding: return function type.
-        if sameHiding h h' then ret t else do
-          -- Found a visible argument but expected a hidden one:
-          -- That's an error, as we cannot insert a visible lambda.
-          if visible h' then typeError $ WrongHidingInLambda target else do
-            -- Otherwise, we found a hidden argument that we can insert.
-            let x = absName b
-            Lam (domInfo dom) . Abs x <$> do
-              addContext' (x, dom) $ insertHiddenLambdas h (absBody b) postpone ret
-
-      _ -> typeError . GenericDocError =<< do
-        text "Expected " <+> prettyTCM target <+> text " to be a function type"
-
--- | @checkAbsurdLambda i h e t@ checks absurd lambda against type @t@.
---   Precondition: @e = AbsurdLam i h@
-checkAbsurdLambda :: A.LamInfo -> Hiding -> A.Expr -> Type -> TCM Term
-checkAbsurdLambda i h e t = do
-  t <- instantiateFull t
-  ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ $ CheckExpr e t') $ \ t' -> do
-    case ignoreSharing $ unEl t' of
-      Pi dom@(Dom info' a) b
-        | not (sameHiding h info') -> typeError $ WrongHidingInLambda t'
-        | not (null $ allMetas a) ->
-            postponeTypeCheckingProblem (CheckExpr e t') $
-              null . allMetas <$> instantiateFull a
-        | otherwise -> blockTerm t' $ do
-          isEmptyType (getRange i) a
-          -- Add helper function
-          top <- currentModule
-          aux <- qualify top <$> freshName_ (getRange i, absurdLambdaName)
-          -- if we are in irrelevant position, the helper function
-          -- is added as irrelevant
-          rel <- asks envRelevance
-          reportSDoc "tc.term.absurd" 10 $ vcat
-            [ text "Adding absurd function" <+> prettyTCM rel <> prettyTCM aux
-            , nest 2 $ text "of type" <+> prettyTCM t'
-            ]
-          addConstant aux $
-            (\ d -> (defaultDefn (setRelevance rel info') aux t' d)
-                    { defPolarity       = [Nonvariant]
-                    , defArgOccurrences = [Unused] })
-            $ emptyFunction
-              { funClauses        =
-                  [ Clause
-                    { clauseLHSRange  = getRange e
-                    , clauseFullRange = getRange e
-                    , clauseTel       = telFromList [fmap ("()",) dom]
-                    , namedClausePats = [Arg info' $ Named (Just $ unranged $ absName b) $ AbsurdP $ debruijnNamedVar absurdPatternName 0]
-                    , clauseBody      = Nothing
-                    , clauseType      = Just $ setRelevance rel $ defaultArg $ absBody b
-                    , clauseCatchall  = False
-                    , clauseUnreachable = Just True -- absurd clauses are unreachable
-                    }
-                  ]
-              , funCompiled       = Just Fail
-              , 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 $ map Apply $ teleArgs tel
-      _ -> typeError $ ShouldBePi t'
-
--- | @checkExtendedLambda i di qname cs e t@ check pattern matching lambda.
--- Precondition: @e = ExtendedLam i di qname cs@
-checkExtendedLambda :: A.LamInfo -> A.DefInfo -> QName -> [A.Clause] ->
-                       A.Expr -> Type -> TCM Term
-checkExtendedLambda i di qname cs e t = do
-   -- Andreas, 2016-06-16 issue #2045
-   -- Try to get rid of unsolved size metas before we
-   -- fix the type of the extended lambda auxiliary function
-   solveSizeConstraints DontDefaultToInfty
-   t <- instantiateFull t
-   ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ $ CheckExpr e t') $ \ t -> do
-     j   <- currentOrFreshMutualBlock
-     rel <- asks envRelevance
-     let info = setRelevance rel defaultArgInfo
-     -- Andreas, 2016-07-13, issue 2028.
-     -- Save the state to rollback the changes to the signature.
-     st <- get
-     -- Andreas, 2013-12-28: add extendedlambda as @Function@, not as @Axiom@;
-     -- otherwise, @addClause@ in @checkFunDef'@ fails (see issue 1009).
-     addConstant qname =<< do
-       useTerPragma $
-         (defaultDefn info qname t emptyFunction) { defMutual = j }
-     reportSDoc "tc.term.exlam" 20 $
-       text (show $ A.defAbstract di) <+>
-       text "extended lambda's implementation \"" <> prettyTCM qname <>
-       text "\" has type: " $$ prettyTCM t -- <+> text " where clauses: " <+> text (show cs)
-     args     <- getContextArgs
-     freevars <- getCurrentModuleFreeVars
-     let argsNoParam = drop freevars args -- don't count module parameters
-     let (hid, notHid) = List.partition notVisible argsNoParam
-     reportSDoc "tc.term.exlam" 30 $ vcat $
-       [ text "dropped args: " <+> prettyTCM (take freevars args)
-       , text "hidden  args: " <+> prettyTCM hid
-       , text "visible args: " <+> prettyTCM notHid
-       ]
-     -- Andreas, Ulf, 2016-02-02: We want to postpone type checking an extended lambda
-     -- in case the lhs checker failed due to insufficient type info for the patterns.
-     -- Issues 480, 1159, 1811.
-     mx <- catchIlltypedPatternBlockedOnMeta $ abstract (A.defAbstract di) $
-       checkFunDef' t info NotDelayed (Just $ ExtLamInfo (length hid) (length notHid)) Nothing di qname cs
-     case mx of
-       -- Case: type checking succeeded, so we go ahead.
-       Nothing -> return $ Def qname $ map Apply args
-       -- Case: we could not check the extended lambda because we are blocked on a meta.
-       -- In this case, we want to postpone.
-       Just (err, x) -> do
-         reportSDoc "tc.term.exlam" 50 $ vcat $
-           [ text "checking extended lambda got stuck on meta: " <+> text (show x) ]
-         -- Note that we messed up the state a bit.  We might want to unroll these state changes.
-         -- However, they are mostly harmless:
-         -- 1. We created a new mutual block id.
-         -- 2. We added a constant without definition.
-
-         -- In fact, they are not so harmless, see issue 2028!
-         -- Thus, reset the state!
-         put st
-
-         -- The meta might not be known in the reset state, as it could have been created
-         -- somewhere on the way to the type error.
-         mm <- Map.lookup x <$> getMetaStore
-         x' <- case mvInstantiation <$> mm of
-           -- Case: we do not know the meta
-           -- We mine the type of the extended lambda for a (possibly) blocking meta.
-           Nothing -> do
-             reportSDoc "tc.term.exlam" 50 $ vcat $
-               [ text "meta was not found in reset state"
-               , text "trying to find meta in type of extlam..." ]
-             case allMetas t of
-               []    -> do
-                 reportSDoc "tc.term.exlam" 50 $ text "no meta found, giving up."
-                 throwError err
-               (x:_) -> do
-                 reportSDoc "tc.term.exlam" 50 $ text $ "found meta: " ++ show x
-                 return x
-           -- Case: we know the meta here.
-           Just InstV{} -> __IMPOSSIBLE__  -- It cannot be instantiated yet.
-           Just{} -> return x
-         -- It has to be blocked on some meta, so we can postpone,
-         -- being sure it will be retired when a meta is solved
-         -- (which might be the blocking meta in which case we actually make progress).
-         postponeTypeCheckingProblem (CheckExpr e t) $ isInstantiatedMeta x'
-  where
-    -- Concrete definitions cannot use information about abstract things.
-    abstract ConcreteDef = inConcreteMode
-    abstract AbstractDef = inAbstractMode
-
--- | Run a computation.
---
---   * If successful, return Nothing.
---
---   * If @IlltypedPattern p a@ is thrown and type @a@ is blocked on some meta @x@
---     return @Just x@.
---
---   * If @SplitError (UnificationStuck c tel us vs _)@ is thrown and the unification
---     problem @us =?= vs : tel@ is blocked on some meta @x@ return @Just x@.
---
---   * If another error was thrown or the type @a@ is not blocked, reraise the error.
---
---   Note that the returned meta might only exists in the state where the error was
---   thrown, thus, be an invalid 'MetaId' in the current state.
---
-catchIlltypedPatternBlockedOnMeta :: TCM () -> TCM (Maybe (TCErr, MetaId))
-catchIlltypedPatternBlockedOnMeta m = (Nothing <$ do disableDestructiveUpdate m)
-  `catchError` \ err -> do
-  let reraise = throwError err
-  case err of
-    TypeError s cl@Closure{ clValue = IlltypedPattern p a } -> do
-      mx <- localState $ do
-        put s
-        enterClosure cl $ \ _ -> do
-          ifBlockedType a (\ x _ -> return $ Just x) $ {- else -} \ _ -> return Nothing
-      caseMaybe mx reraise $ \ x -> return $ Just (err, x)
-    TypeError s cl@Closure{ clValue = SplitError (UnificationStuck c tel us vs _) } -> do
-      mx <- localState $ do
-        put s
-        enterClosure cl $ \ _ -> do
-          problem <- reduce =<< instantiateFull (flattenTel tel, us, vs)
-          -- over-approximating the set of metas actually blocking unification
-          return $ listToMaybe $ allMetas problem
-      caseMaybe mx reraise $ \ x -> return $ Just (err, x)
-    _ -> reraise
-
----------------------------------------------------------------------------
--- * Records
----------------------------------------------------------------------------
-
-expandModuleAssigns :: [Either A.Assign A.ModuleName] -> [C.Name] -> TCM A.Assigns
-expandModuleAssigns mfs exs = do
-  let (fs , ms) = partitionEithers mfs
-      exs' = exs List.\\ map (view nameFieldA) fs
-  fs' <- forM exs' $ \ f -> do
-    pms <- forM ms $ \ m -> do
-       modScope <- getNamedScope m
-       let names :: ThingsInScope AbstractName
-           names = exportedNamesInScope modScope
-       return $
-        case Map.lookup f names of
-          Just [n] -> Just (m, FieldAssignment f (A.nameExpr n))
-          _        -> Nothing
-
-    case catMaybes pms of
-      []        -> return Nothing
-      [(_, fa)] -> return (Just fa)
-      mfas      -> typeError . GenericDocError =<< do
-        vcat $
-          [ text "Ambiguity: the field" <+> prettyTCM f
-            <+> text "appears in the following modules: " ]
-          ++ map (prettyTCM . fst) mfas
-  return (fs ++ catMaybes fs')
-
--- | @checkRecordExpression fs e t@ checks record construction against type @t@.
--- Precondition @e = Rec _ fs@.
-checkRecordExpression :: A.RecordAssigns  -> A.Expr -> Type -> TCM Term
-checkRecordExpression mfs e t = do
-  reportSDoc "tc.term.rec" 10 $ sep
-    [ text "checking record expression"
-    , prettyA e
-    ]
-  ifBlockedType t (\ _ t -> guessRecordType t) {-else-} $ \ t -> do
-  case ignoreSharing $ unEl t of
-    -- Case: We know the type of the record already.
-    Def r es  -> do
-      let ~(Just vs) = allApplyElims es
-      reportSDoc "tc.term.rec" 20 $ text $ "  r   = " ++ prettyShow r
-
-      reportSDoc "tc.term.rec" 30 $ text "  xs  = " <> do
-        text =<< prettyShow . map unArg <$> getRecordFieldNames r
-      reportSDoc "tc.term.rec" 30 $ text "  ftel= " <> do
-        prettyTCM =<< getRecordFieldTypes r
-      reportSDoc "tc.term.rec" 30 $ text "  con = " <> do
-        text =<< prettyShow <$> getRecordConstructor r
-
-      def <- getRecordDef r
-      let -- Field names with ArgInfo.
-          axs  = recordFieldNames def
-          exs  = filter visible axs
-          -- Just field names.
-          xs   = map unArg axs
-          -- Record constructor.
-          con  = killRange $ recConHead def
-      reportSDoc "tc.term.rec" 20 $ vcat
-        [ text "  xs  = " <> return (P.pretty xs)
-        , text "  ftel= " <> prettyTCM (recTel def)
-        , text "  con = " <> return (P.pretty con)
-        ]
-
-      -- Compute the list of given fields, decorated with the ArgInfo from the record def.
-      fs <- expandModuleAssigns mfs (map unArg exs)
-
-      -- Compute a list of metas for the missing visible fields.
-      scope <- getScope
-      let re = getRange e
-          meta x = A.Underscore $ A.MetaInfo re scope Nothing (prettyShow x)
-      -- In @es@ omitted explicit fields are replaced by underscores.
-      -- Omitted implicit or instance fields
-      -- are still left out and inserted later by checkArguments_.
-      es <- insertMissingFields r meta fs axs
-
-      args <- checkArguments_ ExpandLast re es (recTel def `apply` vs) >>= \case
-        (args, remainingTel) | null remainingTel -> return args
-        _ -> __IMPOSSIBLE__
-      -- Don't need to block here!
-      reportSDoc "tc.term.rec" 20 $ text $ "finished record expression"
-      return $ Con con ConORec args
-    _         -> typeError $ ShouldBeRecordType t
-
-  where
-    guessRecordType t = do
-      let fields = [ x | Left (FieldAssignment x _) <- mfs ]
-      rs <- findPossibleRecords fields
-      case rs of
-          -- If there are no records with the right fields we might as well fail right away.
-        [] -> case fields of
-          []  -> typeError $ GenericError "There are no records in scope"
-          [f] -> typeError $ GenericError $ "There is no known record with the field " ++ prettyShow f
-          _   -> typeError $ GenericError $ "There is no known record with the fields " ++ unwords (map prettyShow fields)
-          -- If there's only one record with the appropriate fields, go with that.
-        [r] -> do
-          def <- getConstInfo r
-          let rt = defType def
-          vs  <- newArgsMeta rt
-          target <- reduce $ piApply rt vs
-          s  <- case ignoreSharing $ unEl target of
-                  Level l -> return $ Type l
-                  Sort s  -> return s
-                  v       -> do
-                    reportSDoc "impossible" 10 $ vcat
-                      [ text "The impossible happened when checking record expression against meta"
-                      , text "Candidate record type r = " <+> prettyTCM r
-                      , text "Type of r               = " <+> prettyTCM rt
-                      , text "Ends in (should be sort)= " <+> prettyTCM v
-                      , text $ "  Raw                   =  " ++ show v
-                      ]
-                    __IMPOSSIBLE__
-          let inferred = El s $ Def r $ map Apply vs
-          v <- checkExpr e 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
-            [ text "Postponing type checking of"
-            , nest 2 $ prettyA e <+> text ":" <+> prettyTCM t
-            ]
-          postponeTypeCheckingProblem_ $ CheckExpr e t
-
-
--- | @checkRecordUpdate ei recexpr fs e t@
--- Precondition @e = RecUpdate ei recexpr fs@.
-checkRecordUpdate :: A.ExprInfo -> A.Expr -> A.Assigns -> A.Expr -> Type -> TCM Term
-checkRecordUpdate ei recexpr fs e t = do
-  case ignoreSharing $ unEl t of
-    Def r vs  -> do
-      v <- checkExpr recexpr t
-      name <- freshNoName (getRange recexpr)
-      addLetBinding defaultArgInfo name v t $ do
-        projs <- recFields <$> getRecordDef r
-        axs <- getRecordFieldNames r
-        scope <- getScope
-        let xs = map unArg axs
-        es <- orderFields r Nothing xs $ map (\ (FieldAssignment x e) -> (x, Just e)) fs
-        let es' = zipWith (replaceFields name ei) projs es
-        checkExpr (A.Rec ei [ Left (FieldAssignment x e) | (x, Just e) <- zip xs es' ]) t
-    MetaV _ _ -> do
-      inferred <- inferExpr recexpr >>= reduce . snd
-      case ignoreSharing $ unEl inferred of
-        MetaV _ _ -> postponeTypeCheckingProblem_ $ CheckExpr e t
-        _         -> do
-          v <- checkExpr e 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 a@(Arg _ p) Nothing | visible a =
-        Just $ A.App ei (A.Def p) $ defaultNamedArg $ A.Var n
-    replaceFields _ _  (Arg _ _) Nothing  = Nothing
-    replaceFields _ _  _         (Just e) = Just $ e
-
----------------------------------------------------------------------------
--- * Literal
----------------------------------------------------------------------------
-
-checkLiteral :: Literal -> Type -> TCM Term
-checkLiteral lit t = do
-  t' <- litType lit
-  coerce (Lit lit) t' t
-
----------------------------------------------------------------------------
--- * Terms
----------------------------------------------------------------------------
-
--- | @checkArguments' exph r args t0 t k@ tries @checkArguments exph args t0 t@.
--- If it succeeds, it continues @k@ with the returned results.  If it fails,
--- it registers a postponed typechecking problem and returns the resulting new
--- meta variable.
---
--- Checks @e := ((_ : t0) args) : t@.
-checkArguments' ::
-  ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->
-  (Args -> Type -> TCM Term) -> TCM Term
-checkArguments' exph r args t0 t k = do
-  z <- runExceptT $ checkArguments exph r args t0 t
-  case z of
-    Right (vs, t1) -> k vs t1
-      -- vs = evaluated args
-      -- t1 = remaining type (needs to be subtype of t)
-    Left (us, es, t0) -> do
-      reportSDoc "tc.term.expr.args" 80 $
-        sep [ text "postponed checking arguments"
-            , nest 4 $ prettyList (map (prettyA . namedThing . unArg) args)
-            , nest 2 $ text "against"
-            , nest 4 $ prettyTCM t0 ] $$
-        sep [ text "progress:"
-            , nest 2 $ text "checked" <+> prettyList (map prettyTCM us)
-            , nest 2 $ text "remaining" <+> sep [ prettyList (map (prettyA . namedThing . unArg) es)
-                                                , nest 2 $ text ":" <+> prettyTCM t0 ] ]
-      postponeTypeCheckingProblem_ (CheckArgs exph r es t0 t $ \vs t -> k (us ++ vs) t)
-      -- if unsuccessful, postpone checking until t0 unblocks
-
-
--- | Remove top layers of scope info of expression and set the scope accordingly
---   in the 'TCState'.
-
-scopedExpr :: A.Expr -> TCM A.Expr
-scopedExpr (A.ScopedExpr scope e) = setScope scope >> scopedExpr e
-scopedExpr e                      = return e
-
--- | Type check an expression.
-checkExpr :: A.Expr -> Type -> TCM Term
-checkExpr e t0 =
-  verboseBracket "tc.term.expr.top" 5 "checkExpr" $
-  traceCall (CheckExprCall e t0) $ localScope $ doExpandLast $ shared =<< do
-    reportSDoc "tc.term.expr.top" 15 $
-        text "Checking" <+> sep
-          [ fsep [ prettyTCM e, text ":", prettyTCM t0 ]
-          , nest 2 $ text "at " <+> (text . prettyShow =<< getCurrentRange)
-          ]
-    reportSDoc "tc.term.expr.top.detailed" 80 $
-      text "Checking" <+> fsep [ prettyTCM e, text ":", text (show t0) ]
-    t <- reduce t0
-    reportSDoc "tc.term.expr.top" 15 $
-        text "    --> " <+> prettyTCM t
-
-    e <- scopedExpr e
-
-    tryInsertHiddenLambda e t $ case e of
-
-        A.ScopedExpr scope e -> __IMPOSSIBLE__ -- setScope scope >> checkExpr e t
-
-        -- a meta variable without arguments: type check directly for efficiency
-        A.QuestionMark i ii -> checkQuestionMark (newValueMeta' RunMetaOccursCheck) t0 i ii
-        A.Underscore i -> checkUnderscore t0 i
-
-        A.WithApp _ e es -> typeError $ NotImplemented "type checking of with application"
-
-        -- check |- Set l : t  (requires universe polymorphism)
-        A.App i s arg@(Arg ai l)
-          | A.Set _ 0 <- unScope s, visible ai ->
-          ifNotM hasUniversePolymorphism
-              (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")
-          $ {- else -} do
-            lvl <- levelType
-            -- allow NonStrict variables when checking level
-            --   Set : (NonStrict) Level -> Set\omega
-            n   <- levelView =<< do
-              applyRelevanceToContext NonStrict $
-                checkNamedArg arg lvl
-            -- check that Set (l+1) <= t
-            reportSDoc "tc.univ.poly" 10 $
-              text "checking Set " <+> prettyTCM n <+>
-              text "against" <+> prettyTCM t
-            coerce (Sort $ Type n) (sort $ sSuc $ Type n) t
-
-        e0@(A.App i q (Arg ai e))
-          | A.Quote _ <- unScope q, visible ai -> do
-          let quoted (A.Def x) = return x
-              quoted (A.Macro x) = return x
-              quoted (A.Proj o (AmbQ [x])) = return x
-              quoted (A.Proj o (AmbQ xs))  =
-                typeError $ GenericError $ "quote: Ambigous name: " ++ prettyShow xs
-              quoted (A.Con (AmbQ [x])) = return x
-              quoted (A.Con (AmbQ xs))  =
-                typeError $ GenericError $ "quote: Ambigous name: " ++ prettyShow xs
-              quoted (A.ScopedExpr _ e) = quoted e
-              quoted _                  =
-                typeError $ GenericError $ "quote: not a defined name"
-          x <- quoted (namedThing e)
-          ty <- qNameType
-          coerce (quoteName x) ty t
-
-          | A.QuoteTerm _ <- unScope q ->
-             do (et, _)   <- inferExpr (namedThing e)
-                et'       <- etaContract =<< instantiateFull et
-                let metas = allMetas et'
-                case metas of
-                  _:_ -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas
-                  []  -> do
-                    q  <- quoteTerm et'
-                    ty <- el primAgdaTerm
-                    coerce q ty t
-
-        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 -> checkAbsurdLambda i h e t
-
-        A.ExtendedLam i di qname cs -> checkExtendedLambda i di qname cs e t
-
-        A.Lam i (A.DomainFull (A.TypedBindings _ b)) e -> checkLambda b e t
-
-        A.Lam i (A.DomainFree info x) e0 -> checkExpr (A.Lam i (domainFree info x) e0) t
-
-        A.Lit lit    -> checkLiteral lit t
-        A.Let i ds e -> checkLetBindings ds $ checkExpr e t
-        A.Pi _ tel e | null tel -> checkExpr e t
-        A.Pi _ tel e -> do
-            (t0, t') <- checkPiTelescope tel $ \ tel -> do
-                    t0  <- instantiateFull =<< isType_ e
-                    tel <- instantiateFull tel
-                    return (t0, telePi tel t0)
-            noFunctionsIntoSize t0 t'
-            let s = getSort t'
-                v = unEl t'
-            when (s == Inf) $ reportSDoc "tc.term.sort" 20 $
-              vcat [ text ("reduced to omega:")
-                   , nest 2 $ text "t   =" <+> prettyTCM t'
-                   , nest 2 $ text "cxt =" <+> (prettyTCM =<< getContextTelescope)
-                   ]
-            coerce v (sort s) t
-        A.Fun _ (Arg info a) b -> do
-            a' <- isType_ a
-            b' <- isType_ b
-            s <- ptsRule a' b'
-            let v = Pi (Dom info a') (NoAbs underscore b')
-            noFunctionsIntoSize b' $ El s v
-            coerce v (sort s) t
-        A.Set _ n    -> do
-          coerce (Sort $ mkType n) (sort $ mkType $ n + 1) t
-        A.Prop _     -> do
-          typeError $ GenericError "Prop is no longer supported"
-
-        A.Rec _ fs  -> checkRecordExpression fs e t
-
-        A.RecUpdate ei recexpr fs -> checkRecordUpdate ei recexpr fs e t
-
-        A.DontCare e -> -- resurrect vars
-          ifM ((Irrelevant ==) <$> asks envRelevance)
-            (dontCare <$> do applyRelevanceToContext Irrelevant $ checkExpr e t)
-            (internalError "DontCare may only appear in irrelevant contexts")
-
-        e0@(A.QuoteGoal _ x e) -> do
-          qg <- quoteGoal t
-          case qg of
-            Left metas -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas
-            Right quoted -> do
-              tmType <- agdaTermType
-              (v, ty) <- addLetBinding defaultArgInfo x quoted tmType (inferExpr e)
-              coerce v ty t
-        e0@(A.QuoteContext _) -> do
-          qc <- quoteContext
-          case qc of
-            Left metas -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas
-            Right quotedContext -> do
-              ctxType <- el $ list $ primArg <@> (unEl <$> agdaTypeType)
-              coerce quotedContext ctxType t
-        e0@(A.Tactic i e xs ys) -> do
-          qc <- quoteContext
-          qg <- quoteGoal t
-          let postpone metas = postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas
-          case (qc, qg) of
-            (Left metas1, Left metas2) -> postpone $ metas1 ++ metas2
-            (Left metas , Right _    ) -> postpone $ metas
-            (Right _    , Left metas ) -> postpone $ metas
-            (Right quotedCtx, Right quotedGoal) -> do
-              quotedCtx  <- defaultNamedArg <$> reify quotedCtx
-              quotedGoal <- defaultNamedArg <$> reify quotedGoal
-              let tac    = foldl (A.App i) (A.App i (A.App i e quotedCtx) quotedGoal) xs
-                  result = foldl (A.App i) (A.Unquote i) (defaultNamedArg tac : ys)
-              checkExpr result t
-
-        A.ETel _   -> __IMPOSSIBLE__
-
-        A.Dot{} -> typeError $ GenericError $ "Invalid dotted expression"
-
-        -- Application
-        _   | Application hd args <- appView e -> checkApplication hd args e t
-
-  where
-  -- | Call checkExpr with an hidden lambda inserted if appropriate,
-  --   else fallback.
-  tryInsertHiddenLambda :: A.Expr -> Type -> TCM Term -> TCM Term
-  tryInsertHiddenLambda e t fallback
-    -- Insert hidden lambda if all of the following conditions are met:
-        -- type is a hidden function type, {x : A} -> B or {{x : A}} -> B
-    | Pi (Dom info a) b <- ignoreSharing $ unEl t
-        , let h = getHiding info
-        , notVisible h
-        -- expression is not a matching hidden lambda or question mark
-        , not (hiddenLambdaOrHole h e)
-        = do
-      let proceed = doInsert info $ absName b
-      -- If we skip the lambda insertion for an introduction,
-      -- we will hit a dead end, so proceed no matter what.
-      if definitelyIntroduction then proceed else do
-        -- Andreas, 2017-01-19, issue #2412:
-        -- We do not want to insert a hidden lambda if A is
-        -- possibly empty type of sizes, as this will produce an error.
-        reduce a >>= isSizeType >>= \case
-          Just (BoundedLt u) -> ifBlocked u (\ _ _ -> fallback) $ \ v -> do
-            ifM (checkSizeNeverZero v) proceed fallback
-          _ -> proceed
-
-    | otherwise = fallback
-
-    where
-    re = getRange e
-    rx = caseMaybe (rStart re) noRange $ \ pos -> posToRange pos pos
-
-    doInsert info y = do
-      x <- unshadowName <=< freshName rx $ notInScopeName y
-      reportSLn "tc.term.expr.impl" 15 $ "Inserting implicit lambda"
-      checkExpr (A.Lam (A.defaultLamInfo re) (domainFree info x) e) t
-
-    hiddenLambdaOrHole h e = case e of
-      A.AbsurdLam _ h'        -> sameHiding h h'
-      A.ExtendedLam _ _ _ cls -> any hiddenLHS cls
-      A.Lam _ bind _          -> sameHiding h bind
-      A.QuestionMark{}        -> True
-      _                       -> False
-
-    hiddenLHS (A.Clause (A.LHS _ (A.LHSHead _ (a : _)) _) _ _ _ _ _) = notVisible a
-    hiddenLHS _ = False
-
-    -- Things with are definitely introductions,
-    -- thus, cannot be of hidden Pi-type, unless they are hidden lambdas.
-    definitelyIntroduction = case e of
-      A.Lam{}        -> True
-      A.AbsurdLam{}  -> True
-      A.Lit{}        -> True
-      A.Pi{}         -> True
-      A.Fun{}        -> True
-      A.Set{}        -> True
-      A.Prop{}       -> True
-      A.Rec{}        -> True
-      A.RecUpdate{}  -> True
-      A.ScopedExpr{} -> __IMPOSSIBLE__
-      A.ETel{}       -> __IMPOSSIBLE__
-      _ -> False
----------------------------------------------------------------------------
--- * Reflection
----------------------------------------------------------------------------
-
--- | DOCUMENT ME!
-quoteGoal :: Type -> TCM (Either [MetaId] Term)
-quoteGoal t = do
-  t' <- etaContract =<< instantiateFull t
-  let metas = allMetas t'
-  case metas of
-    _:_ -> return $ Left metas
-    []  -> do
-      quotedGoal <- quoteTerm (unEl t')
-      return $ Right quotedGoal
-
--- | DOCUMENT ME!
-quoteContext :: TCM (Either [MetaId] Term)
-quoteContext = do
-  contextTypes  <- map (fmap snd) <$> getContext
-  contextTypes  <- etaContract =<< instantiateFull contextTypes
-  let metas = allMetas contextTypes
-  case metas of
-    _:_ -> return $ Left metas
-    []  -> do
-      quotedContext <- buildList <*> mapM quoteDom contextTypes
-      return $ Right quotedContext
-
--- | Unquote a TCM computation in a given hole.
-unquoteM :: A.Expr -> Term -> Type -> TCM Term -> TCM Term
-unquoteM tac hole holeType k = do
-  tac <- checkExpr tac =<< (el primAgdaTerm --> el (primAgdaTCM <#> primLevelZero <@> primUnit))
-  inFreshModuleIfFreeParams $ unquoteTactic tac hole holeType k
-
--- | DOCUMENT ME!
-unquoteTactic :: Term -> Term -> Type -> TCM Term -> TCM Term
-unquoteTactic tac hole goal k = do
-  ok  <- runUnquoteM $ unquoteTCM tac hole
-  case ok of
-    Left (BlockedOnMeta oldState x) -> do
-      put oldState
-      mi <- Map.lookup x <$> getMetaStore
-      (r, unblock) <- case mi of
-        Nothing -> do -- fresh meta: need to block on something else!
-          otherMetas <- allMetas <$> instantiateFull goal
-          case otherMetas of
-            []  -> return (noRange,     return False) -- Nothing to block on, leave it yellow. Alternative: fail.
-            x:_ -> return (noRange,     isInstantiatedMeta x)  -- range?
-        Just mi -> return (getRange mi, isInstantiatedMeta x)
-      setCurrentRange r $
-        postponeTypeCheckingProblem (UnquoteTactic tac hole goal) unblock
-    Left err -> typeError $ UnquoteFailed err
-    Right _ -> k
-
----------------------------------------------------------------------------
--- * Projections
----------------------------------------------------------------------------
-
--- | Inferring the type of an overloaded projection application.
---   See 'inferOrCheckProjApp'.
-
-inferProjApp :: A.Expr -> ProjOrigin -> [QName] -> A.Args -> TCM (Term, Type)
-inferProjApp e o ds args0 = inferOrCheckProjApp e o ds args0 Nothing
-
--- | Checking the type of an overloaded projection application.
---   See 'inferOrCheckProjApp'.
-
-checkProjApp  :: A.Expr -> ProjOrigin -> [QName] -> A.Args -> Type -> TCM Term
-checkProjApp e o ds args0 t = do
-  (v, ti) <- inferOrCheckProjApp e o ds args0 (Just t)
-  coerce v ti t
-
--- | Inferring or Checking an overloaded projection application.
---
---   The overloaded projection is disambiguated by inferring the type of its
---   principal argument, which is the first visible argument.
-
-inferOrCheckProjApp
-  :: A.Expr
-     -- ^ The whole expression which constitutes the application.
-  -> ProjOrigin
-     -- ^ The origin of the projection involved in this projection application.
-  -> [QName]
-     -- ^ The projection name (potentially ambiguous).  List must not be empty.
-  -> A.Args
-     -- ^ The arguments to the projection.
-  -> Maybe Type
-     -- ^ The expected type of the expression (if 'Nothing', infer it).
-  -> TCM (Term, Type)
-     -- ^ The type-checked expression and its type (if successful).
-inferOrCheckProjApp e o ds args mt = do
-  reportSDoc "tc.proj.amb" 20 $ vcat
-    [ text "checking ambiguous projection"
-    , text $ "  ds   = " ++ prettyShow ds
-    , text   "  args = " <+> sep (map prettyTCM args)
-    , text   "  t    = " <+> caseMaybe mt (text "Nothing") prettyTCM
-    ]
-
-  let refuse :: String -> TCM (Term, Type)
-      refuse reason = typeError $ GenericError $
-        "Cannot resolve overloaded projection "
-        ++ prettyShow (A.nameConcrete $ A.qnameName $ fromMaybe __IMPOSSIBLE__ $ headMaybe ds)
-        ++ " because " ++ reason
-      refuseNotApplied = refuse "it is not applied to a visible argument"
-      refuseNoMatching = refuse "no matching candidate found"
-      refuseNotRecordType = refuse "principal argument is not of record type"
-
-      -- Postpone the whole type checking problem
-      -- if type of principal argument (or the type where we get it from)
-      -- is blocked by meta m.
-      postpone m = do
-        tc <- caseMaybe mt newTypeMeta_ return
-        v <- postponeTypeCheckingProblem (CheckExpr e tc) $ isInstantiatedMeta m
-        return (v, tc)
-
-  -- The following cases need to be considered:
-  -- 1. No arguments to the projection.
-  -- 2. Arguments (parameters), but not the principal argument.
-  -- 3. Argument(s) including the principal argument.
-
-  -- For now, we only allow ambiguous projections if the first visible
-  -- argument is the record value.
-
-  case filter (visible . snd) $ zip [0..] args of
-
-    -- Case: we have no visible argument to the projection.
-    -- In inference mode, we really need the visible argument, postponing does not help
-    [] -> caseMaybe mt refuseNotApplied $ \ t -> do
-      -- If we have the type, we can try to get the type of the principal argument.
-      -- It is the first visible argument.
-      TelV _ptel core <- telViewUpTo' (-1) (not . visible) t
-      ifBlockedType core (\ m _ -> postpone m) $ {-else-} \ core -> do
-      ifNotPiType core (\ _ -> refuseNotApplied) $ {-else-} \ dom _b -> do
-      ifBlockedType (unDom dom) (\ m _ -> postpone m) $ {-else-} \ ta -> do
-      caseMaybeM (isRecordType ta) refuseNotRecordType $ \ (_q, _pars, defn) -> do
-      case defn of
-        Record { recFields = fs } -> do
-          case catMaybes $ for fs $ \ (Arg _ f) -> List.find (f ==) ds of
-            [] -> refuseNoMatching
-            [d] -> do
-              storeDisambiguatedName d
-              (,t) <$> checkHeadApplication e t (A.Proj o $ AmbQ [d]) args
-            _ -> __IMPOSSIBLE__
-        _ -> __IMPOSSIBLE__
-
-    -- Case: we have a visible argument
-    ((k, arg) : _) -> do
-      (v0, ta) <- inferExpr $ namedArg arg
-      reportSDoc "tc.proj.amb" 25 $ vcat
-        [ text "  principal arg " <+> prettyTCM arg
-        , text "  has type "      <+> prettyTCM ta
-        ]
-      -- ta should be a record type (after introducing the hidden args in v0)
-      (vargs, ta) <- implicitArgs (-1) (not . visible) ta
-      let v = v0 `apply` vargs
-      ifBlockedType ta (\ m _ -> postpone m) {-else-} $ \ ta -> do
-      caseMaybeM (isRecordType ta) refuseNotRecordType $ \ (q, _pars0, _) -> do
-
-          -- try to project it with all of the possible projections
-          let try d = do
-              reportSDoc "tc.proj.amb" 30 $ vcat
-                [ text $ "trying projection " ++ prettyShow d
-                , text "  td  = " <+> caseMaybeM (getDefType d ta) (text "Nothing") prettyTCM
-                ]
-
-              -- get the original projection name
-              isP <- isProjection d
-              reportSDoc "tc.proj.amb" 40 $ vcat $
-                [ text $ "  isProjection = " ++ caseMaybe isP "no" (const "yes")
-                ] ++ caseMaybe isP [] (\ Projection{ projProper = proper, projOrig = orig } ->
-                [ text $ "  proper       = " ++ show proper
-                , text $ "  orig         = " ++ prettyShow orig
-                ])
-
-              -- Andreas, 2017-01-21, issue #2422
-              -- The scope checker considers inherited projections (from nested records)
-              -- as projections and allows overloading.  However, since they are defined
-              -- as *composition* of projections, the type checker does *not* recognize them,
-              -- and @isP@ will be @Nothing@.
-              -- However, we can ignore this, as we only need the @orig@inal projection name
-              -- for removing false ambiguity.  Thus, we skip these checks:
-
-              -- Projection{ projProper = proper, projOrig = orig } <- MaybeT $ return isP
-              -- guard $ isJust proper
-              let orig = caseMaybe isP d projOrig
-
-              -- try to eliminate
-              (dom, u, tb) <- MaybeT (projectTyped v ta o d `catchError` \ _ -> return Nothing)
-              reportSDoc "tc.proj.amb" 30 $ vcat
-                [ text "  dom = " <+> prettyTCM dom
-                , text "  u   = " <+> prettyTCM u
-                , text "  tb  = " <+> prettyTCM tb
-                ]
-              (q', pars, _) <- MaybeT $ isRecordType $ unDom dom
-              reportSDoc "tc.proj.amb" 30 $ vcat
-                [ text "  q   = " <+> prettyTCM q
-                , text "  q'  = " <+> prettyTCM q'
-                ]
-              guard (q == q')
-              -- Get the type of the projection and check
-              -- that the first visible argument is the record value.
-              tfull <- lift $ defType <$> getConstInfo d
-              TelV tel _ <- lift $ telViewUpTo' (-1) (not . visible) tfull
-              reportSDoc "tc.proj.amb" 30 $ vcat
-                [ text $ "  size tel  = " ++ show (size tel)
-                , text $ "  size pars = " ++ show (size pars)
-                ]
-              -- See issue 1960 for when the following assertion fails for
-              -- the correct disambiguation.
-              -- guard (size tel == size pars)
-              return (orig, (d, (pars, (dom, u, tb))))
-
-          cands <- groupOn fst . catMaybes <$> mapM (runMaybeT . try) ds
-          case cands of
-            [] -> refuseNoMatching
-            [[]] -> refuseNoMatching
-            (_:_:_) -> refuse $ "several matching candidates found: "
-                 ++ prettyShow (map (fst . snd) $ concat cands)
-            -- case: just one matching projection d
-            -- the term u = d v
-            -- the type tb is the type of this application
-            [ (_orig, (d, (pars, (_dom,u,tb)))) : _ ] -> do
-              storeDisambiguatedName d
-
-              -- Check parameters
-              tfull <- typeOfConst d
-              (_,_) <- checkKnownArguments (take k args) pars tfull
-
-              -- Check remaining arguments
-              let tc = fromMaybe typeDontCare mt
-              let r  = getRange e
-              z <- runExceptT $ checkArguments ExpandLast r (drop (k+1) args) tb tc
-              case z of
-                Right (us, trest) -> return (u `apply` us, trest)
-                -- We managed to check a part of es and got us1, but es2 remain.
-                Left (us1, es2, trest1) -> do
-                  -- In the inference case:
-                  -- To create a postponed type checking problem,
-                  -- we do not use typeDontCare, but create a meta.
-                  tc <- caseMaybe mt newTypeMeta_ return
-                  v <- postponeTypeCheckingProblem_ $
-                    CheckArgs ExpandLast r es2 trest1 tc $ \ us2 trest ->
-                      coerce (u `apply` us1 `apply` us2) trest tc
-                  return (v, tc)
-
-
--- | @checkApplication hd args e t@ checks an application.
---   Precondition: @Application hs args = appView e@
---
---   @checkApplication@ disambiguates constructors
---   (and continues to 'checkConstructorApplication')
---   and resolves pattern synonyms.
-checkApplication :: A.Expr -> A.Args -> A.Expr -> Type -> TCM Term
-checkApplication hd args e t = do
-  reportSDoc "tc.check.app" 20 $ vcat
-    [ text "checkApplication"
-    , nest 2 $ text "hd   = " <+> prettyA hd
-    , nest 2 $ text "args = " <+> sep (map prettyA args)
-    , nest 2 $ text "e    = " <+> prettyA e
-    , nest 2 $ text "t    = " <+> prettyTCM t
-    ]
-  reportSDoc "tc.check.app" 70 $ vcat
-    [ text "checkApplication (raw)"
-    , nest 2 $ text $ "hd   = " ++ show hd
-    , nest 2 $ text $ "args = " ++ show (deepUnscope args)
-    , nest 2 $ text $ "e    = " ++ show (deepUnscope e)
-    , nest 2 $ text $ "t    = " ++ show t
-    ]
-  case unScope hd of
-    A.Proj _ (AmbQ []) -> __IMPOSSIBLE__
-
-    -- Subcase: unambiguous projection
-    A.Proj _ (AmbQ [_]) -> checkHeadApplication e t hd args
-
-    -- Subcase: ambiguous projection
-    A.Proj o (AmbQ ds@(_:_:_)) -> checkProjApp e o ds args t
-
-    -- Subcase: ambiguous constructor
-    A.Con (AmbQ cs0@(_:_:_)) -> do
-      -- First we should figure out which constructor we want.
-      reportSLn "tc.check.term" 40 $ "Ambiguous constructor: " ++ prettyShow cs0
-
-      -- Get the datatypes of the various constructors
-      let getData Constructor{conData = d} = d
-          getData _                        = __IMPOSSIBLE__
-      reportSLn "tc.check.term" 40 $ "  ranges before: " ++ show (getRange cs0)
-      -- We use the reduced constructor when disambiguating, but
-      -- the original constructor for type checking. This is important
-      -- since they may have different types (different parameters).
-      -- See issue 279.
-      -- Andreas, 2017-08-13, issue #2686: ignore abstract constructors
-      (cs, cons)  <- unzip . snd . partitionEithers <$> do
-         forM cs0 $ \ c -> mapRight (c,) <$> getConForm c
-      reportSLn "tc.check.term" 40 $ "  reduced: " ++ prettyShow cons
-      case cons of
-        []  -> typeError $ AbstractConstructorNotInScope $
-                 fromMaybe __IMPOSSIBLE__ $ headMaybe cs0
-        [con] -> do
-          let c = setConName (fromMaybe __IMPOSSIBLE__ $ headMaybe cs) con
-          reportSLn "tc.check.term" 40 $ "  only one non-abstract constructor: " ++ prettyShow c
-          storeDisambiguatedName $ conName c
-          checkConstructorApplication e t c args
-        _   -> do
-          dcs <- zipWithM (\ c con -> (, setConName c con) . getData . theDef <$> getConInfo con) cs cons
-          -- Type error
-          let badCon t = typeError $ flip DoesNotConstructAnElementOf t $
-                fromMaybe __IMPOSSIBLE__ $ headMaybe cs
-          -- Lets look at the target type at this point
-          let getCon :: TCM (Maybe ConHead)
-              getCon = do
-                TelV tel t1 <- telView t
-                addContext tel $ do
-                 reportSDoc "tc.check.term.con" 40 $ nest 2 $
-                   text "target type: " <+> prettyTCM t1
-                 ifBlockedType t1 (\ m t -> return Nothing) $ \ t' ->
-                   caseMaybeM (isDataOrRecord $ unEl t') (badCon t') $ \ d ->
-                     case [ c | (d', c) <- dcs, d == d' ] of
-                       [c] -> do
-                         reportSLn "tc.check.term" 40 $ "  decided on: " ++ prettyShow c
-                         storeDisambiguatedName $ conName c
-                         return $ Just c
-                       []  -> badCon $ t' $> Def d []
-                       cs  -> typeError $ CantResolveOverloadedConstructorsTargetingSameDatatype d $ map conName cs
-          let unblock = isJust <$> getCon -- to unblock, call getCon later again
-          mc <- getCon
-          case mc of
-            Just c  -> checkConstructorApplication e t c args
-            Nothing -> postponeTypeCheckingProblem (CheckExpr e t) unblock
-
-    -- Subcase: non-ambiguous constructor
-    A.Con (AmbQ [c]) -> do
-      -- augment c with record fields, but do not revert to original name
-      con <- fromRightM (sigError __IMPOSSIBLE_VERBOSE__ (typeError $ AbstractConstructorNotInScope c)) =<<
-        getOrigConHead c
-      checkConstructorApplication e t con args
-
-    -- Subcase: pattern synonym
-    A.PatternSyn n -> do
-      (ns, p) <- lookupPatternSyn n
-      p <- setRange (getRange n) . killRange <$> expandPatternSynonyms (vacuous p)  -- expand recursive pattern synonyms
-      -- Expand the pattern synonym by substituting for
-      -- the arguments we have got and lambda-lifting
-      -- over the ones we haven't.
-      let meta r = A.Underscore $ A.emptyMetaInfo{ A.metaRange = r }   -- TODO: name suggestion
-      case A.insertImplicitPatSynArgs meta (getRange n) ns args of
-        Nothing      -> typeError $ BadArgumentsToPatternSynonym n
-        Just (s, ns) -> do
-          let p' = A.patternToExpr p
-              e' = A.lambdaLiftExpr (map unArg ns) (A.substExpr s p')
-          checkExpr e' t
-
-    -- Subcase: macro
-    A.Macro x -> do
-      -- First go: no parameters
-      TelV tel _ <- telView =<< normalise . defType =<< instantiateDef =<< getConstInfo x
-
-      tTerm <- primAgdaTerm
-      tName <- primQName
-
-      let argTel   = init $ telToList tel -- last argument is the hole term
-
-          -- inspect macro type to figure out if arguments need to be wrapped in quote/quoteTerm
-          mkArg :: Type -> NamedArg A.Expr -> NamedArg A.Expr
-          mkArg t a | unEl t == tTerm =
-            (fmap . fmap)
-              (A.App (A.ExprRange (getRange a)) (A.QuoteTerm A.exprNoRange) . defaultNamedArg) a
-          mkArg t a | unEl t == tName =
-            (fmap . fmap)
-              (A.App (A.ExprRange (getRange a)) (A.Quote A.exprNoRange) . defaultNamedArg) a
-          mkArg t a | otherwise = a
-
-          makeArgs :: [Dom (String, Type)] -> [NamedArg A.Expr] -> ([NamedArg A.Expr], [NamedArg A.Expr])
-          makeArgs [] args = ([], args)
-          makeArgs _  []   = ([], [])
-          makeArgs tel@(d : _) (arg : args) =
-            case insertImplicit arg (map (fmap fst . argFromDom) tel) of
-              ImpInsert is   -> makeArgs (drop (length is) tel) (arg : args)
-              BadImplicits   -> (arg : args, [])  -- fail later in checkHeadApplication
-              NoSuchName{}   -> (arg : args, [])  -- ditto
-              NoInsertNeeded -> first (mkArg (snd $ unDom d) arg :) $ makeArgs (tail tel) args
-
-          (macroArgs, otherArgs) = makeArgs argTel args
-          unq = A.App (A.ExprRange $ fuseRange x args) (A.Unquote A.exprNoRange) . defaultNamedArg
-
-          desugared = A.app (unq $ unAppView $ Application (A.Def x) $ macroArgs) otherArgs
-
-      checkExpr desugared t
-
-    -- Subcase: unquote
-    A.Unquote _
-      | [arg] <- args -> do
-          (_, hole) <- newValueMeta RunMetaOccursCheck t
-          unquoteM (namedArg arg) hole t $ return hole
-      | arg : args <- args -> do
-          -- Example: unquote v a b : A
-          --  Create meta H : (x : X) (y : Y x) → Z x y for the hole
-          --  Check a : X, b : Y a
-          --  Unify Z a b == A
-          --  Run the tactic on H
-          tel    <- metaTel args                    -- (x : X) (y : Y x)
-          target <- addContext' tel newTypeMeta_      -- Z x y
-          let holeType = telePi_ tel target         -- (x : X) (y : Y x) → Z x y
-          (vs, EmptyTel) <- checkArguments_ ExpandLast (getRange args) args tel
-                                                    -- a b : (x : X) (y : Y x)
-          let rho = reverse (map unArg vs) ++# IdS  -- [x := a, y := b]
-          equalType (applySubst rho target) t       -- Z a b == A
-          (_, hole) <- newValueMeta RunMetaOccursCheck holeType
-          unquoteM (namedArg arg) hole holeType $ return $ apply hole vs
-      where
-        metaTel :: [Arg a] -> TCM Telescope
-        metaTel []           = pure EmptyTel
-        metaTel (arg : args) = do
-          a <- newTypeMeta_
-          let dom = a <$ domFromArg arg
-          ExtendTel dom . Abs "x" <$> addContext' ("x", dom) (metaTel args)
-
-    -- Subcase: defined symbol or variable.
-    _ -> do
-      v <- checkHeadApplication e t hd args
-      reportSDoc "tc.term.app" 30 $ vcat
-        [ text "checkApplication: checkHeadApplication returned"
-        , nest 2 $ text "v = " <+> prettyTCM v
-        ]
-      return v
-
----------------------------------------------------------------------------
--- * Meta variables
----------------------------------------------------------------------------
-
--- | Check an interaction point without arguments.
-checkQuestionMark :: (Type -> TCM (MetaId, Term)) -> Type -> A.MetaInfo -> InteractionId -> TCM Term
-checkQuestionMark new t0 i ii = do
-  reportSDoc "tc.interaction" 20 $ sep
-    [ text "Found interaction point"
-    , text (show ii)
-    , text ":"
-    , prettyTCM t0
-    ]
-  reportSDoc "tc.interaction" 60 $ sep
-    [ text "Raw:"
-    , text (show t0)
-    ]
-  checkMeta (newQuestionMark' new ii) t0 i -- Andreas, 2013-05-22 use unreduced type t0!
-
--- | Check an underscore without arguments.
-checkUnderscore :: Type -> A.MetaInfo -> TCM Term
-checkUnderscore = checkMeta (newValueMeta RunMetaOccursCheck)
-
--- | Type check a meta variable.
-checkMeta :: (Type -> TCM (MetaId, Term)) -> Type -> A.MetaInfo -> TCM Term
-checkMeta newMeta t i = fst <$> checkOrInferMeta newMeta (Just t) i
-
--- | Infer the type of a meta variable.
---   If it is a new one, we create a new meta for its type.
-inferMeta :: (Type -> TCM (MetaId, Term)) -> A.MetaInfo -> TCM (Args -> Term, Type)
-inferMeta newMeta i = mapFst apply <$> checkOrInferMeta newMeta Nothing i
-
--- | Type check a meta variable.
---   If its type is not given, we return its type, or a fresh one, if it is a new meta.
---   If its type is given, we check that the meta has this type, and we return the same
---   type.
-checkOrInferMeta :: (Type -> TCM (MetaId, Term)) -> Maybe Type -> A.MetaInfo -> TCM (Term, Type)
-checkOrInferMeta newMeta mt i = do
-  case A.metaNumber i of
-    Nothing -> do
-      setScope (A.metaScope i)
-      t <- maybe (workOnTypes $ newTypeMeta_) return mt
-      (x, v) <- newMeta t
-      setMetaNameSuggestion x (A.metaNameSuggestion i)
-      return (v, t)
-    -- Rechecking an existing metavariable
-    Just x -> do
-      let v = MetaV x []
-      reportSDoc "tc.meta.check" 20 $
-        text "checking existing meta " <+> prettyTCM v
-      t' <- jMetaType . mvJudgement <$> lookupMeta x
-      reportSDoc "tc.meta.check" 20 $
-        nest 2 $ text "of type " <+> prettyTCM t'
-      case mt of
-        Nothing -> return (v, t')
-        Just t  -> (,t) <$> coerce v t' t
-
--- | Turn a domain-free binding (e.g. lambda) into a domain-full one,
---   by inserting an underscore for the missing type.
-domainFree :: ArgInfo -> A.Name -> A.LamBinding
-domainFree info x =
-  A.DomainFull $ A.TypedBindings r $ Arg info $ A.TBind r [pure x] $ A.Underscore underscoreInfo
-  where
-    r = getRange x
-    underscoreInfo = A.MetaInfo
-      { A.metaRange          = r
-      , A.metaScope          = emptyScopeInfo
-      , A.metaNumber         = Nothing
-      , A.metaNameSuggestion = prettyShow $ A.nameConcrete x
-      }
-
----------------------------------------------------------------------------
--- * Applications
----------------------------------------------------------------------------
-
-inferHeadDef :: ProjOrigin -> QName -> TCM (Args -> Term, Type)
-inferHeadDef o x = do
-  proj <- isProjection x
-  let app =
-        case proj of
-          Nothing -> \ args -> Def x $ map Apply args
-          Just p  -> \ args -> projDropParsApply p o args
-  mapFst apply <$> inferDef app x
-
--- | Infer the type of a head thing (variable, function symbol, or constructor).
---   We return a function that applies the head to arguments.
---   This is because in case of a constructor we want to drop the parameters.
-inferHead :: A.Expr -> TCM (Args -> Term, Type)
-inferHead e = do
-  case e of
-    (A.Var x) -> do -- traceCall (InferVar x) $ do
-      (u, a) <- getVarInfo x
-      reportSDoc "tc.term.var" 20 $ hsep
-        [ text "variable" , prettyTCM x
-        , text "(" , text (show u) , text ")"
-        , text "has type:" , prettyTCM a
-        ]
-      when (unusableRelevance $ getRelevance a) $
-        typeError $ VariableIsIrrelevant x
-      return (apply u, unDom a)
-    (A.Def x) -> inferHeadDef ProjPrefix x
-    (A.Proj o (AmbQ [d])) -> inferHeadDef o d
-    (A.Proj{}) -> __IMPOSSIBLE__ -- inferHead will only be called on unambiguous projections
-    (A.Con (AmbQ [c])) -> do
-
-      -- Constructors are polymorphic internally.
-      -- So, when building the constructor term
-      -- we should throw away arguments corresponding to parameters.
-
-      -- First, inferDef will try to apply the constructor
-      -- to the free parameters of the current context. We ignore that.
-      con <- fromRightM (sigError __IMPOSSIBLE_VERBOSE__ (typeError $ AbstractConstructorNotInScope c)) =<<
-        getOrigConHead c
-      (u, a) <- inferDef (\ _ -> Con con ConOCon []) c
-
-      -- Next get the number of parameters in the current context.
-      Constructor{conPars = n} <- theDef <$> (instantiateDef =<< getConstInfo c)
-
-      reportSLn "tc.term.con" 7 $ unwords [prettyShow c, "has", show n, "parameters."]
-
-      -- So when applying the constructor throw away the parameters.
-      return (apply u . drop n, a)
-    (A.Con _) -> __IMPOSSIBLE__  -- inferHead will only be called on unambiguous constructors
-    (A.QuestionMark i ii) -> inferMeta (newQuestionMark ii) i
-    (A.Underscore i)   -> inferMeta (newValueMeta RunMetaOccursCheck) i
-    e -> do
-      (term, t) <- inferExpr e
-      return (apply term, t)
-
-inferDef :: (Args -> Term) -> QName -> TCM (Term, Type)
-inferDef mkTerm x =
-    traceCall (InferDef x) $ do
-    -- getConstInfo retrieves the *absolute* (closed) type of x
-    -- instantiateDef relativizes it to the current context
-    d  <- instantiateDef =<< getConstInfo x
-    -- irrelevant defs are only allowed in irrelevant position
-    let drel = defRelevance d
-    when (drel /= Relevant) $ do
-      rel <- asks envRelevance
-      reportSDoc "tc.irr" 50 $ vcat
-        [ text "declaration relevance =" <+> text (show drel)
-        , text "context     relevance =" <+> text (show rel)
-        ]
-      unless (drel `moreRelevant` rel) $ typeError $ DefinitionIsIrrelevant x
-    -- since x is considered living in the top-level, we have to
-    -- apply it to the current context
-    vs <- freeVarsToApply x
-    reportSDoc "tc.term.def" 60 $ do
-      text "freeVarsToApply to def " <+> hsep (map (text . show) vs)
-    reportSDoc "tc.term.def" 10 $ do
-      text "inferred def " <+> prettyTCM x <+> hsep (map prettyTCM vs)
-    let t = defType d
-    reportSDoc "tc.term.def" 10 $ nest 2 $ text " : " <+> prettyTCM t
-    let v = mkTerm vs -- applies x to vs, dropping parameters
-    reportSDoc "tc.term.def" 10 $ nest 2 $ text " --> " <+> prettyTCM v
-    return (v, t)
-
--- | 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 -> ConHead -> [NamedArg A.Expr] -> TCM Term
-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 paramsGiven = checkForParams args
-  if paramsGiven then fallback else do
-    reportSDoc "tc.term.con" 50 $ text "checkConstructorApplication: no parameters explicitly supplied, continuing..."
-    cdef  <- getConInfo c
-    let Constructor{conData = d, conPars = npars} = theDef cdef
-    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' es) -> do
-        let ~(Just vs) = allApplyElims es
-        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'
-         caseMaybe (sequenceA $ List2 (Just npars, npars')) fallback $ \ (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')  -- preprocessor does not like ', so put on next line
-             __IMPOSSIBLE__
-           let ps    = take n $ drop (n' - n) vs
-               ctype = defType cdef
-           reportSDoc "tc.term.con" 20 $ vcat
-             [ text "special checking of constructor application of" <+> prettyTCM c
-             , nest 2 $ vcat [ text "ps     =" <+> prettyTCM ps
-                             , text "ctype  =" <+> prettyTCM ctype ] ]
-           let ctype' = ctype `piApply` ps
-           reportSDoc "tc.term.con" 20 $ nest 2 $ text "ctype' =" <+> prettyTCM ctype'
-           -- get the parameter names
-           let TelV ptel _ = telView'UpTo n ctype
-           let pnames = map (fmap fst) $ telToList ptel
-           -- drop the parameter arguments
-               args' = dropArgs pnames args
-           -- check the non-parameter arguments
-           expandLast <- asks envExpandLast
-           checkArguments' expandLast (getRange c) args' ctype' t $ \us t' -> do
-             reportSDoc "tc.term.con" 20 $ nest 2 $ vcat
-               [ text "us     =" <+> prettyTCM us
-               , text "t'     =" <+> prettyTCM t' ]
-             coerce (Con c ConOCon 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 [conName c])) args
-
-    -- 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.
-    --
-    -- Andreas, 2012-04-18: if all inital args are underscores, ignore them
-    checkForParams args =
-      let (hargs, rest) = span (not . visible) args
-          notUnderscore A.Underscore{} = False
-          notUnderscore _              = True
-      in  any notUnderscore $ map (unScope . namedArg) hargs
-
-    -- Drop the constructor arguments that correspond to parameters.
-    dropArgs [] args                = args
-    dropArgs ps []                  = args
-    dropArgs ps args@(arg : args')
-      | Just p   <- name,
-        Just ps' <- namedPar p ps   = dropArgs ps' args'
-      | Nothing  <- name,
-        Just ps' <- unnamedPar h ps = dropArgs ps' args'
-      | otherwise                   = args
-      where
-        name = fmap rangedThing . nameOf $ unArg arg
-        h    = getHiding arg
-
-        namedPar   x = dropPar ((x ==) . unDom)
-        unnamedPar h = dropPar (sameHiding h)
-
-        dropPar this (p : ps) | this p    = Just ps
-                              | otherwise = dropPar this ps
-        dropPar _ [] = Nothing
-
-
-{- 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.
-    splitArgs [] args = ([], args)
-    splitArgs ps []   =
-          (map (const dummyUnderscore) ps, args)
-    splitArgs ps args@(Arg NotHidden _ _ : _) =
-          (map (const dummyUnderscore) ps, args)
-    splitArgs (p:ps) (arg : args)
-      | elem mname [Nothing, Just p] =
-          mapFst (arg :) $ splitArgs ps args
-      | otherwise =
-          mapFst (dummyUnderscore :) $ splitArgs ps (arg:args)
-      where
-        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
--- type-checked term is returned.
---
--- If the head term @hd@ is a coinductive constructor, then a
--- top-level definition @fresh tel = hd args@ (where the clause is
--- delayed) is added, where @tel@ corresponds to the current
--- telescope. The returned term is @fresh tel@.
---
--- Precondition: The head @hd@ has to be unambiguous, and there should
--- not be any need to insert hidden lambdas.
-checkHeadApplication :: A.Expr -> Type -> A.Expr -> [NamedArg A.Expr] -> TCM Term
-checkHeadApplication e t hd args = do
-  kit       <- coinductionKit
-  case hd of
-    A.Con (AmbQ [c]) | Just c == (nameOfSharp <$> kit) -> do
-      -- Type checking # generated #-wrapper. The # that the user can write will be a Def,
-      -- but the sharp we generate in the body of the wrapper is a Con.
-      defaultResult
-    A.Con (AmbQ [c]) -> do
-      (f, t0) <- inferHead hd
-      reportSDoc "tc.term.con" 5 $ vcat
-        [ text "checkHeadApplication inferred" <+>
-          prettyTCM c <+> text ":" <+> prettyTCM t0
-        ]
-      expandLast <- asks envExpandLast
-      checkArguments' expandLast (getRange hd) args t0 t $ \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
-        TelV fTel fType <- telViewUpTo (size eTel) t1
-        -- We know that the target type of the constructor (fType)
-        -- does not depend on fTel so we can compare fType and eType
-        -- first.
-
-        when (size eTel > size fTel) $
-          typeError $ UnequalTypes CmpLeq t1 t -- switch because of contravariance
-          -- Andreas, 2011-05-10 report error about types rather  telescopes
-          -- compareTel CmpLeq eTel fTel >> return () -- This will fail!
-
-        reportSDoc "tc.term.con" 10 $ addContext eTel $ vcat
-          [ text "checking" <+>
-            prettyTCM fType <+> text "?<=" <+> prettyTCM eType
-          ]
-        blockTerm t $ f vs <$ workOnTypes (do
-          addContext' eTel $ leqType fType eType
-          compareTel t t1 CmpLeq eTel fTel)
-
-    (A.Def c) | Just c == (nameOfSharp <$> kit) -> do
-      arg <- case args of
-               [a] | visible a -> return $ namedArg a
-               _ -> typeError $ GenericError $ prettyShow c ++ " must be applied to exactly one argument."
-
-      -- The name of the fresh function.
-      i <- fresh :: TCM Int
-      let name = filter (/= '_') (prettyShow $ A.nameConcrete $ A.qnameName c) ++ "-" ++ show i
-
-      kit <- coinductionKit'
-      let flat = nameOfFlat kit
-          inf  = nameOfInf  kit
-
-      -- Add the type signature of the fresh function to the
-      -- signature.
-      -- To make sure we can type check the generated function we have to make
-      -- sure that its type is \inf. The reason for this is that we don't yet
-      -- postpone checking of patterns when we don't know their types (Issue480).
-      forcedType <- do
-        lvl <- levelType
-        (_, l) <- newValueMeta RunMetaOccursCheck lvl
-        lv  <- levelView l
-        (_, a) <- newValueMeta RunMetaOccursCheck (sort $ Type lv)
-        return $ El (Type lv) $ Def inf [Apply $ setHiding Hidden $ defaultArg l, Apply $ defaultArg a]
-
-      wrapper <- inFreshModuleIfFreeParams $ do
-        c' <- setRange (getRange c) <$>
-                liftM2 qualify (killRange <$> currentModule)
-                               (freshName_ name)
-
-        -- Define and type check the fresh function.
-        rel <- asks envRelevance
-        abs <- aModeToDef <$> asks envAbstractMode
-        let info   = A.mkDefInfo (A.nameConcrete $ A.qnameName c') noFixity'
-                                 PublicAccess abs noRange
-            core   = A.LHSProj { A.lhsDestructor = AmbQ [flat]
-                               , A.lhsFocus      = defaultNamedArg $ A.LHSHead c' []
-                               , A.lhsPatsRight  = [] }
-            clause = A.Clause (A.LHS (A.LHSRange noRange) core []) [] []
-                              (A.RHS arg Nothing)
-                              [] False
-
-        i <- currentOrFreshMutualBlock
-
-        -- If we are in irrelevant position, add definition irrelevantly.
-        -- TODO: is this sufficient?
-        addConstant c' =<< do
-          let ai = setRelevance rel defaultArgInfo
-          useTerPragma $
-            (defaultDefn ai c' forcedType emptyFunction)
-            { defMutual = i }
-
-        checkFunDef NotDelayed info c' [clause]
-
-        reportSDoc "tc.term.expr.coind" 15 $ do
-          def <- theDef <$> getConstInfo c'
-          vcat $
-            [ text "The coinductive wrapper"
-            , nest 2 $ prettyTCM rel <> prettyTCM c' <+> text ":"
-            , nest 4 $ prettyTCM t
-            , nest 2 $ prettyA clause
-            , text "The definition is" <+> text (show $ funDelayed def) <>
-              text "."
-            ]
-        return c'
-
-      -- The application of the fresh function to the relevant
-      -- arguments.
-      e' <- Def wrapper . map Apply <$> getContextArgs
-
-      reportSDoc "tc.term.expr.coind" 15 $ vcat $
-          [ text "The coinductive constructor application"
-          , nest 2 $ prettyTCM e
-          , text "was translated into the application"
-          , nest 2 $ prettyTCM e'
-          ]
-
-      blockTerm t $ e' <$ workOnTypes (leqType forcedType t)
-    A.Con _  -> __IMPOSSIBLE__
-    _ -> defaultResult
-  where
-  defaultResult = do
-    (f, t0) <- inferHead hd
-    expandLast <- asks envExpandLast
-    checkArguments' expandLast (getRange hd) args t0 t $ \vs t1 -> do
-      coerce (f vs) t1 t
-
-traceCallE :: Call -> ExceptT e TCM r -> ExceptT e TCM r
-traceCallE call m = do
-  z <- lift $ traceCall call $ runExceptT m
-  case z of
-    Right e  -> return e
-    Left err -> throwError err
-
--- | Check arguments whose value we already know.
---
---   This function can be used to check user-supplied parameters
---   we have already computed by inference.
---
---   Precondition: The type @t@ of the head has enough domains.
-
-checkKnownArguments
-  :: [NamedArg A.Expr]  -- ^ User-supplied arguments (hidden ones may be missing).
-  -> Args               -- ^ Inferred arguments (including hidden ones).
-  -> Type               -- ^ Type of the head (must be Pi-type with enough domains).
-  -> TCM (Args, Type)   -- ^ Remaining inferred arguments, remaining type.
-checkKnownArguments []           vs t = return (vs, t)
-checkKnownArguments (arg : args) vs t = do
-  (vs', t') <- traceCall (SetRange $ getRange arg) $ checkKnownArgument arg vs t
-  checkKnownArguments args vs' t'
-
--- | Check an argument whose value we already know.
-
-checkKnownArgument
-  :: NamedArg A.Expr    -- ^ User-supplied argument.
-  -> Args               -- ^ Inferred arguments (including hidden ones).
-  -> Type               -- ^ Type of the head (must be Pi-type with enough domains).
-  -> TCM (Args, Type)   -- ^ Remaining inferred arguments, remaining type.
-checkKnownArgument arg [] _ = genericDocError =<< do
-  text "Invalid projection parameter " <+> prettyA arg
-checkKnownArgument arg@(Arg info e) (Arg _infov v : vs) t = do
-  (Dom info' a, b) <- mustBePi t
-  -- Skip the arguments from vs that do not correspond to e
-  if not (sameHiding info info'
-          && (visible info || maybe True ((absName b ==) . rangedThing) (nameOf e)))
-    -- Continue with the next one
-    then checkKnownArgument arg vs (b `absApp` v)
-    -- Found the right argument
-    else do
-      u <- checkNamedArg arg a
-      equalTerm a u v
-      return (vs, b `absApp` v)
-
--- | Check a single argument.
-
-checkNamedArg :: NamedArg A.Expr -> Type -> TCM Term
-checkNamedArg arg@(Arg info e0) t0 = do
-  let e = namedThing e0
-  let x = maybe "" rangedThing $ nameOf e0
-  traceCall (CheckExprCall e t0) $ do
-    reportSDoc "tc.term.args.named" 15 $ do
-        text "Checking named arg" <+> sep
-          [ fsep [ prettyTCM arg, text ":", prettyTCM t0 ]
-          ]
-    reportSLn "tc.term.args.named" 75 $ "  arg = " ++ show (deepUnscope arg)
-    -- Ulf, 2017-03-24: (#2172) Always treat explicit _ and ? as implicit
-    -- argument (i.e. solve with unification).
-    let checkU = checkMeta (newMetaArg (setHiding Hidden info) x) t0
-    let checkQ = checkQuestionMark (newInteractionMetaArg (setHiding Hidden info) x) t0
-    if not $ isHole e then checkExpr e t0 else localScope $ do
-      -- Note: we need localScope here,
-      -- as scopedExpr manipulates the scope in the state.
-      -- However, we may not pull localScope over checkExpr!
-      -- This is why we first test for isHole, and only do
-      -- scope manipulations if we actually handle the checking
-      -- of e here (and not pass it to checkExpr).
-      scopedExpr e >>= \case
-        A.Underscore i ->  checkU i
-        A.QuestionMark i ii -> checkQ i ii
-        _ -> __IMPOSSIBLE__
-  where
-  isHole A.Underscore{} = True
-  isHole A.QuestionMark{} = True
-  isHole (A.ScopedExpr _ e) = isHole e
-  isHole _ = False
-
--- | Check a list of arguments: @checkArgs args t0 t1@ checks that
---   @t0 = Delta -> t0'@ and @args : Delta@. Inserts hidden arguments to
---   make this happen.  Returns the evaluated arguments @vs@, the remaining
---   type @t0'@ (which should be a subtype of @t1@) and any constraints @cs@
---   that have to be solved for everything to be well-formed.
-
-checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->
-                  ExceptT (Args, [NamedArg A.Expr], Type) TCM (Args, Type)
-
--- Case: no arguments, do not insert trailing hidden arguments: We are done.
-checkArguments DontExpandLast _ [] t0 t1 = return ([], t0)
-
--- Case: no arguments, but need to insert trailing hiddens.
-checkArguments exh r [] t0 t1 =
-    traceCallE (CheckArguments r [] t0 t1) $ lift $ do
-      t1' <- unEl <$> reduce t1
-      implicitArgs (-1) (expand t1') t0
-    where
-      expand (Pi (Dom info _) _)   Hidden = not (hidden info) &&
-                                            exh == ExpandLast
-      expand _                     Hidden = exh == ExpandLast
-      expand (Pi (Dom info _) _) Instance{} = not $ isInstance info
-      expand _                   Instance{} = True
-      expand _                  NotHidden = False
-
--- Case: argument given.
-checkArguments exh r args0@(arg@(Arg info 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
-          ]
-        ]
-      -- First, insert implicit arguments, depending on current argument @arg@.
-      let hx = getHiding info  -- hiding of current argument
-          mx = fmap rangedThing $ nameOf e -- name of current argument
-          -- do not insert visible arguments
-          expand NotHidden y = False
-          -- insert a hidden argument if arg is not hidden or has different name
-          -- insert an instance argument if arg is not instance  or has different name
-          expand hy        y = not (sameHiding hy hx) || maybe False (y /=) mx
-      (nargs, t) <- lift $ implicitNamedArgs (-1) expand t0
-      -- Separate names from args.
-      let (mxs, us) = unzip $ map (\ (Arg ai (Named mx u)) -> (mx, Arg ai u)) nargs
-          xs        = catMaybes mxs
-      -- We are done inserting implicit args.  Now, try to check @arg@.
-      ifBlockedType t (\ m t -> throwError (us, args0, t)) $ \ t0' -> do
-
-        -- What can go wrong?
-
-        -- 1. We ran out of function types.
-        let shouldBePi
-              -- a) It is an explicit argument, but we ran out of function types.
-              | visible info = lift $ typeError $ ShouldBePi t0'
-              -- b) It is an implicit argument, and we did not insert any implicits.
-              --    Thus, the type was not a function type to start with.
-              | null xs        = lift $ typeError $ ShouldBePi t0'
-              -- c) We did insert implicits, but we ran out of implicit function types.
-              --    Then, we should inform the user that we did not find his one.
-              | otherwise      = lift $ typeError $ WrongNamedArgument arg
-
-        -- 2. We have a function type left, but it is the wrong one.
-        --    Our argument must be implicit, case a) is impossible.
-        --    (Otherwise we would have ran out of function types instead.)
-        let wrongPi
-              -- b) We have not inserted any implicits.
-              | null xs   = lift $ typeError $ WrongHidingInApplication t0'
-              -- c) We inserted implicits, but did not find his one.
-              | otherwise = lift $ typeError $ WrongNamedArgument arg
-
-        -- t0' <- lift $ forcePi (getHiding info) (maybe "_" rangedThing $ nameOf e) t0'
-        case ignoreSharing $ unEl t0' of
-          Pi (Dom info' a) b
-            | sameHiding info info'
-              && (visible info || maybe True ((absName b ==) . rangedThing) (nameOf e)) -> do
-                u <- lift $ applyRelevanceToContext (getRelevance info') $ do
-                 -- Andreas, 2014-05-30 experiment to check non-dependent arguments
-                 -- after the spine has been processed.  Allows to propagate type info
-                 -- from ascribed type into extended-lambdas.  Would solve issue 1159.
-                 -- However, leaves unsolved type checking problems in the test suite.
-                 -- I do not know what I am doing wrong here.
-                 -- Could be extreme order-sensitivity or my abuse of the postponing
-                 -- mechanism.
-                 -- Andreas, 2016-02-02: Ulf says unless there is actually some meta
-                 -- blocking a postponed type checking problem, we might never retry,
-                 -- since the trigger for retrying constraints is solving a meta.
-                 -- Thus, the following naive use violates some invariant.
-                 -- if not $ isBinderUsed b
-                 -- then postponeTypeCheckingProblem (CheckExpr (namedThing e) a) (return True) else
-                  let e' = e { nameOf = maybe (Just $ unranged $ absName b) Just (nameOf e) }
-                  checkNamedArg (Arg info' e') a
-                -- save relevance info' from domain in argument
-                addCheckedArgs us (Arg info' u) $
-                  checkArguments exh (fuseRange r e) args (absApp b u) t1
-            | otherwise -> do
-                reportSDoc "error" 10 $ nest 2 $ vcat
-                  [ text $ "info      = " ++ show info
-                  , text $ "info'     = " ++ show info'
-                  , text $ "absName b = " ++ absName b
-                  , text $ "nameOf e  = " ++ show (nameOf e)
-                  ]
-                wrongPi
-          _ -> shouldBePi
-  where
-    addCheckedArgs us u rec =
-      (mapFst ((us ++) . (u :)) <$> rec)
-        `catchError` \(vs, es, t) ->
-          throwError (us ++ u : vs, es, t)
-
--- | Check that a list of arguments fits a telescope.
---   Inserts hidden arguments as necessary.
---   Returns the type-checked arguments and the remaining telescope.
-checkArguments_
-  :: ExpandHidden         -- ^ Eagerly insert trailing hidden arguments?
-  -> Range                -- ^ Range of application.
-  -> [NamedArg A.Expr]    -- ^ Arguments to check.
-  -> Telescope            -- ^ Telescope to check arguments against.
-  -> TCM (Args, Telescope)
-     -- ^ Checked arguments and remaining telescope if successful.
-checkArguments_ exh r args tel = do
-    z <- runExceptT $
-      checkArguments exh r args (telePi tel typeDontCare) typeDontCare
-    case z of
-      Right (args, t) -> do
-        let TelV tel' _ = telView' t
-        return (args, tel')
-      Left _ -> __IMPOSSIBLE__  -- type cannot be blocked as it is generated by telePi
-
-
--- | Infer the type of an expression. Implemented by checking against a meta
---   variable.  Except for neutrals, for them a polymorphic type is inferred.
-inferExpr :: A.Expr -> TCM (Term, Type)
--- inferExpr e = inferOrCheck e Nothing
-inferExpr = inferExpr' DontExpandLast
-
-inferExpr' :: ExpandHidden -> A.Expr -> TCM (Term, Type)
-inferExpr' exh e = do
-  let Application hd args = appView e
-  reportSDoc "tc.infer" 30 $ vcat
-    [ text "inferExpr': appView of " <+> prettyA e
-    , text "  hd   = " <+> prettyA hd
-    , text "  args = " <+> prettyAs args
-    ]
-  reportSDoc "tc.infer" 60 $ vcat
-    [ text $ "  hd (raw) = " ++ show hd
-    ]
-  if not $ defOrVar hd then fallback else traceCall (InferExpr e) $ do
-    case unScope $ hd of
-      A.Proj o (AmbQ ds@(_:_:_)) -> inferProjApp e o ds args
-      _ -> do
-        (f, t0) <- inferHead hd
-        res <- runExceptT $ checkArguments exh (getRange hd) args t0 (sort Prop)
-        case res of
-          Right (vs, t1) -> return (f vs, t1)
-          Left t1 -> fallback -- blocked on type t1
-  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 A.Proj{} = True
-defOrVar (A.ScopedExpr _ e) = defOrVar e
-defOrVar _     = False
-
--- | Used to check aliases @f = e@.
---   Switches off 'ExpandLast' for the checking of top-level application.
-checkDontExpandLast :: A.Expr -> Type -> TCM Term
-checkDontExpandLast e t = case e of
-  _ | Application hd args <- appView e,  defOrVar hd ->
-    traceCall (CheckExprCall e t) $ localScope $ dontExpandLast $ shared =<< do
-      checkApplication hd args e t
-  _ -> checkExpr e t -- note that checkExpr always sets ExpandLast
-
-{- Andreas, 2013-03-15 UNUSED, but don't remove
-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
-                                      (getRange hd) args t0 $
-                                      fromMaybe (sort Prop) 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)
--}
-
--- | Check whether a de Bruijn index is bound by a module telescope.
-isModuleFreeVar :: Int -> TCM Bool
-isModuleFreeVar i = do
-  params <- moduleParamsToApply =<< currentModule
-  return $ any ((== Var i []) . unArg) params
-
--- | 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
-  reportSDoc "tc.with.infer" 20 $ text "inferExprforWith " <+> prettyTCM e
-  reportSLn  "tc.with.infer" 80 $ "inferExprforWith " ++ show (deepUnscope e)
-  traceCall (InferExpr e) $ do
-    -- With wants type and term fully instantiated!
-    (v, t) <- instantiateFull =<< inferExpr e
-    v0 <- reduce v
-    -- Andreas 2014-11-06, issue 1342.
-    -- Check that we do not `with` on a module parameter!
-    case ignoreSharing v0 of
-      Var i [] -> whenM (isModuleFreeVar i) $ do
-        reportSDoc "tc.with.infer" 80 $ vcat
-          [ text $ "with expression is variable " ++ show i
-          , text "current modules = " <+> do text . show =<< currentModule
-          , text "current module free vars = " <+> do text . show =<< getCurrentModuleFreeVars
-          , text "context size = " <+> do text . show =<< getContextSize
-          , text "current context = " <+> do prettyTCM =<< getContextTelescope
-          ]
-        typeError $ WithOnFreeVariable e v0
-      _        -> return ()
-    -- Possibly insert hidden arguments.
-    TelV tel t0 <- telViewUpTo' (-1) (not . visible) 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) notVisible t
-            return (v `apply` args, t1)
-      _ -> return (v, t)
-
----------------------------------------------------------------------------
--- * Let bindings
----------------------------------------------------------------------------
-
-checkLetBindings :: [A.LetBinding] -> TCM a -> TCM a
-checkLetBindings = foldr (.) id . map checkLetBinding
-
-checkLetBinding :: A.LetBinding -> TCM a -> TCM a
-
-checkLetBinding b@(A.LetBind i info x t e) ret =
-  traceCallCPS_ (CheckLetBinding b) ret $ \ret -> do
-    t <- isType_ t
-    v <- applyRelevanceToContext (getRelevance info) $ checkDontExpandLast e t
-    addLetBinding info x v t ret
-
-checkLetBinding b@(A.LetPatBind i p e) ret =
-  traceCallCPS_ (CheckLetBinding b) ret $ \ret -> do
-    p <- expandPatternSynonyms p
-    (v, t) <- inferExpr' ExpandLast e
-    let -- construct a type  t -> dummy  for use in checkLeftHandSide
-        t0 = El (getSort t) $ Pi (Dom defaultArgInfo t) (NoAbs underscore typeDontCare)
-        p0 = Arg defaultArgInfo (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
-        ]
-      ]
-    fvs <- getContextSize
-    checkLeftHandSide (CheckPattern p EmptyTel t) Nothing [p0] t0 Nothing [] $ \ (LHSResult _ delta0 ps _t _ asb) -> bindAsPatterns asb $ do
-          -- After dropping the free variable patterns there should be a single pattern left.
-      let p = case drop fvs ps of [p] -> namedArg p; _ -> __IMPOSSIBLE__
-          -- Also strip the context variables from the telescope
-          delta = telFromList $ drop fvs $ telToList delta0
-      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
-          toDrop       = length binds
-
-          -- We create a substitution for the let-bound variables
-          -- (unfortunately, we cannot refer to x in internal syntax
-          -- so we have to copy v).
-          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.
-          sub    = parallelS (reverse sigma)
-
-          -- Outer let-bindings will have been rebound by checkLeftHandSide, so
-          -- we need to strenghten those as well. Don't use a strengthening
-          -- subsititution since @-patterns in the pattern binding will reference
-          -- the pattern variables.
-          subLetBind (OpenThing cxt va) = OpenThing (drop toDrop cxt) (applySubst sub va)
-      escapeContext toDrop $ updateModuleParameters sub
-                           $ locally eLetBindings (fmap subLetBind) $ 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
- -}
-        let fdelta = flattenTel delta
-        reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat
-          [ text "fdelta =" <+> text (show fdelta)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
+
+import Control.Monad.Trans
+import Control.Monad.Trans.Maybe
+import Control.Monad.State (get, put)
+import Control.Monad.Reader
+
+import Data.Maybe
+import Data.Either (partitionEithers)
+import Data.Monoid (mappend)
+import qualified Data.List as List
+import qualified Data.Map as Map
+
+import Agda.Interaction.Options
+import Agda.Interaction.Highlighting.Generate (storeDisambiguatedName)
+
+import qualified Agda.Syntax.Abstract as A
+import Agda.Syntax.Abstract.Views as A
+import qualified Agda.Syntax.Info as A
+import Agda.Syntax.Concrete.Pretty () -- only Pretty instances
+import Agda.Syntax.Concrete (FieldAssignment'(..), nameFieldA)
+import qualified Agda.Syntax.Concrete.Name as C
+import Agda.Syntax.Common
+import Agda.Syntax.Internal as I
+import Agda.Syntax.Position
+import Agda.Syntax.Literal
+import Agda.Syntax.Scope.Base ( ThingsInScope, AbstractName
+                              , emptyScopeInfo
+                              , exportedNamesInScope)
+import Agda.Syntax.Scope.Monad (getNamedScope)
+import Agda.Syntax.Translation.InternalToAbstract (reify)
+
+import Agda.TypeChecking.CompiledClause
+import Agda.TypeChecking.Constraints
+import Agda.TypeChecking.Conversion
+import Agda.TypeChecking.Datatypes
+import Agda.TypeChecking.EtaContract
+import Agda.TypeChecking.Implicit
+import Agda.TypeChecking.Irrelevance
+import Agda.TypeChecking.Level
+import Agda.TypeChecking.MetaVars
+import Agda.TypeChecking.Monad
+import Agda.TypeChecking.Monad.Builtin
+import Agda.TypeChecking.Patterns.Abstract
+import Agda.TypeChecking.Positivity.Occurrence
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Primitive
+import Agda.TypeChecking.Quote
+import Agda.TypeChecking.RecordPatterns
+import Agda.TypeChecking.Records
+import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Rules.LHS
+import Agda.TypeChecking.SizedTypes
+import Agda.TypeChecking.SizedTypes.Solve
+import Agda.TypeChecking.Sort
+import Agda.TypeChecking.Substitute
+import Agda.TypeChecking.Telescope
+import Agda.TypeChecking.Unquote
+
+import {-# SOURCE #-} Agda.TypeChecking.Empty (isEmptyType)
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Def (checkFunDef', useTerPragma)
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl (checkSectionApplication)
+import {-# SOURCE #-} Agda.TypeChecking.Rules.Application
+
+import Agda.Utils.Except
+  ( ExceptT
+  , MonadError(catchError, throwError)
+  , runExceptT
+  )
+import Agda.Utils.Functor
+import Agda.Utils.Lens
+import Agda.Utils.List
+import Agda.Utils.Maybe
+import Agda.Utils.Monad
+import Agda.Utils.Null
+import Agda.Utils.NonemptyList
+import Agda.Utils.Pretty ( prettyShow )
+import qualified Agda.Utils.Pretty as P
+import Agda.Utils.Size
+import Agda.Utils.Tuple
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
+---------------------------------------------------------------------------
+-- * Types
+---------------------------------------------------------------------------
+
+-- | Check that an expression is a type.
+isType :: A.Expr -> Sort -> TCM Type
+isType e s =
+    traceCall (IsTypeCall e s) $ do
+    v <- checkExpr e (sort s)
+    return $ El s v
+
+-- | Check that an expression is a type without knowing the sort.
+isType_ :: A.Expr -> TCM Type
+isType_ e = traceCall (IsType_ e) $ do
+  let fallback = isType e =<< do workOnTypes $ newSortMeta
+  case unScope e of
+    A.Fun i (Arg info t) b -> do
+      a <- Dom info <$> isType_ t
+      b <- isType_ b
+      s <- inferFunSort (getSort a) (getSort b)
+      let t' = El s $ Pi a $ NoAbs underscore b
+      noFunctionsIntoSize b t'
+      return t'
+    A.Pi _ tel e | null tel -> isType_ e
+    A.Pi _ tel e -> do
+      (t0, t') <- checkPiTelescope tel $ \ tel -> do
+        t0  <- instantiateFull =<< isType_ e
+        tel <- instantiateFull tel
+        return (t0, telePi tel t0)
+      checkTelePiSort t'
+      noFunctionsIntoSize t0 t'
+      return t'
+    A.Set _ n    -> do
+      return $ sort (mkType n)
+    A.App i s arg
+      | visible arg,
+        A.Set _ 0 <- unScope s ->
+      ifNotM hasUniversePolymorphism
+          (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")
+      $ {- else -} do
+        lvl <- levelType
+        -- allow NonStrict variables when checking level
+        --   Set : (NonStrict) Level -> Set\omega
+        n   <- levelView =<< do
+          applyRelevanceToContext NonStrict $
+            checkNamedArg arg lvl
+        return $ sort (Type n)
+
+    -- Issue #707: Check an existing interaction point
+    A.QuestionMark minfo ii -> caseMaybeM (lookupInteractionMeta ii) fallback $ \ x -> do
+      -- -- | Just x <- A.metaNumber minfo -> do
+      reportSDoc "tc.ip" 20 $ fsep
+        [ text "Rechecking meta "
+        , prettyTCM x
+        , text $ " for interaction point " ++ show ii
+        ]
+      mv <- lookupMeta x
+      let s0 = jMetaType . mvJudgement $ mv
+      -- Andreas, 2016-10-14, issue #2257
+      -- The meta was created in a context of length @n@.
+      let n  = length . envContext . clEnv . miClosRange . mvInfo $ mv
+      (vs, rest) <- splitAt n <$> getContextArgs
+      reportSDoc "tc.ip" 20 $ vcat
+        [ text "  s0   = " <+> prettyTCM s0
+        , text "  vs   = " <+> prettyTCM vs
+        , text "  rest = " <+> prettyTCM rest
+        ]
+      -- We assume the meta variable use here is in an extension of the original context.
+      -- If not we revert to the old buggy behavior of #707 (see test/Succeed/Issue2257b).
+      if (length vs /= n) then fallback else do
+      s1  <- piApplyM s0 vs
+      case unEl s1 of
+        Sort s -> return $ El s $ MetaV x $ map Apply vs
+        _ -> __IMPOSSIBLE__
+
+    _ -> fallback
+
+-- | Ensure that a (freshly created) function type does not inhabit 'SizeUniv'.
+--   Precondition:  When @noFunctionsIntoSize t tBlame@ is called,
+--   we are in the context of @tBlame@ in order to print it correctly.
+--   Not being in context of @t@ should not matter, as we are only
+--   checking whether its sort reduces to 'SizeUniv'.
+noFunctionsIntoSize :: Type -> Type -> TCM ()
+noFunctionsIntoSize t tBlame = do
+  reportSDoc "tc.fun" 20 $ do
+    let El s (Pi dom b) = tBlame
+    sep [ text "created function type " <+> prettyTCM tBlame
+        , text "with pts rule" <+> prettyTCM (getSort dom, getSort b, s)
+        ]
+  s <- reduce $ getSort t
+  when (s == SizeUniv) $ do
+    -- Andreas, 2015-02-14
+    -- We have constructed a function type in SizeUniv
+    -- which is illegal to prevent issue 1428.
+    typeError $ FunctionTypeInSizeUniv $ unEl tBlame
+
+-- | Check that an expression is a type which is equal to a given type.
+isTypeEqualTo :: A.Expr -> Type -> TCM Type
+isTypeEqualTo e0 t = scopedExpr e0 >>= \case
+  A.ScopedExpr{} -> __IMPOSSIBLE__
+  A.Underscore i | A.metaNumber i == Nothing -> return t
+  e -> workOnTypes $ do
+    t' <- isType e (getSort t)
+    t' <$ leqType t t'
+
+leqType_ :: Type -> Type -> TCM ()
+leqType_ t t' = workOnTypes $ leqType t t'
+
+---------------------------------------------------------------------------
+-- * Telescopes
+---------------------------------------------------------------------------
+
+-- | Type check a (module) telescope.
+--   Binds the variables defined by the telescope.
+checkTelescope :: A.Telescope -> (Telescope -> TCM a) -> TCM a
+checkTelescope = checkTelescope' LamNotPi
+
+-- | Type check the telescope of a dependent function type.
+--   Binds the resurrected variables defined by the telescope.
+--   The returned telescope is unmodified (not resurrected).
+checkPiTelescope :: A.Telescope -> (Telescope -> TCM a) -> TCM a
+checkPiTelescope = checkTelescope' PiNotLam
+
+-- | Flag to control resurrection on domains.
+data LamOrPi
+  = LamNotPi -- ^ We are checking a module telescope.
+             --   We pass into the type world to check the domain type.
+             --   This resurrects the whole context.
+  | PiNotLam -- ^ We are checking a telescope in a Pi-type.
+             --   We stay in the term world, but add resurrected
+             --   domains to the context to check the remaining
+             --   domains and codomain of the Pi-type.
+  deriving (Eq, Show)
+
+-- | Type check a telescope. Binds the variables defined by the telescope.
+checkTelescope' :: LamOrPi -> A.Telescope -> (Telescope -> TCM a) -> TCM a
+checkTelescope' lamOrPi []        ret = ret EmptyTel
+checkTelescope' lamOrPi (b : tel) ret =
+    checkTypedBindings lamOrPi b $ \tel1 ->
+    checkTelescope' lamOrPi tel  $ \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.
+--
+--   Parametrized by a flag wether we check a typed lambda or a Pi. This flag
+--   is needed for irrelevance.
+checkTypedBindings :: LamOrPi -> A.TypedBindings -> (Telescope -> TCM a) -> TCM a
+checkTypedBindings lamOrPi (A.TypedBindings i (Arg info b)) ret =
+    checkTypedBinding lamOrPi info b $ \ bs ->
+    ret $ telFromList bs
+
+checkTypedBinding :: LamOrPi -> ArgInfo -> A.TypedBinding -> (ListTel -> TCM a) -> TCM a
+checkTypedBinding lamOrPi info (A.TBind i xs' e) ret = do
+    let xs = map (fmap A.unBind) xs'
+    -- Andreas, 2011-04-26 irrelevant function arguments may appear
+    -- non-strictly in the codomain type
+    -- 2011-10-04 if flag --experimental-irrelevance is set
+    experimental <- optExperimentalIrrelevance <$> pragmaOptions
+    t <- modEnv lamOrPi $ isType_ e
+    let info' = mapRelevance (modRel lamOrPi experimental) info
+    addContext (xs, Dom info' t) $
+      ret $ bindsWithHidingToTel xs (Dom info t)
+    where
+        -- if we are checking a typed lambda, we resurrect before we check the
+        -- types, but do not modify the new context entries
+        -- otherwise, if we are checking a pi, we do not resurrect, but
+        -- modify the new context entries
+        modEnv LamNotPi = workOnTypes
+        modEnv _        = id
+        modRel PiNotLam xp = if xp then irrToNonStrict . nonStrictToRel else nonStrictToRel
+        modRel _        _  = id
+checkTypedBinding lamOrPi info (A.TLet _ lbs) ret = do
+    checkLetBindings lbs (ret [])
+
+---------------------------------------------------------------------------
+-- * Lambda abstractions
+---------------------------------------------------------------------------
+
+-- | Type check a lambda expression.
+checkLambda :: Arg A.TypedBinding -> A.Expr -> Type -> TCM Term
+checkLambda (Arg _ (A.TLet _ lbs)) body target =
+  checkLetBindings lbs (checkExpr body target)
+checkLambda (Arg info (A.TBind _ xs' typ)) body target = do
+  reportSLn "tc.term.lambda" 60 $ "checkLambda   xs = " ++ prettyShow xs
+
+  let numbinds = length xs
+  TelV tel btyp <- telViewUpTo numbinds target
+  if size tel < numbinds || numbinds /= 1
+    then dontUseTargetType
+    else useTargetType tel btyp
+  where
+    xs = map (fmap A.unBind) xs'
+    dontUseTargetType = do
+      -- Checking λ (xs : argsT) → body : target
+      verboseS "tc.term.lambda" 5 $ tick "lambda-no-target-type"
+
+      -- First check that argsT is a valid type
+      argsT <- workOnTypes $ Dom info <$> isType_ typ
+      -- Andreas, 2015-05-28 Issue 1523
+      -- If argsT is a SizeLt, it must be non-empty to avoid non-termination.
+      -- TODO: do we need to block checkExpr?
+      checkSizeLtSat $ unEl $ unDom argsT
+
+      -- 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
+      -- is inconclusive we need to block the resulting term so we create a
+      -- fresh problem for the check.
+      let tel = telFromList $ bindsWithHidingToTel xs argsT
+      reportSLn "tc.term.lambda" 60 $ "dontUseTargetType tel = " ++ show tel
+      -- DONT USE tel for addContext, as it loses NameIds.
+      -- WRONG: t1 <- addContext tel $ workOnTypes newTypeMeta_
+      t1 <- addContext (xs, argsT) $ workOnTypes newTypeMeta_
+      -- Do not coerce hidden lambdas
+      if notVisible info || any notVisible xs then do
+        pid <- newProblem_ $ leqType (telePi tel t1) target
+        -- Now check body : ?t₁
+        -- WRONG: v <- addContext tel $ checkExpr body t1
+        v <- addContext (xs, argsT) $ checkExpr body t1
+        -- Block on the type comparison
+        blockTermOnProblem target (teleLam tel v) pid
+       else do
+        -- Now check body : ?t₁
+        -- WRONG: v <- addContext tel $ checkExpr body t1
+        v <- addContext (xs, argsT) $ checkExpr body t1
+        -- Block on the type comparison
+        coerce (teleLam tel v) (telePi tel t1) target
+
+    useTargetType tel@(ExtendTel dom (Abs y EmptyTel)) btyp = do
+        verboseS "tc.term.lambda" 5 $ tick "lambda-with-target-type"
+        reportSLn "tc.term.lambda" 60 $ "useTargetType y  = " ++ y
+
+        -- merge in the hiding info of the TBind
+        let [WithHiding h x] = xs
+        info <- return $ mapHiding (mappend h) info
+        unless (sameHiding dom info) $ typeError $ WrongHidingInLambda target
+        -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given
+        info <- lambdaIrrelevanceCheck info dom
+        -- Andreas, 2015-05-28 Issue 1523
+        -- Ensure we are not stepping under a possibly non-existing size.
+        -- TODO: do we need to block checkExpr?
+        let a = unDom dom
+        checkSizeLtSat $ unEl a
+        -- 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 a
+        -- Andreas, Issue 630: take name from function type if lambda name is "_"
+        v <- lambdaAddContext x y (Dom info argT) $ checkExpr body btyp
+        blockTermOnProblem target (Lam info $ Abs (nameToArgName x) v) pid
+
+    useTargetType _ _ = __IMPOSSIBLE__
+
+-- | Check that irrelevance info in lambda is compatible with irrelevance
+--   coming from the function type.
+--   If lambda has no user-given relevance, copy that of function type.
+lambdaIrrelevanceCheck :: LensRelevance dom => ArgInfo -> dom -> TCM ArgInfo
+lambdaIrrelevanceCheck info dom
+    -- Case: no specific user annotation: use relevance of function type
+  | isRelevant info = return $ setRelevance (getRelevance dom) info
+    -- Case: explicit user annotation is taken seriously
+  | otherwise = do
+      let rPi  = getRelevance dom  -- relevance of function type
+      let rLam = getRelevance info -- relevance of lambda
+        -- Andreas, 2017-01-24, issue #2429
+        -- we should report an error if we try to check a relevant function
+        -- against an irrelevant function type (subtyping violation)
+      unless (moreRelevant rPi rLam) $ do
+        -- @rLam == Relevant@ is impossible here
+        -- @rLam == Irrelevant@ is impossible here (least relevant)
+        -- this error can only happen if @rLam == NonStrict@ and @rPi == Irrelevant@
+        unless (rLam == NonStrict) __IMPOSSIBLE__  -- separate tests for separate line nums
+        unless (rPi == Irrelevant) __IMPOSSIBLE__
+        typeError WrongIrrelevanceInLambda
+      return info
+
+lambdaAddContext :: Name -> ArgName -> Dom Type -> TCM a -> TCM a
+lambdaAddContext x y dom
+  | isNoName x = addContext (notInScopeName y, dom)  -- Note: String instance
+  | otherwise  = addContext (x, dom)                 -- Name instance of addContext
+
+-- | Checking a lambda whose domain type has already been checked.
+checkPostponedLambda :: Arg ([WithHiding Name], Maybe Type) -> A.Expr -> Type -> TCM Term
+checkPostponedLambda args@(Arg _    ([]    , _ )) body target = do
+  checkExpr body target
+checkPostponedLambda args@(Arg info (WithHiding h x : xs, mt)) body target = do
+  let postpone _ t = postponeTypeCheckingProblem_ $ CheckLambda args body t
+      lamHiding = mappend h $ getHiding info
+  insertHiddenLambdas lamHiding target postpone $ \ t@(El _ (Pi dom b)) -> do
+    -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given
+    info' <- setHiding lamHiding <$> lambdaIrrelevanceCheck info dom
+    -- 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.
+    mpid <- caseMaybe mt (return Nothing) $ \ ascribedType -> Just <$> do
+      newProblem_ $ leqType (unDom dom) ascribedType
+    -- We type-check the body with the ascribedType given by the user
+    -- to get better error messages.
+    -- Using the type dom from the usage context would be more precise,
+    -- though.
+    let dom' = setRelevance (getRelevance info') . setHiding lamHiding $
+          maybe dom (dom $>) mt
+    v <- lambdaAddContext x (absName b) dom'  $
+      checkPostponedLambda (Arg info (xs, mt)) body $ absBody b
+    let v' = Lam info' $ Abs (nameToArgName x) v
+    maybe (return v') (blockTermOnProblem t v') mpid
+
+
+-- | Insert hidden lambda until the hiding info of the domain type
+--   matches the expected hiding info.
+--   Throws 'WrongHidingInLambda'
+insertHiddenLambdas
+  :: Hiding                       -- ^ Expected hiding.
+  -> Type                         -- ^ Expected to be a function type.
+  -> (MetaId -> Type -> TCM Term) -- ^ Continuation on blocked type.
+  -> (Type -> TCM Term)           -- ^ Continuation when expected hiding found.
+                                  --   The continuation may assume that the @Type@
+                                  --   is of the form @(El _ (Pi _ _))@.
+  -> TCM Term                     -- ^ Term with hidden lambda inserted.
+insertHiddenLambdas h target postpone ret = do
+  -- If the target type is blocked, we postpone,
+  -- because we do not know if a hidden lambda needs to be inserted.
+  ifBlockedType target postpone $ \ _ t -> do
+    case unEl t of
+
+      Pi dom b -> do
+        let h' = getHiding dom
+        -- Found expected hiding: return function type.
+        if sameHiding h h' then ret t else do
+          -- Found a visible argument but expected a hidden one:
+          -- That's an error, as we cannot insert a visible lambda.
+          if visible h' then typeError $ WrongHidingInLambda target else do
+            -- Otherwise, we found a hidden argument that we can insert.
+            let x = absName b
+            Lam (domInfo dom) . Abs x <$> do
+              addContext (x, dom) $ insertHiddenLambdas h (absBody b) postpone ret
+
+      _ -> typeError . GenericDocError =<< do
+        text "Expected " <+> prettyTCM target <+> text " to be a function type"
+
+-- | @checkAbsurdLambda i h e t@ checks absurd lambda against type @t@.
+--   Precondition: @e = AbsurdLam i h@
+checkAbsurdLambda :: A.ExprInfo -> Hiding -> A.Expr -> Type -> TCM Term
+checkAbsurdLambda i h e t = do
+  t <- instantiateFull t
+  ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ $ CheckExpr e t') $ \ _ t' -> do
+    case unEl t' of
+      Pi dom@(Dom info' a) b
+        | not (sameHiding h info') -> typeError $ WrongHidingInLambda t'
+        | not (null $ allMetas a) ->
+            postponeTypeCheckingProblem (CheckExpr e t') $
+              null . allMetas <$> instantiateFull a
+        | otherwise -> blockTerm t' $ do
+          isEmptyType (getRange i) a
+          -- Add helper function
+          top <- currentModule
+          aux <- qualify top <$> freshName_ (getRange i, absurdLambdaName)
+          -- if we are in irrelevant position, the helper function
+          -- is added as irrelevant
+          rel <- asks envRelevance
+          reportSDoc "tc.term.absurd" 10 $ vcat
+            [ text "Adding absurd function" <+> prettyTCM rel <> prettyTCM aux
+            , nest 2 $ text "of type" <+> prettyTCM t'
+            ]
+          addConstant aux $
+            (\ d -> (defaultDefn (setRelevance rel info') aux t' d)
+                    { defPolarity       = [Nonvariant]
+                    , defArgOccurrences = [Unused] })
+            $ emptyFunction
+              { funClauses        =
+                  [ Clause
+                    { clauseLHSRange  = getRange e
+                    , clauseFullRange = getRange e
+                    , clauseTel       = telFromList [fmap (absurdPatternName,) dom]
+                    , namedClausePats = [Arg info' $ Named (Just $ unranged $ absName b) $ VarP PatOAbsurd (DBPatVar absurdPatternName 0)]
+                    , clauseBody      = Nothing
+                    , clauseType      = Just $ setRelevance rel $ defaultArg $ absBody b
+                    , clauseCatchall  = False
+                    , clauseUnreachable = Just True -- absurd clauses are unreachable
+                    }
+                  ]
+              , funCompiled       = Just Fail
+              , funMutual         = Just []
+              , 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 $ map Apply $ teleArgs tel
+      _ -> typeError $ ShouldBePi t'
+
+-- | @checkExtendedLambda i di qname cs e t@ check pattern matching lambda.
+-- Precondition: @e = ExtendedLam i di qname cs@
+checkExtendedLambda :: A.ExprInfo -> A.DefInfo -> QName -> [A.Clause] ->
+                       A.Expr -> Type -> TCM Term
+checkExtendedLambda i di qname cs e t = do
+   -- Andreas, 2016-06-16 issue #2045
+   -- Try to get rid of unsolved size metas before we
+   -- fix the type of the extended lambda auxiliary function
+   solveSizeConstraints DontDefaultToInfty
+   lamMod <- inFreshModuleIfFreeParams currentModule  -- #2883: need a fresh module if refined params
+   t <- instantiateFull t
+   ifBlockedType t (\ m t' -> postponeTypeCheckingProblem_ $ CheckExpr e t') $ \ _ t -> do
+     j   <- currentOrFreshMutualBlock
+     rel <- asks envRelevance
+     let info = setRelevance rel defaultArgInfo
+
+     reportSDoc "tc.term.exlam" 20 $
+       text (show $ A.defAbstract di) <+>
+       text "extended lambda's implementation \"" <> prettyTCM qname <>
+       text "\" has type: " $$ prettyTCM t -- <+> text " where clauses: " <+> text (show cs)
+     args     <- getContextArgs
+
+     -- Andreas, Ulf, 2016-02-02: We want to postpone type checking an extended lambda
+     -- in case the lhs checker failed due to insufficient type info for the patterns.
+     -- Issues 480, 1159, 1811.
+     (abstract (A.defAbstract di) $ do
+       -- Andreas, 2013-12-28: add extendedlambda as @Function@, not as @Axiom@;
+       -- otherwise, @addClause@ in @checkFunDef'@ fails (see issue 1009).
+       addConstant qname =<< do
+         useTerPragma $
+           (defaultDefn info qname t emptyFunction) { defMutual = j }
+       checkFunDef' t info NotDelayed (Just $ ExtLamInfo lamMod) Nothing di qname cs
+       return $ Def qname $ map Apply args)
+  where
+    -- Concrete definitions cannot use information about abstract things.
+    abstract ConcreteDef = inConcreteMode
+    abstract AbstractDef = inAbstractMode
+
+-- | Run a computation.
+--
+--   * If successful, return Nothing.
+--
+--   * If @IlltypedPattern p a@, @NotADatatype a@ or @CannotEliminateWithPattern p a@
+--     is thrown and type @a@ is blocked on some meta @x@,
+--     reset any changes to the state and return @Just x@.
+--
+--   * If @SplitError (UnificationStuck c tel us vs _)@ is thrown and the unification
+--     problem @us =?= vs : tel@ is blocked on some meta @x@ return @Just x@.
+--
+--   * If another error was thrown or the type @a@ is not blocked, reraise the error.
+--
+--   Note that the returned meta might only exists in the state where the error was
+--   thrown, thus, be an invalid 'MetaId' in the current state.
+--
+--   If --sharing is enabled, we will never catch errors since it's not safe to roll
+--   back the state.
+catchIlltypedPatternBlockedOnMeta :: TCM a -> ((TCErr, MetaId) -> TCM a) -> TCM a
+catchIlltypedPatternBlockedOnMeta m handle = do
+
+  -- Andreas, 2016-07-13, issue 2028.
+  -- Save the state to rollback the changes to the signature.
+  st <- get
+
+  m `catchError` \ err -> do
+
+    let reraise = throwError err
+
+    x <- maybe reraise return =<< case err of
+      TypeError s cl -> localState $ put s >> do
+        enterClosure cl $ \case
+          IlltypedPattern p a -> isBlockedType a
+          SplitError (UnificationStuck c tel us vs _) -> do
+            problem <- reduce =<< instantiateFull (flattenTel tel, us, vs)
+            -- over-approximating the set of metas actually blocking unification
+            return $ listToMaybe $ allMetas problem
+          SplitError (NotADatatype aClosure) ->
+            enterClosure aClosure $ \ a -> isBlockedType a
+          CannotEliminateWithPattern p a -> isBlockedType a
+          _ -> return Nothing
+      _ -> return Nothing
+
+    reportSDoc "tc.postpone" 20 $ vcat $
+      [ text "checking definition blocked on meta: " <+> prettyTCM x ]
+
+    -- Note that we messed up the state a bit.  We might want to unroll these state changes.
+    -- However, they are mostly harmless:
+    -- 1. We created a new mutual block id.
+    -- 2. We added a constant without definition.
+    -- In fact, they are not so harmless, see issue 2028!
+    -- Thus, reset the state!
+    put st
+
+    -- The meta might not be known in the reset state, as it could have been created
+    -- somewhere on the way to the type error.
+    Map.lookup x <$> getMetaStore >>= \case
+      -- Case: we do not know the meta, so we reraise
+      Nothing -> reraise
+      -- Case: we know the meta here.
+      Just m | InstV{} <- mvInstantiation m -> __IMPOSSIBLE__  -- It cannot be instantiated yet.
+      -- Case: the meta is frozen (and not an interaction meta).
+      -- Postponing doesn't make sense, so we reraise.
+      Just m | Frozen  <- mvFrozen m -> isInteractionMeta x >>= \case
+        Nothing -> reraise
+      -- Remaining cases: the meta is known and can still be instantiated.
+        Just{}  -> handle (err, x)
+      Just{} -> handle (err, x)
+
+---------------------------------------------------------------------------
+-- * Records
+---------------------------------------------------------------------------
+
+expandModuleAssigns :: [Either A.Assign A.ModuleName] -> [C.Name] -> TCM A.Assigns
+expandModuleAssigns mfs exs = do
+  let (fs , ms) = partitionEithers mfs
+      exs' = exs List.\\ map (view nameFieldA) fs
+  fs' <- forM exs' $ \ f -> do
+    pms <- forM ms $ \ m -> do
+       modScope <- getNamedScope m
+       let names :: ThingsInScope AbstractName
+           names = exportedNamesInScope modScope
+       return $
+        case Map.lookup f names of
+          Just [n] -> Just (m, FieldAssignment f (A.nameExpr n))
+          _        -> Nothing
+
+    case catMaybes pms of
+      []        -> return Nothing
+      [(_, fa)] -> return (Just fa)
+      mfas      -> typeError . GenericDocError =<< do
+        vcat $
+          [ text "Ambiguity: the field" <+> prettyTCM f
+            <+> text "appears in the following modules: " ]
+          ++ map (prettyTCM . fst) mfas
+  return (fs ++ catMaybes fs')
+
+-- | @checkRecordExpression fs e t@ checks record construction against type @t@.
+-- Precondition @e = Rec _ fs@.
+checkRecordExpression :: A.RecordAssigns  -> A.Expr -> Type -> TCM Term
+checkRecordExpression mfs e t = do
+  reportSDoc "tc.term.rec" 10 $ sep
+    [ text "checking record expression"
+    , prettyA e
+    ]
+  ifBlockedType t (\ _ t -> guessRecordType t) {-else-} $ \ _ t -> do
+  case unEl t of
+    -- Case: We know the type of the record already.
+    Def r es  -> do
+      let ~(Just vs) = allApplyElims es
+      reportSDoc "tc.term.rec" 20 $ text $ "  r   = " ++ prettyShow r
+
+      reportSDoc "tc.term.rec" 30 $ text "  xs  = " <> do
+        text =<< prettyShow . map unArg <$> getRecordFieldNames r
+      reportSDoc "tc.term.rec" 30 $ text "  ftel= " <> do
+        prettyTCM =<< getRecordFieldTypes r
+      reportSDoc "tc.term.rec" 30 $ text "  con = " <> do
+        text =<< prettyShow <$> getRecordConstructor r
+
+      def <- getRecordDef r
+      let -- Field names with ArgInfo.
+          axs  = recordFieldNames def
+          exs  = filter visible axs
+          -- Just field names.
+          xs   = map unArg axs
+          -- Record constructor.
+          con  = killRange $ recConHead def
+      reportSDoc "tc.term.rec" 20 $ vcat
+        [ text "  xs  = " <> return (P.pretty xs)
+        , text "  ftel= " <> prettyTCM (recTel def)
+        , text "  con = " <> return (P.pretty con)
+        ]
+
+      -- Compute the list of given fields, decorated with the ArgInfo from the record def.
+      fs <- expandModuleAssigns mfs (map unArg exs)
+
+      -- Compute a list of metas for the missing visible fields.
+      scope <- getScope
+      let re = getRange e
+          meta x = A.Underscore $ A.MetaInfo re scope Nothing (prettyShow x)
+      -- In @es@ omitted explicit fields are replaced by underscores.
+      -- Omitted implicit or instance fields
+      -- are still left out and inserted later by checkArguments_.
+      es <- insertMissingFields r meta fs axs
+
+      args <- checkArguments_ ExpandLast re es (recTel def `apply` vs) >>= \case
+        (elims, remainingTel) | null remainingTel
+                              , Just args <- allApplyElims elims -> return args
+        _ -> __IMPOSSIBLE__
+      -- Don't need to block here!
+      reportSDoc "tc.term.rec" 20 $ text $ "finished record expression"
+      return $ Con con ConORec (map Apply args)
+    _         -> typeError $ ShouldBeRecordType t
+
+  where
+    guessRecordType t = do
+      let fields = [ x | Left (FieldAssignment x _) <- mfs ]
+      rs <- findPossibleRecords fields
+      case rs of
+          -- If there are no records with the right fields we might as well fail right away.
+        [] -> case fields of
+          []  -> typeError $ GenericError "There are no records in scope"
+          [f] -> typeError $ GenericError $ "There is no known record with the field " ++ prettyShow f
+          _   -> typeError $ GenericError $ "There is no known record with the fields " ++ unwords (map prettyShow fields)
+          -- If there's only one record with the appropriate fields, go with that.
+        [r] -> do
+          def <- getConstInfo r
+          let rt = defType def
+          vs  <- newArgsMeta rt
+          target <- reduce $ piApply rt vs
+          s  <- case unEl target of
+                  Sort s  -> return s
+                  v       -> do
+                    reportSDoc "impossible" 10 $ vcat
+                      [ text "The impossible happened when checking record expression against meta"
+                      , text "Candidate record type r = " <+> prettyTCM r
+                      , text "Type of r               = " <+> prettyTCM rt
+                      , text "Ends in (should be sort)= " <+> prettyTCM v
+                      , text $ "  Raw                   =  " ++ show v
+                      ]
+                    __IMPOSSIBLE__
+          let inferred = El s $ Def r $ map Apply vs
+          v <- checkExpr e 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
+            [ text "Postponing type checking of"
+            , nest 2 $ prettyA e <+> text ":" <+> prettyTCM t
+            ]
+          postponeTypeCheckingProblem_ $ CheckExpr e t
+
+
+-- | @checkRecordUpdate ei recexpr fs e t@
+-- Precondition @e = RecUpdate ei recexpr fs@.
+checkRecordUpdate :: A.ExprInfo -> A.Expr -> A.Assigns -> A.Expr -> Type -> TCM Term
+checkRecordUpdate ei recexpr fs e t = do
+  case unEl t of
+    Def r vs  -> do
+      v <- checkExpr recexpr t
+      name <- freshNoName (getRange recexpr)
+      addLetBinding defaultArgInfo name v t $ do
+        projs <- recFields <$> getRecordDef r
+        axs <- getRecordFieldNames r
+        scope <- getScope
+        let xs = map unArg axs
+        es <- orderFields r Nothing xs $ map (\ (FieldAssignment x e) -> (x, Just e)) fs
+        let es' = zipWith (replaceFields name ei) projs es
+        checkExpr (A.Rec ei [ Left (FieldAssignment x e) | (x, Just e) <- zip xs es' ]) t
+    MetaV _ _ -> do
+      inferred <- inferExpr recexpr >>= reduce . snd
+      case unEl inferred of
+        MetaV _ _ -> postponeTypeCheckingProblem_ $ CheckExpr e t
+        _         -> do
+          v <- checkExpr e 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 a@(Arg _ p) Nothing | visible a =
+        Just $ A.App (A.defaultAppInfo $ getRange ei) (A.Def p) $ defaultNamedArg $ A.Var n
+    replaceFields _ _  (Arg _ _) Nothing  = Nothing
+    replaceFields _ _  _         (Just e) = Just $ e
+
+---------------------------------------------------------------------------
+-- * Literal
+---------------------------------------------------------------------------
+
+checkLiteral :: Literal -> Type -> TCM Term
+checkLiteral lit t = do
+  t' <- litType lit
+  coerce (Lit lit) t' t
+
+---------------------------------------------------------------------------
+-- * Terms
+---------------------------------------------------------------------------
+
+-- | Remove top layers of scope info of expression and set the scope accordingly
+--   in the 'TCState'.
+
+scopedExpr :: A.Expr -> TCM A.Expr
+scopedExpr (A.ScopedExpr scope e) = setScope scope >> scopedExpr e
+scopedExpr e                      = return e
+
+-- | Type check an expression.
+checkExpr :: A.Expr -> Type -> TCM Term
+checkExpr e t0 =
+  verboseBracket "tc.term.expr.top" 5 "checkExpr" $
+  traceCall (CheckExprCall e t0) $ localScope $ doExpandLast $ unfoldInlined =<< do
+    reportSDoc "tc.term.expr.top" 15 $
+        text "Checking" <+> sep
+          [ fsep [ prettyTCM e, text ":", prettyTCM t0 ]
+          , nest 2 $ text "at " <+> (text . prettyShow =<< getCurrentRange)
+          ]
+    reportSDoc "tc.term.expr.top.detailed" 80 $
+      text "Checking" <+> fsep [ prettyTCM e, text ":", text (show t0) ]
+    t <- reduce t0
+    reportSDoc "tc.term.expr.top" 15 $
+        text "    --> " <+> prettyTCM t
+
+    e <- scopedExpr e
+
+    tryInsertHiddenLambda e t $ case e of
+
+        A.ScopedExpr scope e -> __IMPOSSIBLE__ -- setScope scope >> checkExpr e t
+
+        -- a meta variable without arguments: type check directly for efficiency
+        A.QuestionMark i ii -> checkQuestionMark (newValueMeta' RunMetaOccursCheck) t0 i ii
+        A.Underscore i -> checkUnderscore t0 i
+
+        A.WithApp _ e es -> typeError $ NotImplemented "type checking of with application"
+
+        -- check |- Set l : t  (requires universe polymorphism)
+        A.App i s arg@(Arg ai l)
+          | A.Set _ 0 <- unScope s, visible ai ->
+          ifNotM hasUniversePolymorphism
+              (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")
+          $ {- else -} do
+            lvl <- levelType
+            -- allow NonStrict variables when checking level
+            --   Set : (NonStrict) Level -> Set\omega
+            n   <- levelView =<< do
+              applyRelevanceToContext NonStrict $
+                checkNamedArg arg lvl
+            -- check that Set (l+1) <= t
+            reportSDoc "tc.univ.poly" 10 $
+              text "checking Set " <+> prettyTCM n <+>
+              text "against" <+> prettyTCM t
+            coerce (Sort $ Type n) (sort $ Type $ levelSuc n) t
+
+        e0@(A.App i q (Arg ai e))
+          | A.Quote _ <- unScope q, visible ai -> do
+          let quoted (A.Def x) = return x
+              quoted (A.Macro x) = return x
+              quoted (A.Proj o p) | Just x <- getUnambiguous p = return x
+              quoted (A.Proj o p)  =
+                typeError $ GenericError $ "quote: Ambigous name: " ++ prettyShow (unAmbQ p)
+              quoted (A.Con c) | Just x <- getUnambiguous c = return x
+              quoted (A.Con c)  =
+                typeError $ GenericError $ "quote: Ambigous name: " ++ prettyShow (unAmbQ c)
+              quoted (A.ScopedExpr _ e) = quoted e
+              quoted _                  =
+                typeError $ GenericError $ "quote: not a defined name"
+          x <- quoted (namedThing e)
+          ty <- qNameType
+          coerce (quoteName x) ty t
+
+          | A.QuoteTerm _ <- unScope q ->
+             do (et, _)   <- inferExpr (namedThing e)
+                et'       <- etaContract =<< instantiateFull et
+                let metas = allMetas et'
+                case metas of
+                  _:_ -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas
+                  []  -> do
+                    q  <- quoteTerm et'
+                    ty <- el primAgdaTerm
+                    coerce q ty t
+
+        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 -> checkAbsurdLambda i h e t
+
+        A.ExtendedLam i di qname cs -> checkExtendedLambda i di qname cs e t
+
+        A.Lam i (A.DomainFull (A.TypedBindings _ b)) e -> checkLambda b e t
+
+        A.Lam i (A.DomainFree info x) e0 -> checkExpr (A.Lam i (domainFree info $ A.unBind x) e0) t
+
+        A.Lit lit    -> checkLiteral lit t
+        A.Let i ds e -> checkLetBindings ds $ checkExpr e t
+        A.Pi _ tel e | null tel -> checkExpr e t
+        A.Pi _ tel e -> do
+            (t0, t') <- checkPiTelescope tel $ \ tel -> do
+                    t0  <- instantiateFull =<< isType_ e
+                    tel <- instantiateFull tel
+                    return (t0, telePi tel t0)
+            checkTelePiSort t'
+            noFunctionsIntoSize t0 t'
+            let s = getSort t'
+                v = unEl t'
+            when (s == Inf) $ reportSDoc "tc.term.sort" 20 $
+              vcat [ text ("reduced to omega:")
+                   , nest 2 $ text "t   =" <+> prettyTCM t'
+                   , nest 2 $ text "cxt =" <+> (prettyTCM =<< getContextTelescope)
+                   ]
+            coerce v (sort s) t
+        A.Fun _ (Arg info a) b -> do
+            a' <- isType_ a
+            b' <- isType_ b
+            s  <- inferFunSort (getSort a') (getSort b')
+            let v = Pi (Dom info a') (NoAbs underscore b')
+            noFunctionsIntoSize b' $ El s v
+            coerce v (sort s) t
+        A.Set _ n    -> do
+          coerce (Sort $ mkType n) (sort $ mkType $ n + 1) t
+        A.Prop _     -> do
+          typeError $ GenericError "Prop is no longer supported"
+
+        A.Rec _ fs  -> checkRecordExpression fs e t
+
+        A.RecUpdate ei recexpr fs -> checkRecordUpdate ei recexpr fs e t
+
+        A.DontCare e -> -- resurrect vars
+          ifM ((Irrelevant ==) <$> asks envRelevance)
+            (dontCare <$> do applyRelevanceToContext Irrelevant $ checkExpr e t)
+            (internalError "DontCare may only appear in irrelevant contexts")
+
+        e0@(A.QuoteGoal _ x e) -> do
+          qg <- quoteGoal t
+          case qg of
+            Left metas -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas
+            Right quoted -> do
+              tmType <- agdaTermType
+              (v, ty) <- addLetBinding defaultArgInfo x quoted tmType (inferExpr e)
+              coerce v ty t
+        e0@(A.QuoteContext _) -> do
+          qc <- quoteContext
+          case qc of
+            Left metas -> postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas
+            Right quotedContext -> do
+              ctxType <- el $ list $ primArg <@> (unEl <$> agdaTypeType)
+              coerce quotedContext ctxType t
+        e0@(A.Tactic i e xs ys) -> do
+          qc <- quoteContext
+          qg <- quoteGoal t
+          let postpone metas = postponeTypeCheckingProblem (CheckExpr e0 t) $ andM $ map isInstantiatedMeta metas
+          case (qc, qg) of
+            (Left metas1, Left metas2) -> postpone $ metas1 ++ metas2
+            (Left metas , Right _    ) -> postpone $ metas
+            (Right _    , Left metas ) -> postpone $ metas
+            (Right quotedCtx, Right quotedGoal) -> do
+              quotedCtx  <- defaultNamedArg <$> reify quotedCtx
+              quotedGoal <- defaultNamedArg <$> reify quotedGoal
+              let ai     = A.defaultAppInfo (getRange i)
+                  tac    = foldl (A.App ai) (A.App ai (A.App ai e quotedCtx) quotedGoal) xs
+                  result = foldl (A.App ai) (A.Unquote i) (defaultNamedArg tac : ys)
+              checkExpr result t
+
+        A.ETel _   -> __IMPOSSIBLE__
+
+        A.Dot{} -> typeError $ GenericError $ "Invalid dotted expression"
+
+        -- Application
+        _   | Application hd args <- appView e -> checkApplication hd args e t
+
+      `catchIlltypedPatternBlockedOnMeta` \ (err, x) -> do
+        -- We could not check the term because the type of some pattern is blocked.
+        -- It has to be blocked on some meta, so we can postpone,
+        -- being sure it will be retried when a meta is solved
+        -- (which might be the blocking meta in which case we actually make progress).
+        reportSDoc "tc.term" 50 $ vcat $
+          [ text "checking pattern got stuck on meta: " <+> text (show x) ]
+        postponeTypeCheckingProblem (CheckExpr e t) $ isInstantiatedMeta x
+
+  where
+  -- | Call checkExpr with an hidden lambda inserted if appropriate,
+  --   else fallback.
+  tryInsertHiddenLambda :: A.Expr -> Type -> TCM Term -> TCM Term
+  tryInsertHiddenLambda e t fallback
+    -- Insert hidden lambda if all of the following conditions are met:
+        -- type is a hidden function type, {x : A} -> B or {{x : A}} -> B
+    | Pi (Dom info a) b <- unEl t
+        , let h = getHiding info
+        , notVisible h
+        -- expression is not a matching hidden lambda or question mark
+        , not (hiddenLambdaOrHole h e)
+        = do
+      let proceed = doInsert info $ absName b
+      -- If we skip the lambda insertion for an introduction,
+      -- we will hit a dead end, so proceed no matter what.
+      if definitelyIntroduction then proceed else do
+        -- Andreas, 2017-01-19, issue #2412:
+        -- We do not want to insert a hidden lambda if A is
+        -- possibly empty type of sizes, as this will produce an error.
+        reduce a >>= isSizeType >>= \case
+          Just (BoundedLt u) -> ifBlocked u (\ _ _ -> fallback) $ \ _ v -> do
+            ifM (checkSizeNeverZero v) proceed fallback
+            `catchError` \_ -> fallback
+          _ -> proceed
+
+    | otherwise = fallback
+
+    where
+    re = getRange e
+    rx = caseMaybe (rStart re) noRange $ \ pos -> posToRange pos pos
+
+    doInsert info y = do
+      x <- unshadowName <=< freshName rx $ notInScopeName y
+      reportSLn "tc.term.expr.impl" 15 $ "Inserting implicit lambda"
+      checkExpr (A.Lam (A.ExprRange re) (domainFree info x) e) t
+
+    hiddenLambdaOrHole h e = case e of
+      A.AbsurdLam _ h'        -> sameHiding h h'
+      A.ExtendedLam _ _ _ cls -> any hiddenLHS cls
+      A.Lam _ bind _          -> sameHiding h bind
+      A.QuestionMark{}        -> True
+      _                       -> False
+
+    hiddenLHS (A.Clause (A.LHS _ (A.LHSHead _ (a : _))) _ _ _ _) = notVisible a
+    hiddenLHS _ = False
+
+    -- Things with are definitely introductions,
+    -- thus, cannot be of hidden Pi-type, unless they are hidden lambdas.
+    definitelyIntroduction = case e of
+      A.Lam{}        -> True
+      A.AbsurdLam{}  -> True
+      A.Lit{}        -> True
+      A.Pi{}         -> True
+      A.Fun{}        -> True
+      A.Set{}        -> True
+      A.Prop{}       -> True
+      A.Rec{}        -> True
+      A.RecUpdate{}  -> True
+      A.ScopedExpr{} -> __IMPOSSIBLE__
+      A.ETel{}       -> __IMPOSSIBLE__
+      _ -> False
+---------------------------------------------------------------------------
+-- * Reflection
+---------------------------------------------------------------------------
+
+-- | DOCUMENT ME!
+quoteGoal :: Type -> TCM (Either [MetaId] Term)
+quoteGoal t = do
+  t' <- etaContract =<< instantiateFull t
+  let metas = allMetas t'
+  case metas of
+    _:_ -> return $ Left metas
+    []  -> do
+      quotedGoal <- quoteTerm (unEl t')
+      return $ Right quotedGoal
+
+-- | DOCUMENT ME!
+quoteContext :: TCM (Either [MetaId] Term)
+quoteContext = do
+  contextTypes  <- map (fmap snd) <$> getContext
+  contextTypes  <- etaContract =<< instantiateFull contextTypes
+  let metas = allMetas contextTypes
+  case metas of
+    _:_ -> return $ Left metas
+    []  -> do
+      quotedContext <- buildList <*> mapM quoteDom contextTypes
+      return $ Right quotedContext
+
+-- | Unquote a TCM computation in a given hole.
+unquoteM :: A.Expr -> Term -> Type -> TCM Term -> TCM Term
+unquoteM tac hole holeType k = do
+  tac <- checkExpr tac =<< (el primAgdaTerm --> el (primAgdaTCM <#> primLevelZero <@> primUnit))
+  inFreshModuleIfFreeParams $ unquoteTactic tac hole holeType k
+
+-- | DOCUMENT ME!
+unquoteTactic :: Term -> Term -> Type -> TCM Term -> TCM Term
+unquoteTactic tac hole goal k = do
+  ok  <- runUnquoteM $ unquoteTCM tac hole
+  case ok of
+    Left (BlockedOnMeta oldState x) -> do
+      put oldState
+      mi <- Map.lookup x <$> getMetaStore
+      (r, unblock) <- case mi of
+        Nothing -> do -- fresh meta: need to block on something else!
+          otherMetas <- allMetas <$> instantiateFull goal
+          case otherMetas of
+            []  -> return (noRange,     return False) -- Nothing to block on, leave it yellow. Alternative: fail.
+            x:_ -> return (noRange,     isInstantiatedMeta x)  -- range?
+        Just mi -> return (getRange mi, isInstantiatedMeta x)
+      setCurrentRange r $
+        postponeTypeCheckingProblem (UnquoteTactic tac hole goal) unblock
+    Left err -> typeError $ UnquoteFailed err
+    Right _ -> k
+
+---------------------------------------------------------------------------
+-- * Meta variables
+---------------------------------------------------------------------------
+
+-- | Check an interaction point without arguments.
+checkQuestionMark :: (Type -> TCM (MetaId, Term)) -> Type -> A.MetaInfo -> InteractionId -> TCM Term
+checkQuestionMark new t0 i ii = do
+  reportSDoc "tc.interaction" 20 $ sep
+    [ text "Found interaction point"
+    , text (show ii)
+    , text ":"
+    , prettyTCM t0
+    ]
+  reportSDoc "tc.interaction" 60 $ sep
+    [ text "Raw:"
+    , text (show t0)
+    ]
+  checkMeta (newQuestionMark' new ii) t0 i -- Andreas, 2013-05-22 use unreduced type t0!
+
+-- | Check an underscore without arguments.
+checkUnderscore :: Type -> A.MetaInfo -> TCM Term
+checkUnderscore = checkMeta (newValueMeta RunMetaOccursCheck)
+
+-- | Type check a meta variable.
+checkMeta :: (Type -> TCM (MetaId, Term)) -> Type -> A.MetaInfo -> TCM Term
+checkMeta newMeta t i = fst <$> checkOrInferMeta newMeta (Just t) i
+
+-- | Infer the type of a meta variable.
+--   If it is a new one, we create a new meta for its type.
+inferMeta :: (Type -> TCM (MetaId, Term)) -> A.MetaInfo -> TCM (Elims -> Term, Type)
+inferMeta newMeta i = mapFst applyE <$> checkOrInferMeta newMeta Nothing i
+
+-- | Type check a meta variable.
+--   If its type is not given, we return its type, or a fresh one, if it is a new meta.
+--   If its type is given, we check that the meta has this type, and we return the same
+--   type.
+checkOrInferMeta :: (Type -> TCM (MetaId, Term)) -> Maybe Type -> A.MetaInfo -> TCM (Term, Type)
+checkOrInferMeta newMeta mt i = do
+  case A.metaNumber i of
+    Nothing -> do
+      setScope (A.metaScope i)
+      t <- maybe (workOnTypes $ newTypeMeta_) return mt
+      (x, v) <- newMeta t
+      setMetaNameSuggestion x (A.metaNameSuggestion i)
+      return (v, t)
+    -- Rechecking an existing metavariable
+    Just x -> do
+      let v = MetaV x []
+      reportSDoc "tc.meta.check" 20 $
+        text "checking existing meta " <+> prettyTCM v
+      t' <- jMetaType . mvJudgement <$> lookupMeta x
+      reportSDoc "tc.meta.check" 20 $
+        nest 2 $ text "of type " <+> prettyTCM t'
+      case mt of
+        Nothing -> return (v, t')
+        Just t  -> (,t) <$> coerce v t' t
+
+-- | Turn a domain-free binding (e.g. lambda) into a domain-full one,
+--   by inserting an underscore for the missing type.
+domainFree :: ArgInfo -> A.Name -> A.LamBinding
+domainFree info x =
+  A.DomainFull $ A.TypedBindings r $ Arg info $ A.TBind r [pure $ A.BindName x] $ A.Underscore underscoreInfo
+  where
+    r = getRange x
+    underscoreInfo = A.MetaInfo
+      { A.metaRange          = r
+      , A.metaScope          = emptyScopeInfo
+      , A.metaNumber         = Nothing
+      , A.metaNameSuggestion = prettyShow $ A.nameConcrete x
+      }
+
+-- | Check arguments whose value we already know.
+--
+--   This function can be used to check user-supplied parameters
+--   we have already computed by inference.
+--
+--   Precondition: The type @t@ of the head has enough domains.
+
+checkKnownArguments
+  :: [NamedArg A.Expr]  -- ^ User-supplied arguments (hidden ones may be missing).
+  -> Args               -- ^ Inferred arguments (including hidden ones).
+  -> Type               -- ^ Type of the head (must be Pi-type with enough domains).
+  -> TCM (Args, Type)   -- ^ Remaining inferred arguments, remaining type.
+checkKnownArguments []           vs t = return (vs, t)
+checkKnownArguments (arg : args) vs t = do
+  (vs', t') <- traceCall (SetRange $ getRange arg) $ checkKnownArgument arg vs t
+  checkKnownArguments args vs' t'
+
+-- | Check an argument whose value we already know.
+
+checkKnownArgument
+  :: NamedArg A.Expr    -- ^ User-supplied argument.
+  -> Args               -- ^ Inferred arguments (including hidden ones).
+  -> Type               -- ^ Type of the head (must be Pi-type with enough domains).
+  -> TCM (Args, Type)   -- ^ Remaining inferred arguments, remaining type.
+checkKnownArgument arg [] _ = genericDocError =<< do
+  text "Invalid projection parameter " <+> prettyA arg
+checkKnownArgument arg@(Arg info e) (Arg _infov v : vs) t = do
+  (Dom info' a, b) <- mustBePi t
+  -- Skip the arguments from vs that do not correspond to e
+  if not (sameHiding info info'
+          && (visible info || maybe True ((absName b ==) . rangedThing) (nameOf e)))
+    -- Continue with the next one
+    then checkKnownArgument arg vs (b `absApp` v)
+    -- Found the right argument
+    else do
+      u <- checkNamedArg arg a
+      equalTerm a u v
+      return (vs, b `absApp` v)
+
+-- | Check a single argument.
+
+checkNamedArg :: NamedArg A.Expr -> Type -> TCM Term
+checkNamedArg arg@(Arg info e0) t0 = do
+  let e = namedThing e0
+  let x = maybe "" rangedThing $ nameOf e0
+  traceCall (CheckExprCall e t0) $ do
+    reportSDoc "tc.term.args.named" 15 $ do
+        text "Checking named arg" <+> sep
+          [ fsep [ prettyTCM arg, text ":", prettyTCM t0 ]
+          ]
+    reportSLn "tc.term.args.named" 75 $ "  arg = " ++ show (deepUnscope arg)
+    -- Ulf, 2017-03-24: (#2172) Always treat explicit _ and ? as implicit
+    -- argument (i.e. solve with unification).
+    let checkU = checkMeta (newMetaArg (setHiding Hidden info) x) t0
+    let checkQ = checkQuestionMark (newInteractionMetaArg (setHiding Hidden info) x) t0
+    if not $ isHole e then checkExpr e t0 else localScope $ do
+      -- Note: we need localScope here,
+      -- as scopedExpr manipulates the scope in the state.
+      -- However, we may not pull localScope over checkExpr!
+      -- This is why we first test for isHole, and only do
+      -- scope manipulations if we actually handle the checking
+      -- of e here (and not pass it to checkExpr).
+      scopedExpr e >>= \case
+        A.Underscore i ->  checkU i
+        A.QuestionMark i ii -> checkQ i ii
+        _ -> __IMPOSSIBLE__
+  where
+  isHole A.Underscore{} = True
+  isHole A.QuestionMark{} = True
+  isHole (A.ScopedExpr _ e) = isHole e
+  isHole _ = False
+
+-- | Infer the type of an expression. Implemented by checking against a meta
+--   variable.  Except for neutrals, for them a polymorphic type is inferred.
+inferExpr :: A.Expr -> TCM (Term, Type)
+-- inferExpr e = inferOrCheck e Nothing
+inferExpr = inferExpr' DontExpandLast
+
+inferExpr' :: ExpandHidden -> A.Expr -> TCM (Term, Type)
+inferExpr' exh e = traceCall (InferExpr e) $ do
+  let Application hd args = appView e
+  reportSDoc "tc.infer" 30 $ vcat
+    [ text "inferExpr': appView of " <+> prettyA e
+    , text "  hd   = " <+> prettyA hd
+    , text "  args = " <+> prettyAs args
+    ]
+  reportSDoc "tc.infer" 60 $ vcat
+    [ text $ "  hd (raw) = " ++ show hd
+    ]
+  inferApplication exh hd args e
+
+defOrVar :: A.Expr -> Bool
+defOrVar A.Var{} = True
+defOrVar A.Def{} = True
+defOrVar A.Proj{} = True
+defOrVar (A.ScopedExpr _ e) = defOrVar e
+defOrVar _     = False
+
+-- | Used to check aliases @f = e@.
+--   Switches off 'ExpandLast' for the checking of top-level application.
+checkDontExpandLast :: A.Expr -> Type -> TCM Term
+checkDontExpandLast e t = case e of
+  _ | Application hd args <- appView e,  defOrVar hd ->
+    traceCall (CheckExprCall e t) $ localScope $ dontExpandLast $ do
+      checkApplication hd args e t
+  _ -> checkExpr e t -- note that checkExpr always sets ExpandLast
+
+-- | Check whether a de Bruijn index is bound by a module telescope.
+isModuleFreeVar :: Int -> TCM Bool
+isModuleFreeVar i = do
+  params <- moduleParamsToApply =<< currentModule
+  return $ any ((== Var i []) . unArg) params
+
+-- | 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
+  reportSDoc "tc.with.infer" 20 $ text "inferExprforWith " <+> prettyTCM e
+  reportSLn  "tc.with.infer" 80 $ "inferExprforWith " ++ show (deepUnscope e)
+  traceCall (InferExpr e) $ do
+    -- With wants type and term fully instantiated!
+    (v, t) <- instantiateFull =<< inferExpr e
+    v0 <- reduce v
+    -- Andreas 2014-11-06, issue 1342.
+    -- Check that we do not `with` on a module parameter!
+    case v0 of
+      Var i [] -> whenM (isModuleFreeVar i) $ do
+        reportSDoc "tc.with.infer" 80 $ vcat
+          [ text $ "with expression is variable " ++ show i
+          , text "current modules = " <+> do text . show =<< currentModule
+          , text "current module free vars = " <+> do text . show =<< getCurrentModuleFreeVars
+          , text "context size = " <+> do text . show =<< getContextSize
+          , text "current context = " <+> do prettyTCM =<< getContextTelescope
+          ]
+        typeError $ WithOnFreeVariable e v0
+      _        -> return ()
+    -- Possibly insert hidden arguments.
+    TelV tel t0 <- telViewUpTo' (-1) (not . visible) t
+    case unEl t0 of
+      Def d vs -> do
+        res <- isDataOrRecordType d
+        case res of
+          Nothing -> return (v, t)
+          Just{}  -> do
+            (args, t1) <- implicitArgs (-1) notVisible t
+            return (v `apply` args, t1)
+      _ -> return (v, t)
+
+---------------------------------------------------------------------------
+-- * Let bindings
+---------------------------------------------------------------------------
+
+checkLetBindings :: [A.LetBinding] -> TCM a -> TCM a
+checkLetBindings = foldr (.) id . map checkLetBinding
+
+checkLetBinding :: A.LetBinding -> TCM a -> TCM a
+
+checkLetBinding b@(A.LetBind i info x t e) ret =
+  traceCall (CheckLetBinding b) $ do
+    t <- isType_ t
+    v <- applyRelevanceToContext (getRelevance info) $ checkDontExpandLast e t
+    addLetBinding info (A.unBind x) v t ret
+
+checkLetBinding b@(A.LetPatBind i p e) ret =
+  traceCall (CheckLetBinding b) $ do
+    p <- expandPatternSynonyms p
+    (v, t) <- inferExpr' ExpandLast e
+    let -- construct a type  t -> dummy  for use in checkLeftHandSide
+        t0 = El (getSort t) $ Pi (Dom defaultArgInfo t) (NoAbs underscore typeDontCare)
+        p0 = Arg defaultArgInfo (Named Nothing p)
+    reportSDoc "tc.term.let.pattern" 10 $ vcat
+      [ text "let-binding pattern p at type t"
+      , nest 2 $ vcat
+        [ text "p (A) =" <+> prettyA p
+        , text "t     =" <+> prettyTCM t
+        ]
+      ]
+    fvs <- getContextSize
+    checkLeftHandSide (CheckPattern p EmptyTel t) Nothing [p0] t0 Nothing [] $ \ (LHSResult _ delta0 ps _ _t _ asb) -> bindAsPatterns asb $ do
+          -- After dropping the free variable patterns there should be a single pattern left.
+      let p = case drop fvs ps of [p] -> namedArg p; _ -> __IMPOSSIBLE__
+          -- Also strip the context variables from the telescope
+          delta = telFromList $ drop fvs $ telToList delta0
+      reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat
+        [ text "p (I) =" <+> prettyTCM p
+        , text "delta =" <+> prettyTCM 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
+          toDrop       = length binds
+
+          -- We create a substitution for the let-bound variables
+          -- (unfortunately, we cannot refer to x in internal syntax
+          -- so we have to copy v).
+          sigma = map ($ v) fs
+          -- 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.
+          sub    = parallelS (reverse sigma)
+
+      updateContext sub (drop toDrop) $ do
+        reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat
+          [ text "delta =" <+> prettyTCM delta
+          , text "binds =" <+> prettyTCM binds
+          ]
+        let fdelta = flattenTel delta
+        reportSDoc "tc.term.let.pattern" 20 $ nest 2 $ vcat
+          [ text "fdelta =" <+> addContext delta (prettyTCM fdelta)
           ]
         let tsl  = applySubst sub fdelta
         -- We get a list of types
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
@@ -1,23 +1,15 @@
 
 module Agda.TypeChecking.Rules.Term where
 
-import Agda.Syntax.Common (WithHiding, NamedArg, Arg)
+import Agda.Syntax.Common (WithHiding, Arg)
 import qualified Agda.Syntax.Abstract as A
 import Agda.Syntax.Internal
-import Agda.Syntax.Position
 import Agda.TypeChecking.Monad.Base
-import Agda.Utils.Except ( ExceptT )
 
 isType_ :: A.Expr -> TCM Type
 
 checkExpr :: A.Expr -> Type -> TCM Term
 inferExpr :: A.Expr -> TCM (Term, Type)
-
-checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->
-                  ExceptT (Args, [NamedArg A.Expr], Type) TCM (Args, Type)
-
-checkArguments' :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->
-                   (Args -> Type -> TCM Term) -> TCM Term
 
 checkPostponedLambda :: Arg ([WithHiding Name], Maybe Type) -> A.Expr -> Type -> TCM Term
 
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
@@ -22,7 +22,6 @@
   )
   where
 
-import Control.Applicative
 import Control.Arrow (second)
 import Control.DeepSeq
 import qualified Control.Exception as E
@@ -61,7 +60,7 @@
 -- 32-bit machines). Word64 does not have these problems.
 
 currentInterfaceVersion :: Word64
-currentInterfaceVersion = 20170907 * 10 + 0
+currentInterfaceVersion = 20180518 * 10 + 0
 
 -- | Encodes something. To ensure relocatability file paths in
 -- positions are replaced with module names.
@@ -152,8 +151,6 @@
   -- input is malformed. The decoder is (intended to be) strict enough
   -- to ensure that all such errors can be caught by the handler here.
 
-  shared <- sharedFun
-
   (mf, r) <- liftIO $ E.handle (\(E.ErrorCall s) -> noResult s) $ do
 
     (ver, s, _) <- return $ runGetState B.get s 0
@@ -172,7 +169,6 @@
         st <- St (ar nL) (ar sL) (ar bL) (ar iL) (ar dL)
                 <$> liftIO H.new
                 <*> return mf <*> return incs
-                <*> return shared
         (r, st) <- runStateT (runExceptT (value r)) st
         return (Just (modFile st), r)
 
diff --git a/src/full/Agda/TypeChecking/Serialise/Base.hs b/src/full/Agda/TypeChecking/Serialise/Base.hs
--- a/src/full/Agda/TypeChecking/Serialise/Base.hs
+++ b/src/full/Agda/TypeChecking/Serialise/Base.hs
@@ -4,13 +4,8 @@
 {-# LANGUAGE TypeOperators        #-}
 {-# LANGUAGE UndecidableInstances #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# OPTIONS_GHC -fcontext-stack=30 #-}
-#endif
-
 module Agda.TypeChecking.Serialise.Base where
 
-import Control.Applicative
 import Control.Monad
 import Control.Monad.Reader
 import Control.Monad.State.Strict (StateT, gets)
@@ -156,7 +151,6 @@
     -- ^ Maps module names to file names. Constructed by the decoder.
   , includes  :: [AbsolutePath]
     -- ^ The include directories.
-  , mkShared  :: Term -> Term
   }
 
 -- | Monad used by the encoder.
diff --git a/src/full/Agda/TypeChecking/Serialise/Instances.hs b/src/full/Agda/TypeChecking/Serialise/Instances.hs
--- a/src/full/Agda/TypeChecking/Serialise/Instances.hs
+++ b/src/full/Agda/TypeChecking/Serialise/Instances.hs
@@ -13,8 +13,9 @@
 import Agda.TypeChecking.Serialise.Instances.Errors ()
 
 instance EmbPrj Interface where
-  icod_ (Interface a b c d e f g h i j k l m) = icodeN' Interface a b c d e f g h i j k l m
+  icod_ (Interface a b c d e f g h i j k l m n) = icodeN' Interface a b c d e f g h i j k l m n
 
   value = vcase valu where
-    valu [a, b, c, d, e, f, g, h, i, j, k, l, m] = valuN Interface a b c d e f g h i j k l m
-    valu _                                       = malformed
+    valu [a, b, c, d, e, f, g, h, i, j, k, l, m, n] =
+      valuN Interface a b c d e f g h i j k l m n
+    valu _ = malformed
diff --git a/src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs b/src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs
--- a/src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs
+++ b/src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs
@@ -4,7 +4,6 @@
 
 module Agda.TypeChecking.Serialise.Instances.Abstract where
 
-import Control.Applicative
 import qualified Data.Map as Map
 import qualified Data.Set as Set
 
@@ -25,6 +24,10 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
+instance EmbPrj A.BindName where
+  icod_ (A.BindName n) = icodeN' A.BindName n
+  value = valueN A.BindName
+
 instance EmbPrj Scope where
   icod_ (Scope a b c d e) = icodeN' Scope a b c d e
 
@@ -99,15 +102,27 @@
     valu [5] = valuN MacroName
     valu _   = malformed
 
+instance EmbPrj Binder where
+  icod_ LambdaBound   = icodeN' LambdaBound
+  icod_ PatternBound  = icodeN 1 PatternBound
+  icod_ LetBound      = icodeN 2 LetBound
+
+  value = vcase valu where
+    valu []  = valuN LambdaBound
+    valu [1] = valuN PatternBound
+    valu [2] = valuN LetBound
+    valu _   = malformed
+
 instance EmbPrj LocalVar where
   icod_ (LocalVar a b c)  = icodeN' LocalVar a b c
 
   value = valueN LocalVar
 
 instance EmbPrj ConPatInfo where
-  icod_ (ConPatInfo a _) = icod_ a
-  value a                = flip ConPatInfo patNoRange <$> value a
+  icod_ (ConPatInfo a _ b) = icodeN' (\a b -> ConPatInfo a patNoRange b) a b
 
+  value = valueN $ \a b -> ConPatInfo a patNoRange b
+
 -- Only for pattern synonyms (where a is Void)
 instance EmbPrj a => EmbPrj (A.Pattern' a) where
   icod_ (A.VarP a)            = icodeN 0 A.VarP a
@@ -115,12 +130,13 @@
   icod_ (A.DefP p a b)        = icodeN 2 (A.DefP p) a b
   icod_ t@(A.WildP p)         = icodeN 3 t
   icod_ (A.AsP p a b)         = icodeN 4 (A.AsP p) a b
-  icod_ (A.DotP p a b)        = icodeN 5 (A.DotP p) a b
+  icod_ (A.DotP p a)          = icodeN 5 (A.DotP p) a
   icod_ t@(A.AbsurdP _)       = icodeN 6 t
   icod_ (A.LitP a)            = icodeN 7 A.LitP a
   icod_ (A.ProjP p a b)       = icodeN 8 (A.ProjP p) a b
   icod_ (A.PatternSynP p a b) = icodeN 9 (A.PatternSynP p) a b
   icod_ (A.RecP p a)          = icodeN 10 (A.RecP p) a
+  icod_ (A.WithP i a)         = icodeN 11 (A.WithP i) a
 
   value = vcase valu where
     valu [0, a]       = valuN A.VarP a
@@ -128,42 +144,51 @@
     valu [2, a, b]    = valuN (A.DefP i) a b
     valu [3]          = valuN (A.WildP i)
     valu [4, a, b]    = valuN (A.AsP i) a b
-    valu [5, a, b]    = valuN (A.DotP i) a b
+    valu [5, a]       = valuN (A.DotP i) a
     valu [6]          = valuN (A.AbsurdP i)
     valu [7, a]       = valuN (A.LitP) a
     valu [8, a, b]    = valuN (A.ProjP i) a b
     valu [9, a, b]    = valuN (A.PatternSynP i) a b
     valu [10, a]      = valuN (A.RecP i) a
+    valu [11, a]      = valuN (A.WithP i) a
     valu _            = malformed
 
     i = patNoRange
 
+instance EmbPrj ParenPreference where
+  icod_ PreferParen     = icodeN' PreferParen
+  icod_ PreferParenless = icodeN 1 PreferParenless
+  value = vcase valu where
+    valu []  = valuN PreferParen
+    valu [1] = valuN PreferParenless
+    valu _   = malformed
+
 instance EmbPrj Precedence where
   icod_ TopCtx                 = icodeN' TopCtx
   icod_ FunctionSpaceDomainCtx = icodeN 1 FunctionSpaceDomainCtx
   icod_ (LeftOperandCtx a)     = icodeN 2 LeftOperandCtx a
-  icod_ (RightOperandCtx a)    = icodeN 3 RightOperandCtx a
+  icod_ (RightOperandCtx a b)  = icodeN 3 RightOperandCtx a b
   icod_ FunctionCtx            = icodeN 4 FunctionCtx
-  icod_ ArgumentCtx            = icodeN 5 ArgumentCtx
+  icod_ (ArgumentCtx a)        = icodeN 5 ArgumentCtx a
   icod_ InsideOperandCtx       = icodeN 6 InsideOperandCtx
   icod_ WithFunCtx             = icodeN 7 WithFunCtx
   icod_ WithArgCtx             = icodeN 8 WithArgCtx
   icod_ DotPatternCtx          = icodeN 9 DotPatternCtx
 
   value = vcase valu where
-    valu []     = valuN TopCtx
-    valu [1]    = valuN FunctionSpaceDomainCtx
-    valu [2, a] = valuN LeftOperandCtx a
-    valu [3, a] = valuN RightOperandCtx a
-    valu [4]    = valuN FunctionCtx
-    valu [5]    = valuN ArgumentCtx
-    valu [6]    = valuN InsideOperandCtx
-    valu [7]    = valuN WithFunCtx
-    valu [8]    = valuN WithArgCtx
-    valu [9]    = valuN DotPatternCtx
-    valu _      = malformed
+    valu []        = valuN TopCtx
+    valu [1]       = valuN FunctionSpaceDomainCtx
+    valu [2, a]    = valuN LeftOperandCtx a
+    valu [3, a, b] = valuN RightOperandCtx a b
+    valu [4]       = valuN FunctionCtx
+    valu [5, a]    = valuN ArgumentCtx a
+    valu [6]       = valuN InsideOperandCtx
+    valu [7]       = valuN WithFunCtx
+    valu [8]       = valuN WithArgCtx
+    valu [9]       = valuN DotPatternCtx
+    valu _         = malformed
 
 instance EmbPrj ScopeInfo where
-  icod_ (ScopeInfo a b c d e f g) = icodeN' (\ a b c d -> ScopeInfo a b c d e f g) a b c d
+  icod_ (ScopeInfo a b c d e f g h) = icodeN' (\ a b c d e -> ScopeInfo a b c d e f g h) a b c d e
 
-  value = valueN (\ a b c d -> ScopeInfo a b c d Map.empty Map.empty Set.empty)
+  value = valueN (\ a b c d e -> ScopeInfo a b c d e Map.empty Map.empty Set.empty)
diff --git a/src/full/Agda/TypeChecking/Serialise/Instances/Common.hs b/src/full/Agda/TypeChecking/Serialise/Instances/Common.hs
--- a/src/full/Agda/TypeChecking/Serialise/Instances/Common.hs
+++ b/src/full/Agda/TypeChecking/Serialise/Instances/Common.hs
@@ -1,18 +1,12 @@
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE OverlappingInstances       #-}
-#endif
-
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 module Agda.TypeChecking.Serialise.Instances.Common (SerialisedRange(..)) where
 
 import Prelude hiding (mapM)
 
-import Control.Applicative
 import Control.Monad.Reader hiding (mapM)
 import Control.Monad.State.Strict (gets, modify)
 import Control.Exception
@@ -28,15 +22,13 @@
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.Set (Set)
+import qualified Data.IntSet as IntSet
+import Data.IntSet (IntSet)
 import qualified Data.Set as Set
 import Data.Sequence (Seq)
 import qualified Data.Sequence as Seq
 import Data.Traversable ( mapM )
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Typeable ( Typeable )
-#endif
-
 import Data.Void
 
 import Agda.Syntax.Common
@@ -57,8 +49,10 @@
 import qualified Agda.Utils.HashMap as HMap
 import Agda.Utils.FileName
 import Agda.Utils.Maybe
+import Agda.Utils.NonemptyList
 import qualified Agda.Utils.Maybe.Strict as Strict
-import Agda.Utils.Trie
+import Agda.Utils.Trie (Trie(..))
+import qualified Agda.Utils.Trie as Trie
 
 import Agda.Utils.Except
 
@@ -68,11 +62,7 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} EmbPrj String where
-#else
-instance EmbPrj String where
-#endif
   icod_   = icodeString
   value i = (! i) `fmap` gets stringE
 
@@ -208,11 +198,7 @@
 
   value = valueN TopLevelModuleName
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} EmbPrj a => EmbPrj [a] where
-#else
-instance EmbPrj a => EmbPrj [a] where
-#endif
   icod_ xs = icodeNode =<< mapM icode xs
   value    = vcase (mapM value)
 --   icode []       = icode0'
@@ -221,6 +207,10 @@
 --                            valu [x, xs] = valu2 (:) x xs
 --                            valu _       = malformed
 
+instance EmbPrj a => EmbPrj (NonemptyList a) where
+  icod_ = icod_ . toList
+  value = listCaseNe malformed return <=< value
+
 instance (Ord a, Ord b, EmbPrj a, EmbPrj b) => EmbPrj (BiMap a b) where
   icod_ m = icode (BiMap.toList m)
   value m = BiMap.fromList <$> value m
@@ -233,6 +223,10 @@
   icod_ s = icode (Set.toList s)
   value s = Set.fromList `fmap` value s
 
+instance EmbPrj IntSet where
+  icod_ s = icode (IntSet.toList s)
+  value s = IntSet.fromList <$> value s
+
 instance (Ord a, EmbPrj a, EmbPrj b) => EmbPrj (Trie a b) where
   icod_ (Trie a b)= icodeN' Trie a b
 
@@ -256,9 +250,6 @@
 -- | Ranges that should be serialised properly.
 
 newtype SerialisedRange = SerialisedRange { underlyingRange :: Range }
-#if __GLASGOW_HASKELL__ <= 708
-  deriving (Typeable)
-#endif
 
 instance EmbPrj SerialisedRange where
   icod_ (SerialisedRange r) =
@@ -378,7 +369,7 @@
   value = valueN Ranged
 
 instance EmbPrj ArgInfo where
-  icod_ (ArgInfo h r o) = icodeN' ArgInfo h r o
+  icod_ (ArgInfo h r o fv) = icodeN' ArgInfo h r o fv
 
   value = valueN ArgInfo
 
@@ -406,6 +397,15 @@
 
   value = valueN Dom
 
+instance EmbPrj HasEta where
+  icod_ YesEta = icodeN' YesEta
+  icod_ NoEta  = icodeN 1 NoEta
+
+  value = vcase valu where
+    valu []  = valuN YesEta
+    valu [1] = valuN NoEta
+    valu _   = malformed
+
 instance EmbPrj Induction where
   icod_ Inductive   = icodeN' Inductive
   icod_ CoInductive = icodeN 1 CoInductive
@@ -427,18 +427,29 @@
   value 3 = return (Instance YesOverlap)
   value _ = malformed
 
+instance EmbPrj Quantity where
+  icod_ Quantity0 = return 0
+  icod_ Quantityω = return 1
+
+  value 0 = return Quantity0
+  value 1 = return Quantityω
+  value _ = malformed
+
+instance EmbPrj Modality where
+  icod_ (Modality a b) = icodeN' Modality a b
+
+  value = vcase $ \case
+    [a, b] -> valuN Modality a b
+    _ -> malformed
+
 instance EmbPrj Relevance where
   icod_ Relevant       = return 0
   icod_ Irrelevant     = return 1
-  icod_ (Forced Small) = return 2
-  icod_ (Forced Big)   = return 3
-  icod_ NonStrict      = return 4
+  icod_ NonStrict      = return 2
 
   value 0 = return Relevant
   value 1 = return Irrelevant
-  value 2 = return (Forced Small)
-  value 3 = return (Forced Big)
-  value 4 = return NonStrict
+  value 2 = return NonStrict
   value _ = malformed
 
 instance EmbPrj Origin where
@@ -453,6 +464,15 @@
   value 3 = return CaseSplit
   value _ = malformed
 
+instance EmbPrj FreeVariables where
+  icod_ UnknownFVs   = icodeN' UnknownFVs
+  icod_ (KnownFVs a) = icodeN' KnownFVs a
+
+  value = vcase valu where
+    valu []  = valuN UnknownFVs
+    valu [a] = valuN KnownFVs a
+    valu _   = malformed
+
 instance EmbPrj ConOrigin where
   icod_ ConOSystem = return 0
   icod_ ConOCon    = return 1
@@ -482,6 +502,7 @@
   icod_ (LitChar   a b)   = icodeN 3 LitChar a b
   icod_ (LitQName  a b)   = icodeN 5 LitQName a b
   icod_ (LitMeta   a b c) = icodeN 6 LitMeta a b c
+  icod_ (LitWord64 a b)   = icodeN 7 LitWord64 a b
 
   value = vcase valu where
     valu [a, b]       = valuN LitNat    a b
@@ -490,6 +511,7 @@
     valu [3, a, b]    = valuN LitChar   a b
     valu [5, a, b]    = valuN LitQName  a b
     valu [6, a, b, c] = valuN LitMeta   a b c
+    valu [7, a, b]    = valuN LitWord64 a b
     valu _            = malformed
 
 instance EmbPrj IsAbstract where
diff --git a/src/full/Agda/TypeChecking/Serialise/Instances/Errors.hs b/src/full/Agda/TypeChecking/Serialise/Instances/Errors.hs
--- a/src/full/Agda/TypeChecking/Serialise/Instances/Errors.hs
+++ b/src/full/Agda/TypeChecking/Serialise/Instances/Errors.hs
@@ -2,16 +2,8 @@
 {-# LANGUAGE CPP                      #-}
 {-# OPTIONS_GHC -fno-warn-orphans     #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# OPTIONS_GHC -fcontext-stack=30 #-}
-#endif
-
 module Agda.TypeChecking.Serialise.Instances.Errors where
 
-#if __GLASGOW_HASKELL__ <= 708
-import Agda.TypeChecking.Pretty ()
-#endif
-
 import Agda.TypeChecking.Serialise.Base
 import Agda.TypeChecking.Serialise.Instances.Common
 import Agda.TypeChecking.Serialise.Instances.Internal ()
@@ -34,7 +26,7 @@
 import Agda.Utils.Impossible
 
 instance EmbPrj TCWarning where
-  icod_ (TCWarning a b c) = icodeN' TCWarning a b c
+  icod_ (TCWarning a b c d) = icodeN' TCWarning a b c d
 
   value = valueN TCWarning
 
@@ -64,6 +56,8 @@
   icod_ (ParseWarning a)             = __IMPOSSIBLE__
   icod_ (DeprecationWarning a b c)   = icodeN 6 DeprecationWarning a b c
   icod_ (NicifierIssue a)            = icodeN 7 NicifierIssue a
+  icod_ (InversionDepthReached a)    = icodeN 8 InversionDepthReached a
+  icod_ (UserWarning a)              = icodeN 9 UserWarning a
 
   value = vcase valu where
       valu [0, a, b]    = valuN UnreachableClauses a b
@@ -74,6 +68,8 @@
       valu [5, a]       = valuN GenericWarning a
       valu [6, a, b, c] = valuN DeprecationWarning a b c
       valu [7, a]       = valuN NicifierIssue a
+      valu [8, a]       = valuN InversionDepthReached a
+      valu [9, a]       = valuN UserWarning a
       valu _ = malformed
 
 instance EmbPrj DeclarationWarning where
@@ -84,6 +80,16 @@
     UselessPrivate a                  -> icodeN 3 UselessPrivate a
     UselessAbstract a                 -> icodeN 4 UselessAbstract a
     UselessInstance a                 -> icodeN 5 UselessInstance a
+    EmptyMutual a                     -> icodeN 6 EmptyMutual a
+    EmptyAbstract a                   -> icodeN 7 EmptyAbstract a
+    EmptyPrivate a                    -> icodeN 8 EmptyPrivate a
+    EmptyInstance a                   -> icodeN 9 EmptyInstance a
+    EmptyMacro a                      -> icodeN 10 EmptyMacro a
+    EmptyPostulate a                  -> icodeN 11 EmptyPostulate a
+    InvalidTerminationCheckPragma a   -> icodeN 12 InvalidTerminationCheckPragma a
+    InvalidNoPositivityCheckPragma a  -> icodeN 13 InvalidNoPositivityCheckPragma a
+    InvalidCatchallPragma a           -> icodeN 14 InvalidCatchallPragma a
+    UnknownFixityInMixfixDecl a       -> icodeN 15 UnknownFixityInMixfixDecl a
 
   value = vcase $ \case
     [0, a] -> valueN UnknownNamesInFixityDecl a
@@ -92,10 +98,18 @@
     [3, a] -> valueN UselessPrivate a
     [4, a] -> valueN UselessAbstract a
     [5, a] -> valueN UselessInstance a
+    [6, a] -> valueN EmptyMutual a
+    [7, a] -> valueN EmptyAbstract a
+    [8, a] -> valueN EmptyPrivate a
+    [9, a] -> valueN EmptyInstance a
+    [10,a] -> valueN EmptyMacro a
+    [11,a] -> valueN EmptyPostulate a
+    [12,a] -> valueN InvalidTerminationCheckPragma a
+    [13,a] -> valueN InvalidNoPositivityCheckPragma a
+    [14,a] -> valueN InvalidCatchallPragma a
     _ -> malformed
 
 instance EmbPrj Doc where
   icod_ d = icodeN' (undefined :: String -> Doc) (render d)
 
   value = valueN text
-
diff --git a/src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs b/src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs
--- a/src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs
+++ b/src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs
@@ -89,7 +89,7 @@
     valu _   = malformed
 
 instance EmbPrj HP.Aspects where
-  icod_ (HP.Aspects a b c d) = icodeN' HP.Aspects a b c d
+  icod_ (HP.Aspects a b c d e) = icodeN' HP.Aspects a b c d e
 
   value = valueN HP.Aspects
 
@@ -102,3 +102,12 @@
   icod_ (HP.CompressedFile f) = icodeN' HP.CompressedFile f
 
   value = valueN HP.CompressedFile
+
+instance EmbPrj HP.TokenBased where
+  icod_ HP.TokenBased        = icodeN 0 ()
+  icod_ HP.NotOnlyTokenBased = icodeN' HP.NotOnlyTokenBased
+
+  value = vcase valu where
+    valu [0] = valuN HP.TokenBased
+    valu []  = valuN HP.NotOnlyTokenBased
+    valu _   = malformed
diff --git a/src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs b/src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs
--- a/src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs
+++ b/src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs
@@ -4,7 +4,6 @@
 
 module Agda.TypeChecking.Serialise.Instances.Internal where
 
-import Control.Applicative
 import Control.Monad.State.Strict
 
 import Agda.Syntax.Internal as I
@@ -92,10 +91,8 @@
   icod_ (MetaV    a b) = __IMPOSSIBLE__
   icod_ (DontCare a  ) = icodeN 8 DontCare a
   icod_ (Level    a  ) = icodeN 9 Level a
-  icod_ (Shared p)     = icodeMemo termD termC p $ icode (derefPtr p)
 
-  value r = vcase valu' r where
-    valu' xs       = gets mkShared <*> valu xs
+  value = vcase valu where
     valu [a]       = valuN var   a
     valu [0, a, b] = valuN Var   a b
     valu [1, a, b] = valuN Lam   a b
@@ -140,14 +137,17 @@
   icod_ Prop        = icodeN' Prop
   icod_ SizeUniv    = icodeN 1 SizeUniv
   icod_ Inf         = icodeN 2 Inf
-  icod_ (DLub a b)  = icodeN 3 DLub a b -- Andreas, 2017-01-18: not __IMPOSSIBLE__ see #2408
+  icod_ (PiSort a b) = icodeN 3 PiSort a b
+  icod_ (UnivSort a) = icodeN 4 UnivSort a
+  icod_ (MetaS a b)  = __IMPOSSIBLE__
 
   value = vcase valu where
     valu []        = valuN Prop
     valu [0, a]    = valuN Type  a
     valu [1]       = valuN SizeUniv
     valu [2]       = valuN Inf
-    valu [3, a, b] = valuN DLub a b
+    valu [3, a, b] = valuN PiSort a b
+    valu [4, a]    = valuN UnivSort a
     valu _         = malformed
 
 instance EmbPrj DisplayForm where
@@ -160,18 +160,9 @@
 
   value = valueN OpenThing
 
-instance EmbPrj a => EmbPrj (Local a) where
-  icod_ (Local a b) = icodeN' Local a b
-  icod_ (Global a)  = icodeN' Global a
-
-  value = vcase valu where
-    valu [a, b] = valuN Local a b
-    valu [a]    = valuN Global a
-    valu _      = malformed
-
-instance EmbPrj CtxId where
-  icod_ (CtxId a) = icode a
-  value n         = CtxId `fmap` value n
+instance EmbPrj CheckpointId where
+  icod_ (CheckpointId a) = icode a
+  value n                = CheckpointId `fmap` value n
 
 instance EmbPrj DisplayTerm where
   icod_ (DTerm    a  )   = icodeN' DTerm a
@@ -238,7 +229,7 @@
   value = valueN ProjLams
 
 instance EmbPrj ExtLamInfo where
-  icod_ (ExtLamInfo a b) = icodeN' ExtLamInfo a b
+  icod_ (ExtLamInfo a) = icodeN' ExtLamInfo a
 
   value = valueN ExtLamInfo
 
@@ -254,6 +245,14 @@
   value 3 = return Nonvariant
   value _ = malformed
 
+instance EmbPrj IsForced where
+  icod_ Forced    = return 0
+  icod_ NotForced = return 1
+
+  value 0 = return Forced
+  value 1 = return NotForced
+  value _ = malformed
+
 instance EmbPrj Occurrence where
   icod_ StrictPos = return 0
   icod_ Mixed     = return 1
@@ -283,19 +282,19 @@
   icod_ Axiom                                   = icodeN 0 Axiom
   icod_ (Function    a b t c d e f g h i j k m) =
     icodeN 1 (\ a b -> Function a b t) a b c d e f g h i j k m
-  icod_ (Datatype    a b c d e f g h i j)       = icodeN 2 Datatype a b c d e f g h i j
+  icod_ (Datatype    a b c d e f g h)           = icodeN 2 Datatype a b c d e f g h
   icod_ (Record      a b c d e f g h i j)       = icodeN 3 Record a b c d e f g h i j
-  icod_ (Constructor a b c d e f g)             = icodeN 4 Constructor a b c d e f g
-  icod_ (Primitive   a b c d)                   = icodeN 5 Primitive a b c d
+  icod_ (Constructor a b c d e f g h)           = icodeN 4 Constructor a b c d e f g h
+  icod_ (Primitive   a b c d e)                 = icodeN 5 Primitive a b c d e
   icod_ AbstractDefn{}                          = __IMPOSSIBLE__
 
   value = vcase valu where
     valu [0]                                     = valuN Axiom
     valu [1, a, b, c, d, e, f, g, h, i, j, k, m] = valuN (\ a b -> Function a b Nothing) a b c d e f g h i j k m
-    valu [2, a, b, c, d, e, f, g, h, i, j]       = valuN Datatype a b c d e f g h i j
+    valu [2, a, b, c, d, e, f, g, h]             = valuN Datatype a b c d e f g h
     valu [3, a, b, c, d, e, f, g, h, i, j]       = valuN Record  a b c d e f g h i j
-    valu [4, a, b, c, d, e, f, g]                = valuN Constructor a b c d e f g
-    valu [5, a, b, c, d]                         = valuN Primitive   a b c d
+    valu [4, a, b, c, d, e, f, g, h]             = valuN Constructor a b c d e f g h
+    valu [5, a, b, c, d, e]                      = valuN Primitive   a b c d e
     valu _                                       = malformed
 
 instance EmbPrj FunctionFlag where
@@ -315,7 +314,7 @@
   value = valueN WithArity
 
 instance EmbPrj a => EmbPrj (Case a) where
-  icod_ (Branches a b c d) = icodeN' Branches a b c d
+  icod_ (Branches a b c d e f) = icodeN' Branches a b c d e f
 
   value = valueN Branches
 
@@ -343,11 +342,15 @@
   icod_ SortHead     = icodeN' SortHead
   icod_ PiHead       = icodeN 1 PiHead
   icod_ (ConsHead a) = icodeN 2 ConsHead a
+  icod_ (VarHead a)  = icodeN 3 VarHead a
+  icod_ UnknownHead  = icodeN 4 UnknownHead
 
   value = vcase valu where
     valu []     = valuN SortHead
     valu [1]    = valuN PiHead
     valu [2, a] = valuN ConsHead a
+    valu [3, a] = valuN VarHead a
+    valu [4]    = valuN UnknownHead
     valu _      = malformed
 
 instance EmbPrj I.Clause where
@@ -356,7 +359,7 @@
   value = valueN Clause
 
 instance EmbPrj I.ConPatternInfo where
-  icod_ (ConPatternInfo a b) = icodeN' ConPatternInfo a b
+  icod_ (ConPatternInfo a b c) = icodeN' ConPatternInfo a b c
 
   value = valueN ConPatternInfo
 
@@ -365,21 +368,42 @@
 
   value = valueN DBPatVar
 
+instance EmbPrj I.PatOrigin where
+  icod_ PatOSystem  = icodeN' PatOSystem
+  icod_ PatOSplit   = icodeN 1 PatOSplit
+  icod_ (PatOVar a) = icodeN 2 PatOVar a
+  icod_ PatODot     = icodeN 3 PatODot
+  icod_ PatOWild    = icodeN 4 PatOWild
+  icod_ PatOCon     = icodeN 5 PatOCon
+  icod_ PatORec     = icodeN 6 PatORec
+  icod_ PatOLit     = icodeN 7 PatOLit
+  icod_ PatOAbsurd  = icodeN 8 PatOAbsurd
+
+  value = vcase valu where
+    valu []     = valuN PatOSystem
+    valu [1]    = valuN PatOSplit
+    valu [2, a] = valuN PatOVar a
+    valu [3]    = valuN PatODot
+    valu [4]    = valuN PatOWild
+    valu [5]    = valuN PatOCon
+    valu [6]    = valuN PatORec
+    valu [7]    = valuN PatOLit
+    valu [8]    = valuN PatOAbsurd
+    valu _      = malformed
+
 instance EmbPrj a => EmbPrj (I.Pattern' a) where
-  icod_ (VarP a    ) = icodeN' VarP a
+  icod_ (VarP a b  ) = icodeN 0 VarP a b
   icod_ (ConP a b c) = icodeN 1 ConP a b c
   icod_ (LitP a    ) = icodeN 2 LitP a
-  icod_ (DotP a    ) = icodeN 3 DotP a
+  icod_ (DotP a b  ) = icodeN 3 DotP a b
   icod_ (ProjP a b ) = icodeN 4 ProjP a b
-  icod_ (AbsurdP a ) = icodeN 5 AbsurdP a
 
   value = vcase valu where
-    valu [a]       = valuN VarP a
+    valu [0, a, b] = valuN VarP a b
     valu [1, a, b, c] = valuN ConP a b c
     valu [2, a]    = valuN LitP a
-    valu [3, a]    = valuN DotP a
+    valu [3, a, b] = valuN DotP a b
     valu [4, a, b] = valuN ProjP a b
-    valu [5, a]    = valuN AbsurdP a
     valu _         = malformed
 
 instance EmbPrj a => EmbPrj (Builtin a) where
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
@@ -42,7 +42,7 @@
 
 -- | Check whether a type is either not a SIZELT or a SIZELT that is non-empty.
 checkSizeLtSat :: Term -> TCM ()
-checkSizeLtSat t = do
+checkSizeLtSat t = whenM haveSizeLt $ do
   reportSDoc "tc.size" 10 $ do
     tel <- getContextTelescope
     sep
@@ -58,7 +58,7 @@
         addConstraint $ CheckSizeLtSat t
   let ok :: TCM ()
       ok = reportSLn "tc.size.lt" 20 $ "- succeeded: not an empty type of sizes"
-  ifBlocked t (const postpone) $ \ t -> do
+  ifBlocked t (const postpone) $ \ _ t -> do
     reportSLn "tc.size.lt" 20 $ "- type is not blocked"
     caseMaybeM (isSizeType t) ok $ \ b -> do
       reportSLn "tc.size.lt" 20 $ " - type is a size type"
@@ -66,7 +66,7 @@
         BoundedNo -> ok
         BoundedLt b -> do
           reportSDoc "tc.size.lt" 20 $ text " - type is SIZELT" <+> prettyTCM b
-          ifBlocked b (\ _ _ -> postpone t) $ \ b -> do
+          ifBlocked b (\ _ _ -> postpone t) $ \ _ b -> do
             reportSLn "tc.size.lt" 20 $ " - size bound is not blocked"
             catchConstraint (CheckSizeLtSat t) $ do
               unlessM (checkSizeNeverZero b) $ do
@@ -82,7 +82,7 @@
     SizeInf     -> return True  -- OK, infty is never 0.
     SizeSuc{}   -> return True  -- OK, a + 1 is never 0.
     OtherSize u ->
-      case ignoreSharing u of
+      case u of
         Var i [] -> checkSizeVarNeverZero i
         -- neutral sizes cannot be guaranteed > 0
         _ -> return False
@@ -115,7 +115,7 @@
 --         case b of
 --           BoundedNo -> no
 --           BoundedLt u -> ifBlocked u (\ _ _ -> perhaps) $ \ u -> do
---             case ignoreSharing u of
+--             case u of
 --                Var i' [] | i == i' -> yes
 --                _ -> no
 
@@ -151,11 +151,11 @@
         perhaps = tell (Any True) >> cont
     -- If we encounter a blocked type in the context, we cannot
     -- give a definite answer.
-    ifBlockedType t (\ _ _ -> perhaps) $ \ t -> do
+    ifBlockedType t (\ _ _ -> perhaps) $ \ _ t -> do
       caseMaybeM (liftTCM $ isSizeType t) cont $ \ b -> do
         case b of
           BoundedNo -> cont
-          BoundedLt u -> ifBlocked u (\ _ _ -> perhaps) $ \ u -> do
+          BoundedLt u -> ifBlocked u (\ _ _ -> perhaps) $ \ _ u -> do
             reportSLn "tc.size" 60 $ "minSizeVal upper bound u = " ++ show u
             v <- liftTCM $ deepSizeView u
             case v of
@@ -175,7 +175,7 @@
 isBounded :: MonadTCM tcm => Nat -> tcm BoundedSize
 isBounded i = liftTCM $ do
   t <- reduce =<< typeOfBV i
-  case ignoreSharing $ unEl t of
+  case unEl t of
     Def x [Apply u] -> do
       sizelt <- getBuiltin' builtinSizeLt
       return $ if (Just (Def x []) == sizelt) then BoundedLt $ unArg u else BoundedNo
@@ -192,7 +192,7 @@
       n <- getContextSize
       let tel | n > 0     = telFromList $ drop n $ telToList tel0
               | otherwise = tel0
-      addContext' tel $ do
+      addContext tel $ do
         v <- sizeSuc 1 $ raise (size tel) v `apply` teleArgs tel
         -- compareSizes CmpLeq v u
         size <- sizeType
@@ -215,8 +215,8 @@
       forceInfty u = compareSizes CmpEq (unArg u) =<< primSizeInf
   -- Get the SIZE built-ins.
   (size, sizelt) <- flip catchError (const failure) $ do
-     Def size   _ <- ignoreSharing <$> primSize
-     Def sizelt _ <- ignoreSharing <$> primSizeLt
+     Def size   _ <- primSize
+     Def sizelt _ <- primSizeLt
      return (size, sizelt)
   case (cmp, els1, els2) of
      -- Case @Size< _ <= Size@: true.
@@ -236,11 +236,11 @@
 --   Precondition: sized types are enabled.
 deepSizeView :: Term -> TCM DeepSizeView
 deepSizeView v = do
-  Def inf [] <- ignoreSharing <$> primSizeInf
-  Def suc [] <- ignoreSharing <$> primSizeSuc
+  Def inf [] <- primSizeInf
+  Def suc [] <- primSizeSuc
   let loop v = do
         v <- reduce v
-        case ignoreSharing v of
+        case v of
           Def x []        | x == inf -> return $ DSizeInf
           Def x [Apply u] | x == suc -> sizeViewSuc_ suc <$> loop (unArg u)
           Var i []                   -> return $ DSizeVar i 0
@@ -255,7 +255,7 @@
   max <- getBuiltinDefName builtinSizeMax
   let loop v = do
         v <- reduce v
-        case ignoreSharing v of
+        case v of
           Def x []                   | Just x == inf -> return $ [DSizeInf]
           Def x [Apply u]            | Just x == suc -> maxViewSuc_ (fromJust suc) <$> loop (unArg u)
           Def x [Apply u1, Apply u2] | Just x == max -> maxViewMax <$> loop (unArg u1) <*> loop (unArg u2)
@@ -416,6 +416,7 @@
         let no = return Nothing
         mi <- lookupMeta m
         case mvJudgement mi of
+          _ | BlockedConst{} <- mvInstantiation mi -> no  -- Blocked terms should not be touched (#2637, #2881)
           HasType _ a -> do
             TelV tel b <- telView a
             -- b is reduced
@@ -530,14 +531,14 @@
   case s of
     SizeInf     -> patternViolation
     SizeSuc u   -> mapSnd (+1) <$> oldSizeExpr u
-    OtherSize u -> case ignoreSharing u of
+    OtherSize u -> case u of
       Var i []  -> return (Rigid i, 0)
       MetaV m es | Just xs <- mapM isVar es, fastDistinct xs
                 -> return (SizeMeta m xs, 0)
       _ -> patternViolation
   where
     isVar (Proj{})  = Nothing
-    isVar (Apply v) = case ignoreSharing $ unArg v of
+    isVar (Apply v) = case unArg v of
       Var i [] -> Just i
       _        -> Nothing
 
diff --git a/src/full/Agda/TypeChecking/SizedTypes/Solve.hs b/src/full/Agda/TypeChecking/SizedTypes/Solve.hs
--- a/src/full/Agda/TypeChecking/SizedTypes/Solve.hs
+++ b/src/full/Agda/TypeChecking/SizedTypes/Solve.hs
@@ -93,11 +93,7 @@
 import Agda.Utils.Functor
 import Agda.Utils.Lens
 
-#if MIN_VERSION_base(4,8,0)
 import qualified Agda.Utils.List as List hiding ( uncons )
-#else
-import qualified Agda.Utils.List as List
-#endif
 
 import Agda.Utils.Maybe
 import Agda.Utils.Monad
@@ -323,34 +319,33 @@
 
 castConstraintToCurrentContext :: Closure TCM.Constraint -> MaybeT TCM TCM.Constraint
 castConstraintToCurrentContext cl = do
-  -- The target context
-  gamma <- asks envContext
-  -- The context where the constraint lives.
-  let delta = envContext $ clEnv cl
-  -- The constraint
-  let c = clValue cl
-  let findInGamma (Ctx cid (Dom _ (x, t))) =
-        -- try to find same CtxId (safe)
-        case List.findIndex ((cid ==) . ctxId) gamma of
-          Just i -> Just i
-          Nothing ->
-            -- match by name (hazardous)
-            -- This is one of the seven deadly sins (not respecting alpha).
-            List.findIndex ((x ==) . fst . unDom . ctxEntry) gamma
-  let cand = map findInGamma delta
-  -- The domain of our substitution
-  let coveredVars = VarSet.fromList $ catMaybes $ zipWith ($>) cand [0..]
-  -- Check that all the free variables of the constraint are contained in
-  -- coveredVars.
-  -- We ignore the free variables occurring in sorts.
-  guard $ getAll $ runFree (All . (`VarSet.member` coveredVars)) IgnoreAll c
-  -- Turn cand into a substitution.
-  -- Since we ignored the free variables in sorts, we better patch up
-  -- the substitution with some dummy term (Sort Prop) rather than __IMPOSSIBLE__.
-  let dummy = Sort Prop
-  let sigma = parallelS $ map (maybe dummy var) cand
+  -- The checkpoint of the contraint
+  let cp = envCurrentCheckpoint $ clEnv cl
+  sigma <- caseMaybeM (view $ eCheckpoints . key cp)
+          (do
+            -- We are not in a descendant of the constraint checkpoint.
+            -- Here be dragons!!
+            gamma <- asks envContext -- The target context
+            let findInGamma (Dom _ (x, t)) =
+                  -- match by name (hazardous)
+                  -- This is one of the seven deadly sins (not respecting alpha).
+                  List.findIndex ((x ==) . fst . unDom) gamma
+            let delta = envContext $ clEnv cl
+                cand  = map findInGamma delta
+            -- The domain of our substitution
+            let coveredVars = VarSet.fromList $ catMaybes $ zipWith ($>) cand [0..]
+            -- Check that all the free variables of the constraint are contained in
+            -- coveredVars.
+            -- We ignore the free variables occurring in sorts.
+            guard $ getAll $ runFree (All . (`VarSet.member` coveredVars)) IgnoreAll (clValue cl)
+            -- Turn cand into a substitution.
+            -- Since we ignored the free variables in sorts, we better patch up
+            -- the substitution with some dummy term (Sort Prop) rather than __IMPOSSIBLE__.
+            let dummy = Sort Prop
+            return $ parallelS $ map (maybe dummy var) cand
+          ) return -- Phew, we've got the checkpoint! All is well.
   -- Apply substitution to constraint and pray that the Gods are merciful on us.
-  return $ applySubst sigma c
+  return $ applySubst sigma (clValue cl)
   -- Note: the resulting constraint may not well-typed.
   -- Even if it is, it may map variables to their wrong counterpart.
 
@@ -498,7 +493,7 @@
     iterateSolver Map.empty hg csF emptySolution
 
   -- Convert solution to meta instantiation.
-  forM_ (Map.assocs $ theSolution sol) $ \ (m, a) -> do
+  solved <- fmap Set.unions $ forM (Map.assocs $ theSolution sol) $ \ (m, a) -> do
     unless (validOffset a) __IMPOSSIBLE__
     -- Solution does not contain metas
     u <- unSizeExpr $ fmap __IMPOSSIBLE__ a
@@ -518,8 +513,9 @@
       [ text $ "  xs = " ++ show xs
       , text $ "  u  = " ++ show u
       ]
-    unlessM (isFrozen x) $
+    ifM (isFrozen x) (return Set.empty) $ do
       assignMeta n x t xs u
+      return $ Set.singleton x
     -- WRONG:
     -- let partialSubst = List.sort $ zip xs $ map var $ downFrom n
     -- assignMeta' n x t (length xs) partialSubst u
@@ -531,8 +527,7 @@
   ims <- Set.fromList <$> getInteractionMetas
 
   --  ms = unsolved size metas from cluster
-  let ms = Set.fromList (map sizeMetaId metas) Set.\\  -- Some CPP or ghc does not like trailing backslash, thus, this comment!
-             Set.mapMonotonic MetaId (Map.keysSet $ theSolution sol)
+  let ms = Set.fromList (map sizeMetaId metas) Set.\\ solved
   --  Make sure they do not contain an interaction point
   let noIP = Set.null $ Set.intersection ims ms
 
@@ -576,7 +571,7 @@
         forM_ cs0 $ \ cl -> enterClosure cl solveConstraint
 
 -- | Collect constraints from a typing context, looking for SIZELT hypotheses.
-getSizeHypotheses :: Context -> TCM [(CtxId, SizeConstraint)]
+getSizeHypotheses :: Context -> TCM [(Nat, SizeConstraint)]
 getSizeHypotheses gamma = inTopContext $ modifyContext (const gamma) $ do
   (_, msizelt) <- getBuiltinSize
   caseMaybe msizelt (return []) $ \ sizelt -> do
@@ -584,13 +579,13 @@
     catMaybes <$> do
       forM (zip [0..] gamma) $ \ (i, ce) -> do
         -- Get name and type of variable i.
-        let xt = unDom $ ctxEntry ce
-            x  = prettyShow $ fst xt
-        t <- reduce . raise (1 + i) . unEl . snd $ xt
-        case ignoreSharing t of
+        let (x, t) = unDom ce
+            s      = prettyShow x
+        t <- reduce . raise (1 + i) . unEl $ t
+        case t of
           Def d [Apply u] | d == sizelt -> do
             caseMaybeM (sizeExpr $ unArg u) (return Nothing) $ \ a ->
-              return $ Just $ (ctxId ce, Constraint (Rigid (NamedRigid x i) 0) Lt a)
+              return $ Just $ (i, Constraint (Rigid (NamedRigid s i) 0) Lt a)
           _ -> return Nothing
 
 -- | Convert size constraint into form where each meta is applied
@@ -729,7 +724,7 @@
 -- | Size constraint with de Bruijn indices.
 data HypSizeConstraint = HypSizeConstraint
   { sizeContext    :: Context
-  , sizeHypIds     :: [CtxId]
+  , sizeHypIds     :: [Nat] -- ^ DeBruijn indices
   , sizeHypotheses :: [SizeConstraint]  -- ^ Living in @Context@.
   , sizeConstraint :: SizeConstraint    -- ^ Living in @Context@.
   }
@@ -740,7 +735,7 @@
 instance PrettyTCM HypSizeConstraint where
   prettyTCM (HypSizeConstraint cxt _ hs c) =
     inTopContext $ modifyContext (const cxt) $ do
-      let cxtNames = reverse $ map (fst . unDom . ctxEntry) cxt
+      let cxtNames = reverse $ map (fst . unDom) cxt
       -- text ("[#cxt=" ++ show (size cxt) ++ "]") <+> do
       prettyList (map prettyTCM cxtNames) <+> do
       applyUnless (null hs)
@@ -780,7 +775,7 @@
   case s of
     SizeInf     -> return $ Just Infty
     SizeSuc u   -> fmap (`plus` (1 :: Offset)) <$> sizeExpr u
-    OtherSize u -> case ignoreSharing u of
+    OtherSize u -> case u of
       Var i []    -> (\ x -> Just $ Rigid (NamedRigid x i) 0) . prettyShow <$> nameOfBV i
 --      MetaV m es  -> return $ Just $ Flex (SizeMeta m es) 0
       MetaV m es | Just xs <- mapM isVar es, List.fastDistinct xs
@@ -788,7 +783,7 @@
       _           -> return Nothing
   where
     isVar (Proj{})  = Nothing
-    isVar (Apply v) = case ignoreSharing $ unArg v of
+    isVar (Apply v) = case unArg v of
       Var i [] -> Just i
       _        -> Nothing
 
diff --git a/src/full/Agda/TypeChecking/SizedTypes/Syntax.hs b/src/full/Agda/TypeChecking/SizedTypes/Syntax.hs
--- a/src/full/Agda/TypeChecking/SizedTypes/Syntax.hs
+++ b/src/full/Agda/TypeChecking/SizedTypes/Syntax.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE NoMonomorphismRestriction  #-}
 {-# LANGUAGE UndecidableInstances       #-}
@@ -6,7 +7,11 @@
 
 module Agda.TypeChecking.SizedTypes.Syntax where
 
-import Prelude hiding (null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null )
+#else
+import Prelude hiding ( null )
+#endif
 
 import Data.Maybe
 import Data.Foldable (Foldable)
diff --git a/src/full/Agda/TypeChecking/SizedTypes/Utils.hs b/src/full/Agda/TypeChecking/SizedTypes/Utils.hs
--- a/src/full/Agda/TypeChecking/SizedTypes/Utils.hs
+++ b/src/full/Agda/TypeChecking/SizedTypes/Utils.hs
@@ -1,7 +1,6 @@
 
 module Agda.TypeChecking.SizedTypes.Utils where
 
-import Control.Applicative
 import Data.IORef
 import qualified Debug.Trace as Debug
 import System.IO.Unsafe
diff --git a/src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs b/src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs
--- a/src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs
+++ b/src/full/Agda/TypeChecking/SizedTypes/WarshallSolver.hs
@@ -3,7 +3,11 @@
 
 module Agda.TypeChecking.SizedTypes.WarshallSolver where
 
-import Prelude hiding (null, truncate)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), null, truncate )
+#else
+import Prelude hiding ( null, truncate )
+#endif
 
 import Control.Applicative hiding (Const, empty)
 import Control.Monad
@@ -31,29 +35,29 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
-type Graph r f a = Graph.Graph (Node r f) (Node r f) a
-type Edge' r f a = Graph.Edge  (Node r f) (Node r f) a
+type Graph r f a = Graph.Graph (Node r f) a
+type Edge' r f a = Graph.Edge  (Node r f) a
 type Key r f = Edge' r f ()
 type Nodes r f = Graph.Nodes (Node r f)
 type LabelledEdge r f = Edge' r f Label
 
-src :: Edge s t e -> s
+src :: Edge n e -> n
 src = Graph.source
 
-dest :: Edge s t e -> t
+dest :: Edge n e -> n
 dest = Graph.target
 
-lookupEdge :: (Ord s, Ord t) => Graph.Graph s t e -> s -> t -> Maybe e
+lookupEdge :: Ord n => Graph.Graph n e -> n -> n -> Maybe e
 lookupEdge g s t = Graph.lookup s t g
 
-graphToList :: Graph.Graph s t e -> [Edge s t e]
-graphToList = Graph.toList
+graphToList :: Graph.Graph n e -> [Edge n e]
+graphToList = Graph.edges
 
-graphFromList :: (Ord s, Ord t) => [Edge s t e] -> Graph.Graph s t e
-graphFromList = Graph.fromList
+graphFromList :: Ord n => [Edge n e] -> Graph.Graph n e
+graphFromList = Graph.fromEdges
 
-insertEdge :: (Ord s, Ord t, MeetSemiLattice e, Top e) =>
-              Edge s t e -> Graph.Graph s t e -> Graph.Graph s t e
+insertEdge :: (Ord n, MeetSemiLattice e, Top e) =>
+              Edge n e -> Graph.Graph n e -> Graph.Graph n e
 insertEdge e g
   | isTop (label e) = g
   | otherwise       = Graph.insertEdgeWith meet e g
@@ -74,11 +78,11 @@
 -- setFoldl = Set.foldl'
 
 -- | Floyd-Warshall algorithm.
-transClos :: forall n a . (Ord n, Dioid a) => Graph.Graph n n a -> Graph.Graph n n a
+transClos :: forall n a . (Ord n, Dioid a) => Graph.Graph n a -> Graph.Graph n a
 transClos g = setFoldl step g $ allNodes ns
   where
     ns       = computeNodes g
-    srcs     = Set.toAscList $ srcNodes  ns
+    srcs     = Set.toAscList $ srcNodes ns
     dests    = Set.toAscList $ tgtNodes ns
     -- @step g v@ adds all intermediate edges @u --> w@ via @v@ to @g@
     -- step :: (Ord n, Dioid a) => Graph.Graph n n a -> n -> Graph.Graph n n a
@@ -979,7 +983,7 @@
     n3 = NodeRigid "k"
     n4 = NodeRigid "l"
     n5 = NodeRigid "m"
-    hg = Graph.fromList
+    hg = Graph.fromEdges
          [ Graph.Edge n1 n3 $ Label Le 1
          , Graph.Edge n1 n4 $ Label Le 2
          , Graph.Edge n1 n5 $ Label Le 3
@@ -997,7 +1001,7 @@
     n3 = NodeRigid "k"
     n4 = NodeRigid "l"
     n5 = NodeRigid "m"
-    hg = Graph.fromList
+    hg = Graph.fromEdges
          [ Graph.Edge n1 n3 $ Label Le 0
          , Graph.Edge n1 n4 $ Label Le 2
          , Graph.Edge n1 n5 $ Label Le 4
diff --git a/src/full/Agda/TypeChecking/Sort.hs b/src/full/Agda/TypeChecking/Sort.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/TypeChecking/Sort.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE CPP #-}
+
+-- | This module contains the rules for Agda's sort system viewed as a pure
+--   type system (pts). The specification of a pts consists of a set
+--   of axioms of the form @s1 : s2@ specifying when a sort fits in
+--   another sort, and a set of rules of the form @(s1,s2,s3)@
+--   specifying that a pi type with domain in @s1@ and codomain in
+--   @s2@ itself fits into sort @s3@.
+--
+--   To ensure unique principal types, the axioms and rules of Agda's
+--   pts are given by two partial functions @univSort'@ and @piSort'@
+--   (see @Agda.TypeChecking.Substitute@). If these functions return
+--   @Nothing@, a constraint is added to ensure that the sort will be
+--   computed eventually.
+--
+--   One 'upgrade' over the standard definition of a pts is that in a
+--   rule @(s1,s2,s3)@, in Agda the sort @s2@ can depend on a variable
+--   of some type in @s1@. This is needed to support Agda's universe
+--   polymorphism where we can have e.g. a function of type @∀ {ℓ} →
+--   Set ℓ@.
+
+module Agda.TypeChecking.Sort where
+
+import Control.Monad
+
+import Agda.Syntax.Common
+import Agda.Syntax.Internal
+
+import {-# SOURCE #-} Agda.TypeChecking.Constraints (addConstraint)
+import {-# SOURCE #-} Agda.TypeChecking.Conversion
+import {-# SOURCE #-} Agda.TypeChecking.MetaVars
+
+import Agda.TypeChecking.Free
+import Agda.TypeChecking.Irrelevance
+import Agda.TypeChecking.Monad.Base
+import Agda.TypeChecking.Monad.Context
+import Agda.TypeChecking.Monad.Debug
+import Agda.TypeChecking.Pretty
+import Agda.TypeChecking.Reduce
+import Agda.TypeChecking.Substitute
+
+#include "undefined.h"
+import Agda.Utils.Impossible
+
+-- | Infer the sort of another sort. If we can compute the bigger sort
+--   straight away, return that. Otherwise, return @UnivSort s@ and add a
+--   constraint to ensure we can compute the sort eventually.
+inferUnivSort :: Sort -> TCM Sort
+inferUnivSort s = do
+  s <- reduce s
+  case univSort' s of
+    Just s' -> return s'
+    Nothing -> do
+      addConstraint $ HasBiggerSort s
+      return $ UnivSort s
+
+sortFitsIn :: Sort -> Sort -> TCM ()
+sortFitsIn a b = do
+  b' <- inferUnivSort a
+  equalSort b' b -- CUMULATIVITY: leqSort b' b
+
+hasBiggerSort :: Sort -> TCM ()
+hasBiggerSort = void . inferUnivSort
+
+-- | Infer the sort of a pi type. If we can compute the sort straight away,
+--   return that. Otherwise, return @PiSort s1 s2@ and add a constraint to
+--   ensure we can compute the sort eventually.
+inferPiSort :: Sort -> Abs Sort -> TCM Sort
+inferPiSort s1 s2 = do
+  (s1,s2) <- reduce (s1,s2)
+  -- we do instantiateFull here to perhaps remove some (flexible)
+  -- dependencies of s2 on var 0, thus allowing piSort' to reduce
+  s2 <- instantiateFull s2
+
+  --Jesper, 2018-04-23: disabled PTS constraints for now,
+  --this assumes that piSort can only be blocked by unsolved metas.
+
+  --case piSort' s1 s2 of
+  --  Just s -> return s
+  --  Nothing -> do
+  --    addConstraint $ HasPTSRule s1 s2
+  --    return $ PiSort s1 s2
+
+  return $ piSort s1 s2
+
+-- | As @inferPiSort@, but for a nondependent function type.
+inferFunSort :: Sort -> Sort -> TCM Sort
+inferFunSort s1 s2 = inferPiSort s1 $ NoAbs underscore s2
+
+ptsRule :: Sort -> Abs Sort -> Sort -> TCM ()
+ptsRule a b c = do
+  c' <- inferPiSort a b
+  equalSort c' c -- CUMULATIVITY: leqSort c' c
+
+-- | Non-dependent version of ptsRule
+ptsRule' :: Sort -> Sort -> Sort -> TCM ()
+ptsRule' a b c = do
+  c' <- inferFunSort a b
+  equalSort c' c -- CUMULATIVITY: leqSort c' c
+
+hasPTSRule :: Sort -> Abs Sort -> TCM ()
+hasPTSRule a b = void $ inferPiSort a b
+
+-- | Recursively check that an iterated function type constructed by @telePi@
+--   is well-sorted.
+checkTelePiSort :: Type -> TCM ()
+checkTelePiSort (El s (Pi a b)) = do
+  -- Since the function type is assumed to be constructed by @telePi@,
+  -- we already know that @s == piSort (getSort a) (getSort <$> b)@,
+  -- so we just check that this sort is well-formed.
+  hasPTSRule (getSort a) (getSort <$> b)
+  underAbstraction a b checkTelePiSort
+checkTelePiSort _ = return ()
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
@@ -2,10 +2,6 @@
 {-# LANGUAGE DeriveDataTypeable   #-}
 {-# LANGUAGE UndecidableInstances #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE OverlappingInstances #-}
-#endif
-
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
 -- | This module contains the definition of hereditary substitution
@@ -22,21 +18,22 @@
   , Substitution'(..), Substitution
   ) where
 
-import Control.Applicative
+import Control.Arrow (first, second)
 import Data.Function
 import Data.Functor
 import qualified Data.List as List
 import Data.Map (Map)
 import Data.Maybe
 import Data.Monoid
-import Data.Typeable (Typeable)
 
 import Debug.Trace (trace)
+import Language.Haskell.TH.Syntax (thenCmp) -- lexicographic combination of Ordering
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal
 import Agda.Syntax.Internal.Pattern
 import qualified Agda.Syntax.Abstract as A
+import Agda.Syntax.Position (Range)
 
 import Agda.TypeChecking.Monad.Base
 import Agda.TypeChecking.Free as Free
@@ -69,7 +66,6 @@
           Apply a : es0 -> lazyAbsApp b (unArg a) `applyE` es0
           _             -> __IMPOSSIBLE__
       MetaV x es' -> MetaV x (es' ++ es)
-      Shared p    -> Shared $ applyE p es
       Lit{}       -> __IMPOSSIBLE__
       Level{}     -> __IMPOSSIBLE__
       Pi _ _      -> __IMPOSSIBLE__
@@ -81,23 +77,24 @@
 --   returns its field @f@.
 canProject :: QName -> Term -> Maybe (Arg Term)
 canProject f v =
-  case ignoreSharing v of
+  case v of
     (Con (ConHead _ _ fs) _ vs) -> do
       i <- List.elemIndex f fs
-      headMaybe (drop i vs)
+      isApplyElim =<< headMaybe (drop i vs)
     _ -> Nothing
 
 -- | Eliminate a constructed term.
-conApp :: ConHead -> ConInfo -> Args -> Elims -> Term
+conApp :: ConHead -> ConInfo -> Elims -> Elims -> Term
 conApp ch                  ci args []             = Con ch ci args
-conApp ch                  ci args (Apply a : es) = conApp ch ci (args ++ [a]) es
+conApp ch                  ci args (a@Apply{} : es) = conApp ch ci (args ++ [a]) es
 conApp ch@(ConHead c _ fs) ci args (Proj o f : es) =
   let failure = flip trace __IMPOSSIBLE__ $
         "conApp: constructor " ++ show c ++
         " with fields " ++ show fs ++
         " projected by " ++ show f
+      isApply e = fromMaybe __IMPOSSIBLE__ $ isApplyElim e
       i = maybe failure id            $ List.elemIndex f fs
-      v = maybe failure argToDontCare $ headMaybe $ drop i args
+      v = maybe failure (argToDontCare . isApply)  $ headMaybe $ drop i args
   in  applyE v es
 
   -- -- Andreas, 2016-07-20 futile attempt to magically fix ProjOrigin
@@ -172,9 +169,6 @@
   applyE s [] = s
   applyE s _  = __IMPOSSIBLE__
 
-instance Apply a => Apply (Ptr a) where
-  applyE p xs = fmap (`applyE` xs) p
-
 -- @applyE@ does not make sense for telecopes, definitions, clauses etc.
 
 instance Subst Term a => Apply (Tele a) where
@@ -200,26 +194,14 @@
        , rewType    = applyNLPatSubst sub (rewType r)
        }
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} Apply [Occ.Occurrence] where
-#else
-instance Apply [Occ.Occurrence] where
-#endif
   apply occ args = List.drop (length args) occ
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} Apply [Polarity] where
-#else
-instance Apply [Polarity] where
-#endif
   apply pol args = List.drop (length args) pol
 
 -- | Make sure we only drop variable patterns.
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} Apply [NamedArg (Pattern' a)] where
-#else
-instance Apply [NamedArg (Pattern' a)] where
-#endif
   apply ps args = loop (length args) ps
     where
     loop 0 ps = ps
@@ -229,7 +211,6 @@
       in  case namedArg p of
             VarP{}  -> recurse
             DotP{}  -> __IMPOSSIBLE__
-            AbsurdP{} -> __IMPOSSIBLE__
             LitP{}  -> __IMPOSSIBLE__
             ConP{}  -> __IMPOSSIBLE__
             ProjP{} -> __IMPOSSIBLE__
@@ -272,7 +253,7 @@
               where
                 larg  = last args -- the record value
                 args' = [larg]
-                isVar0 = case ignoreSharing $ unArg larg of Var 0 [] -> True; _ -> False
+                isVar0 = case unArg larg of Var 0 [] -> True; _ -> False
 {-
     Function{ funClauses = cs, funCompiled = cc, funInv = inv
             , funProjection = Just p@Projection{ projIndex = n } }
@@ -287,13 +268,9 @@
           }
       where args' = [last args]  -- the record value
 -}
-    Datatype{ dataPars = np, dataSmallPars = sps, dataNonLinPars = nlps, dataClause = cl
-            {-, dataArgOccurrences = occ-} } ->
+    Datatype{ dataPars = np, dataClause = cl } ->
       d { dataPars = np - size args
-        , dataSmallPars  = apply sps args
-        , dataNonLinPars = apply nlps args
         , dataClause     = apply cl args
---        , dataArgOccurrences = List.drop (length args) occ
         }
     Record{ recPars = np, recClause = cl, recTel = tel
           {-, recArgOccurrences = occ-} } ->
@@ -340,11 +317,11 @@
         -- We then have to create a substitution from the old telescope to the
         -- new telescope that we can apply to dot patterns and the clause body.
         rhoP :: PatternSubstitution
-        rhoP = mkSub DotP n rps rargs
+        rhoP = mkSub dotP n rps rargs
         rho  = mkSub id   n rps rargs
 
         substP :: Nat -> Term -> [NamedArg DeBruijnPattern] -> [NamedArg DeBruijnPattern]
-        substP i v = subst i (DotP v)
+        substP i v = subst i (dotP v)
 
         -- Building the substitution from the old telescope to the new. The
         -- interesting case is when we have a variable pattern:
@@ -361,10 +338,9 @@
         mkSub _ _ [] [] = idS
         mkSub tm n (p : ps) (v : vs) =
           case namedArg p of
-            VarP (DBPatVar _ i) -> mkSub tm (n - 1) (substP i v' ps) vs `composeS` singletonS i (tm v')
+            VarP _ (DBPatVar _ i) -> mkSub tm (n - 1) (substP i v' ps) vs `composeS` singletonS i (tm v')
               where v' = raise (n - 1) v
             DotP{}  -> mkSub tm n ps vs
-            AbsurdP p' -> mkSub tm n (setNamedArg p p' : ps) (v : vs)
             ConP c _ ps' -> mkSub tm n (ps' ++ ps) (projections c v ++ vs)
             LitP{}  -> __IMPOSSIBLE__
             ProjP{} -> __IMPOSSIBLE__
@@ -383,9 +359,8 @@
         newTel n tel [] [] = tel
         newTel n tel (p : ps) (v : vs) =
           case namedArg p of
-            VarP (DBPatVar _ i) -> newTel (n - 1) (subTel (size tel - 1 - i) v tel) (substP i (raise (n - 1) v) ps) vs
+            VarP _ (DBPatVar _ i) -> newTel (n - 1) (subTel (size tel - 1 - i) v tel) (substP i (raise (n - 1) v) ps) vs
             DotP{}              -> newTel n tel ps vs
-            AbsurdP{}           -> __IMPOSSIBLE__
             ConP c _ ps'        -> newTel n tel (ps' ++ ps) (projections c v ++ vs)
             LitP{}              -> __IMPOSSIBLE__
             ProjP{}             -> __IMPOSSIBLE__
@@ -417,10 +392,10 @@
   applyE (WithArity n a) es   = WithArity n $ applyE a es
 
 instance Apply a => Apply (Case a) where
-  apply (Branches cop cs ls m) args =
-    Branches cop (apply cs args) (apply ls args) (apply m args)
-  applyE (Branches cop cs ls m) es =
-    Branches cop (applyE cs es) (applyE ls es) (applyE m es)
+  apply (Branches cop cs eta ls m lz) args =
+    Branches cop (apply cs args) (second (`apply` args) <$> eta) (apply ls args) (apply m args) lz
+  applyE (Branches cop cs eta ls m lz) es =
+    Branches cop (applyE cs es) (second (`applyE` es) <$> eta)(applyE ls es) (applyE m es) lz
 
 instance Apply FunctionInverse where
   apply NotInjective  args = NotInjective
@@ -440,11 +415,7 @@
   applyE (DDef c es')        es = DDef c $ es' ++ map (fmap DTerm) es
   applyE (DWithApp v ws es') es = DWithApp v ws $ es' ++ es
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} Apply t => Apply [t] where
-#else
-instance Apply t => Apply [t] where
-#endif
   apply  ts args = map (`apply` args) ts
   applyE ts es   = map (`applyE` es) ts
 
@@ -499,7 +470,6 @@
 piApply :: Type -> Args -> Type
 piApply t []                      = t
 piApply (El _ (Pi  _ b)) (a:args) = lazyAbsApp b (unArg a) `piApply` args
-piApply (El s (Shared p)) args    = piApply (El s $ derefPtr p) args
 piApply t args                    =
   trace ("piApply t = " ++ show t ++ "\n  args = " ++ show args) __IMPOSSIBLE__
 
@@ -532,19 +502,11 @@
   abstract tel (RewriteRule q gamma f ps rhs t) =
     RewriteRule q (abstract tel gamma) f ps rhs t
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} Abstract [Occ.Occurrence] where
-#else
-instance Abstract [Occ.Occurrence] where
-#endif
   abstract tel []  = []
   abstract tel occ = replicate (size tel) Mixed ++ occ -- TODO: check occurrence
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} Abstract [Polarity] where
-#else
-instance Abstract [Polarity] where
-#endif
   abstract tel []  = []
   abstract tel pol = replicate (size tel) Invariant ++ pol -- TODO: check polarity
 
@@ -581,10 +543,8 @@
           d' = d { funProjection = Just $ abstract tel p }
           tel1 = telFromList $ drop (size tel - 1) $ telToList tel
 
-    Datatype{ dataPars = np, dataSmallPars = sps, dataNonLinPars = nlps, dataClause = cl } ->
+    Datatype{ dataPars = np, dataClause = cl } ->
       d { dataPars       = np + size tel
-        , dataSmallPars  = abstract tel sps
-        , dataNonLinPars = abstract tel nlps
         , dataClause     = abstract tel cl
         }
     Record{ recPars = np, recClause = cl, recTel = tel' } ->
@@ -621,8 +581,9 @@
   abstract tel (WithArity n a) = WithArity n $ abstract tel a
 
 instance Abstract a => Abstract (Case a) where
-  abstract tel (Branches cop cs ls m) =
-    Branches cop (abstract tel cs) (abstract tel ls) (abstract tel m)
+  abstract tel (Branches cop cs eta ls m lz) =
+    Branches cop (abstract tel cs) (second (abstract tel) <$> eta)
+                 (abstract tel ls) (abstract tel m) lz
 
 telVars :: Int -> Telescope -> [Arg DeBruijnPattern]
 telVars m = map (fmap namedThing) . (namedTelVars m)
@@ -637,11 +598,7 @@
   abstract tel NotInjective  = NotInjective
   abstract tel (Inverse inv) = Inverse $ abstract tel inv
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPABLE #-} Abstract t => Abstract [t] where
-#else
-instance Abstract t => Abstract [t] where
-#endif
   abstract tel = map (abstract tel)
 
 instance Abstract t => Abstract (Maybe t) where
@@ -695,23 +652,21 @@
     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
+    Sort s      -> Sort $ applySubst rho s
     DontCare mv -> dontCare $ applySubst rho mv
 
-instance Subst t a => Subst t (Ptr a) where
-  applySubst rho = fmap (applySubst rho)
-
 instance Subst Term a => Subst Term (Type' a) where
   applySubst rho (El s t) = applySubst rho s `El` applySubst rho t
 
 instance Subst Term Sort where
   applySubst rho s = case s of
-    Type n     -> levelSort $ sub n
+    Type n     -> Type $ sub n
     Prop       -> Prop
     Inf        -> Inf
     SizeUniv   -> SizeUniv
-    DLub s1 s2 -> DLub (sub s1) (sub s2)
+    PiSort s1 s2 -> piSort (sub s1) (sub s2)
+    UnivSort s -> univSort $ sub s
+    MetaS x es -> MetaS x $ sub es
     where sub x = applySubst rho x
 
 instance Subst Term Level where
@@ -730,25 +685,25 @@
 instance Subst Term Name where
   applySubst rho = id
 
-#if __GLASGOW_HASKELL__ >= 710
 instance {-# OVERLAPPING #-} Subst Term String where
-#else
-instance Subst Term String where
-#endif
   applySubst rho = id
 
 instance Subst Term ConPatternInfo where
-  applySubst rho (ConPatternInfo mr mt) = ConPatternInfo mr $ applySubst rho mt
+  applySubst rho i = i{ conPType = applySubst rho $ conPType i }
 
 instance Subst Term Pattern where
   applySubst rho p = case p of
     ConP c mt ps -> ConP c (applySubst rho mt) $ applySubst rho ps
-    DotP t       -> DotP $ applySubst rho t
-    VarP s       -> p
-    AbsurdP p    -> AbsurdP $ applySubst rho p
+    DotP o t     -> DotP o $ applySubst rho t
+    VarP o s     -> p
     LitP l       -> p
     ProjP{}      -> p
 
+instance Subst Term A.ProblemEq where
+  applySubst rho (A.ProblemEq p v a) =
+    uncurry (A.ProblemEq p) $ applySubst rho (v,a)
+
+
 instance DeBruijn NLPat where
   deBruijnVar i = PVar i []
   deBruijnView p = case p of
@@ -828,7 +783,7 @@
 instance Subst Term 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)
+    ElimCmp ps fs a v e1 e2  -> ElimCmp ps fs (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)
@@ -838,18 +793,12 @@
     CheckSizeLtSat t         -> CheckSizeLtSat (rf t)
     FindInScope m b cands    -> FindInScope m b (rf cands)
     UnBlock{}                -> c
+    CheckFunDef{}            -> c
+    HasBiggerSort s          -> HasBiggerSort (rf s)
+    HasPTSRule s1 s2         -> HasPTSRule (rf s1) (rf s2)
     where
       rf x = applySubst rho x
 
-instance Subst Term ModuleParameters where
-  applySubst rho mp = mp { mpSubstitution = applySubst rho $ mpSubstitution mp }
-
-instance Subst Term A.NamedDotPattern where
-  applySubst rho (A.NamedDot x v a) = A.NamedDot x (applySubst rho v) (applySubst rho a)
-
-instance Subst Term A.StrippedDotPattern where
-  applySubst rho (A.StrippedDot e v a) = A.StrippedDot e (applySubst rho v) (applySubst rho a)
-
 instance Subst t a => Subst t (Elim' a) where
   applySubst rho e = case e of
     Apply v -> Apply $ applySubst rho v
@@ -860,13 +809,15 @@
   applySubst rho (NoAbs x a) = NoAbs x $ applySubst rho a
 
 instance Subst t a => Subst t (Arg a) where
-  applySubst rho = fmap (applySubst rho)
+  applySubst IdS arg = arg
+  applySubst rho arg = setFreeVariables unknownFreeVariables $ fmap (applySubst rho) arg
 
 instance Subst t a => Subst t (Named name a) where
   applySubst rho = fmap (applySubst rho)
 
 instance Subst t a => Subst t (Dom a) where
-  applySubst rho = fmap (applySubst rho)
+  applySubst IdS dom = dom
+  applySubst rho dom = setFreeVariables unknownFreeVariables $ fmap (applySubst rho) dom
 
 instance Subst t a => Subst t (Maybe a) where
   applySubst rho = fmap (applySubst rho)
@@ -904,9 +855,10 @@
     (applySubst rho b)
 
 instance DeBruijn DeBruijnPattern where
-  debruijnNamedVar n i  = VarP $ DBPatVar n i
-  deBruijnView (VarP x) = Just $ dbPatVarIndex x
-  deBruijnView _        = Nothing
+  debruijnNamedVar n i             = varP $ DBPatVar n i
+  -- deBruijnView returns Nothing, to prevent consS and the like
+  -- from dropping the names and origins when building a substitution.
+  deBruijnView _                   = Nothing
 
 fromPatternSubstitution :: PatternSubstitution -> Substitution
 fromPatternSubstitution = fmap patternToTerm
@@ -914,20 +866,42 @@
 applyPatSubst :: (Subst Term a) => PatternSubstitution -> a -> a
 applyPatSubst = applySubst . fromPatternSubstitution
 
+
+usePatOrigin :: PatOrigin -> Pattern' a -> Pattern' a
+usePatOrigin o p = case patternOrigin p of
+  Nothing         -> p
+  Just PatOSplit  -> p
+  Just PatOAbsurd -> p
+  Just _          -> case p of
+    (VarP _ x) -> VarP o x
+    (DotP _ u) -> DotP o u
+    (ConP c (ConPatternInfo (Just _) b l) ps)
+      -> ConP c (ConPatternInfo (Just o) b l) ps
+    ConP{}  -> __IMPOSSIBLE__
+    LitP{}  -> __IMPOSSIBLE__
+    ProjP{} -> __IMPOSSIBLE__
+
 instance Subst DeBruijnPattern DeBruijnPattern where
   applySubst IdS p = p
   applySubst rho p = case p of
-    VarP x       -> useName (dbPatVarName x) $ lookupS rho $ dbPatVarIndex x
-    DotP u       -> DotP $ applyPatSubst rho u
+    VarP o x     ->
+      usePatOrigin o $
+      useName (dbPatVarName x) $
+      lookupS rho $ dbPatVarIndex x
+    DotP o u     -> DotP o $ applyPatSubst rho u
     ConP c ci ps -> ConP c ci $ applySubst rho ps
-    AbsurdP p    -> AbsurdP $ applySubst rho p
     LitP x       -> p
     ProjP{}      -> p
     where
       useName :: PatVarName -> DeBruijnPattern -> DeBruijnPattern
-      useName n (VarP x) | isUnderscore (dbPatVarName x) = debruijnNamedVar n (dbPatVarIndex x)
+      useName n (VarP o x)
+        | isUnderscore (dbPatVarName x)
+        = VarP o $ x { dbPatVarName = n }
       useName _ x = x
 
+instance Subst Term Range where
+  applySubst _ = id
+
 ---------------------------------------------------------------------------
 -- * Projections
 ---------------------------------------------------------------------------
@@ -960,7 +934,7 @@
 
 type TelView = TelV Type
 data TelV a  = TelV { theTel :: Tele (Dom a), theCore :: a }
-  deriving (Typeable, Show, Functor)
+  deriving (Show, Functor)
 
 deriving instance (Subst t a, Eq  a) => Eq  (TelV a)
 deriving instance (Subst t a, Ord a) => Ord (TelV a)
@@ -974,7 +948,7 @@
 -- Takes off all (exposed ones) if @n < 0@.
 telView'UpTo :: Int -> Type -> TelView
 telView'UpTo 0 t = TelV EmptyTel t
-telView'UpTo n t = case ignoreSharing $ unEl t of
+telView'UpTo n t = case unEl t of
   Pi a b  -> absV a (absName b) $ telView'UpTo (n - 1) (absBody b)
   _       -> TelV EmptyTel t
   where
@@ -1007,7 +981,7 @@
 mkPi :: Dom (ArgName, Type) -> Type -> Type
 mkPi (Dom info (x, a)) b = el $ Pi (Dom info a) (mkAbs x b)
   where
-    el = El $ dLub (getSort a) (Abs x (getSort b)) -- dLub checks x freeIn
+    el = El $ piSort (getSort a) (Abs x (getSort b)) -- piSort checks x freeIn
 
 mkLam :: Arg ArgName -> Term -> Term
 mkLam a v = Lam (argInfo a) (Abs (unArg a) v)
@@ -1018,9 +992,7 @@
   telePi (ExtendTel u tel) t = el $ Pi u $ reAbs b
     where
       b  = (`telePi` t) <$> tel
-      s1 = getSort u
-      s2 = getSort <$> b
-      el = El $ dLub s1 s2
+      el = El $ piSort (getSort u) (getSort <$> b)
 
 -- | Uses free variable analysis to introduce 'NoAbs' bindings.
 telePi :: Telescope -> Type -> Type
@@ -1030,17 +1002,6 @@
 telePi_ :: Telescope -> Type -> Type
 telePi_ = telePi' id
 
-{- OLD
--- | Everything will be a pi.
-telePi_  EmptyTel        t = t
-telePi_ (ExtendTel u tel) t = el $ Pi u b
-  where
-    el = El (dLub s1 s2)
-    b  = fmap (flip telePi_ t) tel
-    s1 = getSort $ unDom u
-    s2 = fmap getSort b
--}
-
 -- | Abstract over a telescope in a term, producing lambdas.
 --   Dumb abstraction: Always produces 'Abs', never 'NoAbs'.
 --
@@ -1094,11 +1055,8 @@
 deriving instance Eq Level
 deriving instance Ord Level
 deriving instance Eq PlusLevel
-deriving instance Ord LevelAtom
 deriving instance Eq NotBlocked
-deriving instance Ord NotBlocked
 deriving instance Eq t => Eq (Blocked t)
-deriving instance Ord t => Ord (Blocked t)
 deriving instance Eq Candidate
 
 deriving instance (Subst t a, Eq a)  => Eq  (Tele a)
@@ -1117,6 +1075,9 @@
 instance Eq LevelAtom where
   (==) = (==) `on` unLevelAtom
 
+instance Ord LevelAtom where
+  compare = compare `on` unLevelAtom
+
 -- | Syntactic 'Type' equality, ignores sort annotations.
 instance Eq a => Eq (Type' a) where
   (==) = (==) `on` unEl
@@ -1136,16 +1097,10 @@
   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 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 a b    `compare` Var x y    = compare x a `thenCmp` compare b y -- sort de Bruijn indices down (#2765)
   Var{}      `compare` _          = LT
   _          `compare` Var{}      = GT
   Def a b    `compare` Def x y    = compare (a, b) (x, y)
@@ -1174,9 +1129,29 @@
   _          `compare` MetaV{}    = GT
   DontCare{} `compare` DontCare{} = EQ
 
+-- Andreas, 2017-10-04, issue #2775, ignore irrelevant arguments during with-abstraction.
+--
+-- For reasons beyond my comprehension, the following Eq instances are not employed
+-- by with-abstraction in TypeChecking.Abstract.isPrefixOf.
+-- Instead, I modified the general Eq instance for Arg to ignore the argument
+-- if irrelevant.
+
+-- -- | Ignore irrelevant arguments in equality check.
+-- --   Also ignore origin.
+-- instance {-# OVERLAPPING #-} Eq (Arg Term) where
+--   a@(Arg (ArgInfo h r _o) t) == a'@(Arg (ArgInfo h' r' _o') t') = trace ("Eq (Arg Term) on " ++ show a ++ " and " ++ show a') $
+--     h == h' && ((r == Irrelevant) || (r' == Irrelevant) || (t == t'))
+--     -- Andreas, 2017-10-04: According to Syntax.Common, equality on Arg ignores Relevance and Origin.
+
+-- instance {-# OVERLAPPING #-} Eq Args where
+--   us == vs = length us == length vs && and (zipWith (==) us vs)
+
+-- instance {-# OVERLAPPING #-} Eq Elims where
+--   us == vs = length us == length vs && and (zipWith (==) us vs)
+
 -- | Equality of binders relies on weakening
---   which is a specical case of renaming
---   which is a specical case of substitution.
+--   which is a special case of renaming
+--   which is a special case of substitution.
 instance (Subst t a, Eq a) => Eq (Abs a) where
   NoAbs _ a == NoAbs _ b = a == b
   Abs   _ a == Abs   _ b = a == b
@@ -1199,68 +1174,67 @@
   Proj{}   `compare` Apply{}  = GT
 
 ---------------------------------------------------------------------------
--- * Level stuff
+-- * Sort stuff
 ---------------------------------------------------------------------------
 
--- | The ``rule'', if Agda is considered as a functional
---   pure type system (pts).
---
---   TODO: This needs to be properly implemented, requiring
---   refactoring of Agda's handling of levels.
---   Without impredicativity or 'SizeUniv', Agda's pts rule is
---   just the least upper bound, which is total and commutative.
---   The handling of levels relies on this simplification.
-pts :: Sort -> Sort -> Sort
-pts = sLub
+-- | Get the next higher sort.
+univSort' :: Sort -> Maybe Sort
+univSort' (Type l) = Just $ Type $ levelSuc l
+univSort' s        = Nothing
 
-sLub :: Sort -> Sort -> Sort
-sLub s Prop = s
-sLub Prop s = s
-sLub Inf _ = Inf
-sLub _ Inf = Inf
-sLub SizeUniv s = s         -- one can freely quantify over sizes in any Set
-sLub _ SizeUniv = SizeUniv  -- but everything resulting in a size lives in the SizeUniv
-sLub (Type (Max as)) (Type (Max bs)) = Type $ levelMax (as ++ bs)
--- sLub (DLub a b) c = DLub (sLub a c) b -- no longer commutative!
-sLub (DLub a NoAbs{}) c = __IMPOSSIBLE__
-sLub (DLub a (Abs x b)) c = DLub a $ Abs x $ sLub b $ raise 1 c
-sLub a (DLub b c) = DLub (sLub a b) c
+univSort :: Sort -> Sort
+univSort s = fromMaybe (UnivSort s) $ univSort' s
 
--- | Dependent least upper bound, to assign a level to expressions
---   like @forall i -> Set i@.
---
---   @dLub s1 \i.s2 = \omega@ if @i@ appears in the rigid variables of @s2@.
-dLub :: Sort -> Abs Sort -> Sort
-dLub s1 (NoAbs _ s2) = sLub s1 s2
-dLub s1 b@(Abs _ s2) = case occurrence 0 s2 of
-  Flexible _    -> DLub s1 b
-  -- Andreas, 2017-01-18, issue #2408:
-  -- The sort of @.(a : A) → Set (f a)@ in context @f : .A → Level@
-  -- is @dLub Set λ a → Set (lsuc (f a))@, but @DLub@s are not serialized.
-  -- Alternatives:
-  -- 1. -- Irrelevantly -> sLub s1 (absApp b $ DontCare $ Sort Prop)
-  --    We cheat here by simplifying the sort to @Set (lsuc (f *))@
-  --    where * is a dummy value.  The rationale is that @f * = f a@ (irrelevance!)
-  --    and that if we already have a neutral level @f a@
-  --    it should not hurt to have @f *@ even if type @A@ is empty.
-  --    However: sorts are printed in error messages when sorts do not match.
-  --    Also, sorts with a dummy like Prop would be ill-typed.
-  -- 2. We keep the DLub, and serialize it.
-  --    That's clean and principled, even though DLubs make level solving harder.
-  Irrelevantly  -> DLub s1 b
-  NoOccurrence  -> sLub s1 (noabsApp __IMPOSSIBLE__ b)
---  Free.Unused   -> sLub s1 (absApp b __IMPOSSIBLE__) -- triggers Issue784
-  Free.Unused   -> DLub s1 b
-  StronglyRigid -> Inf
-  Unguarded     -> Inf
-  WeaklyRigid   -> Inf
+-- | Compute the sort of a function type from the sorts of its
+--   domain and codomain.
+funSort' :: Sort -> Sort -> Maybe Sort
+funSort' a b = case (a, b) of
+  (Inf           , _            ) -> Just Inf
+  (_             , Inf          ) -> Just Inf
+  (Type (Max as) , Type (Max bs)) -> Just $ Type $ levelMax $ as ++ bs
+  (SizeUniv      , b            ) -> Just b
+  (_             , SizeUniv     ) -> Just SizeUniv
+  (a             , b            ) -> Nothing
 
-lvlView :: Term -> Level
-lvlView v = case ignoreSharing v of
-  Level l       -> l
-  Sort (Type l) -> l
-  _             -> Max [Plus 0 $ UnreducedLevel v]
+funSort :: Sort -> Sort -> Sort
+funSort a b = fromMaybe (PiSort a (NoAbs underscore b)) $ funSort' a b
 
+-- | Compute the sort of a pi type from the sorts of its domain
+--   and codomain.
+piSort' :: Sort -> Abs Sort -> Maybe Sort
+piSort' a      (NoAbs _ b) = funSort' a b
+piSort' a bAbs@(Abs   _ b) = case occurrence 0 b of
+    NoOccurrence  -> funSort' a $ noabsApp {-'-} __IMPOSSIBLE__ bAbs
+    -- Andreas, 2017-01-18, issue #2408:
+    -- The sort of @.(a : A) → Set (f a)@ in context @f : .A → Level@
+    -- is @dLub Set λ a → Set (lsuc (f a))@, but @DLub@s are not serialized.
+    -- Alternatives:
+    -- 1. -- Irrelevantly -> sLub s1 (absApp b $ DontCare $ Sort Prop)
+    --    We cheat here by simplifying the sort to @Set (lsuc (f *))@
+    --    where * is a dummy value.  The rationale is that @f * = f a@ (irrelevance!)
+    --    and that if we already have a neutral level @f a@
+    --    it should not hurt to have @f *@ even if type @A@ is empty.
+    --    However: sorts are printed in error messages when sorts do not match.
+    --    Also, sorts with a dummy like Prop would be ill-typed.
+    -- 2. We keep the DLub, and serialize it.
+    --    That's clean and principled, even though DLubs make level solving harder.
+    -- Jesper, 2018-04-20: another alternative:
+    -- 3. Return @Inf@ as in the relevant case. This is conservative and might result
+    --    in more occurrences of @Setω@ than desired, but at least it doesn't pollute
+    --    the sort system with new 'exotic' sorts.
+    Irrelevantly  -> Just Inf
+    StronglyRigid -> Just Inf
+    Unguarded     -> Just Inf
+    WeaklyRigid   -> Just Inf
+    Flexible _    -> Nothing
+
+piSort :: Sort -> Abs Sort -> Sort
+piSort a b = fromMaybe (PiSort a b) $ piSort' a b
+
+---------------------------------------------------------------------------
+-- * Level stuff
+---------------------------------------------------------------------------
+
 levelMax :: [PlusLevel] -> Level
 levelMax as0 = Max $ ns ++ List.sort bs
   where
@@ -1285,7 +1259,7 @@
       UnreducedLevel v -> expandTm v
       MetaLevel{}      -> [Plus 0 l]
       where
-        expandTm v = case ignoreSharing v of
+        expandTm v = case v of
           Level (Max as)       -> as
           Sort (Type (Max as)) -> as
           _                    -> [Plus 0 l]
@@ -1301,29 +1275,6 @@
       where
         ns = [ m | Plus m a'  <- bs, a == a', m > n ]
 
-sortTm :: Sort -> Term
-sortTm (Type l) = Sort $ levelSort l
-sortTm s        = Sort s
-
-levelSort :: Level -> Sort
-levelSort (Max as)
-  | List.any (levelIs Inf     ) as = Inf
-  | List.any (levelIs SizeUniv) as = SizeUniv
-  where
-    levelIs s ClosedLevel{}     = False
-    levelIs s (Plus _ l)        = atomIs s l
-    atomIs s (NeutralLevel _ a) = tmIs s a
-    atomIs s (UnreducedLevel a) = tmIs s a
-    atomIs s MetaLevel{}        = False
-    atomIs s BlockedLevel{}     = False
-    tmIs s (Sort s')            = s == s'
-    tmIs s (Shared p)           = tmIs s $ derefPtr p
-    tmIs s _                    = False
-levelSort l =
-  case ignoreSharing $ levelTm l of
-    Sort s -> s
-    _      -> Type l
-
 levelTm :: Level -> Term
 levelTm l =
   case l of
@@ -1335,3 +1286,15 @@
 unLevelAtom (NeutralLevel _ v) = v
 unLevelAtom (UnreducedLevel v) = v
 unLevelAtom (BlockedLevel _ v) = v
+
+levelSucView :: Level -> Maybe Level
+levelSucView (Max []) = Nothing
+levelSucView (Max as) = Max <$> traverse atomPred as
+  where
+    atomPred :: PlusLevel -> Maybe PlusLevel
+    atomPred (ClosedLevel n)
+      | n > 0     = Just $ ClosedLevel (n-1)
+      | otherwise = Nothing
+    atomPred (Plus n l)
+      | n > 0     = Just $ Plus (n-1) l
+      | otherwise = Nothing
diff --git a/src/full/Agda/TypeChecking/Substitute/Class.hs b/src/full/Agda/TypeChecking/Substitute/Class.hs
--- a/src/full/Agda/TypeChecking/Substitute/Class.hs
+++ b/src/full/Agda/TypeChecking/Substitute/Class.hs
@@ -147,7 +147,7 @@
 dropS n (Strengthen _ 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 err)       = __IMPOSSIBLE__
+dropS n (EmptyS err)       = absurd err
 
 -- | @applySubst (ρ `composeS` σ) v == applySubst ρ (applySubst σ v)@
 composeS :: Subst a a => Substitution' a -> Substitution' a -> Substitution' a
@@ -271,6 +271,6 @@
 underLambdas :: Subst Term 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
+  loop n a v = case v of
     Lam h b -> Lam h $ underAbs (loop $ n-1) a b
     _       -> __IMPOSSIBLE__
diff --git a/src/full/Agda/TypeChecking/Substitute/DeBruijn.hs b/src/full/Agda/TypeChecking/Substitute/DeBruijn.hs
--- a/src/full/Agda/TypeChecking/Substitute/DeBruijn.hs
+++ b/src/full/Agda/TypeChecking/Substitute/DeBruijn.hs
@@ -24,7 +24,7 @@
 instance DeBruijn Term where
   deBruijnVar = var
   deBruijnView u =
-    case ignoreSharing u of
+    case u of
       Var i [] -> Just i
       Level l -> deBruijnView l
       _ -> Nothing
diff --git a/src/full/Agda/TypeChecking/SyntacticEquality.hs b/src/full/Agda/TypeChecking/SyntacticEquality.hs
--- a/src/full/Agda/TypeChecking/SyntacticEquality.hs
+++ b/src/full/Agda/TypeChecking/SyntacticEquality.hs
@@ -68,22 +68,6 @@
 (<**>) :: Applicative f => f (a -> b, a -> b) -> f (a,a) -> f (b,b)
 ff <**> xx = pure (uncurry (***)) <*> ff <*> xx
 
-{-
-updateSharedM2 :: Monad m =>  (Term -> Term -> m (Term, Term)) -> Term -> Term -> m (Term, Term)
-updateSharedM2 f v0@(Shared p) = do
-  v <- f (derefPtr p)
-  case derefPtr (setPtr v p) of
-    Var _ [] -> return v
-    _        -> compressPointerChain v0 `pseq` return v0
-updateSharedM2 f v = f v
-
-updateSharedTerm2 :: MonadTCM tcm => (Term -> Term -> tcm (Term, Term)) -> Term -> Term -> tcm (Term, Term)
-updateSharedTerm f v v' =
-  ifM (liftTCM $ asks envAllowDestructiveUpdate)
-      (updateSharedM2 f v v')
-      (f (ignoreSharing v) (ignoreSharing v'))
--}
-
 -- | Instantiate full as long as things are equal
 class SynEq a where
   synEq  :: a -> a -> SynEqM (a,a)
@@ -94,9 +78,7 @@
 instance SynEq Term where
   synEq v v' = do
     (v, v') <- lift $ instantiate' (v, v')
-    -- currently destroys sharing
-    -- TODO: preserve sharing!
-    case (ignoreSharing v, ignoreSharing v') of
+    case (v, v') of
       (Var   i vs, Var   i' vs') | i == i' -> Var i   <$$> synEq vs vs'
       (Con c ci vs,Con c' ci' vs') | c == c' -> Con c (bestConInfo ci ci') <$$> synEq vs vs'
       (Def   f vs, Def   f' vs') | f == f' -> Def f   <$$> synEq vs vs'
@@ -104,13 +86,11 @@
       (Lit   l   , Lit   l'    ) | l == l' -> pure2 $ v
       (Lam   h b , Lam   h' b' ) | h == h' -> Lam h   <$$> synEq b b'
       (Level l   , Level l'    )           -> levelTm <$$> synEq l l'
-      (Sort  s   , Sort  s'    )           -> sortTm  <$$> synEq s s'
+      (Sort  s   , Sort  s'    )           -> Sort    <$$> synEq s s'
       (Pi    a b , Pi    a' b' )           -> Pi      <$$> synEq a a' <**> synEq' b b'
       (DontCare _, DontCare _  )           -> pure (v, v')
          -- Irrelevant things are syntactically equal. ALT:
          -- DontCare <$$> synEq v v'
-      (Shared{}  , _           )           -> __IMPOSSIBLE__
-      (_         , Shared{}    )           -> __IMPOSSIBLE__
       _                                    -> inequal (v, v')
 
 instance SynEq Level where
@@ -146,10 +126,13 @@
   synEq s s' = do
     (s, s') <- lift $ instantiate' (s, s')
     case (s, s') of
-      (Type l  , Type l'   ) -> levelSort <$$> synEq l l'
-      (DLub a b, DLub a' b') -> dLub <$$> synEq a a' <**> synEq' b b'
+      (Type l  , Type l'   ) -> Type <$$> synEq l l'
+      (PiSort a b, PiSort a' b') -> piSort <$$> synEq a a' <**> synEq' b b'
+      (UnivSort a, UnivSort a') -> univSort <$$> synEq a a'
+      (SizeUniv, SizeUniv  ) -> pure2 s
       (Prop    , Prop      ) -> pure2 s
       (Inf     , Inf       ) -> pure2 s
+      (MetaS x es , MetaS x' es') | x == x' -> MetaS x <$$> synEq es es'
       _ -> inequal (s, s')
 
 -- | Syntactic equality ignores sorts.
@@ -193,6 +176,6 @@
   synEq (Dom ai a) (Dom ai' a') = Dom <$$> synEq ai ai' <**> synEq a a'
 
 instance SynEq ArgInfo where
-  synEq ai@(ArgInfo h r o) ai'@(ArgInfo h' r' o')
+  synEq ai@(ArgInfo h r o _) ai'@(ArgInfo h' r' o' _)
     | h == h', r == r' = pure2 ai
     | otherwise        = inequal (ai, ai')
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
@@ -77,13 +77,19 @@
 
 teleArgs :: (DeBruijn a) => Telescope -> [Arg a]
 teleArgs tel =
-  [ Arg info (debruijnNamedVar n i)
+  [ Arg info (deBruijnVar i)
   | (i, Dom info (n,_)) <- zip (downFrom $ size l) l ]
   where l = telToList tel
 
+withNamedArgsFromTel :: [a] -> Telescope -> [NamedArg a]
+xs `withNamedArgsFromTel` tel =
+  [ Arg info (Named (Just $ Ranged noRange $ argNameToString name) x)
+  | (x, Dom info (name,_)) <- zip xs l ]
+  where l = telToList tel
+
 teleNamedArgs :: (DeBruijn a) => Telescope -> [NamedArg a]
 teleNamedArgs tel =
-  [ Arg info (Named (Just $ Ranged noRange $ argNameToString name) (debruijnNamedVar name i))
+  [ Arg info (Named (Just $ Ranged noRange $ argNameToString name) (deBruijnVar i))
   | (i, Dom info (name,_)) <- zip (downFrom $ size l) l ]
   where l = telToList tel
 
@@ -99,6 +105,18 @@
   l  = telToList tel
   l0 = telToList tel0
 
+-- | Split the telescope at the specified position.
+splitTelescopeAt :: Int -> Telescope -> (Telescope,Telescope)
+splitTelescopeAt n tel
+  | n <= 0    = (EmptyTel, tel)
+  | otherwise = splitTelescopeAt' n tel
+    where
+      splitTelescopeAt' _ EmptyTel          = (EmptyTel,EmptyTel)
+      splitTelescopeAt' 1 (ExtendTel a tel) = (ExtendTel a (tel $> EmptyTel), absBody tel)
+      splitTelescopeAt' m (ExtendTel a tel) = (ExtendTel a (tel $> tel'), tel'')
+        where
+          (tel', tel'') = splitTelescopeAt (m - 1) $ absBody tel
+
 -- | Permute telescope: permutes or drops the types in the telescope according
 --   to the given permutation. Assumes that the permutation preserves the
 --   dependencies in the telescope.
@@ -242,7 +260,7 @@
     rho   = reverseP perm  -- works on de Bruijn levels
 
     u1    = renameP __IMPOSSIBLE__ perm u -- Γ' ⊢ u1 : A'
-    us    = map (\i -> fromMaybe (DotP u1) (deBruijnVar <$> List.findIndex (i ==) is)) [ 0 .. n-1 ]
+    us    = map (\i -> fromMaybe (dotP u1) (deBruijnVar <$> List.findIndex (i ==) is)) [ 0 .. n-1 ]
     sigma = us ++# raiseS (n-1)
 
     ts1   = permute rho $ applyPatSubst sigma ts0
@@ -263,8 +281,9 @@
                     splitExactlyAt k $ telToList gamma
 
     cpi         = ConPatternInfo
-      { conPRecord = Just ConOSystem
+      { conPRecord = Just PatOSystem
       , conPType   = Just $ snd <$> argFromDom a
+      , conPLazy   = True
       }
     cargs       = map (setOrigin Inserted) $ teleNamedArgs delta
     cdelta      = ConP c cpi cargs                    -- Γ₁Δ ⊢ c Δ : D pars
@@ -292,7 +311,7 @@
 telViewUpTo' 0 p t = return $ TelV EmptyTel t
 telViewUpTo' n p t = do
   t <- reduce t
-  case ignoreSharing $ unEl t of
+  case unEl t of
     Pi a b | p a -> absV a (absName b) <$> telViewUpTo' (n - 1) p (absBody b)
     _            -> return $ TelV EmptyTel t
   where
@@ -308,7 +327,7 @@
 ifPi :: MonadTCM tcm => Term -> (Dom Type -> Abs Type -> tcm a) -> (Term -> tcm a) -> tcm a
 ifPi t yes no = do
   t <- liftTCM $ reduce t
-  case ignoreSharing t of
+  case t of
     Pi a b -> yes a b
     _      -> no t
 
@@ -360,8 +379,8 @@
 getOutputTypeName :: Type -> TCM OutputTypeName
 getOutputTypeName t = do
   TelV tel t' <- telView t
-  ifBlocked (unEl t') (\ _ _ -> return OutputTypeNameNotYetKnown) $ \ v ->
-    case ignoreSharing v of
+  ifBlocked (unEl t') (\ _ _ -> return OutputTypeNameNotYetKnown) $ \ _ v ->
+    case v of
       -- Possible base types:
       Def n _  -> return $ OutputTypeName n
       Sort{}   -> return NoOutputTypeName
@@ -373,7 +392,6 @@
       Level{}  -> __IMPOSSIBLE__
       MetaV{}  -> __IMPOSSIBLE__
       Pi{}     -> __IMPOSSIBLE__
-      Shared{} -> __IMPOSSIBLE__
       DontCare{} -> __IMPOSSIBLE__
 
 addTypedInstance :: QName -> Type -> TCM ()
diff --git a/src/full/Agda/TypeChecking/Unquote.hs b/src/full/Agda/TypeChecking/Unquote.hs
--- a/src/full/Agda/TypeChecking/Unquote.hs
+++ b/src/full/Agda/TypeChecking/Unquote.hs
@@ -2,19 +2,20 @@
 
 module Agda.TypeChecking.Unquote where
 
-import Control.Arrow ((&&&), (***), first, second)
-import Control.Applicative
-import Control.Monad.State (StateT(..), evalStateT, get, gets, put, modify)
-import Control.Monad.Reader (ReaderT(..), ask, asks)
-import Control.Monad.Writer (WriterT(..), execWriterT, runWriterT, tell)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ((<>))
+#endif
+
+import Control.Arrow (first, second)
+import Control.Monad.State
+import Control.Monad.Reader
+import Control.Monad.Writer hiding ((<>))
 import Control.Monad.Trans (lift)
-import Control.Monad
 
 import Data.Char
 import Data.Maybe (fromMaybe)
 import Data.Traversable (traverse)
-import Data.Map (Map)
-import qualified Data.Map as Map
+import Data.Word
 
 import Agda.Syntax.Common
 import Agda.Syntax.Internal as I
@@ -23,23 +24,16 @@
 import Agda.Syntax.Position
 import Agda.Syntax.Fixity
 import Agda.Syntax.Info
-import Agda.Syntax.Translation.InternalToAbstract
 import Agda.Syntax.Translation.ReflectedToAbstract
 
-import Agda.TypeChecking.CompiledClause
-import Agda.TypeChecking.DropArgs
-import Agda.TypeChecking.Free
-import Agda.TypeChecking.Level
 import Agda.TypeChecking.Monad
 import Agda.TypeChecking.Monad.Builtin
 import Agda.TypeChecking.Pretty
 import Agda.TypeChecking.Reduce
-import Agda.TypeChecking.Reduce.Monad
 import Agda.TypeChecking.Substitute
 import Agda.TypeChecking.Telescope
 import Agda.TypeChecking.Quote
 import Agda.TypeChecking.Conversion
-import Agda.TypeChecking.MetaVars
 import Agda.TypeChecking.EtaContract
 import Agda.TypeChecking.Primitive
 
@@ -55,14 +49,10 @@
 import Agda.Utils.Either
 import Agda.Utils.FileName
 import Agda.Utils.Lens
-import Agda.Utils.Maybe
-import Agda.Utils.Maybe.Strict (toLazy)
 import Agda.Utils.Monad
-import Agda.Utils.Permutation ( Permutation(Perm), compactP )
 import Agda.Utils.Pretty (prettyShow)
 import Agda.Utils.String ( Str(Str), unStr )
-import Agda.Utils.VarSet (VarSet)
-import qualified Agda.Utils.VarSet as Set
+import qualified Agda.Interaction.Options.Lenses as Lens
 
 #include "undefined.h"
 import Agda.Utils.Impossible
@@ -124,21 +114,21 @@
 
 isCon :: ConHead -> TCM Term -> UnquoteM Bool
 isCon con tm = do t <- liftU tm
-                  case ignoreSharing t of
+                  case t of
                     Con con' _ _ -> return (con == con')
                     _ -> return False
 
 isDef :: QName -> TCM Term -> UnquoteM Bool
 isDef f tm = do
   t <- liftU (etaContract =<< normalise =<< tm)
-  case ignoreSharing t of
+  case t of
     Def g _ -> return (f == g)
     _       -> return False
 
 reduceQuotedTerm :: Term -> UnquoteM Term
 reduceQuotedTerm t = do
   b <- liftU $ ifBlocked t (\ m _ -> pure $ Left  m)
-                           (\ t   -> pure $ Right t)
+                           (\ _ t -> pure $ Right t)
   case b of
     Left m  -> do s <- gets snd; throwError $ BlockedOnMeta s m
     Right t -> return t
@@ -184,13 +174,18 @@
               isAlpha c -> [toLower c]
     _        -> "_"
 
+-- TODO: reflect Quantity
+instance Unquote Modality where
+  unquote t = (`Modality` defaultQuantity) <$> unquote t
+
 instance Unquote ArgInfo where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
-      Con c _ [h,r] -> do
+    case t of
+      Con c _ es | Just [h,r] <- allApplyElims es -> do
         choice
-          [(c `isCon` primArgArgInfo, ArgInfo <$> unquoteN h <*> unquoteN r <*> pure Reflected)]
+          [(c `isCon` primArgArgInfo,
+              ArgInfo <$> unquoteN h <*> unquoteN r <*> pure Reflected <*> pure unknownFreeVariables)]
           __IMPOSSIBLE__
       Con c _ _ -> __IMPOSSIBLE__
       _ -> throwError $ NonCanonical "arg info" t
@@ -198,8 +193,8 @@
 instance Unquote a => Unquote (Arg a) where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
-      Con c _ [info,x] -> do
+    case t of
+      Con c _ es | Just [info,x] <- allApplyElims es -> do
         choice
           [(c `isCon` primArgArg, Arg <$> unquoteN info <*> unquoteN x)]
           __IMPOSSIBLE__
@@ -214,7 +209,7 @@
 instance Unquote Bool where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Con c _ [] ->
         choice [ (c `isCon` primTrue,  pure True)
                , (c `isCon` primFalse, pure False) ]
@@ -224,28 +219,35 @@
 instance Unquote Integer where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Lit (LitNat _ n) -> return n
       _ -> throwError $ NonCanonical "integer" t
 
+instance Unquote Word64 where
+  unquote t = do
+    t <- reduceQuotedTerm t
+    case t of
+      Lit (LitWord64 _ n) -> return n
+      _ -> throwError $ NonCanonical "word64" t
+
 instance Unquote Double where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Lit (LitFloat _ x) -> return x
       _ -> throwError $ NonCanonical "float" t
 
 instance Unquote Char where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Lit (LitChar _ x) -> return x
       _ -> throwError $ NonCanonical "char" t
 
 instance Unquote Str where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Lit (LitString _ x) -> return (Str x)
       _ -> throwError $ NonCanonical "string" t
 
@@ -265,8 +267,8 @@
 instance Unquote ErrorPart where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
-      Con c _ [x] ->
+    case t of
+      Con c _ es | Just [x] <- allApplyElims es ->
         choice [ (c `isCon` primAgdaErrorPartString, StrPart  <$> unquoteNString x)
                , (c `isCon` primAgdaErrorPartTerm,   TermPart <$> unquoteN x)
                , (c `isCon` primAgdaErrorPartName,   NamePart <$> unquoteN x) ]
@@ -276,8 +278,8 @@
 instance Unquote a => Unquote [a] where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
-      Con c _ [x,xs] -> do
+    case t of
+      Con c _ es | Just [x,xs] <- allApplyElims es -> do
         choice
           [(c `isCon` primCons, (:) <$> unquoteN x <*> unquoteN xs)]
           __IMPOSSIBLE__
@@ -291,7 +293,7 @@
 instance Unquote Hiding where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Con c _ [] -> do
         choice
           [(c `isCon` primHidden,  return Hidden)
@@ -304,7 +306,7 @@
 instance Unquote Relevance where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Con c _ [] -> do
         choice
           [(c `isCon` primRelevant,   return Relevant)
@@ -316,15 +318,15 @@
 instance Unquote QName where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Lit (LitQName _ x) -> return x
       _                  -> throwError $ NonCanonical "name" t
 
 instance Unquote a => Unquote (R.Abs a) where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
-      Con c _ [x,y] -> do
+    case t of
+      Con c _ es | Just [x,y] <- allApplyElims es -> do
         choice
           [(c `isCon` primAbsAbs, R.Abs <$> (hint <$> unquoteNString x) <*> unquoteN y)]
           __IMPOSSIBLE__
@@ -340,7 +342,7 @@
 instance Unquote MetaId where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Lit (LitMeta r f x) -> liftU $ do
         live <- (f ==) <$> getCurrentPath
         unless live $ do
@@ -357,12 +359,12 @@
 instance Unquote R.Sort where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Con c _ [] -> do
         choice
           [(c `isCon` primAgdaSortUnsupported, return R.UnknownS)]
           __IMPOSSIBLE__
-      Con c _ [u] -> do
+      Con c _ es | Just [u] <- allApplyElims es -> do
         choice
           [(c `isCon` primAgdaSortSet, R.SetS <$> unquoteN u)
           ,(c `isCon` primAgdaSortLit, R.LitS <$> unquoteN u)]
@@ -376,8 +378,8 @@
     let litMeta r x = do
           file <- liftU getCurrentPath
           return $ LitMeta r file x
-    case ignoreSharing t of
-      Con c _ [x] ->
+    case t of
+      Con c _ es | Just [x] <- allApplyElims es ->
         choice
           [ (c `isCon` primAgdaLitNat,    LitNat    noRange <$> unquoteN x)
           , (c `isCon` primAgdaLitFloat,  LitFloat  noRange <$> unquoteN x)
@@ -392,19 +394,19 @@
 instance Unquote R.Term where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Con c _ [] ->
         choice
           [ (c `isCon` primAgdaTermUnsupported, return R.Unknown) ]
           __IMPOSSIBLE__
 
-      Con c _ [x] -> do
+      Con c _ es | Just [x] <- allApplyElims es -> do
         choice
           [ (c `isCon` primAgdaTermSort,      R.Sort      <$> unquoteN x)
           , (c `isCon` primAgdaTermLit,       R.Lit       <$> unquoteN x) ]
           __IMPOSSIBLE__
 
-      Con c _ [x, y] ->
+      Con c _ es | Just [x, y] <- allApplyElims es ->
         choice
           [ (c `isCon` primAgdaTermVar,     R.Var     <$> (fromInteger <$> unquoteN x) <*> unquoteN y)
           , (c `isCon` primAgdaTermCon,     R.Con     <$> (ensureCon =<< unquoteN x) <*> unquoteN y)
@@ -430,19 +432,19 @@
 instance Unquote R.Pattern where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
+    case t of
       Con c _ [] -> do
         choice
           [ (c `isCon` primAgdaPatAbsurd, return R.AbsurdP)
           , (c `isCon` primAgdaPatDot,    return R.DotP)
           ] __IMPOSSIBLE__
-      Con c _ [x] -> do
+      Con c _ es | Just [x] <- allApplyElims es -> do
         choice
           [ (c `isCon` primAgdaPatVar,  R.VarP  <$> unquoteNString x)
           , (c `isCon` primAgdaPatProj, R.ProjP <$> unquoteN x)
           , (c `isCon` primAgdaPatLit,  R.LitP  <$> unquoteN x) ]
           __IMPOSSIBLE__
-      Con c _ [x, y] -> do
+      Con c _ es | Just [x, y] <- allApplyElims es -> do
         choice
           [ (c `isCon` primAgdaPatCon, R.ConP <$> unquoteN x <*> unquoteN y) ]
           __IMPOSSIBLE__
@@ -452,12 +454,12 @@
 instance Unquote R.Clause where
   unquote t = do
     t <- reduceQuotedTerm t
-    case ignoreSharing t of
-      Con c _ [x] -> do
+    case t of
+      Con c _ es | Just [x] <- allApplyElims es -> do
         choice
           [ (c `isCon` primAgdaClauseAbsurd, R.AbsurdClause <$> unquoteN x) ]
           __IMPOSSIBLE__
-      Con c _ [x, y] -> do
+      Con c _ es | Just [x, y] <- allApplyElims es -> do
         choice
           [ (c `isCon` primAgdaClauseClause, R.Clause <$> unquoteN x <*> unquoteN y) ]
           __IMPOSSIBLE__
@@ -481,7 +483,7 @@
   liftU $ reportSDoc "tc.unquote.eval" 90 $ text "evalTCM" <+> prettyTCM v
   let failEval = throwError $ NonCanonical "type checking computation" v
 
-  case ignoreSharing v of
+  case v of
     I.Def f [] ->
       choice [ (f `isDef` primAgdaTCMGetContext, tcGetContext)
              , (f `isDef` primAgdaTCMCommit,     tcCommit) ]
@@ -499,6 +501,7 @@
       choice [ (f `isDef` primAgdaTCMUnify,      tcFun2 tcUnify      u v)
              , (f `isDef` primAgdaTCMCheckType,  tcFun2 tcCheckType  u v)
              , (f `isDef` primAgdaTCMDeclareDef, uqFun2 tcDeclareDef u v)
+             , (f `isDef` primAgdaTCMDeclarePostulate, uqFun2 tcDeclarePostulate u v)
              , (f `isDef` primAgdaTCMDefineFun,  uqFun2 tcDefineFun  u v) ]
              failEval
     I.Def f [l, a, u] ->
@@ -644,7 +647,7 @@
     extendCxt :: Arg R.Type -> UnquoteM a -> UnquoteM a
     extendCxt a m = do
       a <- liftU $ traverse (isType_ <=< toAbstract_) a
-      liftU1 (addContext' (domFromArg a :: Dom Type)) m
+      liftU1 (addContext (domFromArg a :: Dom Type)) m
 
     tcExtendContext :: Term -> Term -> UnquoteM Term
     tcExtendContext a m = do
@@ -654,11 +657,11 @@
     tcInContext :: Term -> Term -> UnquoteM Term
     tcInContext c m = do
       c <- unquote c
-      liftU1 inTopContext $ go c m
+      liftU1 inTopContext $ go c (evalTCM m)
       where
-        go :: [Arg R.Type] -> Term -> UnquoteM Term
-        go []       m = evalTCM m
-        go (a : as) m = extendCxt a $ go as m
+        go :: [Arg R.Type] -> UnquoteM Term -> UnquoteM Term
+        go []       m = m
+        go (a : as) m = go as (extendCxt a m)
 
     constInfo :: QName -> TCM Definition
     constInfo x = either err return =<< getConstInfo' x
@@ -697,6 +700,28 @@
         alreadyDefined <- isRight <$> getConstInfo' x
         when alreadyDefined $ genericError $ "Multiple declarations of " ++ prettyShow x
         addConstant x $ defaultDefn i x a emptyFunction
+        when (isInstance i) $ addTypedInstance x a
+        primUnitUnit
+
+    tcDeclarePostulate :: Arg QName -> R.Type -> UnquoteM Term
+    tcDeclarePostulate (Arg i x) a = inOriginalContext $ do
+      clo <- commandLineOptions
+      when (Lens.getSafeMode clo) $ liftU $ typeError . GenericDocError =<<
+        text "Cannot postulate '" <+> prettyTCM x <+> text ":" <+> prettyTCM a <+> text "' with safe flag"
+      setDirty
+      let r = getRelevance i
+      when (hidden i) $ liftU $ typeError . GenericDocError =<<
+        text "Cannot declare hidden function" <+> prettyTCM x
+      tell [x]
+      liftU $ do
+        reportSDoc "tc.unquote.decl" 10 $ sep
+          [ text "declare Postulate" <+> prettyTCM x <+> text ":"
+          , nest 2 $ prettyTCM a
+          ]
+        a <- isType_ =<< toAbstract_ a
+        alreadyDefined <- isRight <$> getConstInfo' x
+        when alreadyDefined $ genericError $ "Multiple declarations of " ++ prettyShow x
+        addConstant x $ defaultDefn i x a Axiom
         when (isInstance i) $ addTypedInstance x a
         primUnitUnit
 
diff --git a/src/full/Agda/TypeChecking/Warnings.hs b/src/full/Agda/TypeChecking/Warnings.hs
--- a/src/full/Agda/TypeChecking/Warnings.hs
+++ b/src/full/Agda/TypeChecking/Warnings.hs
@@ -2,27 +2,27 @@
 
 module Agda.TypeChecking.Warnings where
 
+import qualified Data.Set as Set
 import qualified Data.List as List
+import Data.Maybe ( catMaybes )
+import Control.Monad (guard, forM_)
 
 import Agda.TypeChecking.Monad.Base
+import Agda.TypeChecking.Monad.Caching
 import {-# SOURCE #-} Agda.TypeChecking.Errors
 import {-# SOURCE #-} Agda.TypeChecking.Pretty
 
 import Agda.Syntax.Position
 import Agda.Syntax.Parser
+import Agda.Syntax.Concrete.Definitions (DeclarationWarning(..))
 
 import Agda.Interaction.Options
+import Agda.Interaction.Options.Warnings
 
 import Agda.Utils.Lens
 import qualified Agda.Utils.Pretty as P
 import Agda.Utils.Except
 
-#if __GLASGOW_HASKELL__ <= 708
-import Control.Applicative ((<$>))
-#endif
-
-
-
 {-# SPECIALIZE genericWarning :: P.Doc -> TCM () #-}
 genericWarning :: MonadTCM tcm => P.Doc -> tcm ()
 genericWarning = warning . GenericWarning
@@ -36,27 +36,43 @@
 warning_ w = do
   r <- view eRange
   c <- view eCall
+  b <- liftTCM areWeCaching
   -- NicifierIssues print their own error locations in their list of
   -- issues (but we might need to keep the overall range `r` for
   -- comparing ranges)
   let r' = case w of { NicifierIssue{} -> NoRange ; _ -> r }
   p <- liftTCM $ sayWhen r' c $ prettyWarning w
-  liftTCM $ return $ TCWarning r w p
+  liftTCM $ return $ TCWarning r w p b
 
+-- | @applyWarningMode@ filters out the warnings the user has not requested
+-- Users are not allowed to ignore non-fatal errors.
+
+applyWarningMode :: WarningMode -> Warning -> Maybe Warning
+applyWarningMode wm w = case classifyWarning w of
+  ErrorWarnings -> Just w
+  AllWarnings   -> w <$ guard (Set.member (warningName w) $ wm ^. warningSet)
+
+{-# SPECIALIZE warnings :: [Warning] -> TCM () #-}
+warnings :: MonadTCM tcm => [Warning] -> tcm ()
+warnings ws = do
+
+  wmode <- optWarningMode <$> pragmaOptions
+
+  let add w tcwarn tcwarns
+        | onlyOnce w && elem tcwarn tcwarns = tcwarns -- Eq on TCWarning only checks head constructor
+        | otherwise                         = tcwarn : tcwarns
+
+  forM_ (catMaybes $ applyWarningMode wmode <$> ws) $ \ w' -> do
+    tcwarn <- warning_ w'
+    if wmode ^. warn2Error
+    then typeError $ NonFatalErrors [tcwarn]
+    else stTCWarnings %= add w' tcwarn
+
 {-# SPECIALIZE warning :: Warning -> TCM () #-}
 warning :: MonadTCM tcm => Warning -> tcm ()
-warning w = do
-  tcwarn <- warning_ w
-  wmode <- optWarningMode <$> pragmaOptions
-  case wmode of
-    IgnoreAllWarnings -> case classifyWarning w of
-                           -- not allowed to ignore non-fatal errors
-                           ErrorWarnings -> raiseWarning tcwarn
-                           AllWarnings -> return ()
-    TurnIntoErrors -> typeError $ NonFatalErrors [tcwarn]
-    LeaveAlone -> raiseWarning tcwarn
-  where raiseWarning tcw = stTCWarnings %= (tcw :)
+warning = warnings . pure
 
+
 -- | Classifying warnings: some are benign, others are (non-fatal) errors
 
 data WhichWarnings =
@@ -83,6 +99,8 @@
   GenericWarning{}           -> AllWarnings
   DeprecationWarning{}       -> AllWarnings
   NicifierIssue{}            -> AllWarnings
+  InversionDepthReached{}    -> AllWarnings
+  UserWarning{}              -> AllWarnings
   TerminationIssue{}         -> ErrorWarnings
   CoverageIssue{}            -> ErrorWarnings
   CoverageNoExactSplit{}     -> ErrorWarnings
@@ -99,6 +117,15 @@
   SafeFlagNoPositivityCheck  -> ErrorWarnings
   SafeFlagPolarity           -> ErrorWarnings
   ParseWarning{}             -> ErrorWarnings
+
+-- | Should we only emit a single warning with this constructor.
+onlyOnce :: Warning -> Bool
+onlyOnce InversionDepthReached{} = True
+onlyOnce _ = False
+
+onlyShowIfUnsolved :: Warning -> Bool
+onlyShowIfUnsolved InversionDepthReached{} = True
+onlyShowIfUnsolved _ = False
 
 classifyWarnings :: [TCWarning] -> ([TCWarning], [TCWarning])
 classifyWarnings = List.partition $ (< AllWarnings) . classifyWarning . tcWarning
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
@@ -15,9 +15,11 @@
 import Data.Traversable (traverse)
 
 import Agda.Syntax.Common
+import Agda.Syntax.Concrete.Pattern (IsWithP(..))
 import Agda.Syntax.Internal as I
 import Agda.Syntax.Internal.Pattern
 import qualified Agda.Syntax.Abstract as A
+import Agda.Syntax.Abstract.Pattern as A
 import Agda.Syntax.Abstract.Views
 import Agda.Syntax.Info
 import Agda.Syntax.Position
@@ -38,12 +40,13 @@
 
 import Agda.TypeChecking.Abstract
 import Agda.TypeChecking.Rules.LHS.Implicit
-import Agda.TypeChecking.Rules.LHS (isFlexiblePattern)
+import Agda.TypeChecking.Rules.LHS.Problem (ProblemEq(..))
 
 import Agda.Utils.Functor
 import Agda.Utils.List
 import Agda.Utils.Maybe
 import Agda.Utils.Monad
+import Agda.Utils.NonemptyList
 import Agda.Utils.Null (empty)
 import Agda.Utils.Permutation
 import Agda.Utils.Pretty (prettyShow)
@@ -194,7 +197,6 @@
   (v, OtherType a) -> [v]
   (prf, eqt@(EqualityType s _eq _pars _t v _v')) -> [unArg v, prf]
 
-
 -- | Compute the clauses for the with-function given the original patterns.
 buildWithFunction
   :: [Name]               -- ^ Names of the module parameters of the parent function.
@@ -213,78 +215,81 @@
 buildWithFunction cxtNames f aux t delta qs npars withSub perm n1 n cs = mapM buildWithClause cs
   where
     -- Nested with-functions will iterate this function once for each parent clause.
-    buildWithClause (A.Clause (A.SpineLHS i _ ps wps) inheritedDots inhStrippedDots rhs wh catchall) = do
-      let (wps0, wps1) = splitAt n wps
-          ps0          = map defaultNamedArg wps0
-      reportSDoc "tc.with" 50 $ text "inheritedDots:" <+> vcat [ prettyTCM x <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a
-                                                               | A.NamedDot x v a <- inheritedDots ]
-      rhs <- buildRHS rhs
-      (namedDots, strippedDots, ps') <- stripWithClausePatterns cxtNames f aux t delta qs npars perm ps
-      reportSDoc "tc.with" 50 $ hang (text "strippedDots:") 2 $
-                                  vcat [ prettyTCM e <+> text "==" <+> prettyTCM v <+> (text ":" <+> prettyTCM t)
-                                       | A.StrippedDot e v t <- strippedDots ]
+    buildWithClause (A.Clause (A.SpineLHS i _ allPs) inheritedPats rhs wh catchall) = do
+      let (ps, wps)    = splitOffTrailingWithPatterns allPs
+          (wps0, wps1) = splitAt n wps
+          ps0          = map (updateNamedArg fromWithP) wps0
+            where
+            fromWithP (A.WithP _ p) = p
+            fromWithP _ = __IMPOSSIBLE__
+      reportSDoc "tc.with" 50 $ text "inheritedPats:" <+> vcat [ prettyA p <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a
+                                                               | A.ProblemEq p v a <- inheritedPats ]
+      (strippedPats, ps') <- stripWithClausePatterns cxtNames f aux t delta qs npars perm ps
+      reportSDoc "tc.with" 50 $ hang (text "strippedPats:") 2 $
+                                  vcat [ prettyA p <+> text "==" <+> prettyTCM v <+> (text ":" <+> prettyTCM t)
+                                       | A.ProblemEq p v t <- strippedPats ]
+      rhs <- buildRHS strippedPats rhs
       let (ps1, ps2) = splitAt n1 ps'
-      let result = A.Clause (A.SpineLHS i aux (ps1 ++ ps0 ++ ps2) wps1) (inheritedDots ++ namedDots)
-                                                                        (inhStrippedDots ++ strippedDots) rhs wh catchall
+      let result = A.Clause (A.SpineLHS i aux $ ps1 ++ ps0 ++ ps2 ++ wps1)
+                     (inheritedPats ++ strippedPats)
+                     rhs wh catchall
       reportSDoc "tc.with" 20 $ vcat
         [ text "buildWithClause returns" <+> prettyA result
         ]
       return result
 
-    buildRHS rhs@A.RHS{}                 = return rhs
-    buildRHS rhs@A.AbsurdRHS             = return rhs
-    buildRHS (A.WithRHS q es cs)         = A.WithRHS q es <$>
+    buildRHS _ rhs@A.RHS{}                 = return rhs
+    buildRHS _ rhs@A.AbsurdRHS             = return rhs
+    buildRHS _ (A.WithRHS q es cs)         = A.WithRHS q es <$>
       mapM ((A.spineToLhs . permuteNamedDots) <.> buildWithClause . A.lhsToSpine) cs
-    buildRHS (A.RewriteRHS qes rhs wh) = flip (A.RewriteRHS qes) wh <$> buildRHS rhs
+    buildRHS strippedPats1 (A.RewriteRHS qes strippedPats2 rhs wh) =
+      flip (A.RewriteRHS qes (applySubst withSub $ strippedPats1 ++ strippedPats2)) wh <$> buildRHS [] rhs
 
-    -- The named dot patterns computed by buildWithClause lives in the context
+    -- The stripped patterns computed by buildWithClause lives in the context
     -- of the top with-clause (of the current call to buildWithFunction). When
-    -- we recurse we expect inherited named dot patterns to live in the context
+    -- we recurse we expect inherited patterns to live in the context
     -- of the innermost parent clause. Note that this makes them live in the
     -- context of the with-function arguments before any pattern matching. We
     -- need to update again once the with-clause patterns have been checked.
-    -- This happens in Rules.Def.checkClause before calling checkRHS. The same
-    -- goes for stripped dots.
+    -- This happens in Rules.Def.checkClause before calling checkRHS.
     permuteNamedDots :: A.SpineClause -> A.SpineClause
-    permuteNamedDots (A.Clause lhs dots sdots rhs wh catchall) =
-      A.Clause lhs (applySubst withSub dots) (applySubst withSub sdots) rhs wh catchall
+    permuteNamedDots (A.Clause lhs strippedPats rhs wh catchall) =
+      A.Clause lhs (applySubst withSub strippedPats) rhs wh catchall
 
-{-| @stripWithClausePatterns cxtNames parent f t Δ qs np π ps = ps'@
 
-[@Δ@]   context bound by lhs of original function.
-
-[@f@]   name of @with@-function.
-
-[@t@]   type of the original function.
-
-[@qs@]  internal patterns for original function.
-
-[@np@]  number of module parameters in @qs@
-
-[@π@]   permutation taking @vars(qs)@ to @support(Δ)@.
-
-[@ps@]  patterns in with clause (eliminating type @t@).
+-- The arguments of @stripWithClausePatterns@ are documented
+-- at its type signature.
+-- The following is duplicate information, but may help reading the examples below.
+--
+-- [@Δ@]   context bound by lhs of original function.
+-- [@f@]   name of @with@-function.
+-- [@t@]   type of the original function.
+-- [@qs@]  internal patterns for original function.
+-- [@np@]  number of module parameters in @qs@
+-- [@π@]   permutation taking @vars(qs)@ to @support(Δ)@.
+-- [@ps@]  patterns in with clause (eliminating type @t@).
+-- [@ps'@] patterns for with function (presumably of type @Δ@).
 
-[@ps'@] patterns for with function (presumably of type @Δ@).
+{-| @stripWithClausePatterns cxtNames parent f t Δ qs np π ps = ps'@
 
 Example:
 
 @
-record Stream (A : Set) : Set where
-  coinductive
-  constructor delay
-  field       force : A × Stream A
+  record Stream (A : Set) : Set where
+    coinductive
+    constructor delay
+    field       force : A × Stream A
 
-record SEq (s t : Stream A) : Set where
-  coinductive
-  field
-    ~force : let a , as = force s
-                 b , bs = force t
-             in  a ≡ b × SEq as bs
+  record SEq (s t : Stream A) : Set where
+    coinductive
+    field
+      ~force : let a , as = force s
+                   b , bs = force t
+               in  a ≡ b × SEq as bs
 
-test : (s : Nat × Stream Nat) (t : Stream Nat) → SEq (delay s) t → SEq t (delay s)
-~force (test (a     , as) t p) with force t
-~force (test (suc n , as) t p) | b , bs = {!!}
+  test : (s : Nat × Stream Nat) (t : Stream Nat) → SEq (delay s) t → SEq t (delay s)
+  ~force (test (a     , as) t p) with force t
+  ~force (test (suc n , as) t p) | b , bs = {!!}
 @
 
 With function:
@@ -306,27 +311,27 @@
   f t (b , bs) (suc n) as t p
 @
 
-Note: stripWithClausePatterns factors @ps@ through @qs@, thus
+Note: stripWithClausePatterns factors __@ps@__ through __@qs@__, thus
 
 @
   ps = qs[ps']
 @
 
 where @[..]@ is to be understood as substitution.
-The projection patterns have vanished from @ps'@ (as they are already in @qs@).
+The projection patterns have vanished from __@ps'@__ (as they are already in __@qs@__).
 -}
 
 stripWithClausePatterns
-  :: [Name]                   -- ^ Names of the module parameters of the parent function
-  -> QName                    -- ^ Name of the parent function.
-  -> QName                    -- ^ Name of with-function.
+  :: [Name]                   -- ^ __@cxtNames@__ names of the module parameters of the parent function
+  -> QName                    -- ^ __@parent@__ name of the parent function.
+  -> QName                    -- ^ __@f@__   name of with-function.
   -> Type                     -- ^ __@t@__   top-level type of the original function.
   -> Telescope                -- ^ __@Δ@__   context of patterns of parent function.
   -> [NamedArg DeBruijnPattern] -- ^ __@qs@__  internal patterns for original function.
-  -> Nat                      -- ^ __@npars@__ number of module parameters is @qs@.
+  -> Nat                      -- ^ __@npars@__ number of module parameters in @qs@.
   -> Permutation              -- ^ __@π@__   permutation taking @vars(qs)@ to @support(Δ)@.
   -> [NamedArg A.Pattern]     -- ^ __@ps@__  patterns in with clause (eliminating type @t@).
-  -> TCM ([A.NamedDotPattern], [A.StrippedDotPattern], [NamedArg A.Pattern]) -- ^ __@ps'@__ patterns for with function (presumably of type @Δ@).
+  -> TCM ([A.ProblemEq], [NamedArg A.Pattern]) -- ^ __@ps'@__ patterns for with function (presumably of type @Δ@).
 stripWithClausePatterns cxtNames parent f t delta qs npars perm ps = do
   -- Andreas, 2014-03-05 expand away pattern synoyms (issue 1074)
   ps <- expandPatternSynonyms ps
@@ -334,7 +339,7 @@
   -- instantiations from qs, so we make sure
   -- that t is the top-level type of the parent function and add patterns for
   -- the module parameters to ps before stripping.
-  let paramPat i _ = A.VarP (cxtNames !! i)
+  let paramPat i _ = A.VarP $ A.BindName (cxtNames !! i)
       ps' = zipWith (fmap . fmap . paramPat) [0..] (take npars qs) ++ ps
   psi <- insertImplicitPatternsT ExpandLast ps' t
   reportSDoc "tc.with.strip" 10 $ vcat
@@ -348,31 +353,15 @@
     ]
 
   -- Andreas, 2015-11-09 Issue 1710: self starts with parent-function, not with-function!
-  (ps', out) <- runWriterT $ strip (Def parent []) t psi qs
-  let (strippedDots, namedDots) = partitionEithers out
+  (ps', strippedPats) <- runWriterT $ strip (Def parent []) t psi qs
   reportSDoc "tc.with.strip" 50 $ nest 2 $
-    text "namedDots:" <+> vcat [ prettyTCM x <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a | A.NamedDot x v a <- namedDots ]
+    text "strippedPats:" <+> vcat [ prettyA p <+> text "=" <+> prettyTCM v <+> text ":" <+> prettyTCM a | A.ProblemEq p v a <- strippedPats ]
   let psp = permute perm ps'
   reportSDoc "tc.with.strip" 10 $ vcat
     [ nest 2 $ text "ps' = " <+> fsep (punctuate comma $ map prettyA ps')
     , nest 2 $ text "psp = " <+> fsep (punctuate comma $ map prettyA $ psp)
     ]
-  -- Andreas, 2014-03-05 Issue 142:
-  -- In some cases, permute throws away some dot patterns of ps'
-  -- which are then never checked.
-  if True then return (namedDots, strippedDots, psp) else do
-    -- Andreas, 2014-03-05 Disabled the fix for issue 142, the following is dead code:
-    forM_ (permute (droppedP perm) ps') $ \ p -> setCurrentRange p $ do
-      reportSDoc "tc.with.strip" 10 $ text "warning: dropped pattern " <+> prettyA p
-      reportSDoc "tc.with.strip" 60 $ text $ show p
-      case namedArg p of
-        A.DotP info o e -> case unScope e of
-          A.Underscore{} -> return ()
-          e | o == UserWritten -> typeError $ GenericError $
-            "This inaccessible pattern is never checked, so only _ allowed here"
-          _ -> return ()
-        _ -> return ()
-    return (namedDots, strippedDots, psp)
+  return (strippedPats, psp)
   where
 
     strip
@@ -380,7 +369,7 @@
       -> Type                         -- ^ The type to be eliminated.
       -> [NamedArg A.Pattern]       -- ^ With-clause patterns.
       -> [NamedArg DeBruijnPattern] -- ^ Parent-clause patterns with de Bruijn indices relative to Δ.
-      -> WriterT [Either A.StrippedDotPattern A.NamedDotPattern] TCM [NamedArg A.Pattern]
+      -> WriterT [ProblemEq] TCM [NamedArg A.Pattern]
             -- ^ With-clause patterns decomposed by parent-clause patterns.
             --   Also outputs named dot patterns from the parent clause that
             --   we need to add let-bindings for.
@@ -418,10 +407,10 @@
       | A.AsP _ x p <- namedArg p0 = do
         (a, _) <- mustBePi t
         let v = patternToTerm (namedArg q)
-        tell [Right $ A.NamedDot x v (unDom a)]
+        tell [ProblemEq (A.VarP x) v a]
         strip self t (fmap (p <$) p0 : ps) qs
     strip self t ps0@(p0 : ps) qs0@(q : qs) = do
-      p <- liftTCM $ expandLitPattern p0
+      p <- liftTCM $ (traverse . traverse) expandLitPattern p0
       reportSDoc "tc.with.strip" 15 $ vcat
         [ text "strip"
         , nest 2 $ text "ps0 =" <+> fsep (punctuate comma $ map prettyA ps0)
@@ -430,13 +419,6 @@
         , nest 2 $ text "self=" <+> prettyTCM self
         , nest 2 $ text "t   =" <+> prettyTCM t
         ]
-      let failDotPat :: Monoid w => WriterT w TCM a
-          failDotPat = do
-            d <- liftTCM $ prettyA p
-            typeError $ GenericError $
-                "Inaccessible (dotted) patterns from the parent clause must " ++
-                "also be inaccessible in the with clause, when checking the " ++
-                "pattern " ++ show d ++ ","
       case namedArg q of
         ProjP o d -> case A.maybePostfixProjP p of
           Just (o', AmbQ ds) -> do
@@ -459,48 +441,27 @@
               strip self1 t1 ps qs
           Nothing -> mismatch
 
-        VarP x  -> (p :) <$> recurse (var (dbPatVarIndex x))
-
-        AbsurdP p -> __IMPOSSIBLE__
-
-        DotP v  -> case namedArg p of
-          A.DotP r o e  -> do
-            (a, _) <- mustBePi t
-            tell [Left $ A.StrippedDot e v (unDom a)]
-            ok p
-          A.WildP _     -> ok p
-          -- Ulf, 2016-05-30: dot patterns are no longer mandatory so a parent
-          -- dot pattern can appear as a variable in the child clause. Indeed
-          -- this happens if you use a variable in the parent and '...' in the
-          -- child. In this case we need to remember the the binding, so we can
-          -- insert a let for it.
-          A.VarP x -> do
-            (a, _) <- mustBePi t
-            tell [Right $ A.NamedDot x v (unDom a)]
-            ok p
-          -- Andreas, 2013-03-21 in case the implicit A.pattern has already been eta-expanded
-          -- we just fold it back.  This fixes issues 665 and 824.
-          A.ConP ci _ _ | patOrigin ci == ConOSystem -> okFlex p
-          -- Andreas, 2015-07-07 issue 1606: Same for flexible record patterns.
-          -- Agda might have replaced a record of dot patterns (A.ConP) by a dot pattern (I.DotP).
-          p'@A.ConP{} -> ifM (liftTCM $ isFlexiblePattern p') (okFlex p) {-else-} failDotPat
+        -- If a variable pattern in the parent clause was written as a dot
+        -- pattern by the user both in the parent clause and the with clause,
+        -- we can strip the dot from the with clause.
+        VarP PatODot x | A.DotP _ u <- namedArg p
+                       , A.Var y <- unScope u ->
+          (setNamedArg p (A.VarP (A.BindName y)) :) <$>
+            recurse (var (dbPatVarIndex x))
 
-          p@(A.PatternSynP pi' c' [ps']) -> do
-             reportSDoc "impossible" 10 $
-               text "stripWithClausePatterns: encountered pattern synonym " <+> prettyA p
-             __IMPOSSIBLE__
+        VarP _ x  -> (p :) <$> recurse (var (dbPatVarIndex x))
 
-          _ -> failDotPat
-          where
-            okFlex = ok . makeImplicitP
-            ok p   = (p :) <$> recurse v
+        DotP o v  -> do
+          (a, _) <- mustBePi t
+          tell [ProblemEq (namedArg p) v a]
+          (makeImplicitP p :) <$> recurse v
 
         q'@(ConP c ci qs') -> do
          reportSDoc "tc.with.strip" 60 $
            text "parent pattern is constructor " <+> prettyTCM c
          (a, b) <- mustBePi t
          -- The type of the current pattern is a datatype.
-         Def d es <- liftTCM $ ignoreSharing <$> normalise (unEl $ unDom a)
+         Def d es <- liftTCM $ normalise (unEl $ unDom a)
          let us = fromMaybe __IMPOSSIBLE__ $ allApplyElims es
          -- Get the original constructor and field names.
          c <- either __IMPOSSIBLE__ (`withRangeOf` c) <$> do liftTCM $ getConForm $ conName c
@@ -510,21 +471,35 @@
           -- Andreas, 2015-07-07 Issue 1606.
           -- Agda sometimes changes a record of dot patterns into a dot pattern,
           -- so the user should be allowed to do likewise.
-          A.DotP{} -> ifNotM (liftTCM $ isFlexiblePattern q') mismatch $ {-else-} do
-            maybe __IMPOSSIBLE__ (\ p -> strip self t (p : ps) qs0) =<< do
-              liftTCM $ expandImplicitPattern' (unDom a) $ makeImplicitP p
+          -- Jesper, 2017-11-16. This is now also allowed for data constructors.
+          A.DotP r e -> do
+            tell [ProblemEq (A.DotP r e) (patternToTerm q') a]
+            let ps' = map (unnamed (A.WildP empty) <$) qs'
+            stripConP d us b c ConOCon qs' ps'
 
           -- Andreas, 2016-12-29, issue #2363.
           -- Allow _ to stand for the corresponding parent pattern.
           A.WildP{} -> do
-            let ps' = map (updateNamedArg $ const $ A.WildP empty) qs'
+            -- Andreas, 2017-10-13, issue #2803:
+            -- Delete the name, since it can confuse insertImplicitPattern.
+            let ps' = map (unnamed (A.WildP empty) <$) qs'
             stripConP d us b c ConOCon qs' ps'
 
+          -- Jesper, 2018-05-13, issue #2998.
+          -- We also allow turning a constructor pattern into a variable.
+          -- In general this is not type-safe since the types of some variables
+          -- in the constructor pattern may have changed, so we have to
+          -- re-check these solutions when checking the with clause (see LHS.hs)
+          A.VarP x -> do
+            tell [ProblemEq (A.VarP x) (patternToTerm q') a]
+            let ps' = map (unnamed (A.WildP empty) <$) qs'
+            stripConP d us b c ConOCon qs' ps'
+
           A.ConP _ (A.AmbQ cs') ps' -> do
             -- Check whether the with-clause constructor can be (possibly trivially)
             -- disambiguated to be equal to the parent-clause constructor.
             -- Andreas, 2017-08-13, herein, ignore abstract constructors.
-            cs' <- liftTCM $ do snd . partitionEithers <$> mapM getConForm cs'
+            cs' <- liftTCM $ do snd . partitionEithers <$> mapM getConForm (toList cs')
             unless (elem c cs') mismatch
             -- Strip the subpatterns ps' and then continue.
             stripConP d us b c ConOCon qs' ps'
@@ -592,7 +567,7 @@
              -- ^ Argument patterns (parent clause).
           -> [NamedArg A.Pattern]
              -- ^ Argument patterns (with clause).
-          -> WriterT [Either A.StrippedDotPattern A.NamedDotPattern] TCM [NamedArg A.Pattern]
+          -> WriterT [ProblemEq] TCM [NamedArg A.Pattern]
              -- ^ Stripped patterns.
         stripConP d us b c ci qs' ps' = do
 
@@ -611,7 +586,7 @@
                  ]
 
           -- Compute the new type
-          let v  = Con c ci [ Arg info (var i) | (i, Arg info _) <- zip (downFrom $ size qs') qs' ]
+          let v  = Con c ci [ Apply $ Arg info (var i) | (i, Arg info _) <- zip (downFrom $ size qs') qs' ]
               t' = tel' `abstract` absApp (raise (size tel') b) v
               self' = tel' `abstract` apply1 (raise (size tel') self) v  -- Issue 1546
 
@@ -728,18 +703,6 @@
     sub top ys wild = parallelS $ map term [0 .. m + top - 1]
       where
         term i = maybe wild var $ List.findIndex (Just i ==) ys
-    -- -- OLD
-    -- sub top rho wild = parallelS $ map term [0 .. m - 1] ++ topTerms
-    --   where
-    --     -- Ulf, 2014-02-19: We need to rename the module parameters as well! (issue1035)
-    --     newVars  = length qs
-    --     topTerms = [ var (i + newVars) | i <- [0..top - 1] ]
-    --     -- 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 = maybe wild var $ findIndex (Just i ==) rho
 
 -- Andreas, 2014-12-05 refactored using numberPatVars
 -- Andreas, 2013-02-28 modeled after Coverage/Match/buildMPatterns
@@ -757,8 +720,9 @@
     toTerm :: DeBruijnPattern -> DisplayTerm
     toTerm p = case p of
       ProjP _ d   -> DDef d [] -- WRONG. TODO: convert spine to non-spine ... DDef d . defaultArg
-      VarP x      -> DTerm  $ var $ dbPatVarIndex x
-      DotP t      -> DDot   $ t
-      AbsurdP p   -> toTerm p
+      VarP PatODot x -> DDot  $ var $ dbPatVarIndex x
+      VarP o x      -> DTerm  $ var $ dbPatVarIndex x
+      DotP PatOVar{} t@(Var i []) -> DTerm t
+      DotP o t    -> DDot   $ t
       ConP c cpi ps -> DCon c (fromConPatternInfo cpi) $ toTerms ps
       LitP l      -> DTerm  $ Lit l
diff --git a/src/full/Agda/Utils/AffineHole.hs b/src/full/Agda/Utils/AffineHole.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/AffineHole.hs
@@ -0,0 +1,30 @@
+{-# LANGUAGE DeriveFunctor #-}
+
+-- | Contexts with at most one hole.
+
+module Agda.Utils.AffineHole where
+
+import Control.Applicative
+
+data AffineHole r a
+  = ZeroHoles a
+      -- ^ A constant term.
+  | OneHole (r -> a)
+      -- ^ A term with one hole.
+  | ManyHoles
+      -- ^ A term with many holes (error value).
+  deriving (Functor)
+
+instance Applicative (AffineHole r) where
+  pure = ZeroHoles
+
+  ZeroHoles f <*> ZeroHoles a = ZeroHoles $ f a
+  ZeroHoles f <*> OneHole g   = OneHole $ f . g
+  OneHole h   <*> ZeroHoles a = OneHole (`h` a)
+  _ <*> _ = ManyHoles
+
+-- NB: @AffineHole r@ is not a monad.
+-- @
+--   OneHole (h :: r -> a) >>= (k :: a -> AffineHole r b) = _ :: AffineHole r b
+-- @
+-- We are lacking an @r@ to make use of @h@.
diff --git a/src/full/Agda/Utils/AssocList.hs b/src/full/Agda/Utils/AssocList.hs
--- a/src/full/Agda/Utils/AssocList.hs
+++ b/src/full/Agda/Utils/AssocList.hs
@@ -6,9 +6,8 @@
 
 import Prelude hiding (lookup)
 
-import Control.Applicative
-
 import qualified Data.List as List
+import Data.Function
 
 import Agda.Utils.Tuple
 
@@ -42,6 +41,13 @@
 --   Otherwise, an internal error is raised.
 update :: Eq k => k -> v -> AssocList k v -> AssocList k v
 update k v = updateAt k $ const v
+
+-- | O(n).
+--   Delete a binding.
+--   The key must be in the domain of the finite map.
+--   Otherwise, an internal error is raised.
+delete :: Eq k => k -> AssocList k v -> AssocList k v
+delete k = List.deleteBy ((==) `on` fst) (k, __IMPOSSIBLE__)
 
 -- | O(n).
 --   Update the value at a key with a certain function.
diff --git a/src/full/Agda/Utils/BiMap.hs b/src/full/Agda/Utils/BiMap.hs
--- a/src/full/Agda/Utils/BiMap.hs
+++ b/src/full/Agda/Utils/BiMap.hs
@@ -15,14 +15,12 @@
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.Tuple
-import Data.Typeable ( Typeable )
 
 -- | Finite bijective map from @a@ to @b@.  There, and back again.
 data BiMap a b = BiMap
   { biMapThere :: Map a b
   , biMapBack  :: Map b a
   }
-  deriving (Typeable)
 
 -- | Lookup. O(log n).
 lookup :: Ord a => a -> BiMap a b -> Maybe b
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
@@ -61,12 +61,12 @@
 fromRight f = either f id
 
 -- | Analogue of 'Agda.Utils.Maybe.fromMaybeM'.
-fromLeftM :: Monad m => (b -> m a) -> Either a b -> m a
-fromLeftM = either return
+fromLeftM :: Monad m => (b -> m a) -> m (Either a b) -> m a
+fromLeftM f m = either return f =<< m
 
 -- | Analogue of 'Agda.Utils.Maybe.fromMaybeM'.
-fromRightM :: Monad m => (a -> m b) -> Either a b -> m b
-fromRightM f = either f return
+fromRightM :: Monad m => (a -> m b) -> m (Either a b) -> m b
+fromRightM f m = either f return =<< m
 
 -- | Safe projection from 'Left'.
 --
diff --git a/src/full/Agda/Utils/Empty.hs b/src/full/Agda/Utils/Empty.hs
--- a/src/full/Agda/Utils/Empty.hs
+++ b/src/full/Agda/Utils/Empty.hs
@@ -1,10 +1,6 @@
 {-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE DeriveDataTypeable #-}
-#endif
-
 -- | An empty type with some useful instances.
 module Agda.Utils.Empty where
 
@@ -13,18 +9,11 @@
 import Data.Functor ((<$))
 import Data.Data (Data)
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Typeable ( Typeable )
-#endif
-
 import Agda.Utils.Impossible
 
 #include "undefined.h"
 
 data Empty
-#if __GLASGOW_HASKELL__ <= 708
-  deriving Typeable
-#endif
 deriving instance Data Empty
 
 instance Eq Empty where
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
@@ -13,7 +13,6 @@
   , rootPath
   ) where
 
-import Control.Applicative
 import System.Directory
 import System.FilePath
 
@@ -27,7 +26,6 @@
 import Data.Function
 import Data.Hashable (Hashable)
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import Agda.Utils.Monad
 import Agda.Utils.Pretty
@@ -41,7 +39,7 @@
 -- paths point to the same files or directories.
 
 newtype AbsolutePath = AbsolutePath { byteStringPath :: Text }
-  deriving (Eq, Ord, Typeable, Data, Hashable)
+  deriving (Eq, Ord, Data, Hashable)
 
 -- | Extract the 'AbsolutePath' to be used as 'FilePath'.
 filePath :: AbsolutePath -> FilePath
diff --git a/src/full/Agda/Utils/Float.hs b/src/full/Agda/Utils/Float.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/Float.hs
@@ -0,0 +1,26 @@
+-- | Logically consistent comparison of floating point numbers.
+module Agda.Utils.Float where
+
+import Numeric.IEEE ( IEEE(identicalIEEE) )
+
+floatEq :: Double -> Double -> Bool
+floatEq x y = identicalIEEE x y || (isNaN x && isNaN y)
+
+floatLt :: Double -> Double -> Bool
+floatLt x y =
+  case compareFloat x y of
+    LT -> True
+    _  -> False
+  where
+    -- Also implemented in the GHC/UHC backends
+    compareFloat :: Double -> Double -> Ordering
+    compareFloat x y
+      | identicalIEEE x y          = EQ
+      | isNegInf x                 = LT
+      | isNegInf y                 = GT
+      | isNaN x && isNaN y         = EQ
+      | isNaN x                    = LT
+      | isNaN y                    = GT
+      | otherwise                  = compare (x, isNegZero y) (y, isNegZero x)
+    isNegInf  z = z < 0 && isInfinite z
+    isNegZero z = identicalIEEE z (-0.0)
diff --git a/src/full/Agda/Utils/Functor.hs b/src/full/Agda/Utils/Functor.hs
--- a/src/full/Agda/Utils/Functor.hs
+++ b/src/full/Agda/Utils/Functor.hs
@@ -4,7 +4,11 @@
 
 module Agda.Utils.Functor
   ( module Agda.Utils.Functor
-  , (<$>) -- from Data.Functor
+  , (<$>)  -- from Data.Functor
+  , ($>)   -- from Data.Functor
+#if MIN_VERSION_base(4,11,0)
+  , (<&>)  -- from Data.Functor
+#endif
   )
   where
 
@@ -15,11 +19,6 @@
 import Data.Functor.Compose
 import Data.Functor.Classes
 
-infixr 4 $>
-
-($>) :: Functor f => f a -> b -> f b
-($>) = flip (<$)
-
 infixr 9 <.>
 
 -- | Composition: pure function after functorial (monadic) function.
@@ -31,11 +30,13 @@
 for :: Functor m => m a -> (a -> b) -> m b
 for = flip fmap
 
-infix 4 <&>
+#if !MIN_VERSION_base(4,11,0)
+infixl 1 <&>
 
 -- | Infix version of 'for'.
 (<&>) :: Functor m => m a -> (a -> b) -> m b
 (<&>) = for
+#endif
 
 -- | A decoration is a functor that is traversable into any functor.
 --
diff --git a/src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs b/src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs
--- a/src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs
+++ b/src/full/Agda/Utils/Graph/AdjacencyMap/Unidirectional.hs
@@ -6,44 +6,50 @@
 --
 --   Represented as adjacency maps in direction from source to target.
 --
---   Each source node maps to a adjacency map of outgoing edges,
+--   Each source node maps to an adjacency map of outgoing edges,
 --   which is a map from target nodes to edges.
 --
---   This allows to get outgoing edges in O(log n) time where
---   @n@ is the number of nodes in the graph.
---
---   However, the set of incoming edges can only be obtained in
---   @O(n log n)@ or @O(e)@ where @e@ is the total number of edges.
+--   Listed time complexities are for the worst case (and possibly
+--   amortised), with /n/ standing for the number of nodes in the
+--   graph and /e/ standing for the number of edges. Comparisons,
+--   predicates etc. are assumed to take constant time (unless
+--   otherwise stated).
 
 module Agda.Utils.Graph.AdjacencyMap.Unidirectional
-  ( Graph(..)
+  ( -- * Graphs and edges
+    Graph(..)
+  , invariant
   , Edge(..)
-  , transposeEdge
+    -- * Queries
+  , lookup
   , edges
+  , neighbours, neighboursMap
   , edgesFrom
   , edgesTo
   , diagonal
-  , lookup
-  , neighbours, neighboursMap
-  , sourceNodes, targetNodes
-  , Nodes(..)
-  , computeNodes, nodes
-  , fromNodes
-  , fromList, fromListWith
-  , toList
+  , nodes, sourceNodes, targetNodes, isolatedNodes
+  , Nodes(..), computeNodes
   , discrete
-  , clean
+  , acyclic
+    -- * Construction
+  , fromNodes, fromNodeSet
+  , fromEdges, fromEdgesWith
   , empty
   , singleton
   , insert, insertWith
   , insertEdge, insertEdgeWith
-  , union , unionWith
+  , union, unionWith
   , unions, unionsWith
-  , removeNode
+    -- * Transformation
+  , mapWithEdge
+  , transposeEdge, transpose
+  , clean
+  , removeNode, removeNodes
   , removeEdge
   , filterEdges
   , unzip
-  , mapWithEdge
+  , composeWith
+    -- * Strongly connected components
   , sccs'
   , sccs
   , DAG(..)
@@ -52,17 +58,21 @@
   , reachable
   , sccDAG'
   , sccDAG
-  , acyclic
-  , reachableFrom
+    -- * Reachability
+  , reachableFrom, reachableFromSet
   , walkSatisfying
-  , composeWith
-  , complete
-  , gaussJordanFloydWarshallMcNaughtonYamadaReference
+    -- * Transitive closure
   , gaussJordanFloydWarshallMcNaughtonYamada
+  , gaussJordanFloydWarshallMcNaughtonYamadaReference
+  , complete, completeIter
   )
   where
 
-import Prelude hiding (lookup, unzip, null)
+#if MIN_VERSION_base(4,11,0)
+import Prelude hiding ( (<>), lookup, null, unzip )
+#else
+import Prelude hiding ( lookup, null, unzip )
+#endif
 
 import Control.Applicative hiding (empty)
 import Control.Monad
@@ -98,60 +108,109 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
--- | @Graph s t e@ is a directed graph with
---   source nodes in @s@
---   target nodes in @t@
---   and edges in @e@.
+------------------------------------------------------------------------
+-- Graphs and edges
+
+-- | @Graph n e@ is a type of directed graphs with nodes in @n@ and
+--   edges in @e@.
 --
---   Admits at most one edge between any two nodes.
---   Several edges can be modeled by using a collection type for @e@.
+--   At most one edge is allowed between any two nodes. Multigraphs
+--   can be simulated by letting the edge type @e@ be a collection
+--   type.
 --
---   Represented as "adjacency list", or rather, adjacency map.
---   This allows to get all outgoing edges for a node
---   in @O(log n)@ time where @n@ is the number of nodes of the graph.
+--   The graphs are represented as adjacency maps (adjacency lists,
+--   but using finite maps instead of arrays and lists). This makes it
+--   possible to compute a node's outgoing edges in logarithmic time
+--   (/O(log n)/). However, computing the incoming edges may be more
+--   expensive.
 --
---   Incoming edges can only be computed in @O(n + e)@ time where
---   @e@ is the number of edges.
+--   Note that neither the number of nodes nor the number of edges may
+--   exceed @'maxBound' :: 'Int'@.
 
-newtype Graph s t e = Graph
-  { graph :: Map s (Map t e) -- ^ Forward edges.
+newtype Graph n e = Graph
+  { graph :: Map n (Map n e) -- ^ Forward edges.
   }
-  deriving (Eq, Functor, Show)
+  deriving Eq
 
-instance (Pretty s, Pretty t, Pretty e) => Pretty (Graph s t e) where
-  pretty = vcat . map pretty . edges
+-- The Functor instance for strict maps is the one for lazy maps, so a
+-- custom Functor instance using strict map functions is used here.
 
-data Edge s t e = Edge
-  { source :: s  -- ^ Outgoing node.
-  , target :: t  -- ^ Incoming node.
+instance Functor (Graph n) where
+  fmap f = Graph . Map.map (Map.map f) . graph
+
+-- | Internal invariant.
+
+invariant :: Ord n => Graph n e -> Bool
+invariant g =
+  -- Every target node must be present in the graph as a source node,
+  -- possibly without outgoing edges.
+  Set.isSubsetOf (targetNodes g) (nodes g)
+
+instance (Ord n, Pretty n, Pretty e) => Pretty (Graph n e) where
+  pretty g = vcat (concat $ map pretty' (Set.toAscList (nodes g)))
+    where
+    pretty' n = case edgesFrom g [n] of
+      [] -> [pretty n]
+      es -> map pretty es
+
+instance (Ord n, Show n, Show e) => Show (Graph n e) where
+  showsPrec _ g =
+    showString "union (fromEdges " .
+    shows (edges g) .
+    showString ") (fromNodes " .
+    shows (Set.toList (isolatedNodes g)) .
+    showString ")"
+
+-- | Edges.
+
+data Edge n e = Edge
+  { source :: n  -- ^ Outgoing node.
+  , target :: n  -- ^ Incoming node.
   , label  :: e  -- ^ Edge label (weight).
   } deriving (Eq, Ord, Functor, Show)
 
-instance (Pretty s, Pretty t, Pretty e) => Pretty (Edge s t e) where
-  pretty (Edge s t e) = pretty s <+> text "--(" <> pretty t <> text ")-->" <+> pretty t
+instance (Pretty n, Pretty e) => Pretty (Edge n e) where
+  pretty (Edge s t e) =
+    pretty s <+> text "--(" <> pretty e <> text ")-->" <+> pretty t
 
--- | Reverse an edge.
+------------------------------------------------------------------------
+-- Queries
 
-transposeEdge :: Edge s t e -> Edge t s e
-transposeEdge (Edge s t e) = Edge t s e
+-- | If there is an edge from @s@ to @t@, then @lookup s t g@ is
+-- @'Just' e@, where @e@ is the edge's label. /O(log n)/.
 
--- * Edge queries
+lookup :: Ord n => n -> n -> Graph n e -> Maybe e
+lookup s t (Graph g) = Map.lookup t =<< Map.lookup s g
 
--- | Turn a graph into a list of edges.  @O(n + e)@
+-- | The graph's edges. /O(n + e)/.
 
-edges :: Graph s t e -> [Edge s t e]
+edges :: Graph n e -> [Edge n e]
 edges (Graph g) =
   [ Edge s t e
   | (s, tes) <- Map.assocs g
   , (t, e)   <- Map.assocs tes
   ]
 
--- | All edges originating in the given nodes.
---   (I.e., all outgoing edges for the given nodes.)
---
---   Roughly linear in the length of the result list @O(result)@.
+-- | @neighbours u g@ consists of all nodes @v@ for which there is an
+-- edge from @u@ to @v@ in @g@, along with the corresponding edge
+-- labels. /O(log n + |@neighbours u g@|)/.
 
-edgesFrom :: Ord s => Graph s t e -> [s] -> [Edge s t e]
+neighbours :: Ord n => n -> Graph n e -> [(n, e)]
+neighbours s = Map.toList . neighboursMap s
+
+-- | @neighboursMap u g@ consists of all nodes @v@ for which there is
+-- an edge from @u@ to @v@ in @g@, along with the corresponding edge
+-- labels. /O(log n)/.
+
+neighboursMap :: Ord n => n -> Graph n e -> Map n e
+neighboursMap s (Graph g) = fromMaybe Map.empty $ Map.lookup s g
+
+-- | @edgesFrom g ns@ is a list containing all edges originating in
+-- the given nodes (i.e., all outgoing edges for the given nodes). If
+-- @ns@ does not contain duplicates, then the resulting list does not
+-- contain duplicates. /O(|@ns@| log |@n@| + |@edgesFrom g ns@|)/.
+
+edgesFrom :: Ord n => Graph n e -> [n] -> [Edge n e]
 edgesFrom (Graph g) ss =
   [ Edge s t e
   | s <- ss
@@ -159,13 +218,12 @@
   , (t, e) <- Map.assocs m
   ]
 
-
--- | All edges ending in the given nodes.
---   (I.e., all incoming edges for the given nodes.)
---
---   Expensive: @O(n * |ts| * log n)@.
+-- | @edgesTo g ns@ is a list containing all edges ending in the given
+-- nodes (i.e., all incoming edges for the given nodes). If @ns@ does
+-- not contain duplicates, then the resulting list does not contain
+-- duplicates. /O(|@ns@| n log n)/.
 
-edgesTo :: Ord t => Graph s t e -> [t] -> [Edge s t e]
+edgesTo :: Ord n => Graph n e -> [n] -> [Edge n e]
 edgesTo (Graph g) ts =
   [ Edge s t e
   | (s, m) <- Map.assocs g
@@ -173,219 +231,280 @@
   , e <- maybeToList $ Map.lookup t m
   ]
 
--- | Get all self-loops.
+-- | All self-loops. /O(n log n)/.
 
-diagonal :: (Ord n) => Graph n n e -> [Edge n n e]
+diagonal :: Ord n => Graph n e -> [Edge n e]
 diagonal (Graph g) =
   [ Edge s s e
   | (s, m) <- Map.assocs g
   , e      <- maybeToList $ Map.lookup s m
   ]
 
--- | Lookup label of an edge.
-
-lookup :: (Ord s, Ord t) => s -> t -> Graph s t e -> Maybe e
-lookup s t (Graph g) = Map.lookup t =<< Map.lookup s g
-
--- | Get a list of outgoing edges with target.
-
-neighbours :: Ord s => s -> Graph s t e -> [(t, e)]
-neighbours s (Graph g) = maybe [] Map.assocs $ Map.lookup s g
-
--- | Get a list of outgoing edges with target.
-
-neighboursMap :: Ord s => s -> Graph s t e -> Map t e
-neighboursMap s (Graph g) = fromMaybe Map.empty $ Map.lookup s g
+-- | All nodes. /O(n)/.
 
--- * Node queries
+nodes :: Graph n e -> Set n
+nodes = Map.keysSet . graph
 
--- | Returns all the nodes with outgoing edges.  @O(n)@.
+-- | Nodes with outgoing edges. /O(n)/.
 
-sourceNodes :: Graph s t e -> Set s
-sourceNodes = Map.keysSet . graph
+sourceNodes :: Graph n e -> Set n
+sourceNodes = Map.keysSet . Map.filter (not . Map.null) . graph
 
--- | Returns all the nodes with incoming edges.  Expensive! @O(e)@.
+-- | Nodes with incoming edges. /O(n + e log n)/.
 
-targetNodes :: Ord t => Graph s t e -> Set t
+targetNodes :: Ord n => Graph n e -> Set n
 targetNodes = Set.fromList . map target . edges
 
--- | For homogeneous graphs, @(s = t)@ we can compute a set
---   of all nodes.
---
---   Structure @Nodes@ is for computing all nodes but also
---   remembering which were incoming and which outgoing.
---   This is mostly for efficiency reasons, to avoid recomputation
---   when all three sets are needed.
+-- | Various kinds of nodes.
 
 data Nodes n = Nodes
   { srcNodes :: Set n
+    -- ^ Nodes with outgoing edges.
   , tgtNodes :: Set n
+    -- ^ Nodes with incoming edges.
   , allNodes :: Set n
+    -- ^ All nodes, with or without edges.
   }
 
-computeNodes :: (Ord n) => Graph n n e -> Nodes n
-computeNodes g = Nodes srcs tgts (srcs `Set.union` tgts)
-  where srcs = sourceNodes g
-        tgts = targetNodes g
+-- | Constructs a 'Nodes' structure. /O(n + e log n)/.
 
--- | The set of all nodes (outgoing and incoming).
+computeNodes :: Ord n => Graph n e -> Nodes n
+computeNodes g =
+  Nodes { srcNodes = Set.filter (not . null . flip neighbours g) ns
+        , tgtNodes = targetNodes g
+        , allNodes = ns
+        }
+  where
+  ns = nodes g
 
-nodes :: (Ord n) => Graph n n e -> Set n
-nodes = allNodes . computeNodes
+-- | Nodes without incoming or outgoing edges. /O(n + e log n)/.
 
--- * Graph construction.
+isolatedNodes :: Ord n => Graph n e -> Set n
+isolatedNodes g =
+  Set.difference (allNodes ns) (Set.union (srcNodes ns) (tgtNodes ns))
+  where
+  ns = computeNodes g
 
--- | Constructs a completely disconnected graph containing the given
---   nodes. @O(n)@.
+-- | Checks whether the graph is discrete (containing no edges other
+-- than 'null' edges). /O(n + e)/.
 
-fromNodes :: Ord n => [n] -> Graph n n e
-fromNodes ns = Graph $ Map.fromList $ map (, Map.empty) ns
+discrete :: Null e => Graph n e -> Bool
+discrete = all' (all' null) . graph
+  where all' p = List.all p . Map.elems
 
--- | Constructs a graph from a list of edges.  O(e log n)
---
---   Later edges overwrite earlier edges.
+-- | Returns @True@ iff the graph is acyclic.
 
-fromList :: (Ord s, Ord t) => [Edge s t e] -> Graph s t e
-fromList = fromListWith $ \ new old -> new
+acyclic :: Ord n => Graph n e -> Bool
+acyclic = all isAcyclic . sccs'
+  where
+  isAcyclic Graph.AcyclicSCC{} = True
+  isAcyclic Graph.CyclicSCC{}  = False
 
--- | Constructs a graph from a list of edges.  O(e log n)
---
---   Later edges are combined with earlier edges using the supplied function.
+------------------------------------------------------------------------
+-- Construction
 
-fromListWith :: (Ord s, Ord t) => (e -> e -> e) -> [Edge s t e] -> Graph s t e
-fromListWith f = List.foldl' (flip (insertEdgeWith f)) empty
+-- | Constructs a completely disconnected graph containing the given
+--   nodes. /O(n log n)/.
 
--- | Convert a graph into a list of edges. O(e)
+fromNodes :: Ord n => [n] -> Graph n e
+fromNodes ns = Graph $ Map.fromList $ map (, Map.empty) ns
 
-toList :: Graph s t e -> [Edge s t e]
-toList (Graph g) = [ Edge s t a | (s,m) <- Map.assocs g, (t,a) <- Map.assocs m ]
+-- | Constructs a completely disconnected graph containing the given
+--   nodes. /O(n)/.
 
--- | Check whether the graph is discrete (no edges).
---   This could be seen as an empty graph.
---   Worst-case (is discrete): @O(e)@.
-discrete :: Null e => Graph s t e -> Bool
-discrete = all' (all' null) . graph
-  where all' p = List.all p . Map.elems
+fromNodeSet :: Ord n => Set n -> Graph n e
+fromNodeSet ns = Graph $ Map.fromSet (\_ -> Map.empty) ns
 
--- | Removes 'Null' edges (and empty 'Map's).
-clean :: Null e => Graph s t e -> Graph s t e
-clean = Graph . filt . fmap filt . graph
-  where
-    filt :: Null a => Map k a -> Map k a
-    filt = Map.filter (not . null)
+-- | @fromEdges es@ is a graph containing the edges in @es@, with the
+-- caveat that later edges overwrite earlier edges. /O(|@es@| log n)/.
 
--- | Empty graph (no nodes, no edges).
+fromEdges :: Ord n => [Edge n e] -> Graph n e
+fromEdges = fromEdgesWith $ \ new old -> new
 
-empty :: Graph s t e
+-- | @fromEdgesWith f es@ is a graph containing the edges in @es@.
+-- Later edges are combined with earlier edges using the supplied
+-- function. /O(|@es@| log n)/.
+
+fromEdgesWith :: Ord n => (e -> e -> e) -> [Edge n e] -> Graph n e
+fromEdgesWith f = List.foldl' (flip (insertEdgeWith f)) empty
+
+-- | Empty graph (no nodes, no edges). /O(1)/.
+
+empty :: Graph n e
 empty = Graph Map.empty
 
--- | A graph with two nodes and a single connecting edge.
+-- | A graph with two nodes and a single connecting edge. /O(1)/.
 
-singleton :: s -> t -> e -> Graph s t e
-singleton s t e = Graph $ Map.singleton s (Map.singleton t e)
+singleton :: Ord n => n -> n -> e -> Graph n e
+singleton s t e = insert s t e empty
 
--- | Insert an edge into the graph.
+-- | Inserts an edge into the graph. /O(log n)/.
 
-insert :: (Ord s, Ord t) => s -> t -> e -> Graph s t e -> Graph s t e
+insert :: Ord n => n -> n -> e -> Graph n e -> Graph n e
 insert = insertWith $ \ new old -> new
 
-insertEdge :: (Ord s, Ord t) => Edge s t e -> Graph s t e -> Graph s t e
+-- | Inserts an edge into the graph. /O(log n)/.
+
+insertEdge :: Ord n => Edge n e -> Graph n e -> Graph n e
 insertEdge (Edge s t e) = insert s t e
 
--- | Insert an edge, possibly combining @old@ edge weight with @new@ weight by
---   given function @f@ into @f new old@.
+-- | @insertWith f s t new@ inserts an edge from @s@ to @t@ into the
+-- graph. If there is already an edge from @s@ to @t@ with label @old@,
+-- then this edge gets replaced by an edge with label @f new old@, and
+-- otherwise the edge's label is @new@. /O(log n)/.
 
-insertWith :: (Ord s, Ord t) =>
-              (e -> e -> e) -> s -> t -> e -> Graph s t e -> Graph s t e
-insertWith f s t e (Graph g) = Graph (Map.alter (Just . ins) s g)
-  where ins Nothing  = Map.singleton t e
-        ins (Just m) = Map.insertWith f t e m
+insertWith ::
+  Ord n => (e -> e -> e) -> n -> n -> e -> Graph n e -> Graph n e
+insertWith f s t e (Graph g) =
+  Graph (Map.alter (Just . insNode) t $ Map.alter (Just . insEdge) s g)
+  where
+  insEdge Nothing  = Map.singleton t e
+  insEdge (Just m) = Map.insertWith f t e m
 
-insertEdgeWith :: (Ord s, Ord t) =>
-                  (e -> e -> e) -> Edge s t e -> Graph s t e -> Graph s t e
+  insNode Nothing  = Map.empty
+  insNode (Just m) = m
+
+-- | A variant of 'insertWith'. /O(log n)/.
+
+insertEdgeWith ::
+  Ord n => (e -> e -> e) -> Edge n e -> Graph n e -> Graph n e
 insertEdgeWith f (Edge s t e) = insertWith f s t e
 
 -- | Left-biased union.
+--
+-- Time complexity: See 'unionWith'.
 
-union :: (Ord s, Ord t) => Graph s t e -> Graph s t e -> Graph s t e
+union :: Ord n => Graph n e -> Graph n e -> Graph n e
 union = unionWith $ \ left right -> left
 
-unionWith :: (Ord s, Ord t) =>
-             (e -> e -> e) -> Graph s t e -> Graph s t e -> Graph s t e
-unionWith f (Graph g) (Graph g') = Graph $ Map.unionWith (Map.unionWith f) g g'
+-- | Union. The function is used to combine edge labels for edges that
+-- occur in both graphs (labels from the first graph are given as the
+-- first argument to the function).
+--
+-- Time complexity: /O(n₁ log (n₂/n₁ + 1) + e₁ log e₂/, where /n₁/ is
+-- the number of nodes in the graph with the smallest number of nodes
+-- and /n₂/ is the number of nodes in the other graph, and /e₁/ is the
+-- number of edges in the graph with the smallest number of edges and
+-- /e₂/ is the number of edges in the other graph.
+--
+-- Less complicated time complexity: /O((n + e) log n/ (where /n/ and
+-- /e/ refer to the resulting graph).
 
-unions ::(Ord s, Ord t) => [Graph s t e] -> Graph s t e
+unionWith ::
+  Ord n => (e -> e -> e) -> Graph n e -> Graph n e -> Graph n e
+unionWith f (Graph g) (Graph g') =
+  Graph $ Map.unionWith (Map.unionWith f) g g'
+
+-- | Union. /O((n + e) log n/ (where /n/ and /e/ refer to the
+-- resulting graph).
+
+unions :: Ord n => [Graph n e] -> Graph n e
 unions = unionsWith $ \ left right -> left
 
-unionsWith :: (Ord s, Ord t) => (e -> e -> e) -> [Graph s t e] -> Graph s t e
+-- | Union. The function is used to combine edge labels for edges that
+-- occur in several graphs. /O((n + e) log n/ (where /n/ and /e/ refer
+-- to the resulting graph).
+
+unionsWith :: Ord n => (e -> e -> e) -> [Graph n e] -> Graph n e
 unionsWith f = List.foldl' (unionWith f) empty
 
--- * Graph reversal
+------------------------------------------------------------------------
+-- Transformation
 
--- | The opposite graph (with all edges reversed).
+-- | A variant of 'fmap' that provides extra information to the
+-- function argument. /O(n + e)/.
 
-transpose :: (Ord s, Ord t) => Graph s t e -> Graph t s e
-transpose = fromList . map transposeEdge . edges
+mapWithEdge :: (Edge n e -> e') -> Graph n e -> Graph n e'
+mapWithEdge f (Graph g) = Graph $ flip Map.mapWithKey g $ \ s m ->
+  flip Map.mapWithKey m $ \ t e -> f (Edge s t e)
 
--- * Graph deconstruction.
+-- | Reverses an edge. /O(1)/.
 
--- | Auxiliary function to turn empty map into @Nothing@.
+transposeEdge :: Edge n e -> Edge n e
+transposeEdge (Edge s t e) = Edge t s e
 
-discardEmpty :: Map k v -> Maybe (Map k v)
-discardEmpty m = if Map.null m then Nothing else Just m
+-- | The opposite graph (with all edges reversed). /O((n + e) log n)/.
 
--- | Removes the given source node, and all corresponding edges, from the graph.
---
---   O(log n).
-removeSourceNode :: Ord s => s -> Graph s t e -> Graph s t e
-removeSourceNode s (Graph g) = Graph $ Map.delete s g
+transpose :: Ord n => Graph n e -> Graph n e
+transpose g =
+  fromEdges (map transposeEdge (edges g))
+    `union`
+  fromNodeSet (isolatedNodes g)
 
--- | Removes the given target node, and all corresponding edges, from the graph.
---
---   Expensive!  @O(n log n)@.
+-- | Removes 'null' edges. /O(n + e)/.
 
-removeTargetNode :: Ord t => t -> Graph s t e -> Graph s t e
-removeTargetNode t (Graph g) = Graph $ Map.mapMaybe rem g
-  where rem = discardEmpty . Map.delete t
+clean :: Null e => Graph n e -> Graph n e
+clean = Graph . Map.map (Map.filter (not . null)) . graph
 
--- | Removes the given node, be it source or target,
---   and all corresponding edges, from the graph.
---
---   Expensive!  @O(n log n)@.
+-- | @removeNodes ns g@ removes the nodes in @ns@ (and all
+-- corresponding edges) from @g@. /O((n + e) log |@ns@|)/.
 
-removeNode :: Ord n => n -> Graph n n e -> Graph n n e
-removeNode n = removeTargetNode n . removeSourceNode n
+removeNodes :: Ord n => Set n -> Graph n e -> Graph n e
+removeNodes ns (Graph g) = Graph (Map.mapMaybeWithKey remSrc g)
+  where
+  remSrc s m
+    | Set.member s ns = Nothing
+    | otherwise       =
+        Just (Map.filterWithKey (\t _ -> not (Set.member t ns)) m)
 
+-- | @removeNode n g@ removes the node @n@ (and all corresponding
+-- edges) from @g@. /O(n + e)/.
+
+removeNode :: Ord n => n -> Graph n e -> Graph n e
+removeNode = removeNodes . Set.singleton
+
 -- | @removeEdge s t g@ removes the edge going from @s@ to @t@, if any.
---
---   @O((log n)^2)@.
+--   /O(log n)/.
 
-removeEdge :: (Ord s, Ord t) => s -> t -> Graph s t e -> Graph s t e
+removeEdge :: Ord n => n -> n -> Graph n e -> Graph n e
 removeEdge s t (Graph g) = Graph $ Map.adjust (Map.delete t) s g
 
--- | Keep only the edges that satisfy the predicate.  @O(e).@
+-- | Keep only the edges that satisfy the predicate. /O(n + e)/.
 
-filterEdges :: (e -> Bool) -> Graph s t e -> Graph s t e
-filterEdges f (Graph g) = Graph $ Map.mapMaybe (discardEmpty . Map.filter f) g
+filterEdges :: (Edge n e -> Bool) -> Graph n e -> Graph n e
+filterEdges f =
+  Graph .
+  Map.mapWithKey (\s ->
+    Map.filterWithKey (\t l ->
+      f (Edge { source = s, target = t, label = l }))) .
+  graph
 
--- | Unzipping a graph (naive implementation using fmap).
+-- | Unzips the graph. /O(n + e)/.
 
-unzip :: Graph s t (e, e') -> (Graph s t e, Graph s t e')
+-- This is a naive implementation that uses fmap.
+
+unzip :: Graph n (e, e') -> (Graph n e, Graph n e')
 unzip g = (fst <$> g, snd <$> g)
 
--- | Maps over a graph under availability of positional information,
---   like 'Map.mapWithKey'.
+-- | @composeWith times plus g g'@ finds all edges
+--   @s --c_i--> t_i --d_i--> u@ and constructs the
+--   result graph from @edge(s,u) = sum_i (c_i times d_i)@.
+--
+--   Complexity:  For each edge @s --> t@ in @g@ we look up
+--   all edges starting with @t@ in @g'@.
+--
+--   Precondition: The two graphs must have exactly the same nodes.
 
-mapWithEdge :: (Edge s t e -> e') -> Graph s t e -> Graph s t e'
-mapWithEdge f (Graph g) = Graph $ flip Map.mapWithKey g $ \ s m ->
-  flip Map.mapWithKey m $ \ t e -> f (Edge s t e)
+composeWith ::
+  Ord n =>
+  (c -> d -> e) -> (e -> e -> e) ->
+  Graph n c -> Graph n d -> Graph n e
+composeWith times plus (Graph g) (Graph g') = Graph (Map.map comp g)
+  where
+  comp m = Map.fromListWith plus
+    [ (u, c `times` d)
+    | (t, c) <- Map.assocs m
+    , m'     <- maybeToList (Map.lookup t g')
+    , (u, d) <- Map.assocs m'
+    ]
 
--- * Strongly connected components.
+------------------------------------------------------------------------
+-- Strongly connected components
 
 -- | The graph's strongly connected components, in reverse topological
 -- order.
 
-sccs' :: Ord n => Graph n n e -> [Graph.SCC n]
+sccs' :: Ord n => Graph n e -> [Graph.SCC n]
 sccs' g =
   Graph.stronglyConnComp
     [ (n, n, map target (edgesFrom g [n]))
@@ -395,7 +514,7 @@
 -- | The graph's strongly connected components, in reverse topological
 -- order.
 
-sccs :: Ord n => Graph n n e -> [[n]]
+sccs :: Ord n => Graph n e -> [[n]]
 sccs = map Graph.flattenSCC . sccs'
 
 -- | SCC DAGs.
@@ -470,7 +589,7 @@
 
 sccDAG' ::
   forall n e. Ord n
-  => Graph n n e
+  => Graph n e
   -> [Graph.SCC n]
      -- ^ The graph's strongly connected components.
   -> DAG n
@@ -512,21 +631,16 @@
   componentMap = IntMap.fromList (map (mapFst convertInt) components)
 
   secondNodeMap :: Map n Int
-  secondNodeMap = fmap convertInt firstNodeMap
+  secondNodeMap = Map.map convertInt firstNodeMap
 
 -- | Constructs a DAG containing the graph's strongly connected
 -- components.
 
-sccDAG :: Ord n => Graph n n e -> DAG n
+sccDAG :: Ord n => Graph n e -> DAG n
 sccDAG g = sccDAG' g (sccs' g)
 
--- | Returns @True@ iff the graph is acyclic.
-
-acyclic :: Ord n => Graph n n e -> Bool
-acyclic = all isAcyclic . sccs'
-  where
-  isAcyclic Graph.AcyclicSCC{} = True
-  isAcyclic Graph.CyclicSCC{}  = False
+------------------------------------------------------------------------
+-- Reachability
 
 -- | @reachableFrom g n@ is a map containing all nodes reachable from
 -- @n@ in @g@. For each node a simple path to the node is given, along
@@ -540,8 +654,28 @@
 -- time): /O(e log n)/, if the lists are not inspected. Inspection of
 -- a prefix of a list is linear in the length of the prefix.
 
-reachableFrom :: Ord n => Graph n n e -> n -> Map n (Int, [Edge n n e])
-reachableFrom g n = bfs (SQ.singleton (n, BQ.empty)) Map.empty
+reachableFrom :: Ord n => Graph n e -> n -> Map n (Int, [Edge n e])
+reachableFrom g n = reachableFromInternal g (Set.singleton n)
+
+-- | @reachableFromSet g ns@ is a set containing all nodes reachable
+-- from @ns@ in @g@.
+--
+-- Precondition: Every node in @ns@ must be a node in @g@. The number
+-- of nodes in the graph must not be larger than @'maxBound' ::
+-- 'Int'@.
+--
+-- Amortised time complexity (assuming that comparisons take constant
+-- time): /O((|@ns@| + e) log n)/.
+
+reachableFromSet :: Ord n => Graph n e -> Set n -> Set n
+reachableFromSet g ns = Map.keysSet (reachableFromInternal g ns)
+
+-- | Used to implement 'reachableFrom' and 'reachableFromSet'.
+
+reachableFromInternal ::
+  Ord n => Graph n e -> Set n -> Map n (Int, [Edge n e])
+reachableFromInternal g ns =
+  bfs (SQ.fromList (map (, BQ.empty) (Set.toList ns))) Map.empty
   where
   bfs !q !map = case SQ.lview q of
     Nothing          -> map
@@ -565,55 +699,38 @@
 -- nodes in the graph must not be larger than @'maxBound' :: 'Int'@.
 --
 -- Amortised time complexity (assuming that comparisons and the
--- predicates take constant time to compute): /O(e log n)/.
+-- predicates take constant time to compute): /O(n + e log n)/.
 
 walkSatisfying ::
   Ord n =>
-  (e -> Bool) -> (e -> Bool) ->
-  Graph n n e -> n -> n -> Maybe [Edge n n e]
+  (Edge n e -> Bool) -> (Edge n e -> Bool) ->
+  Graph n e -> n -> n -> Maybe [Edge n e]
 walkSatisfying every some g from to =
   case
     [ (l1 + l2, p1 ++ [e] ++ map transposeEdge (reverse p2))
     | e <- everyEdges
-    , some (label e)
+    , some e
     , (l1, p1) <- maybeToList (Map.lookup (source e) fromReaches)
     , (l2, p2) <- maybeToList (Map.lookup (target e) reachesTo)
     ] of
     []  -> Nothing
     ess -> Just $ snd $ List.minimumBy (compare `on` fst) ess
   where
-  everyEdges = [ e | e <- toList g, every (label e) ]
+  everyEdges = [ e | e <- edges g, every e ]
 
-  fromReaches = reachableFrom (fromList everyEdges) from
+  fromReaches = reachableFrom (fromEdges everyEdges) from
 
   reachesTo =
-    reachableFrom (fromList (map transposeEdge everyEdges)) to
-
--- * Graph composition
+    reachableFrom (fromEdges (map transposeEdge everyEdges)) to
 
--- | @composeWith times plus g g'@ finds all edges
---   @s --c_i--> t_i --d_i--> u@ and constructs the
---   result graph from @edge(s,u) = sum_i (c_i times d_i)@.
---
---   Complexity:  for each edge @s --> t@ in @g@ we lookup up
---   all edges starting in with @t@ in @g'@.
---
-composeWith :: (Ord t, Ord u) => (c -> d -> e) -> (e -> e -> e) ->
-  Graph s t c -> Graph t u d -> Graph s u e
-composeWith times plus (Graph g) (Graph g') = Graph $
-  Map.mapMaybe (discardEmpty . comp) g where
-    comp m = Map.fromListWith plus
-      [ (u, c `times` d)
-      | (t, c) <- Map.assocs m
-      , m'     <- maybeToList (Map.lookup t g')
-      , (u, d) <- Map.assocs m'
-      ]
+------------------------------------------------------------------------
+-- Transitive closure
 
 -- | Transitive closure ported from "Agda.Termination.CallGraph".
 --
 --   Relatively efficient, see Issue 1560.
 
-complete :: (Eq e, Null e, SemiRing e, Ord n) => Graph n n e -> Graph n n e
+complete :: (Eq e, Null e, SemiRing e, Ord n) => Graph n e -> Graph n e
 complete g = repeatWhile (mapFst (not . discrete) . combineNewOld' g) g
   where
     combineNewOld' new old = unzip $ unionWith comb new' old'
@@ -637,7 +754,7 @@
 --
 --   @complete g = snd $ last $ completeIter g@
 
-completeIter :: (Eq e, Null e, SemiRing e, Ord n) => Graph n n e -> [(Graph n n e, Graph n n e)]
+completeIter :: (Eq e, Null e, SemiRing e, Ord n) => Graph n e -> [(Graph n e, Graph n e)]
 completeIter g = iterWhile (not . discrete) (combineNewOld' g) g
   where
     combineNewOld' new old = unzip $ unionWith comb new' old'
@@ -670,7 +787,7 @@
 
 gaussJordanFloydWarshallMcNaughtonYamadaReference ::
   forall n e. (Ord n, Eq e, StarSemiRing e) =>
-  Graph n n e -> Graph n n e
+  Graph n e -> Graph n e
 gaussJordanFloydWarshallMcNaughtonYamadaReference g =
   toGraph (foldr step initialMatrix nodeIndices)
   where
@@ -706,10 +823,12 @@
       ]
 
   toGraph m =
-    fromList [ Edge (indexMap Map.! i) (indexMap Map.! j) e
-             | ((i, j), e) <- Array.assocs m
-             , e /= ozero
-             ]
+    fromEdges [ Edge (indexMap Map.! i) (indexMap Map.! j) e
+              | ((i, j), e) <- Array.assocs m
+              , e /= ozero
+              ]
+      `union`
+    fromNodeSet (nodes g)
 
 -- | Computes the transitive closure of the graph.
 --
@@ -730,7 +849,7 @@
 
 gaussJordanFloydWarshallMcNaughtonYamada ::
   forall n e. (Ord n, Eq e, StarSemiRing e) =>
-  Graph n n e -> (Graph n n e, [Graph.SCC n])
+  Graph n e -> (Graph n e, [Graph.SCC n])
 gaussJordanFloydWarshallMcNaughtonYamada g =
   (loop components g, components)
   where
@@ -738,7 +857,7 @@
   forwardDAG = sccDAG' g components
   reverseDAG = oppositeDAG forwardDAG
 
-  loop :: [Graph.SCC n] -> Graph n n e -> Graph n n e
+  loop :: [Graph.SCC n] -> Graph n e -> Graph n e
   loop []           !g = g
   loop (scc : sccs)  g =
     loop sccs (foldr step g (Graph.flattenSCC scc))
@@ -748,7 +867,7 @@
     -- All nodes that can reach the SCC.
     canReach     = reachable reverseDAG scc
 
-    step :: n -> Graph n n e -> Graph n n e
+    step :: n -> Graph n e -> Graph n e
     step k !g =
       foldr (insertEdgeWith oplus) g
         [ Edge i j e
diff --git a/src/full/Agda/Utils/Haskell/Syntax.hs b/src/full/Agda/Utils/Haskell/Syntax.hs
--- a/src/full/Agda/Utils/Haskell/Syntax.hs
+++ b/src/full/Agda/Utils/Haskell/Syntax.hs
@@ -31,7 +31,10 @@
 data DataOrNew = DataType | NewType
   deriving (Eq)
 
-data ConDecl = ConDecl Name [Type]
+data ConDecl = ConDecl Name [(Maybe Strictness, Type)]
+  deriving (Eq)
+
+data Strictness = Lazy | Strict
   deriving (Eq)
 
 type Deriving = (QName, [Type])
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
@@ -10,7 +10,6 @@
 import Data.Text.Lazy (Text)
 import qualified Data.Text.Lazy.IO as T
 import qualified System.IO as IO
-import Control.Applicative
 
 -- | Converts many character sequences which may be interpreted as
 -- line or paragraph separators into '\n'.
diff --git a/src/full/Agda/Utils/Impossible.hs b/src/full/Agda/Utils/Impossible.hs
--- a/src/full/Agda/Utils/Impossible.hs
+++ b/src/full/Agda/Utils/Impossible.hs
@@ -7,7 +7,6 @@
 module Agda.Utils.Impossible where
 
 import Control.Exception as E
-import Data.Typeable ( Typeable )
 
 -- | \"Impossible\" errors, annotated with a file name and a line
 -- number corresponding to the source code location of the error.
@@ -21,8 +20,6 @@
     -- ^ @Impossible@ with a different error message.
     --   Used when we reach a program point which can in principle
     --   be reached, but not for a certain run.
-
-  deriving Typeable
 
 instance Show Impossible where
   show (Impossible file line) = unlines
diff --git a/src/full/Agda/Utils/IntSet/Infinite.hs b/src/full/Agda/Utils/IntSet/Infinite.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/IntSet/Infinite.hs
@@ -0,0 +1,169 @@
+-- |  Possibly infinite sets of integers (but with finitely many consecutive
+--    segments). Used for checking guard coverage in int/nat cases in the
+--    treeless compiler.
+module Agda.Utils.IntSet.Infinite
+  ( IntSet
+  , empty, full, below, above, singleton
+  , difference, member, toFiniteList
+  , invariant )
+  where
+
+import Control.Arrow (first, second)
+import Data.Semigroup hiding (All(..))
+import Data.List
+import Data.Set (Set)
+import qualified Data.Set as Set
+
+-- | Represents a set of integers.
+--   Invariants:
+--     - All cannot be the argument to `Below` or `Above`
+--     - at most one 'IntsBelow'
+--     - at most one 'IntsAbove'
+--     - if `Below lo` and `Below hi`, then `lo < hi`
+--     - if `Below lo .. (Some xs)` then `all (> lo) xs`
+--     - if `Above hi .. (Some xs)` then `all (< hi - 1) xs`
+data IntSet = All
+              | Some (Set Integer)
+              | Below Integer IntSet  -- exclusive
+              | Above Integer IntSet  -- inclusive
+  deriving (Show)
+
+instance Eq IntSet where
+  r == r' = norm r == norm r'
+    where
+      norm All          = Nothing
+      norm (Some xs)    = Just (Nothing, Nothing, xs)
+      norm (Below lo r) = do (_, hi, xs) <- norm r; return (Just lo, hi, xs)
+      norm (Above hi r) = do (lo, _, xs) <- norm r; return (lo, Just hi, xs)
+
+below' :: Integer -> IntSet -> IntSet
+below' _  All = All
+below' lo r@(Some xs)
+  | elem lo xs = below' (lo + 1) r
+  | otherwise  = Below lo $ Some $ Set.filter (>= lo) xs
+below' lo r0@(Below lo' r)
+  | lo' >= lo = r0
+  | otherwise = below' lo r
+below' lo (Above hi r)
+  | hi <= lo  = All
+  | otherwise = Above hi $ below' lo r
+
+above' :: Integer -> IntSet -> IntSet
+above' _  All = All
+above' hi r@(Some xs)
+  | elem (hi - 1) xs = above' (hi - 1) r
+  | otherwise        = Above hi $ Some $ Set.filter (< hi) xs
+above' hi r0@(Above hi' r)
+  | hi' <= hi = r0
+  | otherwise = above' hi r
+above' hi (Below lo r)
+  | hi <= lo  = All
+  | otherwise = Below lo $ above' hi r
+
+some' :: Set Integer -> IntSet -> IntSet
+some' xs r | null xs = r
+some' xs (Some ys) = Some (Set.union xs ys)
+some' _  All = All
+some' xs (Below lo r)
+  | elem lo xs = some' xs (Below (lo + 1) r)
+  | otherwise  = below' lo $ some' (Set.filter (>= lo) xs) r
+some' xs (Above hi r)
+  | elem (hi - 1) xs = some' xs (Above (hi - 1) r)
+  | otherwise        = above' hi $ some' (Set.filter (< hi) xs) r
+
+difference :: IntSet -> IntSet -> IntSet
+difference r All           = empty
+difference r (Some xs)     = subtractSome r xs
+difference r (Below lo r') = difference (subtractBelow r lo) r'
+difference r (Above hi r') = difference (subtractAbove r hi) r'
+
+subtractSome :: IntSet -> Set Integer -> IntSet
+subtractSome r xs | null xs = r
+subtractSome All xs = below lo <> above hi <> Some (Set.fromList [lo..hi - 1] `Set.difference` xs)
+  where lo = minimum xs
+        hi = maximum xs + 1
+subtractSome (Some ys) xs = Some (Set.difference ys xs)
+subtractSome (Below lo r) xs = Below (min lo lo') $ subtractSome (Some (Set.fromList [lo'..lo - 1]) <> r) xs
+  where lo' = minimum xs
+subtractSome (Above hi r) xs = Above (max hi hi') $ subtractSome (Some (Set.fromList [hi..hi' - 1]) <> r) xs
+  where hi' = maximum xs + 1
+
+subtractBelow :: IntSet -> Integer -> IntSet
+subtractBelow All           lo = above lo
+subtractBelow (Below lo' r) lo = some' (Set.fromList [lo..lo' - 1]) (subtractBelow r lo)
+subtractBelow (Above hi r)  lo = Above (max hi lo) (subtractBelow r lo)
+subtractBelow (Some xs)     lo = Some $ Set.filter (>= lo) xs
+
+subtractAbove :: IntSet -> Integer -> IntSet
+subtractAbove All           hi = below hi
+subtractAbove (Above hi' r) hi = some' (Set.fromList [hi'..hi - 1]) (subtractAbove r hi)
+subtractAbove (Below lo r)  hi = Below (min lo hi) (subtractAbove r hi)
+subtractAbove (Some xs)     hi = Some $ Set.filter (< hi) xs
+
+instance Semigroup IntSet where
+  Below lo r <> r' = below' lo (r <> r')
+  Above hi r <> r' = above' hi (r <> r')
+  Some xs    <> r' = some' xs r'
+  All        <> _  = All
+
+instance Monoid IntSet where
+  mempty  = empty
+  mappend = (<>)
+
+-- | Membership
+member :: Integer -> IntSet -> Bool
+member _ All          = True
+member x (Some xs)    = Set.member x xs
+member x (Below lo s) = x < lo  || member x s
+member x (Above hi s) = x >= hi || member x s
+
+-- | All integers `< n`
+below :: Integer -> IntSet
+below lo = Below lo empty
+
+-- | All integers `>= n`
+above :: Integer -> IntSet
+above hi = Above hi empty
+
+-- | A single integer.
+singleton :: Integer -> IntSet
+singleton x = fromList [x]
+
+-- | From a list of integers.
+fromList :: [Integer] -> IntSet
+fromList xs = Some (Set.fromList xs)
+
+-- | No integers.
+empty :: IntSet
+empty = Some Set.empty
+
+-- | All integers.
+full :: IntSet
+full = All
+
+-- | If finite, return the list of elements.
+toFiniteList :: IntSet -> Maybe [Integer]
+toFiniteList (Some xs) = Just $ Set.toList xs
+toFiniteList All       = Nothing
+toFiniteList Above{}   = Nothing
+toFiniteList Below{}   = Nothing
+
+-- | Invariant.
+invariant :: IntSet -> Bool
+invariant xs =
+  case xs of
+    All         -> True
+    Some{}      -> True
+    Below lo ys -> invariant ys && invBelow lo ys
+    Above hi ys -> invariant ys && invAbove hi ys
+  where
+    invBelow lo All          = False
+    invBelow lo (Some xs)    = all (> lo) xs
+    invBelow lo Below{}      = False
+    invBelow lo (Above hi r) = lo < hi && invBelow lo r
+
+    invAbove hi All          = False
+    invAbove hi (Some xs)    = all (< hi - 1) xs
+    invAbove hi Above{}      = False
+    invAbove hi (Below lo r) = lo < hi && invAbove hi r
+
diff --git a/src/full/Agda/Utils/Lens.hs b/src/full/Agda/Utils/Lens.hs
--- a/src/full/Agda/Utils/Lens.hs
+++ b/src/full/Agda/Utils/Lens.hs
@@ -9,7 +9,7 @@
   , (<&>) -- reexported from Agda.Utils.Functor
   ) where
 
-import Control.Applicative
+import Control.Applicative ( Const(Const), getConst )
 import Control.Monad.State
 import Control.Monad.Reader
 import Control.Monad.Writer
@@ -27,6 +27,10 @@
 --   Mnemoic: "Lens inner outer".
 type Lens' i o = forall f. Functor f => (i -> f i) -> o -> f o
 
+type LensGet i o = o -> i
+type LensSet i o = i -> o -> o
+type LensMap i o = (i -> i) -> o -> o
+
 -- * Some simple lenses.
 
 lFst :: Lens' a (a, b)
@@ -43,16 +47,24 @@
 o ^. l = getConst $ l Const o
 
 -- | Set inner part @i@ of structure @o@ as designated by @Lens' i o@.
-set :: Lens' i o -> i -> o -> o
+set :: Lens' i o -> LensSet i o
 set l = over l . const
 
 -- | Modify inner part @i@ of structure @o@ using a function @i -> i@.
-over :: Lens' i o -> (i -> i) -> o -> o
+over :: Lens' i o -> LensMap i o
 over l f o = runIdentity $ l (Identity . f) o
 
 
--- * State accessors and modifiers.
+-- * State accessors and modifiers using 'StateT'.
 
+-- | Focus on a part of the state for a stateful computation.
+focus :: Monad m => Lens' i o -> StateT i m a -> StateT o m a
+focus l m = StateT $ \ o -> do
+  (a, i) <- runStateT m (o ^. l)
+  return (a, set l i o)
+
+-- * State accessors and modifiers using 'MonadState'.
+
 -- | Read a part of the state.
 use :: MonadState o m => Lens' i o -> m i
 use l = do !x <- gets (^. l)
@@ -70,30 +82,27 @@
 
 infix 4 %==
 -- | Modify a part of the state monadically.
-(%==)
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Functor m, MonadState o m)
-#else
-  :: MonadState o m
-#endif
-  => Lens' i o -> (i -> m i) -> m ()
+(%==) :: MonadState o m => Lens' i o -> (i -> m i) -> m ()
 l %== f = put =<< l f =<< get
 
 infix 4 %%=
 -- | Modify a part of the state monadically, and return some result.
-(%%=)
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Functor m, MonadState o m)
-#else
-  :: MonadState o m
-#endif
-  => Lens' i o -> (i -> m (i, r)) -> m r
+(%%=) :: MonadState o m => Lens' i o -> (i -> m (i, r)) -> m r
 l %%= f = do
   o <- get
   (o', r) <- runWriterT $ l (WriterT . f) o
   put o'
   return r
 
+-- | Modify a part of the state locally.
+locallyState :: MonadState o m => Lens' i o -> (i -> i) -> m r -> m r
+locallyState l f k = do
+  old <- use l
+  l %= f
+  x <- k
+  l .= old
+  return x
+
 -- * Read-only state accessors and modifiers.
 
 -- | Ask for part of read-only state.
@@ -103,6 +112,9 @@
 -- | Modify a part of the state in a subcomputation.
 locally :: MonadReader o m => Lens' i o -> (i -> i) -> m a -> m a
 locally l = local . over l
+
+locally' :: ((o -> o) -> m a -> m a) -> Lens' i o -> (i -> i) -> m a -> m a
+locally' local l = local . over l
 
 key :: Ord k => k -> Lens' (Maybe v) (Map k v)
 key k f m = f (Map.lookup k m) <&> \ v -> Map.alter (const v) k m
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
@@ -310,6 +310,19 @@
   loop []       (_ : _)  = Nothing
   loop (_ : _)  []       = Nothing
 
+-- | Like 'zipWith' but keep the rest of the second list as-is
+--   (in case the second list is longer).
+--
+-- @
+--   zipWithKeepRest f as bs == zipWith f as bs ++ drop (length as) bs
+-- @
+zipWithKeepRest :: (a -> b -> b) -> [a] -> [b] -> [b]
+zipWithKeepRest f = loop
+  where
+  loop []       bs       = bs
+  loop as       []       = []
+  loop (a : as) (b : bs) = f a b : loop as bs
+
 -- -- UNUSED; a better type would be
 -- -- zipWithTails :: (a -> b -> c) -> [a] -> [b] -> ([c], Either [a] [b])
 
diff --git a/src/full/Agda/Utils/ListT.hs b/src/full/Agda/Utils/ListT.hs
--- a/src/full/Agda/Utils/ListT.hs
+++ b/src/full/Agda/Utils/ListT.hs
@@ -10,7 +10,7 @@
 
 module Agda.Utils.ListT where
 
-import Control.Applicative
+import Control.Applicative ( Alternative((<|>), empty) )
 import Control.Monad
 import Control.Monad.Reader
 import Control.Monad.State
@@ -77,22 +77,14 @@
 sgMListT ma = consMListT ma nilListT
 
 -- | Extending a monadic function to 'ListT'.
-mapMListT :: ( Monad m
-#if __GLASGOW_HASKELL__ <= 708
-             , Functor m
-#endif
-             ) => (a -> m b) -> ListT m a -> ListT m b
+mapMListT :: Monad m => (a -> m b) -> ListT m a -> ListT m b
 mapMListT f (ListT ml) = ListT $ do
   caseMaybeM ml (return Nothing) $ \ (a, as) -> do
     b  <- f a
     return $ Just (b , mapMListT f as)
 
 -- | Alternative implementation using 'foldListT'.
-mapMListT_alt :: ( Monad m
-#if __GLASGOW_HASKELL__ <= 708
-                 , Functor m
-#endif
-                 ) => (a -> m b) -> ListT m a -> ListT m b
+mapMListT_alt :: Monad m => (a -> m b) -> ListT m a -> ListT m b
 mapMListT_alt f = runMListT . foldListT cons (return nilListT)
   where cons a ml = consMListT (f a) <$> ml
 
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
@@ -3,7 +3,6 @@
 module Agda.Utils.Map where
 
 import Prelude hiding (map, lookup, mapM)
-import Control.Applicative
 import Data.Map as Map
 import Data.Traversable
 
@@ -18,13 +17,7 @@
 data EitherOrBoth a b = L a | B a b | R b
 
 -- | Not very efficient (goes via a list), but it'll do.
-unionWithM
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Ord k, Functor m, Monad m)
-#else
-  :: (Ord k, Monad m)
-#endif
-  => (a -> a -> m a) -> Map k a -> Map k a -> m (Map k a)
+unionWithM :: (Ord k, Monad m) => (a -> a -> m a) -> Map k a -> Map k a -> m (Map k a)
 unionWithM f m1 m2 = fromList <$> mapM combine (toList m)
     where
         m = unionWith both (map L m1) (map R m2)
diff --git a/src/full/Agda/Utils/Maybe/Strict.hs b/src/full/Agda/Utils/Maybe/Strict.hs
--- a/src/full/Agda/Utils/Maybe/Strict.hs
+++ b/src/full/Agda/Utils/Maybe/Strict.hs
@@ -1,9 +1,6 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
-
-#if __GLASGOW_HASKELL__ >= 708
-{-# LANGUAGE DeriveGeneric #-}
-#endif
+{-# LANGUAGE DeriveGeneric      #-}
 
 
 {-# OPTIONS_GHC -fno-warn-orphans #-}
@@ -36,15 +33,13 @@
 import           Control.DeepSeq     (NFData (..))
 import           Data.Binary         (Binary (..))
 import           Data.Data           (Data (..))
-import           Data.Semigroup      (Semigroup, Monoid, (<>), mempty, mappend)
+import           Data.Monoid         (Monoid, mempty, mappend)
+import           Data.Semigroup      (Semigroup, (<>))
 import           Data.Foldable       (Foldable (..))
 import           Data.Traversable    (Traversable (..))
-import           Data.Typeable       (Typeable)
 import           Data.Strict.Maybe   (Maybe (Nothing, Just), fromJust,
                                       fromMaybe, isJust, isNothing, maybe)
-#if __GLASGOW_HASKELL__ >= 708
 import           GHC.Generics        (Generic (..))
-#endif
 
 import Agda.Utils.Null
 
@@ -57,11 +52,7 @@
 toLazy (Just x) = Lazy.Just x
 
 deriving instance Data a => Data (Maybe a)
-deriving instance Typeable Maybe
-
-#if __GLASGOW_HASKELL__ >= 708
 deriving instance Generic  (Maybe a)
-#endif
 
 instance Null (Maybe a) where
   empty = Nothing
diff --git a/src/full/Agda/Utils/Memo.hs b/src/full/Agda/Utils/Memo.hs
--- a/src/full/Agda/Utils/Memo.hs
+++ b/src/full/Agda/Utils/Memo.hs
@@ -2,7 +2,6 @@
 
 module Agda.Utils.Memo where
 
-import Control.Applicative
 import Control.Monad.State
 import System.IO.Unsafe
 import Data.IORef
@@ -15,13 +14,7 @@
 -- Simple memoisation in a state monad
 
 -- | Simple, non-reentrant memoisation.
-memo
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Functor m, MonadState s m)
-#else
-  :: MonadState s m
-#endif
-  => Lens' (Maybe a) s -> m a -> m a
+memo :: MonadState s m => Lens' (Maybe a) s -> m a -> m a
 memo tbl compute = do
   mv <- use tbl
   case mv of
@@ -32,13 +25,7 @@
 
 -- | Recursive memoisation, second argument is the value you get
 --   on recursive calls.
-memoRec
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Functor m, MonadState s m)
-#else
-  :: MonadState s m
-#endif
-  => Lens' (Maybe a) s -> a -> m a -> m a
+memoRec :: MonadState s m => Lens' (Maybe a) s -> a -> m a -> m a
 memoRec tbl ih compute = do
   mv <- use tbl
   case mv of
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
@@ -12,7 +12,6 @@
 import Control.Monad       hiding (mapM, forM)
 import Control.Monad.State
 import Control.Monad.Writer
-import Control.Applicative
 import Data.Traversable as Trav hiding (for, sequence)
 import Data.Foldable as Fold
 import Data.Maybe
@@ -124,23 +123,11 @@
 -- Lists and monads -------------------------------------------------------
 
 -- | A monadic version of @'mapMaybe' :: (a -> Maybe b) -> [a] -> [b]@.
-mapMaybeM
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Functor m, Monad m)
-#else
-  :: Monad m
-#endif
-  => (a -> m (Maybe b)) -> [a] -> m [b]
+mapMaybeM :: Monad m => (a -> m (Maybe b)) -> [a] -> m [b]
 mapMaybeM f xs = catMaybes <$> Trav.mapM f xs
 
 -- | The @for@ version of 'mapMaybeM'.
-forMaybeM
-#if __GLASGOW_HASKELL__ <= 708
-  :: (Functor m, Monad m)
-#else
-  :: Monad m
-#endif
-  => [a] -> (a -> m (Maybe b)) -> m [b]
+forMaybeM :: Monad m => [a] -> (a -> m (Maybe b)) -> m [b]
 forMaybeM = flip mapMaybeM
 
 -- | A monadic version of @'dropWhile' :: (a -> Bool) -> [a] -> [a]@.
@@ -154,6 +141,17 @@
   pure ([], [])
 partitionM f (x:xs) =
   (\ b (l, r) -> if b then (x:l, r) else (l, x:r)) <$> f x <*> partitionM f xs
+
+-- MonadPlus -----------------------------------------------------------------
+
+-- | Translates 'Maybe' to 'MonadPlus'.
+fromMaybeMP :: MonadPlus m => Maybe a -> m a
+fromMaybeMP = maybe mzero return
+
+-- | Generalises the 'catMaybes' function from lists to an arbitrary
+-- 'MonadPlus'.
+catMaybesMP :: MonadPlus m => m (Maybe a) -> m a
+catMaybesMP = (>>= fromMaybeMP)
 
 -- Error monad ------------------------------------------------------------
 
diff --git a/src/full/Agda/Utils/NonemptyList.hs b/src/full/Agda/Utils/NonemptyList.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/NonemptyList.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+-- | Nonempty lists.
+module Agda.Utils.NonemptyList
+  ( module Agda.Utils.NonemptyList
+  , toList ) where
+
+import Control.Monad
+import Data.Data (Data)
+import Data.Foldable (Foldable, toList)
+import Data.Traversable (Traversable)
+import Data.Semigroup
+import qualified Data.List as List
+
+infixr 5 :!
+data NonemptyList a = (:!) { headNe :: a, tailNe :: [a] }
+  deriving (Eq, Ord, Functor, Foldable, Traversable, Data)
+
+instance Semigroup (NonemptyList a) where
+  (x :! xs) <> (y :! ys) = x :! xs ++ y : ys
+
+instance Applicative NonemptyList where
+  pure x = x :! []
+  (<*>) = ap
+
+instance Monad NonemptyList where
+  return = pure
+  (x :! xs) >>= f = foldr1 (<>) (f x : map f xs)
+
+instance Show a => Show (NonemptyList a) where
+  showsPrec _ = showList . toList
+
+-- | Returns the union of the argument lists seen as sets. The order of the
+--   elements in the result is not specified. Precondition: arguments contain
+--   no duplicates.
+unionNe :: Eq a => NonemptyList a -> NonemptyList a -> NonemptyList a
+unionNe (x :! xs) (y :! ys) = z :! zs
+  where z : zs = List.union (x : xs) (y : ys)
+
+-- | Zip two nonempty lists.
+zipWithNe :: (a -> b -> c) -> NonemptyList a -> NonemptyList b -> NonemptyList c
+zipWithNe f (x :! xs) (y :! ys) = f x y :! zipWith f xs ys
+
+-- | Zip two nonempty lists.
+zipNe :: NonemptyList a -> NonemptyList b -> NonemptyList (a, b)
+zipNe = zipWithNe (,)
+
+-- | Case on a list, getting a nonempty list in the cons case.
+caseListNe :: [a] -> b -> (NonemptyList a -> b) -> b
+caseListNe []       e ne = e
+caseListNe (x : xs) e ne = ne (x :! xs)
+
+-- | Case on a list, with list last.
+listCaseNe :: b -> (NonemptyList a -> b) -> [a] -> b
+listCaseNe e ne xs = caseListNe xs e ne
+
+-- | Check if an element is present in a list.
+elemNe :: Eq a => a -> NonemptyList a -> Bool
+elemNe y (x :! xs) = elem y (x : xs)
+
diff --git a/src/full/Agda/Utils/Null.hs b/src/full/Agda/Utils/Null.hs
--- a/src/full/Agda/Utils/Null.hs
+++ b/src/full/Agda/Utils/Null.hs
@@ -35,14 +35,6 @@
 import Agda.Utils.Bag (Bag)
 import qualified Agda.Utils.Bag as Bag
 
--- Andreas, 2015-06-24 orphan instance has to go here
--- to be able to define instance Null Doc
-
-#if !MIN_VERSION_pretty(1,1,2)
-instance Eq Doc where
-  (==) = (==) `on` render
-#endif
-
 class Null a where
   empty :: a
   null  :: a -> Bool
diff --git a/src/full/Agda/Utils/POMonoid.hs b/src/full/Agda/Utils/POMonoid.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/POMonoid.hs
@@ -0,0 +1,41 @@
+-- | Partially ordered monoids.
+
+module Agda.Utils.POMonoid where
+
+import Data.Semigroup
+import Data.Monoid
+
+import Agda.Utils.PartialOrd
+
+-- | Partially ordered semigroup.
+--
+-- Law: composition must be monotone.
+--
+-- @
+--   related x POLE x' && related y POLE y' ==>
+--   related (x <> y) POLE (x' <> y')
+-- @
+
+class (PartialOrd a, Semigroup a) => POSemigroup a where
+
+-- | Partially ordered monoid.
+--
+-- Law: composition must be monotone.
+--
+-- @
+--   related x POLE x' && related y POLE y' ==>
+--   related (x <> y) POLE (x' <> y')
+-- @
+
+class (PartialOrd a, Monoid a) => POMonoid a where
+
+-- | Completing POMonoids with inverses to form a Galois connection.
+--
+-- Law: composition and inverse composition form a Galois connection.
+--
+-- @
+--   related (inverseCompose p x) POLE y <==> related x POLE (p <> y)
+-- @
+
+class POMonoid a => LeftClosedPOMonoid a where
+  inverseCompose :: a -> a -> a
diff --git a/src/full/Agda/Utils/Parser/MemoisedCPS.hs b/src/full/Agda/Utils/Parser/MemoisedCPS.hs
--- a/src/full/Agda/Utils/Parser/MemoisedCPS.hs
+++ b/src/full/Agda/Utils/Parser/MemoisedCPS.hs
@@ -30,7 +30,7 @@
   , ParserWithGrammar
   ) where
 
-import Control.Applicative
+import Control.Applicative ( Alternative((<|>), empty, many, some) )
 import Control.Monad (ap, liftM2)
 import Control.Monad.State.Strict (State, evalState, runState, get, put, modify')
 
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
@@ -15,7 +15,6 @@
 import Data.Traversable (Traversable)
 
 import Data.Data (Data)
-import Data.Typeable (Typeable)
 
 import Agda.Syntax.Position (KillRange(..))
 import Agda.Utils.Functor
@@ -38,7 +37,7 @@
 --   @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, Data)
+  deriving (Eq, Data)
 
 instance Show Permutation where
   show (Perm n xs) = showx [0..n - 1] ++ " -> " ++ showx xs
@@ -223,7 +222,7 @@
   { dropN    :: Int  -- ^ Non-negative number of things to drop.
   , dropFrom :: a    -- ^ Where to drop from.
   }
-  deriving (Eq, Ord, Show, Typeable, Data, Functor, Foldable, Traversable)
+  deriving (Eq, Ord, Show, Data, Functor, Foldable, Traversable)
 
 instance KillRange a => KillRange (Drop a) where
   killRange = fmap killRange
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
@@ -8,7 +8,6 @@
   , updatePtr, updatePtrM
   ) where
 
-import Control.Applicative
 import Control.DeepSeq
 import Control.Concurrent.MVar
 import Data.Foldable
@@ -26,7 +25,7 @@
 
 data Ptr a = Ptr { ptrTag :: !Integer
                  , ptrRef :: !(IORef a) }
-  deriving (Typeable, Data)
+  deriving Data
 
 -- cheating because you shouldn't be digging this far anyway
 instance Typeable a => Data (IORef a) where
diff --git a/src/full/Agda/Utils/Pretty.hs b/src/full/Agda/Utils/Pretty.hs
--- a/src/full/Agda/Utils/Pretty.hs
+++ b/src/full/Agda/Utils/Pretty.hs
@@ -1,9 +1,5 @@
 {-# LANGUAGE CPP #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE DeriveDataTypeable #-}
-#endif
-
 {-| Pretty printing functions.
 -}
 module Agda.Utils.Pretty
@@ -14,12 +10,10 @@
 import Data.Int ( Int32 )
 import Data.Data (Data(..))
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Typeable ( Typeable )
-#endif
-
 import Text.PrettyPrint hiding (TextDetails(Str), empty)
 
+import Agda.Utils.NonemptyList
+
 #include "undefined.h"
 import Agda.Utils.Impossible
 
@@ -67,6 +61,9 @@
 instance Pretty a => Pretty [a] where
   pretty = prettyList
 
+instance Pretty a => Pretty (NonemptyList a) where
+  pretty = prettyList . toList
+
 -- * 'Doc' utilities
 
 pwords :: String -> [Doc]
@@ -103,11 +100,6 @@
 -- | Handles strings with newlines properly (preserving indentation)
 multiLineText :: String -> Doc
 multiLineText = vcat . map text . lines
-
-
-#if __GLASGOW_HASKELL__ <= 708
-deriving instance Typeable Doc
-#endif
 
 -- cheating because you shouldn't be digging this far anyway
 instance Data Doc where
diff --git a/src/full/Agda/Utils/SemiRing.hs b/src/full/Agda/Utils/SemiRing.hs
--- a/src/full/Agda/Utils/SemiRing.hs
+++ b/src/full/Agda/Utils/SemiRing.hs
@@ -8,6 +8,12 @@
   oplus  :: a -> a -> a
   otimes :: a -> a -> a
 
+instance SemiRing () where
+  ozero      = ()
+  oone       = ()
+  oplus  _ _ = ()
+  otimes _ _ = ()
+
 instance SemiRing a => SemiRing (Maybe a) where
   ozero = Nothing
   oone  = Just oone
@@ -25,6 +31,9 @@
 
 class SemiRing a => StarSemiRing a where
   ostar :: a -> a
+
+instance StarSemiRing () where
+  ostar _ = ()
 
 instance StarSemiRing a => StarSemiRing (Maybe a) where
   ostar Nothing  = oone
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
@@ -4,9 +4,12 @@
 import qualified Data.List as List
 
 import Numeric
-
 import Agda.Utils.List
 
+import Data.IORef
+import Agda.Interaction.Options.IORefs (unicodeOrAscii, UnicodeOrAscii(..))
+import qualified System.IO.Unsafe as UNSAFE
+
 -- | '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':
@@ -30,6 +33,24 @@
 
   escapeChars = "\"\\"
 
+-- | Turns the string into a Haskell string literal, avoiding escape
+-- codes.
+
+haskellStringLiteral :: String -> String
+haskellStringLiteral s = "\"" ++ concatMap escape s ++ "\""
+  where
+  escape c | c == '\n'         = "\\n"
+           | c == '"'          = "\\\""
+           | c == '\\'         = "\\\\"
+           | ok c              = [c]
+           | otherwise         = [c]
+
+  ok c = case generalCategory c of
+    UppercaseLetter -> True
+    LowercaseLetter -> True
+    TitlecaseLetter -> True
+    _               -> isSymbol c || isPunctuation c
+
 -- | Adds hyphens around the given string
 --
 -- >>> putStrLn $ delimiter "Title"
@@ -43,11 +64,14 @@
 
 
 -- | Shows a non-negative integer using the characters ₀-₉ instead of
--- 0-9.
+-- 0-9 unless the user explicitly asked us to not use any unicode characters.
 
 showIndex :: (Show i, Integral i) => i -> String
 showIndex n =
-  showIntAtBase 10 (\i -> toEnum (i + fromEnum '\x2080')) n ""
+  let opt = UNSAFE.unsafePerformIO (readIORef unicodeOrAscii) in
+  case opt of
+    UnicodeOk -> showIntAtBase 10 (\i -> toEnum (i + fromEnum '\x2080')) n ""
+    AsciiOnly -> show n
 
 -- | Adds a final newline if there is not already one.
 
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
@@ -9,21 +9,34 @@
 #include "undefined.h"
 import Agda.Utils.Impossible
 
+import Data.IORef
+import qualified System.IO.Unsafe as UNSAFE
+import Agda.Interaction.Options.IORefs
+
 ------------------------------------------------------------------------
 -- Subscript digits
 
+-- | Are we allowed to use unicode supscript characters?
+subscriptAllowed :: UnicodeOrAscii
+subscriptAllowed = UNSAFE.unsafePerformIO (readIORef unicodeOrAscii)
+
 -- | Is the character one of the subscripts @'₀'@-@'₉'@?
 
 isSubscriptDigit :: Char -> Bool
-isSubscriptDigit c = '₀' <= c && c <= '₉'
+isSubscriptDigit c = case subscriptAllowed of
+  UnicodeOk -> '₀' <= c && c <= '₉'
+  AsciiOnly -> '0' <= c && c <= '9'
 
--- | Converts @'0'@-@'9'@ to @'₀'@-@'₉'@.
+-- | Converts @'0'@-@'9'@ to @'₀'@-@'₉'@ unless the user doesn't want us
+-- to use unicode characters
 --
 -- Precondition: The digit needs to be in range.
 
 toSubscriptDigit :: Char -> Char
 toSubscriptDigit d
-  | isDigit d = toEnum (fromEnum '₀' + (fromEnum d - fromEnum '0'))
+  | isDigit d = case subscriptAllowed of
+      UnicodeOk -> toEnum (fromEnum '₀' + (fromEnum d - fromEnum '0'))
+      AsciiOnly -> d
   | otherwise = __IMPOSSIBLE__
 
 -- | Converts @'₀'@-@'₉'@ to @'0'@-@'9'@.
@@ -32,8 +45,9 @@
 
 fromSubscriptDigit :: Char -> Char
 fromSubscriptDigit d
-  | isSubscriptDigit d =
-      toEnum (fromEnum '0' + (fromEnum d - fromEnum '₀'))
+  | isSubscriptDigit d = case subscriptAllowed of
+      UnicodeOk -> toEnum (fromEnum '0' + (fromEnum d - fromEnum '₀'))
+      AsciiOnly -> d
   | otherwise          = __IMPOSSIBLE__
 
 ------------------------------------------------------------------------
diff --git a/src/full/Agda/Utils/Trie.hs b/src/full/Agda/Utils/Trie.hs
--- a/src/full/Agda/Utils/Trie.hs
+++ b/src/full/Agda/Utils/Trie.hs
@@ -2,10 +2,6 @@
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 
-#if __GLASGOW_HASKELL__ <= 708
-{-# LANGUAGE DeriveDataTypeable #-}
-#endif
-
 -- | Strict tries (based on "Data.Map.Strict" and "Agda.Utils.Maybe.Strict").
 
 module Agda.Utils.Trie
@@ -15,6 +11,7 @@
   , toList, toAscList, toListOrderedBy
   , lookup, member, lookupPath, lookupTrie
   , mapSubTries, filter
+  , valueAt
   ) where
 
 import Prelude hiding (null, lookup, filter)
@@ -30,12 +27,9 @@
 import Data.Monoid
 import qualified Data.List as List
 
-#if __GLASGOW_HASKELL__ <= 708
-import Data.Typeable ( Typeable )
-#endif
-
 import qualified Agda.Utils.Maybe.Strict as Strict
 import Agda.Utils.Null
+import Agda.Utils.Lens
 
 -- | Finite map from @[k]@ to @v@.
 --
@@ -45,9 +39,6 @@
            , Eq
            , Functor
            , Foldable
-#if __GLASGOW_HASKELL__ <= 708
-           , Typeable
-#endif
            )
 
 -- | Empty trie.
@@ -172,4 +163,10 @@
       case mv of
         Strict.Just v | p v -> mv
         _                   -> Strict.Nothing
+
+-- | Key lens.
+valueAt :: Ord k => [k] -> Lens' (Maybe v) (Trie k v)
+valueAt path f t = f (lookup path t) <&> \ case
+  Nothing -> delete path t
+  Just v  -> insert path v t
 
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
@@ -2,8 +2,6 @@
 
 module Agda.Utils.Tuple where
 
-import Control.Applicative
-
 import Data.Foldable
 import Data.Traversable
 
diff --git a/src/full/Agda/Utils/Update.hs b/src/full/Agda/Utils/Update.hs
--- a/src/full/Agda/Utils/Update.hs
+++ b/src/full/Agda/Utils/Update.hs
@@ -13,7 +13,6 @@
   , Updater2(..)
   ) where
 
-import Control.Applicative
 import Control.Monad.Identity
 import Control.Monad.Trans
 import Control.Monad.Writer.Strict
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
@@ -12,7 +12,6 @@
 -}
 module Agda.Utils.Warshall where
 
-import Control.Applicative
 import Control.Monad.State
 
 import Data.Maybe
diff --git a/src/full/Agda/Utils/Zipper.hs b/src/full/Agda/Utils/Zipper.hs
new file mode 100644
--- /dev/null
+++ b/src/full/Agda/Utils/Zipper.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE TypeFamilies #-}
+
+module Agda.Utils.Zipper where
+
+import Data.Traversable (Traversable)
+
+class Zipper z where
+  type Carrier z
+  type Element z
+  firstHole :: Carrier z -> Maybe (Element z, z)
+  plugHole  :: Element z -> z -> Carrier z
+  nextHole  :: Element z -> z -> Either (Carrier z) (Element z, z)
+
+data ListZipper a = ListZip [a] [a]
+  deriving (Eq, Ord, Show, Functor, Foldable, Traversable)
+
+instance Zipper (ListZipper a) where
+  type Carrier (ListZipper a) = [a]
+  type Element (ListZipper a) = a
+  firstHole (x : xs)               = Just (x, ListZip [] xs)
+  firstHole []                     = Nothing
+  plugHole x (ListZip ys zs)       = reverse ys ++ x : zs
+  nextHole x (ListZip ys [])       = Left (reverse (x : ys))
+  nextHole x (ListZip ys (z : zs)) = Right (z, ListZip (x : ys) zs)
+
+data ComposeZipper f g = ComposeZip f g
+
+instance (Zipper f, Zipper g, Element f ~ Carrier g) => Zipper (ComposeZipper f g) where
+  type Carrier (ComposeZipper f g) = Carrier f
+  type Element (ComposeZipper f g) = Element g
+  firstHole c1 = do
+    (c2, z1) <- firstHole c1
+    go c2 z1
+    where
+      go c2 z1 =
+        case firstHole c2 of
+          Nothing -> case nextHole c2 z1 of
+            Left{} -> Nothing
+            Right (c2', z1') -> go c2' z1'
+          Just (x, z2) -> Just (x, ComposeZip z1 z2)
+  plugHole x (ComposeZip z1 z2) = plugHole (plugHole x z2) z1
+  nextHole x (ComposeZip z1 z2) =
+    case nextHole x z2 of
+      Right (y, z2') -> Right (y, ComposeZip z1 z2')
+      Left c2        -> go c2 z1
+        where
+          go c2 z1 =
+            case nextHole c2 z1 of
+              Right (c2', z1') ->
+                case firstHole c2' of
+                  Nothing       -> go c2' z1'
+                  Just (x, z2') -> Right (x, ComposeZip z1' z2')
+              Left c1 -> Left c1
+
diff --git a/src/full/Agda/VersionCommit.hs b/src/full/Agda/VersionCommit.hs
--- a/src/full/Agda/VersionCommit.hs
+++ b/src/full/Agda/VersionCommit.hs
@@ -17,9 +17,9 @@
   "UNKNOWN" -> Nothing
   hash      -> Just $ abbrev hash ++ dirty
   where
-    -- | Check if there are uncommitted changes
-    dirty | $(gitDirty) = "-dirty"
-          | otherwise   = ""
+    -- | Check if any tracked files have uncommitted changes
+    dirty | $(gitDirtyTracked) = "-dirty"
+          | otherwise          = ""
 
     -- | Abbreviate a commit hash while keeping it unambiguous
     abbrev = take 7
diff --git a/stack-7.10.3.yaml b/stack-7.10.3.yaml
--- a/stack-7.10.3.yaml
+++ b/stack-7.10.3.yaml
@@ -4,6 +4,8 @@
 - STMonadTrans-0.4.3
 - cpphs-1.20.8
 - equivalence-0.3.2
+- async-2.2.1
+- gitrev-1.3.1
 
 # Local packages, usually specified by relative directory name
 packages:
diff --git a/stack-7.8.4.yaml b/stack-7.8.4.yaml
deleted file mode 100644
--- a/stack-7.8.4.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-resolver: lts-2.22
-
-flags:
-  QuickCheck:
-    base4: true
-    base4point8: false
-
-extra-deps:
-- EdisonAPI-1.3.1
-- EdisonCore-1.3.1.1
-- QuickCheck-2.8.2
-- STMonadTrans-0.4.3
-- binary-0.7.2.1
-- boxes-0.1.4
-- cpphs-1.20.8
-- data-hash-0.2.0.1
-- equivalence-0.3.2
-- fail-4.9.0.0
-- geniplate-mirror-0.7.5
-- gitrev-1.2.0
-- haskeline-0.7.1.3
-- ieee754-0.7.8
-- monadplus-1.4.2
-- mtl-2.2.1
-- murmur-hash-0.1.0.9
-- regex-tdfa-1.2.2
-- regex-tdfa-text-1.0.0.3
-- semigroups-0.18
-- transformers-0.4.2.0
-- transformers-compat-0.4.0.4
-- void-0.7.1
-
-# Local packages, usually specified by relative directory name
-packages:
-- '.'
diff --git a/stack-8.0.2.yaml b/stack-8.0.2.yaml
--- a/stack-8.0.2.yaml
+++ b/stack-8.0.2.yaml
@@ -1,4 +1,7 @@
-resolver: lts-9.1
+resolver: lts-9.21
+
+extra-deps:
+- async-2.2.1
 
 # Local packages, usually specified by relative directory name
 packages:
diff --git a/stack-8.2.2.yaml b/stack-8.2.2.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.2.2.yaml
@@ -0,0 +1,8 @@
+resolver: lts-11.11
+
+extra-deps:
+- async-2.2.1
+
+# Local packages, usually specified by relative directory name
+packages:
+- '.'
diff --git a/stack-8.4.3.yaml b/stack-8.4.3.yaml
new file mode 100644
--- /dev/null
+++ b/stack-8.4.3.yaml
@@ -0,0 +1,48 @@
+resolver: ghc-8.4.3
+
+extra-deps:
+- async-2.2.1
+- EdisonCore-1.3.2.1
+- data-hash-0.2.0.1
+- equivalence-0.3.2
+- geniplate-mirror-0.7.6
+- EdisonAPI-1.3.1
+- QuickCheck-2.11.3
+- STMonadTrans-0.4.3
+- blaze-html-0.9.0.1
+- boxes-0.1.5
+- edit-distance-0.2.2.1
+- gitrev-1.3.1
+- hashable-1.2.7.0
+- hashtables-1.2.3.0
+- ieee754-0.8.0
+- murmur-hash-0.1.0.9
+- regex-tdfa-1.2.3
+- strict-0.3.2
+- transformers-compat-0.6.0.6
+- unordered-containers-0.2.9.0
+- uri-encode-1.5.0.5
+- zlib-0.6.2
+- base-compat-0.9.3
+- blaze-builder-0.4.1.0
+- blaze-markup-0.8.2.0
+- network-uri-2.6.1.0
+- primitive-0.6.3.0
+- random-1.1
+- regex-base-0.93.2
+- split-0.2.3.3
+- tf-random-0.5
+- utf8-string-1.0.1.1
+- vector-0.12.0.1
+- cpphs-1.20.8
+- old-locale-1.0.0.7
+- old-time-1.1.0.3
+- polyparse-1.12
+- alex-3.2.4
+- happy-1.19.9
+- text-icu-0.7.0.1
+
+
+# Local packages, usually specified by relative directory name
+packages:
+- '.'
